0Pricing
Pandas & NumPy Academy · Lekcja

Podsumowywanie wyników w raporcie

Zbierz najważniejsze wnioski w uporządkowanym podsumowaniu Markdown, zawierającym odnośniki do wizualizacji i możliwe do wykonania kolejne kroki.

Podsumowywanie wyników w raporcie to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 4 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.

Dlaczego ustrukturyzowany raport EDA ma znaczenie

Surowe notatniki Jupyter zawierające setki wykresów i komórek z kodem trudno udostępniać interesariuszom, którzy muszą podejmować decyzje na podstawie wyników. Ustrukturyzowany raport podsumowujący EDA zbiera najważniejsze wnioski ze wszystkich analiz jedno- i dwuwymiarowych w spójną narrację. Dobre raporty oddzielają ustalenia (co pokazują dane) od implikacji (co należy z tym zrobić) i zawierają wizualizacje wspierające tylko kluczowe tezy.

Sześć sekcji raportu EDA

Profesjonalny raport EDA zazwyczaj składa się z sześciu sekcji: 1) Przegląd zbioru danych (rozmiar, źródło, okres), 2) Problemy z jakością danych (brakujące wartości, wartości odstające, duplikaty i sposób ich obsługi), 3) Rozkłady kluczowych zmiennych (najważniejsze kolumny liczbowe i kategorialne), 4) Korelacje i zależności (znalezione zależności o największej sile), 5) Wnioski dotyczące podgrup (różnice między grupami istotne dla pytania biznesowego) oraz 6) Zalecane kolejne kroki (działania związane z czyszczeniem danych i sugestie dotyczące modelowania).

Pisanie sekcji przeglądu zbioru danych

Sekcja przeglądowa powinna być generowana programistycznie, aby zawsze była poprawna. Należy uwzględnić rozmiar, nazwy kolumn i typy danych, zakres dat (jeśli ma zastosowanie) oraz źródło lub wersję zbioru danych. Pisanie tej sekcji w kodzie zamiast w formie opisu zapobiega częstemu błędowi polegającemu na opisaniu w raporcie zbioru zawierającego 10 000 wierszy, podczas gdy raport został faktycznie wygenerowany z oczyszczonej wersji zawierającej 9800 wierszy.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('=== DATASET OVERVIEW ===')
print(f'Shape: {df.shape[0]:,} rows x {df.shape[1]} columns')
print(f'Columns: {", ".join(df.columns)}')
print(f'Numeric: {df.select_dtypes("number").shape[1]} columns')
print(f'Categorical: {df.select_dtypes("object").shape[1]} columns')
print(f'Boolean: {df.select_dtypes("bool").shape[1]} columns')
print(f'Total missing cells: {df.isna().sum().sum():,}')
print(f'Duplicate rows: {df.duplicated().sum()}')

Pisanie sekcji dotyczącej jakości danych

Sekcja dotycząca jakości danych zawiera listę każdego znalezionego problemu oraz podjętej w jego sprawie decyzji. Należy użyć tabeli z kolumnami: Kolumna, Problem, Ważność (wysoka/średnia/niska), Podjęte działanie. Tabelę tę należy obliczać programistycznie na podstawie wyników profilowania, aby aktualizowała się automatycznie po zmianie danych. Ważność powinna odzwierciedlać wpływ na działalność biznesową — brak zmiennej docelowej ma wysoką ważność, natomiast brak kolumny niebędącej predyktorem może mieć niską.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Auto-generate data quality table
missing_pct = (df.isna().sum() / len(df) * 100).round(1)
quality = missing_pct[missing_pct > 0].to_frame(name='missing_pct')
quality['severity'] = quality['missing_pct'].apply(
    lambda x: 'High' if x > 30 else ('Medium' if x > 10 else 'Low')
)
quality['action'] = quality['missing_pct'].apply(
    lambda x: 'Drop column' if x > 50 else 'Impute or flag'
)
print(quality.to_string())

Generowanie podsumowujących wykresów wielopanelowych

