Pandas & NumPy Academy · leksjon

Sjekkliste for datasettprofilering

Undersøk systematisk form, dtypes, antall manglende verdier, unike verdier og grunnleggende statistikk når De møter et nytt datasett.

Leksjon 1 av 413 trinn

Sjekkliste for datasettprofilering er en gratis leksjon i Pandas & NumPy Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Pandas & NumPy Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.

De første fem minuttene med et datasett

Erfarne dataanalytikere følger en systematisk profileringssjekkliste hver gang de møter et nytt datasett. I stedet for å gå rett i gang med analysen svarer de først på en rekke diagnostiske spørsmål: Hvor stort er datasettet? Hvilke typer har kolonnene? Hvor mange verdier mangler? Finnes det åpenbare avvik? Denne strukturerte fremgangsmåten hindrer mange timers bortkastet arbeid som følge av misforståtte datatyper eller skjulte nullverdier som ødelegger beregningene.

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

Steg 1: Form, kolonner og dtypes

De tre første kontrollene er alltid shape (rader × kolonner), kolonnenavn (samsvarer de med forventningene?) og dtypes (er numeriske kolonner faktisk numeriske?). En vanlig overraskelse er at numeriske kolonner ble lastet inn som object-dtype fordi de inneholder tekstverdier som 'unknown' eller tall med kommaformat blandet med andre verdier. Hvis De oppdager dette under profileringen, unngår De aggregasjoner som i stillhet returnerer feil resultater.

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)

Steg 2: Kontroll av manglende verdier

Kall df.isna().sum() for å telle manglende verdier per kolonne, og divider deretter med len(df) for å få prosentandelen. Kolonner med >50 % manglende verdier er vanligvis kandidater for fjerning; 1–20 % manglende verdier tilsier vanligvis imputering; 0 % manglende verdier bør kontrolleres – fullstendig datadekning kan i seg selv være mistenkelig hvis reelle data sjelden er så rene. Sorter resultatet synkende for å se de hardest rammede kolonnene først.

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)

Steg 3: Grunnleggende deskriptiv statistikk

df.describe() returnerer antall, gjennomsnitt, standardavvik, minimum, kvartiler og maksimum for hver numeriske kolonne i ett kall. Se alltid etter umulige verdier i minimum og maksimum (for eksempel alder = -3 eller alder = 999), vurder gjennomsnittet mot medianen for å avdekke skjevhet (et stort avvik tyder på uteliggere), og kontroller antallet (hvis det er lavere enn totalt antall rader, finnes det nullverdier). Legg til include='all' for også å inkludere statistikk for object-kolonner (antall unike verdier, vanligste verdi og frekvens).

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

Steg 4: Antall unike verdier

For kategoriske kolonner bør De kontrollere antallet unike verdier med df[col].nunique() og undersøke de vanligste verdiene med value_counts(). Vær oppmerksom på kolonner som ser kategoriske ut, men har hundrevis av unike verdier (muligens et fritekstfelt eller en ID), og kolonner som burde være boolske, men har tre verdier (True, False og NaN). Kontroller også inkonsekvent bruk av store og små bokstaver: 'Male' og 'male' behandles som separate kategorier.

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

Steg 5: Eksempelrader med head og tail

df.head(10) og df.tail(10) viser henholdsvis de første og siste radene. Det er viktig å undersøke begge, fordi datasett ofte har rene overskriftsrader og uryddige sluttrader etter eksport (for eksempel en summeringsrad kalt 'Total' som er lagt til i en CSV-eksport). Bruk også df.sample(10) for å se et tilfeldig utvalg av rader, slik at De unngår skjevhet mot begynnelsen av datasettet.

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

Steg 6: Kontrollere duplikater

Kall df.duplicated().sum() for å telle fullstendig dupliserte rader (der hver kolonne er identisk). Et datasett som skal inneholde unike kundeposter, men har selv én duplikat, er et tydelig faresignal for datakvalitetsproblemer. Bruk df[df.duplicated(keep=False)] for å undersøke de faktiske duplikatradene. Når en tabell skal ha unike nøkler (for eksempel en bruker-ID), bør De også kontrollere unikhet på nøkkelnivå med 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}')

