Share via


Zelfstudie: Sensorgegevens samenvoegen met weersvoorspellingsgegevens met behulp van Azure Notebooks (Python)

Windkracht is een alternatieve energiebron voor fossiele brandstoffen om klimaatverandering tegen te gaan. Omdat wind van nature niet consistent is, moeten exploitanten van windenergie machine learning-modellen (ML) bouwen om de capaciteit van windenergie te voorspellen. Deze voorspelling is nodig om te kunnen voldoen aan de vraag naar elektriciteit en om de stabiliteit van het elektriciteitsnet te bewaren. In deze zelfstudie wordt uitgelegd hoe Azure Maps weervoorspellingsgegevens worden gecombineerd met voorbeeldgegevens voor weermetingen. De weergegevens worden aangevraagd door Azure Kaarten Weather-services aan te roepen.

In deze zelfstudie leert u het volgende:

  • Werken met gegevensbestanden in Azure Notebooks in de cloud.
  • Demogegevens laden uit een bestand.
  • REST API's van Azure Maps aanroepen in Python.
  • Locatiegegevens op de kaart weergeven.
  • De demogegevens verrijken met de dagelijkse weervoorspellingsgegevens van Azure Maps.
  • De voorspellingsgegevens in grafieken plotten.

Vereisten

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Notitie

Zie Verificatie beheren in Azure Maps voor meer informatie over verificatie in Azure Maps.

Volg de instructies in Een Azure-notebook maken om vertrouwd te raken met Azure Notebooks en te leren hoe u aan de slag kunt gaan.

Notitie

Het Jupyter Notebook-bestand voor dit project kan worden gedownload van de Jupyter Notebook-opslagplaats voor weerkaarten.

De vereiste modules en frameworks laden

Voer het volgende script uit om alle vereiste modules en frameworks te laden:

import pandas as pd
import datetime
from IPython.display import Image, display
!pip install aiohttp
import aiohttp

Weergegevens importeren

In deze zelfstudie worden de metingen van weergegevens van sensoren gebruikt die zijn geïnstalleerd bij vier verschillende windturbines. De voorbeeldgegevens bestaan uit 30 dagen aan weermetingen. Deze metingen worden verzameld van weerdatacentrums in de buurt van elke turbine. De demogegevens bevatten metingen van de temperatuur, windsnelheid en windrichting. U kunt de demogegevens in weather_dataset_demo.csv downloaden van GitHub. Met het onderstaande script worden demogegevens in het Azure-notebook geïmporteerd.

df = pd.read_csv("./data/weather_dataset_demo.csv")

Dagelijkse voorspellingsgegevens aanvragen

In ons scenario willen we dagelijks de voorspelling aanvragen voor elke sensorlocatie. Met het volgende script wordt de Daily Forecast-API van de Azure Kaarten Weather-services aangeroepen. Deze API retourneert de weersvoorspelling 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 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()

Met het volgende script worden de turbinelocaties op de kaart weergegeven door de Get Map Image-service aan te roepen.

# 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&center={},{}&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))

Turbine locations

Groepeer de prognosegegevens met de demogegevens op basis van de station-id. De station-id is een aanduiding voor het weerdatacentrum. Deze groepering breidt de demogegevens uit met de voorspellingsgegevens.

# 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 volgende tabel bevat de gecombineerde historische en voorspellingsgegevens voor een van de turbinelocaties.

# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()

Grouped data

Voorspellingsgegevens plotten

De voorspelde waarden uitzetten op de dagen waarvoor ze worden voorspeld. Met deze plot kunnen we de wijzigingen in de windsnelheid en -richting voor de komende 15 dagen weergeven.

# 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")

In de volgende grafieken worden de prognosegegevens gevisualiseerd. Zie de linkergrafiek voor de wijzigingen in de windsnelheid. Zie de rechtergrafiek voor de wijzigingen in de windrichting. Deze gegevens vormen de voorspelling voor de komende 15 dagen vanaf de dag dat de gegevens worden aangevraagd.

Wind speed plotWind direction plot

In deze zelfstudie hebt u geleerd hoe u Azure Kaarten REST API's aanroept om weersvoorspellingsgegevens op te halen. U hebt ook geleerd hoe u de gegevens kunt visualiseren in grafieken.

Zie Elektrische voertuigen routeren met Azure Notebooks voor meer informatie over het aanroepen van Azure Maps REST API's in Azure Notebooks.

Als u meer wilt weten over de Azure Maps API's die in deze zelfstudie worden gebruikt, raadpleegt u:

Zie REST API's van Azure Maps voor een volledige lijst met REST API's van Azure Maps.

Resources opschonen

Er zijn geen resources die moeten worden opgeruimd.

Volgende stappen

Voor meer informatie over Azure Notebooks, zie