Python для анализа годовых температур в Москве

Python — это мощный язык программирования, который широко используется в области анализа данных, включая анализ погодных данных. Давайте на примере анализа годовых температур в Москве разберемся как с его помощью можно выгрузить, предобработать и визуализировать данные новичку в этом деле. 

Для начала, вам потребуется получить доступ к погодным данным. Вы можете использовать API, такие как OpenWeatherMap API, для получения данных о погоде. OpenWeatherMap API предоставляет доступ к текущим и историческим данным о погоде по всему миру.  

В нашем примере обойдемся без использования API и ограничимся загрузкой архива погодных данных с информационного ресурса https://rp5.ru/Погода_в_Москве_(ВДНХ) 

В нашем примере обойдемся без использования API и ограничимся загрузкой архива погодных данных с информационного ресурса https://rp5.ru/Погода_в_Москве_(ВДНХ) 

bf89bfbaaf8887f93d3e99bf63958ac7.png

Скачиваем архив данных за интересующий период в формате csv или xls, сохраняем его у себя на ПК.  Затем, вы можете использовать библиотеки Python, такие как Pandas и Plotly, для анализа и визуализации данных. Pandas позволяет вам эффективно работать с табличными данными, а Plotly — создавать графики и визуализации. 

В нашем примере будем использовать Pandas для чтения данных из файла excel, а затем использовать функции Pandas для фильтрации, группировки и агрегации данных. 

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import matplotlib
import dash 
import plotly.express as px
import plotly as go 

moscow_weather = pd.read_excel('C://moscow_weather.xlsx')

moscow_weather = moscow_weather.rename(columns={'Местное время в Москве (ВДНХ)':'timestamp'})
moscow_weather.info()

Для начала загрузим все необходимые библиотеки (в первой ячейке с кодом). С помощью функции

Для начала загрузим все необходимые библиотеки (в первой ячейке с кодом). С помощью функции «pd.read_excel» прочитаем архив с погодными данными, не забудьте указать путь до файла на вашем пк. Поменяем названия колонок на более удобные. 

На этапе предобработки данных переведем все «временные» данные (год, месяц, дата, время и тд.) в формат timestamp для удобства работы с ними в будущем. 

С помощью функции «groupby» сгруппируем данные по годам, а к данным температуры применим агрегацию минимумом, максимумом, суммой и средним. 

Найдем медианные значения каждой из получившихся переменных и посчитаем относительные отклонения от медианной годовой температуры. 

#datetime split
moscow_weather['timestamp'] = pd.to_datetime(moscow_weather['timestamp'])
moscow_weather['year'] = moscow_weather.timestamp.dt.year
moscow_weather['date'] = moscow_weather.timestamp.dt.date
moscow_weather['month'] = moscow_weather.timestamp.dt.month
moscow_weather['time'] = moscow_weather.timestamp.dt.time

annual_sample_temp = moscow_weather

#temperature analysis
annual_sample_temp = annual_sample_temp.groupby(['year'])['T'].agg(['mean','sum', 'min', 'max'])
annual_sample_temp = annual_sample_temp.reset_index()

median_min_T = annual_sample_temp['min'].median()
median_max_T = annual_sample_temp['max'].median()
median_avg_T = annual_sample_temp['sum'].median()
median_avg_T = annual_sample_temp['mean'].median()

annual_sample_temp['rel_mean'] = (annual_sample_temp['mean']-median_avg_T)/annual_sample_temp['mean']

aadaf76e9b1a28d7fda1236cb17be132.png

Из получившегося датасета изобразим отклонения от медианного значения температуры на графике. Будем использовать библиотеку Plotly для его создания.

import plotly.graph_objects as go

# Добавляем данные в график
year = annual_sample_temp['year'].to_list()
high = annual_sample_temp['max'].to_list()
low = annual_sample_temp['min'].to_list()
median = annual_sample_temp['mean'].to_list()


fig = go.Figure()
# Создаем графики динамики температуры
fig.add_trace(go.Scatter(x=year, y=high, name='Max',
                         line=dict(color='firebrick', width=4)))
fig.add_trace(go.Scatter(x=year, y=low, name = 'Min',
                         line=dict(color='royalblue', width=4)))
fig.add_trace(go.Scatter(x=year, y=median, name='Average',
                         line=dict(color='grey', width=4,
                              dash='dash') # dash options include 'dash', 'dot', and 'dashdot'
))

# Редактировать макет
fig.update_layout(title='Средние, высокие и низкие годовые температуры в Москве',
                   xaxis_title='Год',
                   yaxis_title='Температура (градусы по Цельсию)',
                   hovermode="x unified")

fig.show()

6f4b75bd960cebbcfba8ed1126c4d223.png150d160f0a91995175809fa37c88cbfe.png

Вот таким нехитрым способом мы подготовили и визуализировали погодные данные по Москве для дальнейшего анализа и поиска отклонений с помощью языка программирования Python. У нас получился интерактивный дашборд, который можно сохранить как отдельно взятое изображение, можно оставить визуализацию только минимальной, максимальной или средней температуры с помощью интерактивных кнопок легенды в правом верхнем углу.

© Habrahabr.ru