Pandas & NumPy Academy · leksjon

Fordelingsdiagrammer: histplot og kdeplot

Visualiser formen på en numerisk fordeling med sns.histplot, og legg et estimat av kjernetettheten oppå med sns.kdeplot.

Leksjon 1 av 413 trinn

Fordelingsdiagrammer: histplot og kdeplot 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.

Seaborn og fordelingsdiagrammer

Seaborn er et bibliotek for statistisk datavisualisering som er bygget oppå Matplotlib. Det tilbyr et høynivå-API som lager vakre og informative diagrammer med minimalt med kode. Noe av det første De vil forstå om et datasett, er formen på fordelingene – og Seaborns histplot og kdeplot er de viktigste verktøyene for dette.

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

# Load a built-in dataset
tips = sns.load_dataset('tips')
print(tips.head())

Opprette et grunnleggende histogram med histplot

sns.histplot(data, x='column') oppretter et histogram for en numerisk variabel. Seaborn velger automatisk et fornuftig antall bins ved hjelp av Sturges' regel som standard. De kan tilpasse antallet bins med parameteren bins, eller la Seaborn velge automatisk. Høyden på hver stolpe viser antallet observasjoner i det aktuelle intervallet.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Basic histogram of total bill amounts
sns.histplot(data=tips, x='total_bill')
plt.title('Distribution of Total Bill')
plt.xlabel('Total Bill ($)')
plt.show()

Kontrollere bins og stat-parameteren

Parameteren bins styrer hvor mange stolper histogrammet viser – flere bins viser flere detaljer, men kan se støyende ut. Parameteren stat endrer hva y-aksen representerer: 'count' (standard), 'density' (sannsynlighetstetthet), 'probability' (andel observasjoner) eller 'percent'. Når De velger stat='density', blir histogrammer fra datasett av ulik størrelse sammenlignbare.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

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

# Count histogram with 20 bins
sns.histplot(data=tips, x='total_bill', bins=20, ax=axes[0])
axes[0].set_title('Count (20 bins)')

# Density histogram
sns.histplot(data=tips, x='total_bill', stat='density', ax=axes[1])
axes[1].set_title('Density')

plt.tight_layout()
plt.show()

Legge et KDE oppå histogrammet

Når De setter kde=True i histplot, legges en kurve for Kernel Density Estimate (KDE) oppå histogrammet. KDE er en jevn, kontinuerlig tilnærming til den underliggende sannsynlighetsfordelingen. Denne kombinasjonen er svært effektiv: Histogrammet viser de rå antallene i hvert bin, mens KDE viser den overordnede formen og avdekker flere topper (multimodalitet).

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Histogram with KDE overlay
sns.histplot(data=tips, x='total_bill', kde=True, bins=25, color='steelblue')
plt.title('Bill Distribution with KDE Overlay')
plt.xlabel('Total Bill ($)')
plt.show()

Bruke kdeplot separat

sns.kdeplot() tegner bare den jevne tetthetskurven, uten histogramstolper. Dette er nyttig når De sammenligner flere fordelinger på de samme aksene, fordi overlappende histogrammer blir forvirrende, mens overlappende KDE-kurver fortsatt er lette å lese. Parameteren fill=True fyller området under kurven, slik at det blir enklere å skille gruppene visuelt.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# KDE plot for lunch vs dinner bills
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, alpha=0.5)
plt.title('Bill Distribution: Lunch vs Dinner')
plt.xlabel('Total Bill ($)')
plt.show()

hue-parameteren for sammenligning av grupper

Både histplot og kdeplot godtar en hue-parameter som deler dataene etter en kategorisk kolonne og tegner hver gruppe i en egen farge. Dette gjør det enkelt å sammenligne fordelinger på tvers av grupper. Når De bruker histplot med hue, bør De angi stat='density' slik at grupper av ulik størrelse kan sammenlignes på en rettferdig måte.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Compare tip distributions by smoker status
sns.histplot(
    data=tips,
    x='tip',
    hue='smoker',
    stat='density',
    common_norm=False,
    bins=20,
    alpha=0.6
)
plt.title('Tip Distribution by Smoker Status')
plt.show()

Båndbredde i KDE: bw_adjust-parameteren

KDE har en innstillingsparameter kalt båndbredde som styrer hvor jevn kurven er. En liten båndbredde gjør kurven hakkete og fører til overtilpasning til dataene, mens en stor båndbredde jevner ut kurven for mye og skjuler reelle egenskaper. Seaborn bruker bw_adjust (standardverdi 1.0) som en multiplikator for den automatisk valgte båndbredden – verdier under 1 gir en mer ujevn kurve, mens verdier over 1 gir en jevnere kurve.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

fig, axes = plt.subplots(1, 3, figsize=(12, 4))
bw_values = [0.3, 1.0, 3.0]

