0Pricing
Pandas & NumPy Academy · Lekcja

Lista kontrolna profilowania zbioru danych

Systematycznie sprawdzaj kształt, typy danych, liczbę braków, unikatowe wartości i podstawowe statystyki podczas pracy z nowym zbiorem danych.

Lista kontrolna profilowania zbioru danych to bezpłatna lekcja Pandas & NumPy Academy 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 Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Pierwsze pięć minut pracy ze zbiorem danych

Doświadczeni analitycy danych stosują systematyczną listę kontrolną profilowania za każdym razem, gdy mają do czynienia z nowym zbiorem danych. Zamiast od razu przechodzić do analizy, najpierw odpowiadają na zestaw pytań diagnostycznych: jak duże są dane? Jakie typy mają kolumny? Ile wartości brakuje? Czy występują oczywiste anomalie? Takie uporządkowane podejście zapobiega wielogodzinnej, niepotrzebnej pracy spowodowanej niezrozumieniem typów danych lub ukrytymi wartościami null zniekształcającymi obliczenia.

import pandas as pd

# Simulate loading a new dataset
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# Step 1: size
print('Shape:', df.shape)
print('Rows:', len(df))

Krok 1: kształt, kolumny i dtypes

Pierwsze trzy kontrole to zawsze kształt (wiersze × kolumny), nazwy kolumn (czy są zgodne z oczekiwaniami?) oraz dtypes (czy kolumny numeryczne rzeczywiście są numeryczne?). Często okazuje się, że kolumny numeryczne zostały wczytane jako typ object, ponieważ zawierają wpisy tekstowe, takie jak 'unknown', lub liczby z przecinkami w różnych formatach. Wykrycie tego na etapie profilowania pozwala uniknąć agregacji, które po cichu zwracają nieprawidłowe wyniki.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('Shape:', df.shape)
print('\nColumns:', df.columns.tolist())
print('\nData Types:')
print(df.dtypes)

Krok 2: kontrola brakujących wartości

Wywołaj df.isna().sum(), aby policzyć brakujące wartości w każdej kolumnie, a następnie podziel wynik przez len(df), aby uzyskać wartość procentową. Kolumny, w których brakuje >50% danych, zwykle warto usunąć; brak 1-20% danych zazwyczaj uzasadnia imputację; 0% braków wymaga kontroli poprawności — idealna kompletność sama w sobie może być podejrzana, jeśli rzeczywiste dane rzadko są tak kompletne. Posortuj wynik malejąco, aby najpierw zobaczyć kolumny z największą liczbą braków.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Missing value audit
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
audit = pd.DataFrame({'count': missing, 'pct': missing_pct})
audit = audit[audit['count'] > 0].sort_values('pct', ascending=False)
print(audit)

Krok 3: podstawowe statystyki opisowe

df.describe() zwraca podczas jednego wywołania wartości count, mean, std, min, kwartyle i max dla każdej kolumny numerycznej. Zawsze sprawdzaj min i max pod kątem niemożliwych wartości (np. age = -3 lub age = 999), mean w porównaniu z medianą pod kątem skośności (duża różnica sugeruje wartości odstające) oraz count (jeśli jest mniejszy od całkowitej liczby wierszy, występują wartości null). Dodaj include='all', aby uwzględnić również statystyki kolumn typu object (liczbę unikatowych wartości, top, freq).

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Describe numeric columns
print('Numeric statistics:')
print(df.describe().round(2))

print('\nObject column statistics:')
print(df.describe(include='object'))

Krok 4: liczba unikatowych wartości

W przypadku kolumn kategorycznych sprawdź liczbę unikatowych wartości za pomocą df[col].nunique() i wyświetl najczęściej występujące wartości za pomocą value_counts(). Zwróć uwagę na kolumny, które wyglądają na kategoryczne, ale mają setki unikatowych wartości (może to być pole z dowolnym tekstem lub identyfikator), oraz na kolumny, które powinny być typu boolowskiego, ale mają trzy wartości (True, False i NaN). Sprawdź również niespójną wielkość liter: 'Male' i 'male' są traktowane jako osobne kategorie.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

categorical = df.select_dtypes(include='object').columns
for col in categorical:
    n = df[col].nunique()
    top_vals = df[col].value_counts().head(3).to_dict()
    print(f'{col}: {n} unique — top3: {top_vals}')

Krok 5: przykładowe wiersze za pomocą head i tail

df.head(10) i df.tail(10) wyświetlają odpowiednio pierwsze i ostatnie wiersze. Sprawdzenie obu części jest ważne, ponieważ zbiory danych często mają poprawne wiersze nagłówkowe i nieuporządkowane końcowe wiersze będące pozostałością po eksporcie (np. wiersz podsumowania 'Total' dodany na końcu eksportu CSV). Użyj również df.sample(10), aby zobaczyć losowy wybór wierszy i uniknąć obciążenia wynikającego z analizowania wyłącznie początku zbioru danych.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('First 3 rows:')
print(df.head(3))

print('\nLast 3 rows:')
print(df.tail(3))

print('\nRandom sample of 3:')
print(df.sample(3, random_state=42))

Krok 6: sprawdzanie duplikatów

Wywołaj df.duplicated().sum(), aby policzyć całkowicie zduplikowane wiersze (w których każda kolumna ma taką samą wartość). Jeśli zbiór danych ma zawierać unikatowe rekordy klientów, nawet jeden duplikat jest sygnałem ostrzegawczym wskazującym na problemy z jakością danych. Użyj df[df.duplicated(keep=False)], aby sprawdzić konkretne zduplikowane wiersze. Gdy tabela powinna mieć unikatowe klucze (np. identyfikator użytkownika), sprawdź również unikatowość na poziomie klucza za pomocą df['id'].duplicated().sum().

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Full-row duplicates
full_dups = df.duplicated().sum()
print(f'Fully duplicated rows: {full_dups}')