Wykres podsumowujący łączy kilka wykresów w jeden obraz, który można osadzić w raporcie. Użyj plt.subplots(rows, cols), aby utworzyć siatkę, i przypisz każdemu kluczowemu ustaleniu osobny panel. Zapisz wykres za pomocą savefig(), używając rozdzielczości DPI odpowiedniej dla formatu wyjściowego (150 dla ekranu, 300 do druku). Każdy panel opatrz jasnym stwierdzeniem opisującym ustalenie, na przykład 'Fare is right-skewed (skew=4.1)', zamiast podawać wyłącznie nazwę kolumny.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 1. Fare distribution
sns.histplot(df['fare'], kde=True, bins=30, ax=axes[0][0])
axes[0][0].set_title('Fare is right-skewed (skew=4.1)')

# 2. Survival by class
survival = df.groupby('class')['survived'].mean().reset_index()
sns.barplot(data=survival, x='class',
            y='survived', order=['First', 'Second', 'Third'], ax=axes[0][1])
axes[0][1].set_title('Survival Rate Drops by Class')

# 3. Age distribution
sns.histplot(df['age'].dropna(), kde=True, bins=25, ax=axes[1][0], color='coral')
axes[1][0].set_title('Age: Near-Normal, Missing 20%')

# 4. Embarkation counts
sns.countplot(data=df, x='embarked', ax=axes[1][1], palette='Set2')
axes[1][1].set_title('Most Boarded at Southampton')

plt.tight_layout()
plt.savefig('/tmp/eda_summary.png', dpi=150, bbox_inches='tight')
plt.show()
print('Saved: /tmp/eda_summary.png')

Zapisywanie ustaleń w formie narracji

Każde kluczowe ustalenie powinno być sformułowane jako zdanie istotne z biznesowego punktu widzenia, a nie jako opis techniczny. Zamiast 'The fare column has skewness=4.1' należy napisać 'Ceny biletów są silnie prawoskośne — niewielka liczba pasażerów pierwszej klasy zapłaciła ponad 10 razy więcej niż mediana ceny biletu, co może zniekształcać analizy przychodów wykorzystujące średnie ceny.' To przełożenie obserwacji statystycznej na implikację biznesową sprawia, że raporty EDA są wartościowe dla nietechnicznych interesariuszy.

Programistyczne generowanie raportów Markdown

Raporty EDA można zapisywać jako pliki Markdown bezpośrednio z poziomu Pythona. Należy zbudować ciąg znaków zawierający nagłówki Markdown, wypunktowania i osadzone odsyłacze do obrazów, a następnie zapisać go do pliku .md. Takie podejście tworzy powtarzalne raporty, które aktualizują się automatycznie po zmianie danych źródłowych, dzięki czemu nadają się do integrowania z artefaktami wyjściowymi potoków danych lub repozytoriami Git.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Build a simple markdown report
lines = [
    '# EDA Summary Report: Titanic Dataset',
    '',
    '## Overview',
    f'- **Rows:** {len(df):,}',
    f'- **Columns:** {df.shape[1]}',
    f'- **Total Missing Cells:** {df.isna().sum().sum():,}',
    '',
    '## Key Findings',
    '- First-class passengers had a 63% survival rate vs 24% for third class.',
    '- Fare is extremely right-skewed (skew=4.1); use log transform before modelling.',
    '- Age is missing in 20% of rows — median imputation recommended.',
    '',
    '## Recommended Next Steps',
    '1. Impute age with median grouped by class.',
    '2. Drop the cabin column (77% missing).',
    '3. Log-transform fare before any regression modelling.',
]

with open('/tmp/eda_report.md', 'w') as f:
    f.write('\n'.join(lines))

print('Report written to /tmp/eda_report.md')
print('\n'.join(lines[:10]))

Eksportowanie do HTML za pomocą Jupyter

Notatniki Jupyter można eksportować do HTML lub PDF za pomocą jupyter nbconvert --to html notebook.ipynb. Zachowuje to wszystkie wykresy, kod i komórki Markdown w jednym pliku, który można udostępniać i wyświetlać bez instalowania Pythona. W pełni zautomatyzowany potok może uruchamiać notatnik programistycznie za pomocą papermill: papermill input.ipynb output.ipynb -p date '2024-01-01', co parametryzuje i wykonuje notatnik jak skrypt.

