Oktatóanyag: Érzékelőadatok összekapcsolása időjárás-előrejelzési adatokkal az Azure Notebooks (Python) használatával

A szélenergia a fosszilis tüzelőanyagok egyik alternatív energiaforrása az éghajlatváltozás elleni küzdelemhez. Mivel a szél természete nem konzisztens, a szélerőmű-üzemeltetőknek gépi tanulási (ML) modelleket kell létrehozniuk a szélenergia-kapacitás előrejelzéséhez. Ez az előrejelzés a villamosenergia-kereslet kielégítéséhez és a hálózat stabilitásának biztosításához szükséges. Ebben az oktatóanyagban bemutatjuk, hogyan kombinálja az Azure Térképek időjárás-előrejelzési adatait az időjárási adatok demóadataival. Az időjárás-előrejelzési adatok kérése az Azure Térképek Weather Services meghívásával történik.

Az oktatóanyag során az alábbi lépéseket fogja végrehajtani:

  • Adatfájlok használata a felhőbeli Azure Notebooksban .
  • Demóadatok betöltése fájlból.
  • Azure Térképek REST API-k meghívása Pythonban.
  • Helyadatok megjelenítése a térképen.
  • Bővítse a demóadatokat az Azure Térképek Napi előrejelzés időjárási adataival.
  • Előrejelzési adatok ábrázolása grafikonokon.

Előfeltételek

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Azure-Térképek-fiók
  • Előfizetési kulcs

Feljegyzés

Az Azure Térképek-hitelesítéssel kapcsolatos további információkért lásd az Azure Térképek hitelesítésének kezelését.

Az Azure-jegyzetfüzetek megismeréséhez és az első lépésekhez kövesse az Azure Notebook létrehozása című útmutatót.

Feljegyzés

A projektHez tartozó Jupyter-jegyzetfüzetfájl letölthető a Weather Térképek Jupyter Notebook adattárból.

A szükséges modulok és keretrendszerek betöltése

Az összes szükséges modul és keretrendszer betöltéséhez futtassa a következő szkriptet:

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

Időjárási adatok importálása

Ez az oktatóanyag négy különböző szélturbina érzékelőiből származó időjárási adatokat használ. A mintaadatok 30 napos időjárási adatokból állnak. Ezeket az adatokat az időjárási adatközpontokból gyűjtik össze az egyes turbinahelyek közelében. A demóadatok a hőmérsékletre, a szélsebességre és az irányra vonatkozó adatolvasásokat tartalmazzák. A gitHubról letöltheti a weather_dataset_demo.csv demóadatait. Az alábbi szkript demoadatokat importál az Azure Notebookba.

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

Napi előrejelzési adatok kérése

Esetünkben minden érzékelőhelyre napi előrejelzést szeretnénk kérni. Az alábbi szkript meghívja az Azure Térképek Weather Services Daily Forecast API-ját. Ez az API az egyes szélturbinák időjárás-előrejelzését adja vissza az aktuális dátumtól számított 15 napra vonatkozóan.

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()

Az alábbi szkript a térkép turbinahelyeit jeleníti meg a Térkép képének lekérése szolgáltatás meghívásával.

# 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

Csoportosítsa az előrejelzési adatokat a demóadatokkal az állomásazonosító alapján. Az állomás azonosítója az időjárási adatközponthoz tartozik. Ez a csoportosítás kibővíti a demóadatokat az előrejelzési adatokkal.

# 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'])

Az alábbi táblázat az egyik turbinahely összesített előzmény- és előrejelzési adatait jeleníti meg.

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

Grouped data

Előrejelzési adatok ábrázolása

Ábrázolja az előrejelzett értékeket az előrejelzett napokhoz. Ez a ábra lehetővé teszi számunkra, hogy a következő 15 napban a szél sebesség- és irányváltozásait lássuk.

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

Az alábbi grafikonok az előrejelzési adatokat jelenítik meg. A szélsebesség változásáról a bal oldali grafikonon olvashat. A szél irányának módosításához tekintse meg a megfelelő gráfot. Ezek az adatok az adatok kérésének napjától számított 15 napra lesznek előrejelezve.

Wind speed plotWind direction plot

Ebben az oktatóanyagban megtanulta, hogyan hívhatja meg az Azure Térképek REST API-kat az időjárás-előrejelzési adatok lekéréséhez. Azt is megtanulta, hogyan jelenítheti meg az adatokat grafikonokon.

Az Azure-Térképek REST API-k Azure Notebookokon belüli meghívásáról további információt az Azure Notebooks használatával végzett EV-útválasztás című témakörben talál.

Az oktatóanyagban használt Azure Térképek API-k megismeréséhez lásd:

Az Azure Térképek REST API-k teljes listáját az Azure Térképek REST API-kban találja.

Az erőforrások eltávolítása

Nincsenek olyan erőforrások, amelyek karbantartást igényelnek.

Következő lépések

További információ az Azure Notebooksról: