Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Windenergie is een alternatieve energiebron voor fossiele brandstoffen om klimaatverandering tegen te gaan. Omdat wind van nature niet consistent is, moeten windenergie-operators machine learning (ML)-modellen bouwen om de windenergiecapaciteit te voorspellen. Deze voorspelling is noodzakelijk om aan de elektriciteitsvraag te voldoen en de stabiliteit van het net te waarborgen. In deze tutorial laten we zien hoe Azure Maps-weersvoorspellingsgegevens worden gecombineerd met demogegevens voor weersmetingen. Weersvoorspellingsgegevens worden aangevraagd door Azure Maps Weather-service aan te roepen.
In deze tutorial, zul je:
- Maak en voer een Jupyter Notebook in VS Code uit.
- Laad demogegevens uit bestand.
- Roep REST API's van Azure Maps aan in Python.
- Breng locatiegegevens in kaart.
- Verrijk de demogegevens met Azure Maps Daily Forecast-weergegevens.
- Visualiseer voorspellingsgegevens in grafieken.
Opmerking
Het Jupyter notebook-bestand voor dit project kan worden gedownload van de Weather Maps Jupyter Notebook repository.
Vereiste voorwaarden
Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
- Een Azure Maps-account
- Een abonnementsleutel
- Visual Studio Code
- Een werkende kennis van Jupyter Notebooks in VS Code
- Omgeving ingesteld om met Python te werken in Jupyter Notebooks. Voor meer informatie, zie Uw omgeving instellen.
Opmerking
Voor meer informatie over authenticatie in Azure Maps, zie authenticatie beheren in Azure Maps.
Installeer projectniveau pakketten
Het EV Routing and Reachable Range project heeft afhankelijkheden van de aiohttp en IPython python-bibliotheken. Je kunt deze installeren in de Visual Studio-terminal met behulp van pip:
pip install aiohttp
pip install ipython
pip install pandas
Open Jupyter-notitieblok in Visual Studio Code
Downloaden en vervolgens openen van het Notebook dat in deze tutorial wordt gebruikt.
Open het bestand weatherDataMaps.ipynb in de AzureMapsJupyterSamples repository op GitHub.
Klik op de Download raw file knop in de rechterbovenhoek van het scherm om het bestand lokaal op te slaan.
Open het gedownloade Notebook in Visual Studio Code door met de rechtermuisknop op het bestand te klikken en vervolgens Openen met > Visual Studio Code te kiezen, of via de VS Code File Explorer.
Laad de vereiste modules en frameworks
Zodra uw code is toegevoegd, kunt u een cel uitvoeren met behulp van het Run icoon links van de cel en wordt de output onder de codecel weergegeven.
Voer het volgende script uit om alle vereiste modules en frameworks te laden.
import aiohttp
import pandas as pd
import datetime
from IPython.display import Image, display
Weergegevens importeren
Deze handleiding gebruikt weergegevens van sensoren die zijn geïnstalleerd op vier verschillende windturbines. De voorbeeldgegevens bestaan uit 30 dagen aan weersaflezingen. Deze metingen worden verzameld uit weergegevenscentra in de buurt van elke turbinelocatie. De demo-gegevens bevatten gegevensmetingen voor temperatuur, windsnelheid en richting. U kunt de demogegevens die zijn opgenomen in weather_dataset_demo.csv downloaden van GitHub. Het script hieronder importeert demogegevens in de Azure Notebook.
df = pd.read_csv("./data/weather_dataset_demo.csv")
Vraag dagelijkse weersvoorspellingen aan
In ons scenario willen we graag een dagelijkse voorspelling aanvragen voor elke sensorlocatie. Het volgende script roept de Daily Forecast-API van de Azure Maps Weather-service aan. Deze API geeft weersvoorspellingen voor elke windturbine, voor de komende 15 dagen vanaf de huidige datum.
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 service 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={}&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()
Het volgende script geeft de locaties van de turbines weer op de kaart door gebruik te maken van de Get Map Image service.
# 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?subscription-key={}&api-version=2024-04-01&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))
Groepeer de prognosegegevens met de demogegevens op basis van het station-ID. Het station-ID is voor het weergegevenscentrum. Deze groepering breidt de demo-gegevens uit met de prognosegegevens.
# 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'])
De onderstaande tabel toont de gecombineerde historische en prognosegegevens voor een van de locaties van de turbines.
# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()
Voorspellingsgegevens plotten
Zet de voorspelde waarden uit tegen de dagen waarvoor ze zijn voorspeld. Deze grafiek stelt ons in staat om de snelheids- en richtingsveranderingen van de wind voor de komende 15 dagen te zien.
# 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")
De volgende grafieken visualiseren de prognosegegevens. Voor de verandering van windsnelheid, zie de linker grafiek. Voor verandering in windrichting, zie het rechter grafiek. Deze gegevens zijn een voorspelling voor de komende 15 dagen vanaf de dag dat de gegevens worden opgevraagd.
In deze tutorial heb je geleerd hoe je Azure Maps REST API's aanspreekt om weerverwachtingsgegevens te verkrijgen. Je hebt ook geleerd hoe je de gegevens op grafieken kunt visualiseren.
** Om de Azure Maps API's te verkennen die in deze tutorial worden gebruikt, zie:
Voor een volledige lijst van de Azure Maps REST API's, zie Azure Maps REST API's.