for ax, bw in zip(axes, bw_values):
    sns.kdeplot(data=tips, x='total_bill', bw_adjust=bw, ax=ax)
    ax.set_title(f'bw_adjust={bw}')

plt.tight_layout()
plt.show()

Todimensjonale fordelinger med histplot og kdeplot

Både histplot og kdeplot støtter todimensjonale diagrammer når De oppgir både x- og y-parametere. Et todimensjonalt histogram viser et frekvensrutenett med fargekoding, mens en todimensjonal KDE viser konturlinjer med lik tetthet. Disse diagrammene viser fellesfordelingen til to numeriske variabler og om de er korrelerte.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

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

# 2D histogram
sns.histplot(data=tips, x='total_bill', y='tip', ax=axes[0])
axes[0].set_title('2D Histogram')

# 2D KDE contour plot
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, ax=axes[1])
axes[1].set_title('2D KDE Contours')

plt.tight_layout()
plt.show()

Tilpasse utseendet med Seaborn-temaer

Seaborn tilbyr innebygde temaer via sns.set_theme(style=). De tilgjengelige stilene er 'darkgrid', 'whitegrid', 'dark', 'white' og 'ticks'. De kan også angi en palett med palette= eller sns.set_palette(). Disse innstillingene gjelder globalt for alle påfølgende plott i økten, noe som gjør det enkelt å oppnå et konsekvent utseende.

import seaborn as sns
import matplotlib.pyplot as plt

# Apply a clean whitegrid theme
sns.set_theme(style='whitegrid', palette='muted')

tips = sns.load_dataset('tips')
sns.histplot(data=tips, x='total_bill', kde=True, bins=20)
plt.title('Styled Distribution Plot')
plt.show()

# Reset to defaults when done
sns.reset_defaults()

Tolke formen på en fordeling

Når De leser et fordelingsplott, bør De se etter fire nøkkeltrekk. Sentrum: hvor konsentrerer massen seg (gjennomsnitt/median)? Spredning: hvor bred er fordelingen (standardavvik)? Skjevhet: er halen lengre til høyre (positiv skjevhet) eller venstre (negativ skjevhet)? Modalitet: har fordelingen én topp (unimodal) eller flere (bimodal/multimodal)? Bimodale fordelinger indikerer ofte to skjulte underpopulasjoner som det kan være nyttig å skille ut.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Simulate a bimodal distribution
np.random.seed(42)
data = np.concatenate([
    np.random.normal(loc=20, scale=3, size=300),
    np.random.normal(loc=45, scale=5, size=200)
])

sns.histplot(data, kde=True, bins=40)
plt.title('Bimodal Distribution — Two Hidden Groups')
plt.xlabel('Value')
plt.show()

displot: distribusjonsfunksjon på figurnivå

sns.displot() er en omsluttende funksjon på figurnivå som oppretter sin egen Figure og støtter inndeling i fasetter på tvers av rader og kolonner ved hjelp av parameterne col= og row=. Send inn kind='hist', kind='kde' eller kind='ecdf' for å bytte plottetype. ECDF (Empirical Cumulative Distribution Function) er spesielt nyttig fordi den viser hvilken andel av dataene som ligger under hver verdi, uten at De må velge intervaller.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# Faceted KDE by day of week
sns.displot(
    data=tips,
    x='total_bill',
    col='day',
    col_wrap=2,
    kind='kde',
    fill=True
)
plt.suptitle('Bill Distributions by Day', y=1.02)
plt.show()

Kort kontroll

Test forståelsen Deres av Seaborn-fordelingsplott fra denne leksjonen.

Oppsummering av leksjonen

I denne leksjonen lærte De at: sns.histplot oppretter histogrammer med tilpassbare intervaller og statistikkparametere, sns.kdeplot tegner jevne tetthetskurver som egner seg godt til sammenligning av grupper, og hue-parameteren deler begge plottypene etter en kategorisk variabel for sammenligning side om side. Deretter skal vi se på kategoriske sammenligningsplott, som boksplott, stolpediagrammer og fiolinplott.

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 «Fordelingsdiagrammer: histplot og kdeplot» gratis?

Ja – hele teksten i «Fordelingsdiagrammer: histplot og kdeplot» 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 «Fordelingsdiagrammer: histplot og kdeplot»?

Visualiser formen på en numerisk fordeling med sns.histplot, og legg et estimat av kjernetettheten oppå med sns.kdeplot. 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 «Fordelingsdiagrammer: histplot og kdeplot»?

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. Fordelingsdiagrammer: histplot og kdeplot
  2. Kategoriske diagrammer: boxplot, barplot, violinplot
  3. Spredningsdiagrammer og parvise diagrammer
  4. Varmekart for korrelasjonsmatriser
← Tilbake til Pandas & NumPy Academy