Öğ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:
- VS Code'da Jupyter Notebook oluşturun ve çalıştırın.
- 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.
Not
Bu projenin Jupyter not defteri dosyası Hava Durumu Eşlemeleri Jupyter Notebook deposundan indirilebilir.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Azure Haritalar hesabı
- Abonelik anahtarı
- Visual Studio Code
- VS Code'da Jupyter Notebook'lar hakkında çalışan bir bilgi
- Jupyter Notebooks'ta Python ile çalışacak şekilde ayarlanan ortam. Daha fazla bilgi için bkz . Ortamınızı ayarlama.
Not
Azure Haritalar kimlik doğrulaması hakkında daha fazla bilgi için bkz. Azure Haritalar kimlik doğrulamasını yönetme.
Proje düzeyi paketlerini yükleme
EV Yönlendirme ve Ulaşılabilir Aralık projesinin aiohttp ve IPython python kitaplıklarına bağımlılıkları vardır. Bunları Visual Studio terminalinde pip kullanarak yükleyebilirsiniz:
pip install aiohttp
pip install ipython
pip install pandas
Visual Studio Code'da Jupyter Not Defteri'ni açma
İndirdikten sonra bu öğreticide kullanılan Not Defteri'ni açın:
GitHub'daki AzureMapsJupyterSamples deposunda weatherDataMaps.ipynb dosyasını açın.
Dosyayı yerel olarak kaydetmek için ekranın sağ üst köşesindeki Ham dosyayı indir düğmesini seçin.
dosyaya sağ tıklayıp Visual Studio Code ile > Aç'ı seçerek veya VS Code Dosya Gezgini aracılığıyla indirilen Not Defterini Visual Studio Code'da açın.
Gerekli modülleri ve çerçeveleri yükleme
Kodunuz eklendikten sonra, hücrenin solundaki Çalıştır simgesini kullanarak bir hücreyi çalıştırabilirsiniz ve çıkış kod hücresinin altında görüntülenir.
Gerekli tüm modülleri ve çerçeveleri yüklemek için aşağıdaki betiği çalıştırın.
import aiohttp
import pandas as pd
import datetime
from IPython.display import Image, display
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.
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.