# Key-level duplicates (e.g. passenger class + name)
key_dups = df.duplicated(subset=['pclass', 'sex', 'age', 'fare']).sum()
print(f'Near-duplicate rows (pclass+sex+age+fare): {key_dups}')

Krok 7: kolumny daty i czasu

Jeśli zbiór danych zawiera kolumny z datami lub znacznikami czasu, sprawdź, czy Pandas wczytał je jako datetime64 (a nie object). Wykonaj konwersję za pomocą pd.to_datetime(df['col']). Następnie sprawdź zakres dat: df['date'].min() i df['date'].max(). Poszukaj znaczników czasu odległych w przyszłości (rok 2099) lub w przeszłości (początek epoki: 1970-01-01), które wskazują na wartości zastępcze używane do oznaczania brakujących dat.

import pandas as pd

# Synthetic example with a date column
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'order_date': ['2024-01-10', '2024-02-05', '1970-01-01', '2024-12-31']
})

df['order_date'] = pd.to_datetime(df['order_date'])

print('Date range:', df['order_date'].min(), 'to', df['order_date'].max())
print('\nSuspect dates (before 2020):')
print(df[df['order_date'] < '2020-01-01'])

Automatyzacja listy kontrolnej w funkcji

Umieszczenie kroków profilowania w funkcji wielokrotnego użytku zapewnia spójne wykonywanie tych samych kontroli dla każdego zbioru danych. Funkcja powinna drukować uporządkowany raport zawierający kształt, brakujące wartości, dtypes, liczbę duplikatów i podstawowe statystyki. Można ją rozszerzyć o wizualizacje lub zapisywanie raportu HTML. Takie funkcje są standardowym elementem pracy profesjonalnych zespołów data science, w których wielu analityków pracuje nad tym samym potokiem.

import pandas as pd

def profile(df, name='DataFrame'):
    print(f'=== Profile: {name} ===')
    print(f'Shape: {df.shape[0]} rows x {df.shape[1]} cols')
    print(f'Duplicates: {df.duplicated().sum()}')
    print(f'\nMissing values (top 5):')
    missing = (df.isna().sum() / len(df) * 100).sort_values(ascending=False)
    print(missing[missing > 0].head(5).round(1).to_string())
    print(f'\ndtypes:')
    print(df.dtypes.value_counts().to_string())
    print('=' * 35)

import seaborn as sns
df = sns.load_dataset('titanic')
profile(df, 'Titanic')

ydata-profiling do automatycznej eksploracyjnej analizy danych

Biblioteka ydata-profiling (wcześniej pandas-profiling) generuje kompleksowy raport HTML z obiektu DataFrame w jednym wierszu: ProfileReport(df).to_file('report.html'). Raport zawiera histogramy, macierze korelacji, mapy cieplne brakujących wartości, wykrywanie duplikatów oraz wykresy interakcji. To najszybszy sposób na udostępnienie pełnego profilu zbioru danych interesariuszowi, który musi zrozumieć dane bez pisania kodu.

# Install: pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import pandas as pd
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic Profiling Report', explorative=True)
# profile.to_file('titanic_profile.html')

# The above generates a full HTML report automatically.
# Alternatively, use minimal mode for faster generation:
# profile = ProfileReport(df, minimal=True)
print('ydata-profiling generates HTML EDA reports automatically.')
print('Run: pip install ydata-profiling')

Podsumowanie listy kontrolnej profilowania

Kompletna lista kontrolna profilowania każdego nowego zbioru danych obejmuje siedem kroków: 1) rozmiar i kolumny, 2) typy danych i podejrzane przypisania typów, 3) liczbę i odsetek brakujących wartości w każdej kolumnie, 4) statystyki opisowe (minimum, maksimum, średnia, mediana), 5) wartości unikatowe i liczebności wartości dla kolumn kategorycznych, 6) wykrywanie zduplikowanych wierszy oraz 7) weryfikację zakresu dat. Wykonanie tej listy przed rozpoczęciem analizy zapobiega trudnym do wykrycia błędom, które zniekształcają późniejsze wyniki.

Szybki test

Sprawdź swoją wiedzę na temat listy kontrolnej profilowania zbioru danych z tej lekcji.

Podsumowanie lekcji

W tej lekcji poznali Państwo: 7-etapową listę kontrolną profilowania (rozmiar, typy danych, brakujące wartości, statystyki, liczebności wartości unikatowych, duplikaty, daty), zamykanie kontroli w funkcji wielokrotnego użytku do profilowania oraz używanie ydata-profiling do tworzenia automatycznych raportów HTML. Następnie przejdziemy do analizy jednowymiarowej — badania każdej kolumny niezależnie w celu wykrywania wartości odstających, skośności i nietypowych rozkładów.

Często zadawane pytania

Czy lekcja „Lista kontrolna profilowania zbioru danych” jest bezpłatna?

Tak — pełny tekst „Lista kontrolna profilowania zbioru 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 Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Lista kontrolna profilowania zbioru danych”?

Systematycznie sprawdzaj kształt, typy danych, liczbę braków, unikatowe wartości i podstawowe statystyki podczas pracy z nowym zbiorem danych. Ćwiczysz Pandas & NumPy Academy 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ąć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy 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 „Lista kontrolna profilowania zbioru 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 Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy 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

  1. Lista kontrolna profilowania zbioru danych
  2. Analiza jednowymiarowa
  3. Analiza dwu- i korelacyjna
  4. Podsumowywanie wyników w raporcie
← Powrót do Pandas & NumPy Academy