Python - это мощный язык программирования, который широко используется в области анализа данных, включая анализ погодных данных. Давайте на примере анализа годовых температур в Москве разберемся как с его помощью можно выгрузить, предобработать и визуализировать данные новичку в этом деле.
Для начала, вам потребуется получить доступ к погодным данным. Вы можете использовать API, такие как OpenWeatherMap API, для получения данных о погоде. OpenWeatherMap API предоставляет доступ к текущим и историческим данным о погоде по всему миру.
Скачиваем архив данных за интересующий период в формате 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()
На этапе предобработки данных переведем все “временные” данные (год, месяц, дата, время и тд.) в формат 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']
Из получившегося датасета изобразим отклонения от медианного значения температуры на графике. Будем использовать библиотеку 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()
Вот таким нехитрым способом мы подготовили и визуализировали погодные данные по Москве для дальнейшего анализа и поиска отклонений с помощью языка программирования Python. У нас получился интерактивный дашборд, который можно сохранить как отдельно взятое изображение, можно оставить визуализацию только минимальной, максимальной или средней температуры с помощью интерактивных кнопок легенды в правом верхнем углу.