Pandas & NumPy Academy · Lektion

Opsummering af resultater i en rapport

Saml de vigtigste indsigter i en struktureret markdown-opsummering med indlejrede referencer til visualiseringer og konkrete næste skridt.

Lektion 4 af 413 trin

Opsummering af resultater i en rapport er en gratis Pandas & NumPy Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Pandas & NumPy Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.

Hvorfor en struktureret EDA-rapport er vigtig

Rå Jupyter-notebooks med hundredvis af diagrammer og kodeceller er svære at dele med interessenter, der skal handle på resultaterne. En struktureret EDA-opsummeringsrapport kondenserer de vigtigste indsigter fra al din univariate og bivariate analyse til en tydelig fortælling. Gode rapporter adskiller resultater (hvad dataene viser) fra konsekvenser (hvad der skal gøres ved det) og medtager kun visualiseringer, der understøtter vigtige påstande.

De seks afsnit i en EDA-rapport

En professionel EDA-rapport indeholder typisk seks afsnit: 1) Datasætoverblik (form, kilde, tidsperiode), 2) Problemer med datakvaliteten (manglende værdier, afvigende værdier, dubletter og deres behandling), 3) Fordelinger for vigtige variabler (de vigtigste numeriske og kategoriske kolonner), 4) Korrelationer og sammenhænge (de stærkeste relationer, der er fundet), 5) Indsigter om undergrupper (gruppeforskelle, der er relevante for forretningsspørgsmålet), og 6) Anbefalede næste trin (handlinger til datarensning, forslag til modellering).

Skriv afsnittet om datasættets overblik

Overbliksafsnittet bør genereres programmatisk for at sikre, at det altid er korrekt. Medtag form, kolonnenavne og datatyper, datointerval (hvis relevant) samt datasættets kilde eller version. Når du skriver dette afsnit i kode i stedet for prosa, undgår du den almindelige fejl at beskrive et datasæt med 10.000 rækker i en rapport, der faktisk blev genereret ud fra en renset version med 9.800 rækker.

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()}')

Skriv afsnittet om datakvalitet

Afsnittet om datakvalitet oplister alle fundne problemer og den beslutning, der blev truffet for hvert af dem. Brug et tabelformat med kolonnerne: Kolonne, Problem, Alvorlighed (Høj/Mellem/Lav), Udført handling. Beregn denne tabel programmatisk ud fra profileringsresultaterne, så den opdateres automatisk, når dataene ændres. Alvorligheden bør afspejle forretningspåvirkningen — en manglende målvariabel har høj alvorlighed, mens en manglende kolonne uden prædiktiv værdi kan have lav alvorlighed.

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())

Generering af opsummeringsfigurer med flere paneler

En opsummeringsfigur kombinerer flere diagrammer i ét billede, der kan indsættes i en rapport. Brug plt.subplots(rows, cols) til at oprette et gitter, og giv hvert vigtigt resultat sit eget panel. Gem figuren med savefig() ved en DPI-værdi, der passer til outputformatet (150 til skærm, 300 til udskrift). Giv hvert panel en titel med en tydelig formulering af resultatet, f.eks. 'Billetprisen er højreskæv (skew=4.1)', i stedet for blot kolonnenavnet.

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')

Skriv resultater som fortællende tekst

Hvert vigtigt resultat bør formuleres som en forretningsrelevant sætning, ikke som en teknisk beskrivelse. I stedet for 'Kolonnen for billetpris har skævhed=4.1' kan du skrive 'Billetpriserne er ekstremt højreskæve — et lille antal passagerer på første klasse betalte over 10 gange medianprisen, hvilket kan forvrænge indtægtsanalyser, der bruger gennemsnitspriser.' Denne oversættelse fra statistisk observation til forretningsmæssig konsekvens er det, der gør EDA-rapporter værdifulde for ikke-tekniske interessenter.

Generering af Markdown-rapporter programmatisk

