Kurz: Spojení dat senzorů s daty předpovědi počasí pomocí Azure Notebooks (Python)

Větrný výkon je jedním z alternativních zdrojů energie pro palivová paliva pro ochranu před změnou klimatu. Vzhledem k tomu, že větru není ze své podstaty konzistentní, musí operátoři větrné energie vytvářet modely strojového učení (ML), aby předpověděli kapacitu větrné energie. Tato předpověď je nezbytná pro splnění poptávky po elektřině a zajištění stability rozvodné sítě. V tomto kurzu vás provedeme tím, jak se data Mapy předpovědi počasí v Azure kombinují s ukázkovými daty pro čtení počasí. Data předpovědi počasí si vyžádá volání služeb Azure Mapy Weather.

V tomto kurzu:

  • Pracovat s datovými soubory Azure Notebooks v cloudu.
  • Načtěte ukázková data ze souboru .
  • Volání rozhraní REST API Mapy Azure v Pythonu
  • Vykreslí data o poloze na mapě.
  • Obohaťte ukázková data o data o počasí azure Mapy Daily Forecast.
  • Vykreslování dat prognóz v grafech

Požadavky

K dokončení tohoto kurzu musíte nejprve:

  1. Podle pokynů v tématu Vytvoření Mapy vytvořte předplatné účtu Azure Mapy s cenovou úrovní S0.
  2. Získejte primární klíč předplatného pro váš účet. Postupujte podle pokynů v tématu Získání primárního klíče.

Další informace o ověřování v Azure Mapy najdete v tématu Správa ověřování v Azure Mapy.

Pokud se chcete seznámit s poznámkovými bloky Azure a seznámit se s tím, jak začít, postupujte podle pokynů v tématu Vytvoření poznámkového bloku Azure.

Poznámka

Soubor poznámkového bloku Jupyter pro tento projekt si můžete stáhnout z úložiště Weather Mapy Jupyter Notebook úložiště.

Načtení požadovaných modulů a architektur

Pokud chcete načíst všechny požadované moduly a architektury, spusťte následující skript:

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

Import dat o počasí

Pro tento kurz použijeme odečty dat o počasí ze snímačů nainstalovaných ve čtyřech různých větrných turbínách. Ukázková data se skládají z údajů o počasí za 30 dnů. Tyto údaje se shromažďují z datových center pro počasí v blízkosti každé polohy turbíny. Ukázková data obsahují údaje o teplotě, rychlosti větru a směru. Ukázková data si můžete stáhnout tady. 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 o denní prognóze

V našem scénáři bychom chtěli požádat o denní prognózu pro každou polohu senzoru. Následující skript volá rozhraní DAILY Forecast API služeb Azure Mapy Weather. Toto rozhraní API vrací předpověď počasí pro každou větrnou turbínu na další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-Primary-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 Azure Mapy Get Map Image.

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

Umístění turbíny

Data prognózy seskupíme s ukázkovými daty na základě ID stanice. ID stanice je pro datové centrum pro počasí. Toto seskupení ovětšuje ukázková data o data prognóz.

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

Následující tabulka zobrazuje kombinovaná historická a předpovídá data pro jedno z umístění turbíny.

# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()
![Seskupená data](./media/weather-service-tutorial/grouped-data.png)

Vykreslení dat prognóz

Předpovídáme hodnoty podle dnů, pro které se budou předpovídát. Tento graf nám umožňuje zobrazit změny rychlosti a směru větru na další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 vizualizovat data prognózy. Informace o změně rychlosti větru najdete v levém grafu. Pokud chcete změnit směr větru, podívejte se na správný graf. Tato data předpovídá dalších 15 dnů od data, kdy jsou požadována.

Graf rychlosti větru  Graf směru větru

V tomto kurzu jste zjistili, jak volat rozhraní REST API služby Azure Mapy získat data předpovědi počasí. Také jste se naučili vizualizovat data v grafech.

Další informace o volání rozhraní REST API služby Azure Mapy uvnitř Azure Notebooks najdete v tématu Směrování EV pomocí Azure Notebooks.

Pokud chcete prozkoumat rozhraní API služby Azure Mapy, která se používají v tomto kurzu, projděte si:

Úplný seznam rozhraní REST API služby Azure Mapy najdete v tématu Rozhraní REST API služby Azure Mapy.

Vyčištění prostředků

Neexistují žádné prostředky, které by vyžadovaly vyčištění.

Další kroky

Další informace o Azure Notebooks najdete v tématu