Öğretici: Azure Notebooks kullanarak (Python) Hava durumu tahmin verileriyle algılayıcı verileri ekleme

Rüzgar gücü, fossıl için bir alternatif enerji kaynağıdır ve bu da iklim değişikliğine karşı mücadele sağlar. rüzgar doğası gereği uyumlu olmadığından, rüzgar güç işletmenlerinin, rüzgar güç kapasitesini tahmin etmek için makine öğrenimi (ML) modellerini oluşturması gerekir. Bu tahmin, elektrik talebini karşılamak ve ızgara 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ğini adım adım inceleyeceğiz. hava durumu tahmin verileri, Azure Haritalar hava durumu hizmetleri çağırarak istenir.

Bu öğreticide şunları yapacaksınız:

  • Bulutta Azure Notebooks veri dosyalarıyla çalışın.
  • Tanıtım verilerini dosyadan yükle.
  • Python 'da Azure Haritalar REST apı 'lerini çağırın.
  • Haritada konum verileri oluşturma.
  • Azure ile tanıtım verilerinin günlük tahmin hava durumu verilerini Haritalar zenginleştirin.
  • Tahmin verilerini grafiklerde çiz.

Önkoşullar

Bu öğreticiyi tamamlayabilmeniz için öncelikle şunları yapmanız gerekir:

  1. hesap oluşturmakonusundaki yönergeleri izleyerek S0 fiyatlandırma katmanında bir Azure Haritalar hesabı aboneliği oluşturun.
  2. Hesabınız için birincil abonelik anahtarını alın, birincil anahtar albölümündeki yönergeleri izleyin.

azure Haritalar kimlik doğrulaması hakkında daha fazla bilgi için bkz. azure Haritalar kimlik doğrulamasını yönetme.

Azure Not defterleri hakkında bilgi edinmek ve nasıl başlaleyeceğinizi öğrenmek için, Azure Not defteri oluşturmayönergelerini izleyin.

Not

bu projenin jupyter not defteri dosyası, hava durumu Haritalar Jupyter Notebook deposundanindirilebilir.

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 aktar

Bu öğreticinin bir listesi için, dört farklı rüzgar türgisinde yüklü sensörlerden gelen hava durumu verileri okumaları kullanacağız. Örnek veriler 30 günden fazla hava durumu okuduklarını içerir. Bu okumalar, her türbin konumunun yakınında Hava durumu veri merkezinden toplanır. Tanıtım verileri, sıcaklık, Rüzgar hızı ve yön için veri okuduklarını içerir. Tanıtım verilerini buradanindirebilirsiniz. Aşağıdaki komut dosyası tanıtım verilerini Azure Not defteri 'ne aktarır.

df = pd.read_csv("./data/weather_dataset_demo.csv")

Günlük tahmin verileri iste

Senaryolarımızda her bir algılayıcı konumu için günlük tahmin istemek istiyoruz. aşağıdaki betik, Azure Haritalar hava durumu hizmetlerinin günlük tahmin apı 'sini çağırır. Bu API, geçerli tarihten sonraki 15 gün boyunca her bir rüzgar Turbin 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-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()

aşağıdaki betik, Azure Haritalar map ımage hizmetiniçağırarak haritadaki türbin konumlarını 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-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))

Türbin konumları

Veri tahmini verileri, istasyon KIMLIĞI temel alınarak tanıtım verileriyle gruplandıracağız. İstasyon KIMLIĞI, hava durumu veri merkezine yöneliktir. Bu gruplandırma, tanıtım verilerini tahmin verileriyle genişlettiğini.

# 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 birine yönelik Birleşik geçmiş ve tahmin verileri görüntülenmektedir.

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

Tahmin verilerini çiz

Tahmin edilen değerleri tahmin ettikleri günlere göre çizeceğiz. Bu çizim, sonraki 15 gün boyunca rüzgar hızı ve yön değişikliklerini görmemize olanak 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 grafiklerde tahmin verileri görselleştirilecek. Rüzgar hızı değişikliği için bkz. sol grafik. Rüzgar yönündeki değişiklik için sağ grafiğe bakın. Bu veriler, verilerin istendiği günden sonraki 15 günlük tahmindir.

Rüzgar hızı çizimi  Rüzgar yönü çizimi

bu öğreticide, hava durumu tahmin verileri almak için Azure Haritalar REST apı 'lerini çağırmayı öğrenin. Ayrıca grafiklerde verileri görselleştirmeyi de öğrendiniz.

Azure Notebooks içinde Azure Haritalar REST apı 'leri çağırma hakkında daha fazla bilgi edinmek için bkz. Azure Notebooks kullanarak EV yönlendirme.

bu öğreticide kullanılan Azure Haritalar apı 'lerini araştırmak için bkz.:

azure Haritalar rest apı 'lerinin tüm listesi için bkz. azure Haritalar rest apı 'leri.

Kaynakları temizleme

Temizleme gerektiren kaynak yok.

Sonraki adımlar

Azure Notebooks hakkında daha fazla bilgi edinmek için bkz.