Cele tego rozdziału¶
Ten wykład będzie przeglądem narzędzi przydatnych do pracy z danymi w Pythonie.
Główny nacisk: dane tabelaryczne w plikach
.csv.Wprowadzenie do
pandas.Podstawowa manipulacja i analiza przy użyciu
pandas.
Czym jest plik?¶
Plik jest zbiorem bajtów używanym do przechowywania pewnego rodzaju danych.
Format tych danych zależy od tego, do czego ich używasz, ale na pewnym poziomie są one tłumaczone na binarne bity (1 i 0).
Format pliku jest zwykle określony w rozszerzeniu pliku.
.csv: wartości oddzielone przecinkami..txt: zwykły plik tekstowy..py: wykonywalny plik Pythona..png: przenośny sieciowy plik graficzny (tj. obraz).
Czym są dane tabelaryczne?¶
Dane tabelaryczne to dane zorganizowane w tabeli z wierszami i kolumnami.
Ten rodzaj danych jest dwuwymiarowy.
Zazwyczaj każdy wiersz reprezentuje „obserwację”.
Zazwyczaj każda kolumna reprezentuje atrybut.
Często przechowywane w plikach .csv.
.csv= „wartości oddzielone przecinkami”
Przykład: Kraje¶
Pytanie: Co reprezentuje każdy wiersz? A co każda kolumna?
| Kraj | Ludność (mln) | PKB (bUSD) |
|---|---|---|
| USA | 329.5 | 20.94 |
| WIELKA BRYTANIA | 76.22 | 2.7 |
| CHINY | 1402 | 14.72 |
Pakiet pandas¶
pandasto pakiet, który umożliwia płynne i wydajne przechowywanie, manipulowanie i analizowanie danych.
## Instrukcja importu: pandas jest „pakietem”
import pandas as pdpandas.read_csv¶
Dane tabelaryczne są często przechowywane w plikach .csv.
pandas.read_csvmoże być użyty do wczytania pliku.csv.Jest on reprezentowany jako
pandas.DataFrame.
pd.read_csv(„path/to/file.csv”) ### zastąp rzeczywistą ścieżką pliku!### Plik .csv z danymi o różnych Pokemonach
df_pokemon = pd.read_csv("data/pokemon.csv")
df_pokemon.head(5)read_csv z adresem URL¶
Do funkcji read_csv można również przekazać adres URL wskazujący na plik .csv.
Jest to zbiór danych z Brand et al. (2019), w którym określono ilościowo zmiany w pozytywności i negatywności tekstów piosenek w czasie.
Wkrótce będziemy pracować więcej z tym zbiorem danych!
import ssl
import warnings
warnings.filterwarnings('ignore')
ssl._create_default_https_context = ssl._create_unverified_context
import requests
from io import StringIO
url = "https://raw.githubusercontent.com/kflisikowsky/sad/refs/heads/main/data/billboard_analysis.csv"
response = requests.get(url, verify=False)
df_lyrics = StringIO(response.text)
df_lyrics = pd.read_csv(df_lyrics, sep=",")
print(df_lyrics.head()) artist artist_processed rank \
0 sam the sham and the pharaohs sam the sham and the pharaohs 1
1 four tops four tops 2
2 the rolling stones the rolling stones 3
3 we five we five 4
4 the righteous brothers the righteous brothers 5
song year ID_index negative \
0 wooly bully 1965 1 0.0
1 i cant help myself sugar pie honey bunch 1965 2 3.0
2 i cant get no satisfaction 1965 3 NaN
3 you were on my mind 1965 4 10.0
4 youve lost that lovin feelin 1965 5 6.0
positive n
0 0.0 73.0
1 8.0 192.0
2 NaN NaN
3 2.0 138.0
4 31.0 225.0
df_lyrics.head(2)Używanie DataFrame¶
Teraz, gdy mamy obiekt
DataFrame, chcemy być w stanie używać tegoDataFrame.Obejmuje to:
Uzyskanie podstawowych informacji o
DataFrame(np. jego kształt).Dostęp do określonych kolumn.
Dostęp do określonych wierszy.
Używanie shape¶
df.shape mówi nam ile wierszy i kolumn znajduje się w DataFrame.
## (#wiersze, #kolumny)
df_pokemon.shape(800, 13)Używanie head i tail¶
Funkcja
head(x)wyświetla górnexwierszyDataFrame.Podobnie,
tail(x)wyświetla ostatniexwierszy.
df_pokemon.head(2)df_pokemon.tail(2)Dostęp do kolumn¶
Dostęp do kolumny można uzyskać za pomocą
dataframe_name['column_name'].
### Co przypomina ci ta składnia nawiasów ([„nazwa_kolumny”])?
df_pokemon['Speed'].head(5)0 45
1 60
2 80
3 80
4 65
Name: Speed, dtype: int64Przydatne operacje z pandas¶
DataFrame umożliwia wszelkiego rodzaju użyteczne operacje, włączając w to:
Sortowanie
DataFramewedług określonej kolumny.Obliczanie statystyk opisowych (np.
średnia,medianaitp.).Filtrowanie ramki danych.
Agregacja między poziomami zmiennej przy użyciu
groupby.
sort_values¶
### Domyślnie, będzie sortować od najniższego do najwyższego
df_pokemon.sort_values("HP").head(2)### Pokaż najwyższe HP
df_pokemon.sort_values("HP", ascending = False).head(2)Twoja kolej¶
Jaka jest Szybkość Pokemona z najwyższym Atakiem?
### Rozwiązanie tutaj# Odkomentuj następującą linię, aby zobaczyć rozwiązanie:
# %load ./solutions/solution4.pyStatystyki opisowe¶
Kolumny DataFrame mogą być również podsumowane:
średnia: wartość średnia (dla zmiennych numerycznych)mediana: „środkowa” wartość (dla zmiennych numerycznych)modalna: najczęściej występująca wartość w zbiorze
df_pokemon['Attack'].mean()np.float64(79.00125)df_pokemon['Attack'].median()np.float64(75.0)df_pokemon['Attack'].mode()0 100
Name: Attack, dtype: int64Filtrowanie DataFrame¶
Często chcemy filtrować
DataFrame, aby zobaczyć tylko te obserwacje, które spełniają określone warunki.Ostatecznie jest to podobne do używania deklaracji warunkowej - tylko z inną składnią.
Przykład 1: filtrowanie po zmiennej kategorialnej¶
Kolumna
legendaryjest zmienną kategoryczną, co oznacza, że istnieje kilka dyskretnych kategorii.
## Ile jest legendarnych pokemonów?
df_pokemon[df_pokemon['Legendary']==True].head(5)Przykład 2: filtrowanie na zmiennej ciągłej¶
Kolumna
HPjest zmienną ciągłą.Pokażmy tylko wiersze dla Pokemonów z
HP > 150.
df_pokemon[df_pokemon['HP'] > 150].head(3)Używanie groupby¶
Funkcja
groupbypozwala na podzielenie danych (np. według różnych kategorii), a następnie zastosowanie pewnej funkcji do każdego podziału tych danych (np.średnia).
Składnia jest następująca:
df_name.groupby(„column_to_group_by”).mean() ## lub mediana, itd.Przykład: mean Attack by Legendary¶
Tutaj składnia [[...]] po prostu ogranicza kolumny w DataFrame do tych, na których nam bezpośrednio zależy.
df_pokemon[['Legendary', 'Attack']].groupby("Legendary").mean()Twoja kolej¶
Jak obliczyć medianę Obrony według statusu Legendarnego?
### Twoje rozwiązanie tutaj# Odkomentuj następującą linię, aby zobaczyć rozwiązanie:
# %load ./solutions/solution5.pyTwoja kolej:¶
Jak obliczyć średnią HP dla Typu 1?
### Twoje rozwiązanie tutaj# Odkomentuj następującą linię, aby zobaczyć rozwiązanie:
# %load ./solutions/solution6.pyPodsumowanie¶
To kończy nasz dział dotyczący interakcji z danymi.
Wczytywanie plików
.csvza pomocąpandas.Podsumowywanie i praca z danymi tabelarycznymi.