Steg 7: Dato- og tidskolonner

Hvis datasettet inneholder dato- eller tidsstempelkolonner, bør De kontrollere at Pandas lastet dem inn som datetime64 (ikke object). Konverter med pd.to_datetime(df['col']). Undersøk deretter datointervallet: df['date'].min() og df['date'].max(). Se etter tidsstempler langt inn i fremtiden (år 2099) eller langt tilbake i fortiden (epoke null: 1970-01-01), noe som kan tyde på plassholderverdier brukt for å representere manglende datoer.

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

Automatisere sjekklisten i en funksjon

Ved å pakke profileringsstegene inn i en gjenbrukbar funksjon sikrer De at de samme kontrollene kjøres konsekvent på hvert datasett. Funksjonen bør skrive ut en strukturert rapport som viser form, manglende verdier, dtypes, antall duplikater og grunnleggende statistikk. De kan utvide den med visualiseringer eller lagre den som en HTML-rapport. Funksjoner som denne er et fast innslag i profesjonelle datavitenskapsteam, der flere analytikere arbeider med den samme arbeidsflyten.

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 for automatisert EDA

Biblioteket ydata-profiling (tidligere pandas-profiling) genererer en omfattende HTML-rapport fra en DataFrame med én enkelt linje: ProfileReport(df).to_file('report.html'). Rapporten inneholder histogrammer, korrelasjonsmatriser, varmekart over manglende verdier, oppdaging av duplikater og interaksjonsdiagrammer. Dette er den raskeste måten å dele en fullstendig profil av et datasett med en interessent som trenger å forstå dataene uten å skrive kode.

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

Sammendrag av profileringssjekklisten

Den komplette profileringssjekklisten for alle nye datasett består av sju trinn: 1) størrelse og kolonner, 2) datatyper og mistenkelige datatypeangivelser, 3) antall og prosentandel manglende verdier per kolonne, 4) deskriptiv statistikk (minimum, maksimum, gjennomsnitt, median), 5) unike verdier og antall forekomster for kategoriske kolonner, 6) oppdaging av dupliserte rader og 7) validering av datointervall. Hvis denne sjekklisten fullføres før analysen starter, unngår man skjulte feil som ellers kan forvrenge resultatene senere i prosessen.

Rask sjekk

Test forståelsen Deres av sjekklisten for datasettprofilering fra denne leksjonen.

Oppsummering av leksjonen

I denne leksjonen lærte De om: den 7-trinns profileringssjekklisten (størrelse, datatyper, manglende verdier, statistikk, antall unike verdier, duplikater, datoer), hvordan kontroller kan samles i en gjenbrukbar profilfunksjon, og hvordan ydata-profiling kan brukes til automatiserte HTML-rapporter. Neste tema er univariat analyse – undersøkelse av hver kolonne separat for å oppdage uteliggere, skjevhet og uvanlige fordelinger.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Sjekkliste for datasettprofilering» gratis?

Ja – hele teksten i «Sjekkliste for datasettprofilering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Pandas & NumPy Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Pandas & NumPy Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Sjekkliste for datasettprofilering»?

Undersøk systematisk form, dtypes, antall manglende verdier, unike verdier og grunnleggende statistikk når De møter et nytt datasett. Du øver på Pandas & NumPy Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Pandas & NumPy Academy?

Ingen tidligere erfaring er nødvendig. Pandas & NumPy Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Sjekkliste for datasettprofilering»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Pandas & NumPy Academy-leksjonen?

Ja. Alle Pandas & NumPy Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Sjekkliste for datasettprofilering
  2. Univariat analyse
  3. Bivariat analyse og korrelasjonsanalyse
  4. Oppsummere funn i en rapport
← Tilbake til Pandas & NumPy Academy