Python Seaborn wizualizacja danych na sterydach

W świecie pythona standardem w wizualizacji danych jest biblioteka matplotlib. Ma ona naprawdę ogromne możliwości, jednak  stworzenie niestandardowych wykresów wymaga umiejęteności co najmniej na poziomie ninja. Z odsieczą przychodzi nam seaborn – statistical data visualization library.

Biblioteka seaborn swojego czasu była moim odkryciem na miarę bursztynowej komnaty lub „złotego pociągu” z pod Wałbrzycha.  Tęsknota za lśniącymi wykresami była w moim sercu od dawana, to ona kazała mi przekopywać  Stack Overflow oraz dokumentację od matplotlib w poszukiwaniu tych kilku komend, które uczynią wykresy piękniejszymi. Pozwolą w nowy interesujący i przemawiający do wyobraźni sposób zwizualizować dane. Już nie pamiętam, ile to hacków stosowałem, aby uzyskać ciekawy efekt.

Aż tu nagle w zaułkach internetów przyczaiła się biblioteka seaborn. Gdy wszedłem na zakładkę z galerią, blask który bił z przykładów raził mnie w oczy, serce zaczęło mocniej bić, ręce zaczęły się pocić i ta jedna myśl świdrowała mi w głowie: „od teraz wszystko się zmieni”. Nie mogłem uwierzyć, w końcu to znalazłem, prostą i piękną bibliotekę do wizualizacji. Już widziałem oczami wyobraźni, zazdrosne spojrzenia kolegów i zalotne uśmiechy koleżanek, na widok pięknie wypolerowanych wykresów z przyciemnianymi szybami i reflektorami ksenonowymi.

Po kilku chwilach testowania dostępnych przykładów, kolejne pozytywne zaskoczenie – współpracuje z Pandas dataframe. Koniec męczarni, nie trzeba będzie już wyciągać serii danych z dataframe’a, by tylko przekształcać je do tablicy, aby następnie zrobić wykres w matplotlib.

Czy rzeczywiście jest tak pięknie jak na początku myślałem?

Pierwsze spojrzenie młodego adepta Data Science na galerię może zauroczyć. Od razu prężą się i lśnią kolorowe krzywe w przyjaznych dla oka kolorach, i to nie są jakieś normalne krzywe, ma się wrażenie jakby było się w ZOO dziwolągów, których matplotlib nigdy nie będzie w stanie stworzyć. To czym zachwyca seaborn to przedewszystkim świetnie dobrana paleta kolorów, tworzenie powiązanych wykresów oraza możliwość generowania ich na podstawie dataframe’a z biblioteki Pandas.

python seaborn gallery

Seaborn example diagrams in gallery

W galerii mamy liczne przykłady diagramów i wykresów wraz z kodami źródłowymi, w których w kilku liniach możemy stworzyć wykres, który w matplotlib byłby niemożliwy lub ilość kodu do napisania zniechęciła by nawet samego Linusa Torvaldsa.

Ale w tym wszystkim jest pewien haczyk. Biblioteka ta wymaga od nas … myślenia. Wybranie odpowiednigo typu wykresu nie jest prostą sprawą, wymaga doświadczenia i często znajomości szczegółów implementacyjnych poszczególnych wykresów. Wielokrotnie gdy na pierwszy rzut oka sądziełem, że dany diagram będzie idealny to po wczytaniu się w dokumentację i próbach jego stworzenia okazywało się że źle wybrałem.
Poniżej przedstawiam, kilka swoich typów, które stosuję najczęściej:

lmplot – scatter plot wraz z prostą regresji

Ten typ wykresu jest dla mnie zbawieniem, w praktycznie jednej lini kodu jesteśmy w stanie narysować chmurę punktów wraz z wyznaczoną dla nich prostą regresji. Dodatkowo gdy dane zasilane są z dataframe’a to możemy wskazać, która kolumna odpowiada za serię(odcień?) danych (argument hue), a która za kolejny wykres (argument col).  Zoabaczcie w jaki prosty sposób można stworzyć serię wykresów przedstawiających informację o napiwkach, kto i kiedy daje najwięcej, jest to nieco zmodyfikowany przykład z dokumentacji:

