Aracılığıyla paylaş


Öğ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.

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:

  1. GitHub'daki AzureMapsJupyterSamples deposunda weatherDataMaps.ipynb dosyasını açın.

  2. Dosyayı yerel olarak kaydetmek için ekranın sağ üst köşesindeki Ham dosyayı indir düğmesini seçin.

    WeatherDataMaps.ipynb adlı Not Defteri dosyasını GitHub deposundan nasıl indirebileceğinizi gösteren ekran görüntüsü.

  3. 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

Çalıştır düğmesinin vurgulandığı gerekli içeri aktarma deyimlerini içeren Not Defteri'ndeki ilk hücrenin nasıl indirilmeye çalışılacağını gösteren ekran görüntüsü.

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

Haritada türbin konumlarını gösteren ekran görüntüsü.

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

Gruplandırılmış veriler

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.

Rüzgar hızı çizimlerini gösteren ekran görüntüsü.

Rüzgar yönü çizimlerini gösteren ekran görüntüsü.

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.

Sonraki adımlar