# To export a Jupyter notebook to HTML:
# jupyter nbconvert --to html eda_notebook.ipynb

# To parameterise and run with papermill:
# pip install papermill
# papermill eda_template.ipynb eda_2024.ipynb -p date '2024-01-01' -p min_rows 1000

# The output notebook can then be exported:
# jupyter nbconvert --to html eda_2024.ipynb
print('Jupyter nbconvert and papermill automate report generation.')

Strukturyzowanie kolejnych kroków, które można podjąć

Sekcja zalecanych kolejnych kroków jest często najczęściej czytaną częścią raportu EDA. Należy zorganizować ją jako listę kontrolną uporządkowaną według priorytetów: P1 (blokujące) — problemy, które trzeba naprawić, zanim jakakolwiek analiza będzie wiarygodna (np. nieprawidłowo rozpoznane typy danych), P2 (ważne) — działania związane z czyszczeniem danych, które znacząco wpływają na wydajność modelu (np. obsługa wartości odstających), P3 (mile widziane) — pomysły na wzbogacenie danych i dodatkowe źródła danych do zbadania. Takie ujęcie ułatwia zespołowi odpowiednie przydzielanie nakładu pracy.

Szybkie raportowanie za pomocą pandas-profiling

ydata-profiling (pip install ydata-profiling) generuje kompleksowy raport HTML za pomocą jednego wywołania. Raport zawiera statystyki przeglądowe, rozkłady zmiennych, korelacje, wzorce brakujących wartości i wykrywanie duplikatów — czyli wszystkie sekcje ręcznie tworzonego raportu EDA. Narzędzia tego należy używać do szybkiej eksploracji na początku projektu, a następnie napisać niestandardowy raport podsumowujący, który uwypukli najistotniejsze ustalenia dla konkretnego pytania biznesowego.

# pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic EDA')
# profile.to_file('titanic_eda.html')  # interactive HTML
# profile.to_notebook_iframe()          # inline in Jupyter

# Key sections in the generated report:
# - Overview: shape, missing, duplicates
# - Variables: per-column statistics and plots  
# - Correlations: Pearson, Spearman, Cramers V
# - Missing values: heatmap and dendrogram
# - Duplicates: full list of duplicate rows
print('ydata-profiling generates full EDA reports with one function call.')

Antywzorce raportów EDA, których należy unikać

Typowe antywzorce w raportach EDA to: pokazywanie każdego wykresu dla każdej kolumny (powstają 50-stronicowe raporty, których nikt nie czyta — należy wybrać 5–10 najważniejszych wykresów), podawanie faktów bez interpretacji („wiek ma 177 pustych wartości” — co z tego wynika i co należy zrobić?), nieodświeżanie raportu po czyszczeniu danych (po oczyszczeniu danych należy ponownie wykonać profilowanie, aby potwierdzić rozwiązanie problemów) oraz mieszanie kodu czyszczenia danych z analizą (czyszczenie danych należy oddzielić od narracji EDA).

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat pisania raportów EDA z tej lekcji.

Podsumowanie lekcji

W tej lekcji poznali Państwo: strukturę raportów EDA podzieloną na sześć sekcji (przegląd, jakość, rozkłady, korelacje, wnioski dotyczące podgrup, kolejne kroki), programistyczne generowanie podsumowujących wykresów wielopanelowych i raportów Markdown oraz przekładanie ustaleń statystycznych na język istotny z biznesowego punktu widzenia. Następnie omówimy zaawansowane techniki indeksowania — tworzenie MultiIndex i wybieranie danych hierarchicznych w Pandas.

Często zadawane pytania

Czy lekcja „Podsumowywanie wyników w raporcie” jest bezpłatna?

Tak — pełny tekst „Podsumowywanie wyników w raporcie” 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 „Podsumowywanie wyników w raporcie”?

Zbierz najważniejsze wnioski w uporządkowanym podsumowaniu Markdown, zawierającym odnośniki do wizualizacji i możliwe do wykonania kolejne kroki. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Podsumowywanie wyników w raporcie”?

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