#007 Histogram (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.

histogram

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:

  • przedstawić, gdzie koncentrują się wartości,
  • pokazać jakie są skrajności,
  • pokazać czy występują jakieś luki.

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

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:

  • Bardzo często histogram jest mylony z wykresem kolumnowym, który podaje wartość dla każdej grupy. Tutaj mamy tylko zmienną numeryczną i rysujemy jej rozkład.
  • Jeśli nie spróbujesz przetestować różnej liczby przedziałów (ang. bins) możesz pominąć w niektórych przypadkach istotne informacje
  • Nigdy nie próbuj dawać różnych rozmiarów przedziałów – nie chcemy manipulować danymi 🙂
  • Staraj się nie porównywać więcej niż 3 grup na histogramie by nie zaciemniać obrazu

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

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

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

Życzę Wam udanego rysowania histogramów 🙂

Pozdrawiam serdecznie,

podpis Mirek
.

One Comment on “#007 Histogram (histogram)”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *