Руководство по Объединение данных от датчиков с прогнозом погоды с помощью Записных книжек Azure (Python)Tutorial: Join sensor data with weather forecast data by using Azure Notebooks (Python)

Важно!

Службы погоды Azure Maps в настоящее время предоставляются в общедоступной предварительной версии.Azure Maps Weather services are currently in public preview. Эта предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для использования рабочей среде.This preview version is provided without a service level agreement, and it's not recommended for production workloads. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены.Certain features might not be supported or might have constrained capabilities. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.For more information, see Supplemental Terms of Use for Microsoft Azure Previews.

Сила ветра является одним из источников энергии, способных заменить ископаемое топливо и остановить изменение климата.Wind power is one alternative energy source for fossil fuels to combat against climate change. Поскольку ветер по своей природе не постоянен, операторам ветроэнергетических установок необходимо построить модели машинного обучения (ML) для прогнозирования ветроэнергетической мощности.Because wind isn't consistent by nature, wind power operators need to build machine learning (ML) models to predict the wind power capacity. Этот прогноз необходим для удовлетворения спроса на электричество и обеспечения стабильной работы сетки.This prediction is necessary to meet electricity demand and ensure the grid stability. Из этого руководства мы узнаем, как объединить данные прогноза погоды из Azure Maps с демонстрационным набором данных.In this tutorial, we walk through how Azure Maps weather forecast data is combined with demo data for weather readings. Данные о прогнозе погоды извлекаются с помощью запроса к службам погоды Azure Maps (предварительная версия).Weather forecast data is requested by calling Azure Maps Weather services (Preview).

Выполняя данное руководство, вы сделаете следующее:In this tutorial, you will:

  • Работать с файлами данных в Записных книжках Azure в облаке.Work with data files in Azure Notebooks in the cloud.
  • Загружать примеры данных из файла.Load demo data from file.
  • Вызывать REST API Azure Maps с помощью Python.Call Azure Maps REST APIs in Python.
  • Отображать на карте данные о местоположении.Render location data on the map.
  • Обогащать пример данных, используя дневные прогнозы из Azure Maps.Enrich the demo data with Azure Maps Daily Forecast weather data.
  • Наносить данные прогнозов погоды на графики.Plot forecast data in graphs.

Предварительные требованияPrerequisites

Для работы с этим руководством вам потребуется следующее:To complete this tutorial, you first need to:

  1. Создайте подписку Azure Maps с ценовой категорией S0, следуя инструкциям по созданию учетной записи.Create an Azure Maps account subscription in the S0 pricing tier by following instructions in Create an account.
  2. Чтобы получить первичный ключ подписки для учетной записи, выполните инструкции из этой статьи.Get the primary subscription key for your account, follow the instructions in get primary key.

Дополнительные сведения о проверке подлинности в Azure Maps см. в этой статье.For more information on authentication in Azure Maps, see manage authentication in Azure Maps.

Ознакомьтесь с работой записных книжек Azure и узнайте, как их запускать, по инструкциям из этой статьи.To get familiar with Azure notebooks and to know how to get started, follow the instructions Create an Azure Notebook.

Примечание

Файл записной книжки Jupyter для этого проекта можно скачать из репозитория записной книжки Jupyter Notebook для Azure Maps.The Jupyter notebook file for this project can be downloaded from the Weather Maps Jupyter Notebook repository.

Загрузка необходимых модулей и платформLoad the required modules and frameworks

Чтобы загрузить все необходимые модули и платформы, выполните приведенный ниже скрипт:To load all the required modules and frameworks, run the following script:

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

Импорт данных о погодеImport weather data

Для целей этого руководства мы будем использовать показания датчиков погоды, установленных на четырех разных ветрогенераторах.For the sake of this tutorial, we'll use weather data readings from sensors installed at four different wind turbines. Образец данных состоит из показаний погоды за 30 дней.The sample data consists of 30 days of weather readings. Эти показания собираются в метеорологических центрах, расположенных рядом с каждой точкой размещения ветрогенератора.These readings are gathered from weather data centers near each turbine location. Пример данных включает сведения о температуре, скорости и направлении ветра.The demo data contains data readings for temperature, wind speed and, direction. Скачать эти демонстрационные данные можно здесь.You can download the demo data from here. Следующий скрипт импортирует демонстрационные данные в записную книжку Azure.The script below imports demo data to the Azure Notebook.

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

Запрос данных прогноза по днямRequest daily forecast data

В нашем сценарии мы будем получать прогноз по дням для местоположений каждого датчика.In our scenario, we would like to request daily forecast for each sensor location. Следующий скрипт вызывает API прогноза погоды по дням службы погоды Azure Maps (предварительная версия).The following script calls the Daily Forecast API of the Azure Maps Weather services (Preview). Этот интерфейс API возвращает ежедневный прогноз погоды для каждого ветрогенератора на 15 дней от текущей даты.This API returns weather forecast for each wind turbine, for the next 15 days from the current date.

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 (Preview) 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={}&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()

Следующий скрипт наносит на карту расположения ветрогенераторов, обращаясь к службе получения изображения карты в Azure Maps.The script below renders the turbine locations on the map by calling the Azure Maps Get Map Image service.

# 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={}&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))

Расположения ветрогенераторов

Данные прогноза погоды будут сгруппированы с демонстрационными данными на основе идентификатора станции.We'll group the forecast data with the demo data based on the station ID. Идентификатор станции требуется для центра обработки данных погоды.The station ID is for the weather data center. Эта группировка дополняет демонстрационные данные данными прогноза.This grouping augments the demo data with the forecast data.

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

В следующей таблице показан объединенный набор исторических и прогнозируемых данных по расположению одного из ветрогенераторов.The following table displays the combined historical and forecast data for one of the turbine locations.

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

Сгруппированные данные

Grouped data

График прогнозируемых данныхPlot forecast data

Мы будем сопоставлять прогнозные значения с днями, на которые они рассчитываются.We'll plot the forecasted values against the days for which they're forecasted. Этот график позволяет нам видеть изменения скорости и направления ветра в течение следующих 15 дней.This plot allows us to see the speed and direction changes of the wind for the next 15 days.

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

Приведенные ниже графы визуализируют данные прогноза.The graphs below visualize the forecast data. Изменение скорости ветра см. на диаграмме слева.For the change of wind speed, see the left graph. Сведения об изменении направления поворота см. на диаграмме справа.For change in wind direction, see the right graph. Эти данные являются прогнозом на следующие 15 дней с момента запроса данных.This data is prediction for next 15 days from the day the data is requested.

График скорости ветраГрафик направления ветра

Wind speed plot Wind direction plot

Из этого руководства вы узнали, как вызывать REST API для Azure Maps для получения данных прогнозов погоды.In this tutorial you learned, how to call Azure Maps REST APIs to get weather forecast data. Кроме того, теперь вы знаете, как визуализировать данные на графиках.You also learned how to visualize the data on graphs.

Дополнительные сведения о вызове REST API для Azure Maps из Записных книжек Azure вы можете получить в этой статье.To learn more about how to call Azure Maps REST APIs inside Azure Notebooks, see EV routing using Azure Notebooks.

Для изучения API-интерфейсов Azure Maps, используемых в этом руководстве, прочтите следующие статьи:To explore the Azure Maps APIs that are used in this tutorial, see:

Полный список API-интерфейсов Azure Maps вы найдете на этой странице.For a complete list of Azure Maps REST APIs, see Azure Maps REST APIs.

Дальнейшие действияNext steps

Дополнительные сведения о службе "Записные книжки Azure" см. в следующей статье:To learn more about Azure Notebooks, see