Megosztás a következőn keresztül:


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 Maps időjárás-előrejelzési adatait az időjárás-olvasások demóadataival. Az időjárás-előrejelzési adatok az Azure Maps Weather Services meghívásával kérhetőek le.

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 Maps REST API-k meghívása Pythonban.
  • Helyadatok megjelenítése a térképen.
  • Bővítse a demóadatokat az Azure Maps napi előrejelzési 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.

Feljegyzés

Az Azure Maps hitelesítésével kapcsolatos további információkért tekintse meg a hitelesítés kezelését az Azure Mapsben.

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 Maps Jupyter Notebook adattárábó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 Maps 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))

Turbina helyei

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

Csoportosított adatok

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.

Szélsebesség ábrázolása Szélirány ábrázolása

Ebben az oktatóanyagban megtanulta, hogyan hívhatja meg az Azure Maps 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 Maps 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 Maps API-k megismeréséhez lásd:

Az Azure Maps REST API-k teljes listáját az Azure Maps 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: