Pokud potřebujete provádět analýzu dat o počasí, tento článek vám pomůže s postupem. Využívá základů jazyka Python a knihovny Pandas pro základní analýzu dat o počasí. Naučíte se, jak spojit data o počasí s vašimi ostatními datovými sadami, provést základní kontrolu dat, vytvořit jednoduché grafy a připravit soubor pro další práci s daty, například pro vytvoření modelů.
V našem příkladu budeme používat sadu dat obsahující náhodná minutová transportní data z různých společností. Předpokládáme, že máte již nainstalovaný jazyk Python na svém počítači a umíte ho spustit a instalovat knihovny pomocí příkazu pip.
Příprava dat pro analýzu
Před zahájením analýzy bude nejprve nutné načíst vaše datové sady z CSV souboru uloženého na vašem počítači.
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
# Load data from csv
df = pd.read_csv('tranportation_data.csv')
# Show data sample to see what we have
df
Tímto způsobem uvidíte vaše importovaná data, která mohou mít podobný vzhled jako v našem příkladu. Naše ukázková data obsahují časové značky ve formátu UNIX (časové pásmo UTC), vzdálenosti v mílích a ceny v USD:
Protože časové značky jsou ve formátu UNIX, je snadné je převést na objekty datetime:
df['time_stamp'] = pd.to_datetime(df['time_stamp'], unit='ms', origin='unix', utc=True)
Jak přidat informace o počasí do analýzy
Nejjednodušší způsob, jak přidat data o počasí do vašich datových sad, je využití počasí API a již připravených knihoven s jednoduchým použitím. Pokud používáte Python, nainstalujte knihovnu pymeteosource s podporou knihovny Pandas pomocí následujícího příkazu:
pip3 install pymeteosource[pandas]
Poté budete potřebovat unikátní API klíč, který vám umožní stahovat data o počasí. Podrobnější informace o datech a možnostech API najdete na stránce s ceníkem a předplatnými.
Až budete mít váš API klíč připravený, zjistěte, jaká data o počasí jsou k dispozici, abyste věděli, jaký časový rozsah potřebujete extrahovat z Meteosource. Data můžete buď stáhnout přímo ve vaší časové zóně nebo je později převést. Pro náš příklad stáhneme data o počasí v časové zóně UTC a při spojování dat je převedeme do naší místní časové zóny, například US/Eastern.
Pro stažení dat o počasí použijte následující příkazy:
from datetime import datetime, timedelta
from pymeteosource.api import Meteosource
from pymeteosource.types import tiers, units
# Change this to your actual API key
YOUR_API_KEY = 'YOUR API KEY'
# Change this to your actual tier
YOUR_TIER = tiers.FLEXI
# Initialize the main Meteosource object
ms = Meteosource(YOUR_API_KEY, YOUR_TIER)
# The date range for our dataset
date_from = df.time_stamp.min().strftime('%Y-%m-%d')
date_to = df.time_stamp.max().strftime('%Y-%m-%d')
# Get the historical weather data
tm = ms.get_time_machine(date_from=date_from, date_to=date_to,
place_id='boston', tz='UTC',
units=units.US)
# Convert the result to pandas
weather = tm.to_pandas()
Kontrola dat a jejich vykreslení
Abyste viděli, jaká data o počasí máte k dispozici, použijte následující příkaz, který vypíše sloupce data framu s počasím:
# See what weather variables we have
weather.columns
Pokud se rozhodnete, že potřebujete pouze některé proměnné o počasí, vyberte si ty, které korelují s vašimi daty.
# We only need some of the weather variables
weather = weather[['cloud_cover_total', 'weather', 'precipitation_total', 'temperature', 'wind_speed']]
Nyní můžeme vizualizovat některá data o počasí, abychom zjistili, zda je vše v pořádku.
# Plot frequencies of weather types
weather_cats = weather['weather'].value_counts().reset_index()
weather_cats.columns = ['weather', 'count']
sns.set(rc={'figure.figsize': (12, 6)})
plt.xticks(rotation=90)
sns.barplot(x=weather_cats['weather'], y=weather_cats['count'])
První příklad (nahoře) ukazuje frekvenci předdefinovaných typů počasí, což nám dá představu o tom, jaké počasí je nejčastější na naší lokalitě a jak strukturovat naši analýzu. Můžeme také zobrazit distribuci libovolné proměnné (níže) v našich datech, abychom lépe porozuměli našim datům.
# Plot distribution of weather data
def normal(mean, std, color="black"):
x = np.linspace(mean - 4 * std, mean + 4 * std, 200).clip(0, None)
p = stats.norm.pdf(x, mean, std)
z = plt.plot(x, p, color, linewidth=2)
ax = sns.histplot(x=weather.wind_speed, stat="density")
normal(weather.wind_speed.mean(), weather.wind_speed.std())
Slučte data o počasí s vaší datovou sadou pro analýzu
Naše transportní data s časovými značkami mají rozlišení v sekundách, zatímco data o počasí jsou dostupná každou hodinu. Pro sloučení těchto dat je nutné zaokrouhlit časové značky jízd na nejbližší hodinu. Poté spojíme data framy. Pro sloučení použijeme sloupec time_stamp v datech o transportu a index data framu o počasí. Nakonec převedeme datové časy do naší místní časové zóny, například US/Eastern.
# First we have to round the date_times in the transportation dataset to the nearest hour to match weather data
df['time_stamp'] = df['time_stamp'].dt.round('H')
# Now we can merge the data
data = pd.merge(df, weather, left_on='time_stamp', right_index=True, how='left')
# We can also convert the time_stamp column from UTC to local timezone (e.g. US/Eastern)
data['time_stamp'] = data['time_stamp'].dt.tz_convert('US/Eastern')
Potřebujete více dat o počasí pro svou analýzu?
V našem příkladu jsme diskutovali o základech přípravy dat pro analýzu a o tom, jak snadno pracovat s daty o počasí v jazyce Python pomocí knihoven. Pokud zjistíte, že potřebujete více dat o počasí než je k dispozici v standardních plánech Meteosource, kontaktujte nás a sdělte nám své potřeby. Rovněž pomáháme podnikům v různých odvětvích s našimi aplikovanými modely na základě strojového učení.