Dane, które otrzymujemy często mogą pojawiać się w różnych formatach oraz ułożeniach. Często będziemy potrzebować innego punktu widzenia, z pomocą przychodzi nam funkcja pivot_table. Pozwala nam ona w prosty sposób pokazywać dane w wygodnej dla nas formie.

W tym artykule skupimy się na trzech podstawowych przykładach wykorzystania funkcji pivot_table z biblioteki pandas, która mogliście poznać w tym artykule:

http://analityk.edu.pl/python-pandas/

Możemy w wygodny sposób podsumowywać i konwertować nasze tabele, aby były bardziej dla nas czytelne.

Załadujmy przykładowy zbiór danych:

import pandas as pd
data_url = 'http://bit.ly/2cLzoxH'
dane = pd.read_csv(data_url)
print(dane.head())

skupmy się na dwóch kolumnach:

df = dane[['continent','lifeExp']]

Podstawową funkcją jest proste przestawienie kolumn z wierszami, który w modelu podstawowym pokazuje średnią wartości

pd.pivot_table(df, values='lifeExp',
              columns='continent')

Zmieńmy kolumny i wybierzmy kraj

df_country = dane[['country', 'lifeExp']]
pd.pivot_table(df_country, values='lifeExp',
              columns='country')

Zobaczyliśmy podstawowe działanie pivot_table, które pozwala na wybranie kolumn oraz przedstawienie średniej wartości dla każdego z elementów. Pytanie co możemy dalej, kiedy chcemy zobaczyć kilka podziałów korzystając z informacji z kilku kolumn. Nic prostszego jak dodanie kolejnego wymiaru. Weźmy sobie dodatkowo lata i zobaczmy jak zmieniała się średnia wieku w latach.

df_3dimension = dane[['continent', 'year', 'lifeExp']]
pd.pivot_table(df_3dimension, values='lifeExp',
              index=['year'],
              columns='continent')

Świetnie, udało nam się już wyświetlić tabele przestawne dla kraju, dla kontynentu. Udało nam się połączyć widok, aby zobaczyć zmiany dla każdego z kontynentów w skali roku. Natomiast cały czas oglądamy tylko średnią. Co zrobić jeśli chcemy zobaczyć sumę, wartość minimalną bądź wartość maksymalną ? Korzystamy wtedy z atrybutu aggfunc.

pd.pivot_table(df_3dimension, values='lifeExp',
              index=['year'],
              columns='continent',
              aggfunc='sum')

Dodajmy kolejny poziom i spróbujmy wyświetlić wartość minimalną oraz maksymalną dla każdego z kontynentów na jednej tabeli. Skorzystamy znowu z podejścia pozwalającego na wyświetlenie wartości per kraj ale zmienimy atrybut aggfunc:

pd.pivot_table(df_3dimension, values='lifeExp',
              index=['year'],
              columns='continent',
              aggfunc=[min,max])

Podsumowanie

Tabele przestawne są bardzo przydatnym narzędziem przy czytaniu danych. Pandas pozwala w bardzo przyjazny sposób tworzyć interesujące widoki, z których następnie możemy zacząć tworzyć wykresy z wykorzystaniem biblioteki Seaborn:

http://analityk.edu.pl/seaborn-eleganckie-wykresy-w-python/