Kurz: Spojení dat snímačů s daty předpovědi počasí pomocí Azure Notebooks (Python)
Větrná energie je jedním z alternativních zdrojů energie pro fosilní paliva v boji proti změně klimatu. Vzhledem k tomu, že vítr není ze své podstaty konzistentní, musí operátoři větrné energie vytvářet modely strojového učení (ML), aby předpověděly kapacitu větrné energie. Tato předpověď je nezbytná ke splnění poptávky po elektřině a zajištění stability sítě. V tomto kurzu si ukážeme, jak se data předpovědi počasí v Azure Maps zkombinují s ukázkovými daty pro čtení počasí. Data předpovědi počasí se požadují voláním služby Azure Maps Weather Services.
V tomto kurzu:
- Vytvořte a spusťte poznámkový blok Jupyter v editoru VS Code.
- Načtěte ukázková data ze souboru.
- Volání rozhraní REST API služby Azure Maps v Pythonu
- Vykreslujte data o poloze na mapě.
- Obohacení ukázkových dat pomocí dat denní předpovědi počasí v Azure Maps
- Vykreslení dat prognózy v grafech
Poznámka:
Soubor poznámkového bloku Jupyter pro tento projekt si můžete stáhnout z úložiště Weather Maps Jupyter Notebook.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
- Účet Azure Maps
- Klíč předplatného
- Visual Studio Code
- Pracovní znalost poznámkových bloků Jupyter v editoru VS Code
- Prostředí nastavené pro práci s Pythonem v poznámkových blocích Jupyter Další informace najdete v tématu Nastavení prostředí.
Poznámka:
Další informace o ověřování ve službě Azure Maps najdete v tématu správa ověřování v Azure Maps.
Instalace balíčků na úrovni projektu
Projekt SMĚROVÁNÍ EV a dosažitelného rozsahu má závislosti na knihovnách pythonu Aiohttp a IPython . Můžete je nainstalovat do terminálu sady Visual Studio pomocí nástroje pip:
pip install aiohttp
pip install ipython
pip install pandas
Otevření poznámkového bloku Jupyter v editoru Visual Studio Code
Stáhněte si poznámkový blok použitý v tomto kurzu:
Otevřete soubor weatherDataMaps.ipynb v úložišti AzureMapsJupyterSamples na GitHubu.
Výběrem tlačítka Stáhnout nezpracovaný soubor v pravém horním rohu obrazovky soubor uložte místně.
Otevřete stažený poznámkový blok v editoru Visual Studio Code tak, že kliknete pravým tlačítkem myši na soubor a pak vyberete Otevřít v > editoru Visual Studio Code nebo v Průzkumník souborů editoru VS Code.
Načtení požadovaných modulů a architektur
Po přidání kódu můžete buňku spustit pomocí ikony Spustit vlevo od buňky a výstup se zobrazí pod buňkou s kódem.
Spuštěním následujícího skriptu načtěte všechny požadované moduly a architektury.
import aiohttp
import pandas as pd
import datetime
from IPython.display import Image, display
Import dat o počasí
V tomto kurzu se používají údaje o počasí ze senzorů nainstalovaných ve čtyřech různých větrných turbínách. Ukázková data se skládají z 30 dnů čtení počasí. Tato čtení se shromažďují z datových center počasí v blízkosti každé lokality turbíny. Ukázková data obsahují údaje o teplotě, rychlosti větru a směru. Ukázková data obsažená v weather_dataset_demo.csv si můžete stáhnout z GitHubu. Následující skript naimportuje ukázková data do poznámkového bloku Azure.
df = pd.read_csv("./data/weather_dataset_demo.csv")
Vyžádání dat denní prognózy
V našem scénáři bychom chtěli požádat o denní prognózu pro každé umístění senzoru. Následující skript volá rozhraní API denní prognózy služeb Azure Maps Weather. Toto rozhraní API vrátí předpověď počasí pro každou větrnou turbínu za příštích 15 dnů od aktuálního data.
subscription_key = "Your Azure Maps key"
# Get a lists of unique station IDs and their coordinates
station_ids = pd.unique(df[['StationID']].values.ravel())
coords = pd.unique(df[['latitude','longitude']].values.ravel())
years,months,days = [],[],[]
dates_check=set()
wind_speeds, wind_direction = [], []
# Call azure maps Weather services to get daily forecast data for 15 days from current date
session = aiohttp.ClientSession()
j=-1
for i in range(0, len(coords), 2):
wind_speeds.append([])
wind_direction.append([])
query = str(coords[i])+', '+str(coords[i+1])
forecast_response = await(await session.get("https://atlas.microsoft.com/weather/forecast/daily/json?query={}&api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&duration=15".format(query, subscription_key))).json()
j+=1
for day in range(len(forecast_response['forecasts'])):
date = forecast_response['forecasts'][day]['date'][:10]
wind_speeds[j].append(forecast_response['forecasts'][day]['day']['wind']['speed']['value'])
wind_direction[j].append(forecast_response['forecasts'][day]['day']['windGust']['direction']['degrees'])
if date not in dates_check:
year,month,day= date.split('-')
years.append(year)
months.append(month)
days.append(day)
dates_check.add(date)
await session.close()
Následující skript vykreslí umístění turbíny na mapě voláním služby Získat mapový obrázek.
# Render the turbine locations on the map by calling the Azure Maps Get Map Image service
session = aiohttp.ClientSession()
pins="default|la-25+60|ls12|lc003C62|co9B2F15||'Location A'{} {}|'Location B'{} {}|'Location C'{} {}|'Location D'{} {}".format(coords[1],coords[0],coords[3],coords[2],coords[5],coords[4], coords[7],coords[6])
image_response = "https://atlas.microsoft.com/map/static/png?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&layer=basic&style=main&zoom=6¢er={},{}&pins={}".format(subscription_key,coords[7],coords[6],pins)
static_map_response = await session.get(image_response)
poi_range_map = await static_map_response.content.read()
await session.close()
display(Image(poi_range_map))
Seskupte data prognózy s ukázkovými daty podle ID stanice. ID stanice je určené pro datové centrum počasí. Toto seskupení rozšiřuje ukázková data o data prognózy.
# Group forecasted data for all locations
df = df.reset_index(drop=True)
forecast_data = pd.DataFrame(columns=['StationID','latitude','longitude','Year','Month','Day','DryBulbCelsius','WetBulbFarenheit','WetBulbCelsius','DewPointFarenheit','DewPointCelsius','RelativeHumidity','WindSpeed','WindDirection'])
for i in range(len(station_ids)):
loc_forecast = pd.DataFrame({'StationID':station_ids[i], 'latitude':coords[0], 'longitude':coords[1], 'Year':years, 'Month':months, 'Day':days, 'WindSpeed':wind_speeds[i], 'WindDirection':wind_direction[i]})
forecast_data = pd.concat([forecast_data,loc_forecast], axis=0, sort=False)
combined_weather_data = pd.concat([df,forecast_data])
grouped_weather_data = combined_weather_data.groupby(['StationID'])
V následující tabulce jsou zobrazena souhrnná historická data a data prognózy pro jedno z lokalit turbíny.
# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()
Vykreslení dat prognózy
Vykreslujte předpovídané hodnoty na dny, pro které jsou předpovídané. Tento graf nám umožňuje zobrazit změny rychlosti a směru větru po dobu následujících 15 dnů.
# Plot wind speed
curr_date = datetime.datetime.now().date()
windsPlot_df = pd.DataFrame({ 'Location A': wind_speeds[0], 'Location B': wind_speeds[1], 'Location C': wind_speeds[2], 'Location D': wind_speeds[3]}, index=pd.date_range(curr_date,periods=15))
windsPlot = windsPlot_df.plot.line()
windsPlot.set_xlabel("Date")
windsPlot.set_ylabel("Wind speed")
#Plot wind direction
windsPlot_df = pd.DataFrame({ 'Location A': wind_direction[0], 'Location B': wind_direction[1], 'Location C': wind_direction[2], 'Location D': wind_direction[3]}, index=pd.date_range(curr_date,periods=15))
windsPlot = windsPlot_df.plot.line()
windsPlot.set_xlabel("Date")
windsPlot.set_ylabel("Wind direction")
Následující grafy vizualizují data prognózy. Změna rychlosti větru najdete v levém grafu. Informace o změně směru větru najdete v pravém grafu. Tato data jsou predikovaná po dobu následujících 15 dnů od dne, kdy se data požadují.
V tomto kurzu jste zjistili, jak volat rozhraní REST API služby Azure Maps pro získání dat předpovědi počasí. Dozvěděli jste se také, jak vizualizovat data v grafech.
Pokud chcete prozkoumat rozhraní API služby Azure Maps, která se používají v tomto kurzu, podívejte se na:
Úplný seznam rozhraní REST API služby Azure Maps najdete v tématu Rozhraní REST API služby Azure Maps.