Öğretici: Azure Notebooks (Python) kullanarak algılayıcı verilerini hava durumu tahmin verileriyle birleştirme
Rüzgar gücü, iklim değişikliğine karşı mücadele etmek için fosil yakıtlar için alternatif bir enerji kaynağıdır. Rüzgar doğası gereği tutarlı olmadığından, rüzgar gücü operatörlerinin rüzgar gücü kapasitesini tahmin etmek için makine öğrenmesi (ML) modelleri oluşturması gerekir. Bu tahmin, elektrik talebini karşılamak ve şebeke kararlılığını sağlamak için gereklidir. Bu öğreticide, Azure Haritalar hava durumu tahmin verilerinin hava durumu okumaları için tanıtım verileriyle nasıl birleştirildiğine göz atın. Hava durumu tahmin verileri, Azure Haritalar Hava durumu hizmetleri çağrılarak istenir.
Bu öğreticide şunları yapacaksınız:
- Buluttaki Azure Notebooks'ta veri dosyalarıyla çalışma.
- Dosyadan tanıtım verilerini yükleyin.
- Python'da Azure Haritalar REST API'lerini çağır.
- Konum verilerini haritada işleyin.
- Azure Haritalar Günlük Tahmin hava durumu verileriyle tanıtım verilerini zenginleştirin.
- Grafiklerde tahmin verilerini çizme.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Not
Azure Haritalar kimlik doğrulaması hakkında daha fazla bilgi için bkz. Azure Haritalar kimlik doğrulamasını yönetme.
Azure not defterlerini tanımak ve kullanmaya başlamayı öğrenmek için Azure Not Defteri oluşturma yönergelerini izleyin.
Not
Bu projenin Jupyter not defteri dosyası Weather Haritalar Jupyter Notebook deposundan indirilebilir.
Gerekli modülleri ve çerçeveleri yükleme
Gerekli tüm modülleri ve çerçeveleri yüklemek için aşağıdaki betiği çalıştırın:
import pandas as pd
import datetime
from IPython.display import Image, display
!pip install aiohttp
import aiohttp
Hava durumu verilerini içeri aktarma
Bu öğreticide dört farklı rüzgar türbininde yüklü algılayıcılardan alınan hava durumu verisi okumaları kullanılır. Örnek veriler 30 günlük hava durumu okumalarından oluşur. Bu ölçümler, her türbin konumunun yakınındaki hava durumu veri merkezlerinden toplanır. Tanıtım verileri sıcaklık, rüzgar hızı ve yön için veri okumalarını içerir. weather_dataset_demo.csv'da yer alan tanıtım verilerini GitHub'dan indirebilirsiniz. Aşağıdaki betik, tanıtım verilerini Azure Notebook'a aktarır.
df = pd.read_csv("./data/weather_dataset_demo.csv")
Günlük tahmin verileri isteme
Senaryomuzda, her algılayıcı konumu için günlük tahmin talep etmek istiyoruz. Aşağıdaki betik, Azure Haritalar Hava Durumu hizmetlerinin Günlük Tahmin API'sini çağırır. Bu API, geçerli tarihten sonraki 15 gün boyunca her rüzgar türbini için hava durumu tahminini döndürür.
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()
Aşağıdaki betik, Harita Görüntüsü Al hizmetini çağırarak türbin konumlarını haritada işler.
# 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¢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))
Tahmin verilerini istasyon kimliğine göre tanıtım verileriyle gruplandırın. İstasyon kimliği hava durumu veri merkezine yöneliktir. Bu gruplandırma, tanıtım verilerini tahmin verileriyle genişletiyor.
# 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'])
Aşağıdaki tabloda türbin konumlarından biri için birleştirilmiş geçmiş ve tahmin verileri gösterilir.
# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()
Tahmin verilerini çizme
Tahmin edilen değerleri tahmin edildikleri günlere göre çizin. Bu çizim, önümüzdeki 15 gün boyunca rüzgarın hız ve yön değişikliklerini görmemizi sağlar.
# 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")
Aşağıdaki grafikler tahmin verilerini görselleştirir. Rüzgar hızının değişmesi için soldaki grafiğe bakın. Rüzgar yönünde değişiklik için doğru grafiğe bakın. Bu veriler, verilerin istendiklerinden sonraki 15 gün için tahmin edilir.
Bu öğreticide, hava durumu tahmin verilerini almak için Azure Haritalar REST API'lerini çağırmayı öğrendiniz. Ayrıca graflardaki verileri görselleştirmeyi de öğrendinsiniz.
Azure Notebooks içinde Azure Haritalar REST API'lerini çağırma hakkında daha fazla bilgi edinmek için bkz. Azure Notebooks kullanarak EV yönlendirme.
Bu öğreticide kullanılan Azure Haritalar API'lerini keşfetmek için bkz:
Azure Haritalar REST API'lerinin tam listesi için bkz. AZURE HARITALAR REST API'leri.
Kaynakları temizleme
Temizleme gerektiren kaynak yok.
Sonraki adımlar
Azure Notebooks hakkında daha fazla bilgi edinmek için bkz.