Site icon Mirosław Mamczur

#007 Histogram (histogram)

Histogram (ang. histogram :)) jest jednym z najbardziej popularnych i znanych wykresów statystycznych. Histogram jest wizualizacją rozkładu danych liczbowych w zadanych podziałach badanej zmiennej. Każdy słupek histogramu przedstawia częstotliwość w danych danego przedziału, czyli ile razy wystąpiły. Poniżej prosty przykład przedstawiający długość życia dla krajów na świecie. Wziąłem wszystkie lata, by było więcej obserwacji do prezentacji histogramu.

Możecie zauważyć, że histogram złożony jest z prostokątnych słupków, które przedstawiają liczebność obserwacji (pionowa oś Y) w danym przedziale (pozioma oś X).

Histogramy pomagają w wizualny sposób:

Są również przydatne do przybliżenia rozkładu prawdopodobieństwa. Dzięki temu od razu możesz wykryć błędy w danych.

Kształt histogramu może być bardzo różny w zależności od liczby przedziałów. Natomiast pamiętajcie, by wypróbować różne warianty przed wyciągnięciem jakichkolwiek wniosków. Dla przykładu tutaj są te same dane co wyżej, ale dla różnej liczby przedziałów (bins):

fig, axs = plt.subplots(ncols=3, nrows=3, figsize=(12, 8))
index = 0
axs = axs.flatten()
for i in [5,10,20,30,40,50,60,80,100]:
    axs[index].hist(x="lifeExp", data=df, bins=i)
    axs[index].set_title(f'bins={i}')
    index = index + 1
plt.tight_layout()

Jestem pewien, że widzicie, że wykres dla większej liczby przedziałów jest bardzo podobny do wykresu gęstości. W przypadku porównania kilku rozkładów można dodać je na tej samej osi i używając przezroczystości.

Częstą odmianą histogramu jest też histogram lustrzany: umieszcza on dwa histogramy twarzą w twarz w celu porównania ich rozkładu. Albo możesz wykorzysta do tego wykres skrzypcowy.

Najczęstsze błędy:

Histogram w Python

Użyjmy danych z średnim wiekiem życia w krajach. W powyższym artykule przygotowałem proste wykresy w bibliotece matplotlib a teraz wykorzystamy dla odmiany seaborn.

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

url = 'https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv'
df = pd.read_csv(url)

plt.figure(figsize=(10,5))
fig = sns.distplot(a=df["lifeExp"], hist=True, bins=25, kde=False)
fig.set(title='Histogram - life expectancy in countries');

Bardzo prosto na podstawie jednego parametru kde można dodać linię z gęstością:

plt.figure(figsize=(10,5))
fig = sns.distplot(a=df["lifeExp"], hist=True, bins=25, kde=True)
fig.set(title='Histogram - life expectancy in countries');

Poniżej jeszcze przykład nałożenia dwóch histogramów na jeden wykres:

plt.figure(figsize=(10,5))
fig = sns.distplot(a=df[df['continent']=='Europe']["lifeExp"], 
                   hist=True, bins=25, kde=True, color="red", 
                   label='Europe')
fig = sns.distplot(a=df[df['continent']=='Africa']["lifeExp"], 
                   hist=True, bins=25, kde=True, color="green", 
                   label='Africa')
fig.legend()
fig.set(title='Histogram - life expectancy in countries');

Życzę Wam udanego rysowania histogramów 🙂

Pozdrawiam serdecznie,

Exit mobile version