Przepływ EDA i profilowanie danych
df.info(), df.describe(), audyt brakujących wartości, sprawdzanie typów danych i analiza krotności.
Przepływ EDA i profilowanie danych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Czym jest eksploracyjna analiza danych
Eksploracyjna analiza danych (EDA) to pierwszy etap pracy z każdym zbiorem danych przed przystąpieniem do modelowania. Jej celem jest zrozumienie struktury danych, wykrycie problemów i wyrobienie sobie intuicji.
Uporządkowana checklista wstępnego przeglądu EDA odpowiada na pytania: Jak duży jest zbiór danych? Jakie typy mają kolumny? Gdzie występują brakujące wartości? Czy są duplikaty? Jak rozkładają się wartości?
- Wcześnie wykrywać problemy z jakością danych
- Określać, które cechy wymagają czyszczenia
- Formułować hipotezy do późniejszego sprawdzenia
Wczytywanie danych
Wszystko zaczyna się od wczytania obiektu DataFrame i szybkiego rzutu oka za pomocą head() oraz shape.
shape zwraca krotkę (rows, columns), dzięki czemu od razu wiadomo, z jaką skalą danych mamy do czynienia.
import pandas as pd
df = pd.read_csv("customers.csv")
print(df.shape) # (10000, 8)
print(df.head()) # first 5 rowsdf.info() — typy i liczby wartości niepustych
df.info() to najbardziej użyteczna pojedyncza komenda na początek. Wyświetla nazwę każdej kolumny, jej dtype oraz liczbę wartości niepustych.
Jeśli kolumna liczbowa ma typ object, oznacza to problem (pozostały tekst, przecinki lub symbole walut). Jeśli liczby wartości niepustych różnią się między kolumnami, oznacza to obecność brakujących danych.
df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age 9800 non-null float64
# city 10000 non-null object
# income 9500 non-null float64df.describe() — podsumowanie danych liczbowych
df.describe() podaje wartości count, mean, std, min, kwartyle (25/50/75%) i max dla każdej kolumny liczbowej.
Warto zwrócić uwagę na sygnały ostrzegawcze: wartość min równą -1 w kolumnie dotyczącej wieku, wartość max znacznie wyższą od 75. percentyla (wartość odstająca) albo średnią wyraźnie różniącą się od mediany (skośność).
print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))df.isnull().sum() — zliczanie brakujących wartości
Połączenie isnull() z sum() zlicza brakujące wartości dla każdej kolumny. Dodanie kolejnego .sum() pozwala obliczyć sumę łączną.
Warto przeliczyć je na procenty, aby ocenić skalę problemu: kolumnę, w której brakuje 60% wartości, może opłacać się usunąć, natomiast brakujące 2% łatwo uzupełnić.
print(df.isnull().sum())
missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))df.duplicated().sum() — wyszukiwanie zduplikowanych wierszy
df.duplicated() zwraca serię wartości logicznych oznaczających wiersze będące dokładnymi kopiami wcześniejszego wiersza. Zsumowanie jej wartości pozwala policzyć liczbę duplikatów.
Za pomocą subset można ograniczyć wyszukiwanie duplikatów do kluczowych kolumn — jest to przydatne, gdy wartość id powinna być unikalna.
print(df.duplicated().sum()) # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids
df = df.drop_duplicates()value_counts() — częstości kategorii
value_counts() zlicza, jak często każda unikalna wartość występuje w kolumnie. To podstawowe narzędzie do analizy danych kategorycznych.
Użycie normalize=True pozwala wyświetlić proporcje zamiast wartości bezwzględnych, a dropna=False uwzględnia w zestawieniu również brakujące wartości.
print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))Sprawdzanie kardynalności
Kardynalność to liczba różnych wartości w kolumnie, zwracana przez nunique().
- Niska kardynalność (kilka kategorii) → dobry przypadek do kodowania one-hot.
- Wysoka kardynalność (tysiące unikalnych ciągów znaków, np. identyfikatory użytkowników) → zwykle nie jest użyteczną cechą bez dodatkowego przetwarzania.
for col in df.select_dtypes("object").columns:
print(col, "->", df[col].nunique(), "unique")Wykrywanie kolumn stałych i przypominających identyfikatory
Podczas profilowania warto zwrócić uwagę na dwa skrajne przypadki:
- Kolumny stałe (
nunique() == 1) nie zawierają żadnych informacji — należy je usunąć. - Kolumny przypominające identyfikatory (
nunique() == len(df)) mają unikalną wartość w każdym wierszu i w większości modeli nie dostarczają użytecznych informacji.
n = len(df)
for col in df.columns:
u = df[col].nunique()
if u == 1:
print(col, "is constant")
elif u == n:
print(col, "is ID-like")dtypes i zużycie pamięci
Warto sprawdzić df.dtypes, aby potwierdzić, że kolumny są przechowywane prawidłowo, oraz df.memory_usage(deep=True), aby znaleźć kolumny zajmujące dużo pamięci.
Zmniejszenie typów liczbowych i konwersja ciągów znaków o niskiej kardynalności na typ category może znacznie ograniczyć zużycie pamięci w przypadku dużych zbiorów danych.
print(df.dtypes)
print(df.memory_usage(deep=True))
df["city"] = df["city"].astype("category")Uniwersalny fragment kodu do profilowania
Całą checklistę można zamknąć w jednej funkcji pomocniczej, aby każdy nowy zbiór danych przechodził taki sam wstępny przegląd.
Warto uruchamiać ją zaraz po wczytaniu dowolnego obiektu DataFrame, aby od razu wykryć jego rozmiar, typy danych, braki, duplikaty i kardynalność.
def profile(df):
print("Shape:", df.shape)
print(df.info())
print("Missing:\n", df.isnull().sum())
print("Dupes:", df.duplicated().sum())
for c in df.select_dtypes("object"):
print(c, df[c].nunique(), "unique")
profile(df)Szybkie sprawdzenie: brakujące wartości
Potrzebują Państwo odsetka brakujących wartości w każdej kolumnie.
Podsumowanie: checklista wstępnego przeglądu EDA
Mają już Państwo powtarzalną procedurę rozpoczynania pracy z dowolnym zbiorem danych:
shapeihead()do sprawdzania rozmiaru i podglądu danychinfo()do sprawdzania typów danych i liczb wartości niepustychdescribe()do podsumowania danych liczbowych i wyszukiwania oznak wartości odstającychisnull().sum()do sprawdzania brakujących wartościduplicated().sum()do wyszukiwania zduplikowanych wierszyvalue_counts()inunique()do sprawdzania częstości kategorii i kardynalności
W następnym kroku przyjrzymy się pojedynczym kolumnom za pomocą analizy jednowymiarowej.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 53
- Lekcje
- 225
Często zadawane pytania
Czy lekcja „Przepływ EDA i profilowanie danych” jest bezpłatna?
Tak — pełny tekst „Przepływ EDA i profilowanie danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Przepływ EDA i profilowanie danych”?
df.info(), df.describe(), audyt brakujących wartości, sprawdzanie typów danych i analiza krotności. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Przepływ EDA i profilowanie danych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przepływ EDA i profilowanie danych
- Analiza jednowymiarowa
- Analiza dwu- i wielowymiarowa
- Analiza rozkładu cech i zmiennej docelowej