Bagikan melalui


Tutorial: Bergabung dalam data sensor dengan data prakiraan cuaca dengan menggunakan Azure Notebooks (Python)

Tenaga angin adalah salah satu sumber energi alternatif untuk bahan bakar fosil guna memerangi perubahan iklim. Karena angin sifatnya tidak konsisten, operator tenaga angin perlu membuat model pembelajaran mesin (ML) untuk memprediksi kapasitas tenaga angin. Prediksi ini diperlukan untuk memenuhi permintaan listrik dan memastikan stabilitas jaringan. Dalam tutorial ini, kita membahas bagaimana data prakiraan cuaca Azure Maps digabungkan dengan data demo untuk pembacaan cuaca. Data prakiraan cuaca diminta dengan memanggil layanan Cuaca Azure Maps.

Dalam tutorial ini, Anda akan:

  • Buat dan jalankan Jupyter Notebook di Visual Studio Code.
  • Memuat data demo dari file.
  • Panggil REST API Azure Maps dengan Python.
  • Merender data lokasi di peta.
  • Memperkaya data demo dengan data cuaca Prakiraan Harian Azure Maps.
  • Merencanakan data prakiraan dalam grafik.

Catatan

File buku catatan Jupyter untuk proyek ini dapat diunduh dari Repositori Weather Maps Jupyter Notebook.

Prasyarat

Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Catatan

Untuk informasi selengkapnya tentang autentikasi di Azure Maps, lihat mengelola autentikasi di Azure Maps.

Memasang paket tingkat proyek

Proyek Perutean EV dan Rentang yang Dapat Dijangkau memiliki dependensi pada pustaka python aiohttp dan IPython . Anda dapat menginstalnya di terminal Visual Studio menggunakan pip:

pip install aiohttp
pip install ipython
pip install pandas

Buka Jupyter Notebook di Visual Studio Code

Unduh lalu buka Notebook yang digunakan dalam tutorial ini:

  1. Buka file weatherDataMaps.ipynb di repositori AzureMapsJupyterSamples di GitHub.

  2. Pilih tombol Unduh file mentah di sudut kanan atas layar untuk menyimpan file secara lokal.

    Cuplikan layar memperlihatkan cara mengunduh file Notebook bernama weatherDataMaps.ipynb dari repositori GitHub.

  3. Buka Notebook yang diunduh di Visual Studio Code dengan mengklik kanan file lalu pilih Buka dengan > Visual Studio Code, atau melalui File Explorer Visual Studio Code.

Memuat modul dan kerangka kerja yang diperlukan

Setelah kode ditambahkan, Anda dapat menjalankan sel menggunakan ikon Jalankan di sebelah kiri sel dan output ditampilkan di bawah sel kode.

Jalankan skrip berikut untuk memuat semua modul dan kerangka kerja yang diperlukan.

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

Cuplikan layar memperlihatkan cara mengunduh sel pertama di Notebook yang berisi pernyataan impor yang diperlukan dengan tombol jalankan disorot.

Mengimpor data cuaca

Tutorial ini menggunakan pembacaan data cuaca dari sensor yang dipasang pada empat turbin angin yang berbeda. Sampel data terdiri dari 30 hari pembacaan cuaca. Pembacaan ini dikumpulkan dari pusat data cuaca di dekat setiap lokasi turbin. Data demo berisi pembacaan data untuk suhu, kecepatan angin, dan arah. Anda dapat mengunduh data demo yang terkandung dalam weather_dataset_demo.csv dari GitHub. Skrip di bawah mengimpor data demo ke Azure Notebook.

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

Meminta data perkiraan harian

Dalam skenario kami, kami ingin meminta perkiraan harian untuk setiap lokasi sensor. Skrip berikut memanggil API Prakiraan Harian layanan Azure Maps Weather. API ini menampilkan prakiraan cuaca untuk setiap turbin angin, selama 15 hari ke depan dari tanggal saat ini.

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

Skrip berikut merender lokasi turbin di peta dengan memanggil layanan Dapatkan Gambar Peta.

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

Cuplikan layar memperlihatkan lokasi turbin di peta.

Kelompokkan data prakiraan dengan data demo berdasarkan ID stasiun. ID stasiun adalah untuk pusat data cuaca. Pengelompokan ini menambah data demo dengan data perkiraan.

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

Tabel berikut menampilkan gabungan data historis dan prakiraan untuk salah satu lokasi turbin.

# Display data for first location
grouped_weather_data.get_group(station_ids[0]).reset_index()

Data yang dikelompokkan

Merencanakan data perkiraan

Plot nilai yang diperkirakan terhadap hari yang diperkirakan. Plot ini memungkinkan kami melihat perubahan kecepatan dan arah angin selama 15 hari ke depan.

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

Grafik berikut memvisualisasikan data prakiraan. Untuk perubahan kecepatan angin, lihat grafik kiri. Untuk perubahan arah angin, lihat grafik kanan. Data ini adalah prediksi untuk 15 hari ke depan dari hari data diminta.

Cuplikan layar memperlihatkan plot kecepatan angin.

Cuplikan layar memperlihatkan plot arah angin.

Dalam tutorial ini, Anda mempelajari cara memanggil REST API Azure Maps untuk mendapatkan data prakiraan cuaca. Anda juga mempelajari cara memvisualisasikan data di grafik.

Untuk menjelajahi API Azure Maps yang digunakan dalam tutorial ini, lihat:

Untuk mengetahui daftar lengkap REST API Azure Maps, lihat REST API Azure Maps.

Langkah berikutnya