Porady. Pandas. Python. Django. Microsoft Power BI. Tableau.

Pandas. Analiza i praca z datami

12.2024 | pandas | python | analiza dat

Pandas oferuje zaawansowane narzędzia do pracy z datami i czasem, które są niezbędne w analizie danych czasowych. W tym przewodniku przedstawimy kompleksowe podejście do pracy z datami w pandas.

1. Tworzenie obiektów datetime

Podstawowe tworzenie dat

import pandas as pd
from datetime import datetime

# Pojedyncza data
date = pd.Timestamp('2024-01-01')

# Serie dat
dates = pd.date_range('2024-01-01', periods=5, freq='D')

# Własny format daty
custom_date = pd.to_datetime('01/01/2024', format='%d/%m/%Y')

Tworzenie zakresów dat

# Dzienny zakres dat
daily_dates = pd.date_range('2024-01-01', '2024-12-31', freq='D')

# Miesięczny zakres dat
monthly_dates = pd.date_range('2024-01-01', '2024-12-31', freq='M')

# Zakres dat biznesowych (bez weekendów)
business_dates = pd.date_range('2024-01-01', '2024-12-31', freq='B')

2. Konwersja kolumn na daty

Automatyczna konwersja

# Podstawowa konwersja
df['data'] = pd.to_datetime(df['data'])

# Konwersja z obsługą błędów
df['data'] = pd.to_datetime(df['data'], errors='coerce')

# Konwersja z określonym formatem
df['data'] = pd.to_datetime(df['data'], format='%Y-%m-%d')

Zaawansowana konwersja

# Konwersja z różnymi formatami
df['data'] = pd.to_datetime(df['data'], infer_datetime_format=True)

# Konwersja z uwzględnieniem strefy czasowej
df['data'] = pd.to_datetime(df['data'], utc=True)

# Konwersja epoki Unix
df['data'] = pd.to_datetime(df['unix_timestamp'], unit='s')

3. Wyodrębnianie komponentów dat

# Zakładamy, że mamy kolumnę 'data' typu datetime
df['rok'] = df['data'].dt.year
df['miesiąc'] = df['data'].dt.month
df['dzień'] = df['data'].dt.day
df['dzień_tygodnia'] = df['data'].dt.day_name()
df['kwartał'] = df['data'].dt.quarter
df['tydzień_roku'] = df['data'].dt.isocalendar().week

4. Operacje na datach

Podstawowe operacje

# Dodawanie dni
df['nowa_data'] = df['data'] + pd.Timedelta(days=7)

# Odejmowanie dat
df['różnica_dni'] = (df['data2'] - df['data1']).dt.days

# Przesunięcie o miesiąc
df['następny_miesiąc'] = df['data'] + pd.DateOffset(months=1)

Zaawansowane operacje

# Znajdowanie najbliższego dnia biznesowego
df['najbliższy_biznesowy'] = df['data'].dt.floor('B')

# Obliczanie różnicy w dniach biznesowych
df['dni_biznesowe'] = pd.bdate_range(start=df['data1'].min(),
                                    end=df['data2'].max()).size

# Przesunięcie do końca miesiąca
df['koniec_miesiąca'] = df['data'].dt.to_period('M').dt.to_timestamp('M')

5. Resample i częste operacje

Agregacja danych czasowych

# Agregacja miesięczna
monthly_data = df.resample('M', on='data').mean()

# Agregacja tygodniowa
weekly_data = df.resample('W', on='data').sum()

# Agregacja dzienna z własną funkcją
daily_data = df.resample('D', on='data').agg({
    'sprzedaż': 'sum',
    'średnia_cena': 'mean',
    'transakcje': 'count'
})

Częste wzorce

# Średnia krocząca
df['średnia_7d'] = df['wartość'].rolling('7D', on='data').mean()

# Suma kumulacyjna
df['suma_narastająco'] = df.groupby(df['data'].dt.year)['wartość'].cumsum()

# Zmiana procentowa
df['zmiana_%'] = df.groupby(df['data'].dt.month)['wartość'].pct_change() * 100

6. Przykłady praktyczne

Analiza sezonowości

# Średnia wartość według miesiąca
seasonal_analysis = df.groupby(df['data'].dt.month)['wartość'].mean()

# Średnia wartość według dnia tygodnia
weekday_analysis = df.groupby(df['data'].dt.day_name())['wartość'].mean()

# Analiza trendu rocznego
yearly_trend = df.groupby(df['data'].dt.year)['wartość'].agg(['mean', 'min', 'max'])

Identyfikacja dni szczególnych

# Znajdowanie dni z największą wartością w każdym miesiącu
monthly_peaks = df.resample('M', on='data')['wartość'].idxmax()

# Dni z wartościami odstającymi
outlier_days = df[df['wartość'] > df['wartość'].quantile(0.95)]['data']

# Dni z największym wzrostem
high_growth_days = df[df['zmiana_%'] > 10]['data']

Wskazówki i najlepsze praktyki

  1. Zawsze sprawdzaj format dat przed konwersją
  2. Używaj errors='coerce' do obsługi nieprawidłowych dat
  3. Pamiętaj o strefach czasowych przy analizie danych międzynarodowych
  4. Regularnie twórz kopie zapasowe przed operacjami na datach
  5. Wykorzystuj wbudowane funkcje pandas zamiast własnych pętli
  6. Zwracaj uwagę na wydajność przy dużych zbiorach danych

Często spotykane problemy i rozwiązania

Problem 1: Mieszane formaty dat

# Rozwiązanie: użyj infer_datetime_format
df['data'] = pd.to_datetime(df['data'], infer_datetime_format=True)

Problem 2: Brakujące daty

# Rozwiązanie: uzupełnij brakujące daty
df = df.resample('D', on='data').asfreq()

Problem 3: Błędne strefy czasowe

# Rozwiązanie: standaryzacja do UTC
df['data'] = df['data'].dt.tz_convert('UTC')

Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.

Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.

Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.

Jestem współtwórcą grupy Hexe Capital SA.

Zapraszam do lektury i współpracy.

Krzysztof Surowiecki

Chcę porozmawiać o współpracy →

Moje certyfikaty