Arbetsflöden för EDA och dataprofiler
df.info(), df.describe(), granskning av saknade värden, kontroll av datatyper och kardinalitetsanalys.
Arbetsflöden för EDA och dataprofiler är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Vad är explorativ dataanalys?
Explorativ dataanalys (EDA) är det första ni gör med varje dataset innan ni börjar modellera. Målet är att förstå strukturen, upptäcka problem och skapa en intuitiv förståelse.
En systematisk EDA-checklista för den första genomgången besvarar följande frågor: Hur stort är datamaterialet? Vilka datatyper har kolumnerna? Var finns saknade värden? Finns det dubbletter? Hur är värdena fördelade?
- Upptäcka problem med datakvaliteten tidigt
- Avgöra vilka features som behöver rensas
- Formulera hypoteser att testa senare
Läsa in data
Allt börjar med att läsa in en DataFrame och göra en snabb överblick med head() och shape.
shape returnerar en tupel med (rows, columns), så att ni direkt vet vilken omfattning ni arbetar med.
import pandas as pd
df = pd.read_csv("customers.csv")
print(df.shape) # (10000, 8)
print(df.head()) # first 5 rowsdf.info() — Datatyper och antal icke-null-värden
df.info() är det mest användbara första kommandot. Det skriver ut varje kolumnnamn, dess dtype och antalet icke-null-värden.
Om en numerisk kolumn visas som object är något fel (överbliven text, kommatecken eller valutasymboler). Om antalet icke-null-värden skiljer sig mellan kolumnerna finns det saknade data.
df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age 9800 non-null float64
# city 10000 non-null object
# income 9500 non-null float64df.describe() — Numerisk sammanfattning
df.describe() ger count, mean, std, min, kvartiler (25/50/75 %) och max för varje numerisk kolumn.
Leta efter varningssignaler: ett min-värde på -1 i en ålderskolumn, ett max-värde långt över den 75:e percentilen (avvikare) eller ett medelvärde långt från medianen (skevhet).
print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))df.isnull().sum() — Räkna saknade värden
Genom att kedja isnull() med sum() räknar ni saknade värden per kolumn. Lägg till ytterligare en .sum() för totalsumman.
Omvandla till procent för att bedöma allvaret: en kolumn där 60 % av värdena saknas kan vara värd att ta bort, medan 2 % saknade värden är enkelt att imputera.
print(df.isnull().sum())
missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))df.duplicated().sum() — Hitta dubblettrader
df.duplicated() returnerar en boolesk serie som markerar rader som är exakta kopior av en tidigare rad. Genom att summera serien räknar ni hur många dubbletter som finns.
Ni kan begränsa dubblettkontrollen till nyckelkolumner med subset – användbart när ett id ska vara unikt.
print(df.duplicated().sum()) # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids
df = df.drop_duplicates()value_counts() — Kategorifrekvenser
value_counts() räknar hur ofta varje unikt värde förekommer i en kolumn. Det är standardverktyget för att undersöka kategoriska data.
Använd normalize=True för att se andelar i stället för råa antal, och dropna=False för att ta med saknade värden i sammanräkningen.
print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))Kontrollera kardinalitet
Kardinalitet är antalet distinkta värden i en kolumn, vilket anges av nunique().
- Låg kardinalitet (ett fåtal kategorier) → bra för one-hot-kodning.
- Hög kardinalitet (tusentals unika strängar, t.ex. användar-ID:n) → är vanligtvis inte en användbar feature i befintligt skick.
for col in df.select_dtypes("object").columns:
print(col, "->", df[col].nunique(), "unique")Identifiera konstanta och ID-liknande kolumner
Två ytterligheter är värda att uppmärksamma under profileringen:
- Konstanta kolumner (
nunique() == 1) innehåller ingen information – ta bort dem. - ID-liknande kolumner (
nunique() == len(df)) är unika för varje rad och ger de flesta modeller ingen användbar information.
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 och minnesanvändning
Kontrollera df.dtypes för att bekräfta att kolumnerna lagras korrekt, och df.memory_usage(deep=True) för att hitta kolumner som tar mycket minne.
Att konvertera numeriska typer till mindre typer och omvandla strängar med låg kardinalitet till category kan minska minnesanvändningen kraftigt i stora dataset.
print(df.dtypes)
print(df.memory_usage(deep=True))
df["city"] = df["city"].astype("category")Ett återanvändbart kodexempel för profilering
Ni kan samla hela checklistan i en hjälpfunktion, så att varje nytt dataset får samma första genomgång.
Kör den direkt när ni läser in en DataFrame för att omedelbart upptäcka form, datatyper, saknade värden, dubbletter och kardinalitet.
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)Snabbkontroll: Saknade värden
Ni vill ha procentandelen saknade värden i varje kolumn.
Sammanfattning: EDA-checklistan för den första genomgången
Nu har ni en repeterbar inledande rutin för alla dataset:
shapeochhead()för omfattning och förhandsvisninginfo()för datatyper och antal icke-null-värdendescribe()för numeriska sammanfattningar och indikationer på avvikareisnull().sum()för saknade värdenduplicated().sum()för dubblettradervalue_counts()ochnunique()för kategorifrekvenser och kardinalitet
Nästa steg är att gå igenom enskilda kolumner med univariat analys.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 53
- Lektioner
- 225
Vanliga frågor
Är lektionen ”Arbetsflöden för EDA och dataprofiler” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Arbetsflöden för EDA och dataprofiler”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Vad lär jag mig i ”Arbetsflöden för EDA och dataprofiler”?
df.info(), df.describe(), granskning av saknade värden, kontroll av datatyper och kardinalitetsanalys. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?
Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Arbetsflöden för EDA och dataprofiler”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?
Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Arbetsflöden för EDA och dataprofiler
- Univariat analys
- Bivariat och multivariat analys
- Analys av featurefördelningar och målvariabler