Du kan skrive EDA-rapporter som markdown-filer direkte fra Python. Opbyg en streng, der indeholder markdown-overskrifter, punktopstillinger og indlejrede billedlinks, og skriv den derefter til en .md-fil. Denne tilgang skaber reproducerbare rapporter, der opdateres automatisk, når de underliggende data ændres, og som derfor egner sig til integration i outputartefakter fra datapipelines eller Git-repositorier.

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]))

Eksport til HTML med Jupyter

Jupyter-notebooks kan eksporteres til HTML eller PDF ved hjælp af jupyter nbconvert --to html notebook.ipynb. Det bevarer alle diagrammer, al kode og alle markdown-celler i én fil, der kan deles, og som kan vises uden en Python-installation. I en fuldt automatiseret datapipeline kan du køre notebooken programmatisk med papermill: papermill input.ipynb output.ipynb -p date '2024-01-01', som parametriserer og udfører notebooken som et script.

# 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.')

Strukturering af handlingsorienterede næste trin

Afsnittet anbefalede næste trin er ofte den mest læste del af en EDA-rapport. Strukturér det som en prioriteret tjekliste: P1 (blokerende) — problemer, der skal løses, før nogen analyse er gyldig (f.eks. forkert identificerede datatyper), P2 (vigtige) — handlinger til datarensning, der har væsentlig indvirkning på modellens ydeevne (f.eks. behandling af afvigende værdier), P3 (gode at have) — idéer til berigelse og yderligere datakilder, der kan undersøges. Denne inddeling gør det nemt for teamet at prioritere indsatsen korrekt.

Brug af pandas-profiling til hurtig rapportering

ydata-profiling (pip install ydata-profiling) genererer en omfattende HTML-rapport med ét kald. Rapporten indeholder opsummerende statistikker, variabel-fordelinger, korrelationer, mønstre for manglende værdier og registrering af dubletter — alle afsnittene fra en manuel EDA-rapport. Brug det til hurtig udforskning i starten af et projekt, og skriv derefter en tilpasset opsummeringsrapport, der fremhæver de mest relevante resultater for dit specifikke forretningsspørgsmål.

# 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.')

Anti-mønstre i EDA-rapporter, du bør undgå

Almindelige anti-mønstre i EDA-rapporter: at vise hvert diagram for hver kolonne (det skaber rapporter på 50 sider, som ingen læser — vælg de 5-10 vigtigste), at angive fakta uden fortolkning ('alder har 177 null-værdier' — hvad skal vi så gøre?), ikke at opdatere rapporten efter datarensning (rens dataene, og gentag derefter profileringen for at bekræfte, at problemerne er løst), samt at blande kode til datarensning ind i analysen (hold datarensningen adskilt fra EDA-fortællingen).

Hurtigt tjek

Test din forståelse af skrivning af EDA-rapporter fra denne lektion.

Opsummering af lektionen

I denne lektion lærte du at strukturere EDA-rapporter i seks afsnit (overblik, kvalitet, fordelinger, korrelationer, indsigter om undergrupper, næste trin), generere opsummeringsfigurer med flere paneler og markdown-rapporter programmatisk samt omsætte statistiske resultater til forretningsrelevant sprog. Dernæst undersøger vi avancerede indekseringsteknikker — oprettelse af MultiIndex og hierarkisk udvælgelse i Pandas.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Opsummering af resultater i en rapport” gratis?

Ja — hele teksten til “Opsummering af resultater i en rapport” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Pandas & NumPy Academy-kurset, skal du opgradere til CoddyKit PRO. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opsummering af resultater i en rapport”?

Saml de vigtigste indsigter i en struktureret markdown-opsummering med indlejrede referencer til visualiseringer og konkrete næste skridt. Du øver dig i Pandas & NumPy Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Pandas & NumPy Academy?

Der kræves ingen tidligere erfaring. Pandas & NumPy Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Opsummering af resultater i en rapport”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Pandas & NumPy Academy-lektion?

Ja. Alle Pandas & NumPy Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Tjekliste til profilering af datasæt
  2. Univariat analyse
  3. Bivariat analyse og korrelationsanalyse
  4. Opsummering af resultater i en rapport
← Tilbage til Pandas & NumPy Academy