Univariat analys
Analysera varje kolumn separat: visa fördelningar för numeriska kolumner och värdefrekvenser för kategoriska, och notera avvikare samt skevhet.
Univariat analys är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.
Vad är univariat analys?
Univariat analys undersöker en kolumn i taget, isolerat från övriga kolumner. Målet är att förstå varje variabels fördelning, upptäcka avvikare, identifiera skevhet och hitta problem med datakvaliteten innan modelleringen börjar. Univariat analys skiljer sig åt för numeriska och kategoriska kolumner – numeriska kolumner behöver fördelningsdiagram och sammanfattande statistik, medan kategoriska kolumner behöver frekvenser och andelar.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric_cols = df.select_dtypes('number').columns.tolist()
categoric_cols = df.select_dtypes('object').columns.tolist()
print('Numeric columns:', numeric_cols)
print('Categorical columns:', categoric_cols)Histogram för numeriska kolumner
Skapa ett histogram för varje numerisk kolumn för att se formen på dess fördelning. Leta efter symmetri kontra skevhet (en svans på ena sidan), modalitet (en topp kontra flera) och tydliga avvikelser (värden längst ut som verkar orimliga). I Pandas skapar df.hist() snabbt ett histogramrutnät med flera kolumner utan att du behöver skriva en loop, medan Seaborns histplot ger mer detaljerad kontroll för enskilda kolumner.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
# Quick multi-column histogram grid
numeric = df.select_dtypes('number')
numeric.hist(bins=20, figsize=(12, 8), layout=(2, 3), color='steelblue', edgecolor='white')
plt.suptitle('Univariate Distributions (Numeric Columns)', y=1.02)
plt.tight_layout()
plt.show()Sammanfattande statistik för numeriska kolumner
Beräkna och jämför medelvärde och median för varje numerisk kolumn. När medelvärdet är betydligt större än medianen är fördelningen högerskev (en lång högersvans, vilket är vanligt för inkomst- och prisdata). När medelvärdet är mindre än medianen är den vänsterskev. Kontrollera också standardavvikelsen i förhållande till medelvärdet: en standardavvikelse som är större än medelvärdet för en icke-negativ variabel tyder på stor variation eller avvikare. Beräkna skevheten direkt med df.skew().
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
summary = pd.DataFrame({
'mean': numeric.mean(),
'median': numeric.median(),
'std': numeric.std(),
'skewness': numeric.skew(),
'missing_pct': (numeric.isna().sum() / len(df) * 100).round(1)
}).round(2)
print(summary)Boxdiagram för att upptäcka avvikare
Boxdiagram är det snabbaste visuella verktyget för att upptäcka avvikare i numeriska kolumner. Alla punkter utanför whiskers (1.5×IQR från Q1 eller Q3) ritas separat och markeras som möjliga avvikare. En kolumn med många avvikarpunkter bör undersökas: är de inmatningsfel, legitima extremvärden eller tecken på en icke-normal fördelning? Boxdiagram visar också högerskevhet eller vänsterskevhet genom medianens asymmetriska placering i boxen.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 3, figsize=(14, 5))
for ax, col in zip(axes, ['age', 'fare', 'sibsp']):
df[[col]].boxplot(ax=ax)
ax.set_title(f'Box Plot: {col}')
plt.tight_layout()
plt.show()Antal avvikare baserat på IQR
IQR-metoden (interkvartilavstånd) definierar avvikare som värden under Q1 - 1.5×IQR eller över Q3 + 1.5×IQR. Du kan beräkna detta programmatiskt för att räkna och granska avvikare i varje numerisk kolumn utan att skapa diagram. Det är användbart i automatiserade pipelines där du behöver logga antalet avvikelser i stället för att generera diagram. Beslutet om vad som ska göras med avvikare – ta bort, begränsa eller flagga dem – bör fattas medvetet och baseras på domänkunskap.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
Q1 = numeric.quantile(0.25)
Q3 = numeric.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outlier_counts = ((numeric < lower) | (numeric > upper)).sum()
print('Outlier counts per column:')
print(outlier_counts[outlier_counts > 0])Värdefrekvenser för kategoriska kolumner
Anropa value_counts() för varje kategorisk kolumn för att se hur observationerna är fördelade mellan kategorierna. Kontrollera alltid följande: dominerar någon enskild kategori (>80%)? Det orsakar klassobalans i klassificeringsuppgifter. Finns det sällsynta kategorier med bara 1–2 observationer (stavfel eller inmatningsfel)? Stämmer fördelningen med verksamhetens förväntningar (t.ex. en kolumn för ”land” som visar att de flesta beställningar kommer från ett oväntat land)?
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
for col in ['sex', 'embarked', 'class', 'who']:
counts = df[col].value_counts(dropna=False)
pct = (counts / len(df) * 100).round(1)
result = pd.DataFrame({'count': counts, 'pct%': pct})
print(f'\n--- {col} ---')
print(result)Stapeldiagram för kategoriska variabler
Visualisera kategoriska värdefrekvenser som stapeldiagram med sns.countplot eller genom att anropa value_counts().plot(kind='bar'). Sortera staplarna från vanligast till minst vanlig så att läsaren direkt kan se de dominerande kategorierna. För binära variabler (ja/nej, man/kvinna) kan ett cirkeldiagram användas – men för fler än 3 kategorier är stapeldiagram alltid tydligare. Rotera etiketter på axelmarkeringarna 45 grader när kategorinamnen är långa.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.countplot(data=df, x='embarked', order=df['embarked'].value_counts().index, ax=axes[0])
axes[0].set_title('Embarkation Port Counts')
sns.countplot(data=df, x='class', order=['First', 'Second', 'Third'], ax=axes[1])
axes[1].set_title('Passenger Class Counts')
plt.tight_layout()
plt.show()Identifiera skevhet och tillämpa transformationer
Starkt högerskevna numeriska kolumner (skevhet > 1.5) har ofta nytta av en logaritmisk transformation för att bli mer symmetriska. Detta är viktigt för många statistiska tester och vissa ML-algoritmer som förutsätter normalfördelning. Använd np.log1p() (log(x+1), säkert för värden nära noll) och kontrollera skevheten igen. Jämför histogram före och efter för att bekräfta att fördelningen har blivit mer klockformad.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
sns.histplot(df['fare'], bins=30, kde=True, ax=axes[0])
axes[0].set_title(f'fare (skew={df["fare"].skew():.2f})')
log_fare = np.log1p(df['fare'])
sns.histplot(log_fare, bins=30, kde=True, ax=axes[1], color='coral')
axes[1].set_title(f'log1p(fare) (skew={log_fare.skew():.2f})')
plt.tight_layout()
plt.show()Kontrollera kolumner med nollvarians
En kolumn med nollvarians (alla värden är identiska) ger ingen information till någon modell och bör tas bort. En kolumn med nära nollvarians (99 % av raderna har samma värde) är på motsvarande sätt oanvändbar. Beräkna variansen med df.var() och filtrera. Kontrollera också kolumner där nunique() == len(df) – dessa är sannolikt ID-kolumner som inte bör användas som features, men som kan vara användbara som radidentifierare.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
# Zero-variance columns
zero_var = numeric.columns[numeric.var() == 0].tolist()
print('Zero-variance columns:', zero_var)
# Near-zero variance (std < 0.01)
nzv = numeric.columns[numeric.std() < 0.01].tolist()
print('Near-zero variance:', nzv)
# Likely ID columns (all unique values)
id_candidates = [c for c in df.columns if df[c].nunique() == len(df)]
print('Likely ID columns:', id_candidates)Automatiseringsloop för univariat analys
I stället för att upprepa samma analys manuellt för varje kolumn kan du skriva en loop som itererar över alla numeriska kolumner och skriver ut nyckelstatistik i ett strukturerat format. Då blir det enkelt att snabbt gå igenom dussintals kolumner och flagga dem som behöver granskas. Utdata kan sparas i en CSV-fil som en del av en pipelinebaserad granskningslogg som intressenter kan gå igenom innan data används i modellering.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
rows = []
for col in numeric.columns:
s = df[col]
Q1, Q3 = s.quantile(0.25), s.quantile(0.75)
IQR = Q3 - Q1
n_outliers = ((s < Q1 - 1.5*IQR) | (s > Q3 + 1.5*IQR)).sum()
rows.append({
'column': col,
'missing_pct': round(s.isna().mean() * 100, 1),
'mean': round(s.mean(), 2),
'std': round(s.std(), 2),
'skew': round(s.skew(), 2),
'outliers': int(n_outliers)
})
report = pd.DataFrame(rows)
print(report.to_string(index=False))Dokumentera resultat från univariat analys
Dokumentera resultaten systematiskt när du har slutfört den univariata analysen. Anteckna följande för varje kolumn: fördelningens form (skev, bimodal, ungefär normal), andel saknade värden och planerad imputationsstrategi, antal avvikare och beslut (begränsa, ta bort, flagga) samt misstänkta värden som kräver förtydligande från domänexperter. Dokumentationen blir loggen för datakvalitet som vägleder rengöringsstegen och skyddar besluten från att glömmas bort eller ifrågasättas senare.
Snabbkontroll
Testa dina kunskaper om univariat analys från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har du lärt dig: histogram visar fördelningens form för numeriska kolumner, boxdiagram och IQR-gränser identifierar avvikare och value_counts visar kategorifrekvenser för kategoriska kolumner. Genom att automatisera dessa kontroller i en loop skapar du en återanvändbar kvalitetsrapport. Härnäst utforskar vi bivariat analys och korrelationsanalys – hur du undersöker relationer mellan kolumnpar.
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
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Univariat analys” gratis?
Ja – hela texten till ”Univariat analys” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Univariat analys”?
Analysera varje kolumn separat: visa fördelningar för numeriska kolumner och värdefrekvenser för kategoriska, och notera avvikare samt skevhet. Ni övar på Pandas & NumPy Academy 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 Pandas & NumPy Academy?
Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy 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 2 av 4.
Hur lång tid tar lektionen ”Univariat analys”?
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 Pandas & NumPy Academy-lektionen?
Ja. Varje Pandas & NumPy Academy-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
- Checklista för datasetprofilering
- Univariat analys
- Bivariat analys och korrelationsanalys
- Sammanfatta resultat i en rapport