Tabela z danymi wygląda następująco:

total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4

Wykresy pozwalają na przedstawienie zależności wielkości napiwku (tip) od wielkości całego rachunku (total_bill) dla poszczególnych dni tygodnia (day), każdy wykres stworzony oddzielnie dla mężczyzn i kobiet (sex). W matplotlib trzeba by było zdecydowanie więcej kodu aby osiągnąć podobny efekt.

seaborn lmplot tips regression

Pairplot – macierz wykresów dla wielu kombinacji zmiennych

Funkcja pairplot pozwala wygenerować macierz wykresów, z których każdy przedstawia zależność pomiędzy zmiennymi przypisanymi do wiersza i kolumny. Używając jej warto zwrócić uwagę na argumenty:

  • vars, {x,y}_vars pozwalają one określić podzbiór zmiennych (kolumn z dataframe’a) które zostaną wzięte do zestawienia, gdyż rzadko będziemy chcieli wyznaczyć zależności pomiędzy wszystkimi zmiennymi.
  • diag_kind, kind  określają jaki typ wykresu będzie na głównej przekątnej oraz poza nią

Poniższy kawałek kodu pokazuje jak prosto możemy wygenerować zestaw wykresów, lecz jak w każdej sytuacji diabeł tkwi w szczegółach, należy  mieć już przygotowane dane w odpowiedniej postaci.

Mając dane w pandas dataframe w postaci:

sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
145 6.7 3.0 5.2 2.3 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica

 

Zostanie wygenerowany wykres:

seaborn pairplot iris

Zwróćcie uwagę na zmienne, które zostały wzięte pod uwagę. Powtórzę się ale wcześniej stworzenie tego typu wykresu zajmowało dużo czasu bo trzeba było oprogramować subplot’ing samemu. Tutaj dostajemy to już na tacy.

Axis grids – wykresy w formie grida

Z racji długosci posta nie będę przytaczał kolejnych przykładów, mam nadzieję że powyższe dały wam przedsmak tego co potrafi Seaborn. Na koniec chciabłby skierować waszą uwagę na to co mnie najbardziej ujeło w tej bibliotece, czyli wykesy typu axis grid: FacetGrid, JointGrid, PairGrid (przytoczony powyżej). Pozwalają na szybkie wygenerowanie zestawów wykresów, zainteresowanych odsyłam do dokumentacji.

Podsumowanie

Na początku chcę zaznaczyć, że seaborn nie ma na celu zastąpić matplotlib. Bibliteka ta dodaje kilka typów wykresów, które ciężko jest przygotować z matplotlib. Seaborn szczególnie przydaje się do tworzenia bardziej zaawansowanych wizualizacji, uwzględniających wiele zależnych od siebie danych i typów wykresów (pairplot, kdeplot, joinplot itp). Czasami może to prowadzić do frustracji, gdy prosty wykres chcemy zrobić w seaborn. Ja sam złapałem się na tym, że na siłę chciałem wykorzystać tą bibliotekę, gdzie matplotlib z powodzeniem by sobie poradziła. Moim delikatnym rozczarowaniem jest współpraca z pandas, w szczególności brak wsparcia dla bardziej złożonych struktur. Biblioteka zazwyczaj wymaga płaskiej struktury dataframe’a.
Na wielki plus z mojej strony zasługują domyślne zestawy kolorów, teł i wyglądu lini, dzięki temu nawet nie musiałem się zastanawiać czy coś ulepszyć bo nie było takiej potrzeby, w matplotlib zawsze sporo czasu spędzałem aby zrobić ‚face lifting’ wykresów.

Materiały dostępne w sieci:

1 Comment Python Seaborn wizualizacja danych na sterydach

  1. Pingback: Python pandas i wizualizacja danych PKB z Wordbank - About Data

Dodaj komentarz

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