Jak tworzyć skuteczne wykresy w Pythonie: Matplotlib, Pandas i GroupBy w praktyce

kajodata.com 3 tygodni temu

Praca z danymi to nie tylko ich obróbka i agregacja, ale również umiejętność pokazania ich w sposób zrozumiały. Bardzo często to właśnie wizualizacja jest momentem, w którym analiza „zaskakuje”, a wnioski stają się oczywiste. W tej lekcji, którą teraz przerabiasz w formie artykułu, wchodzę głębiej w temat wykresów tworzonych w Pythonie, korzystając przede wszystkim z Pandas i Matplotlib.

To jest przykład tego, jak może wyglądać realna praca analityka danych: mamy dataframe, robimy grupowania, wyciągamy agregacje i na koniec budujemy wykres, który pozwala dostrzec trendy i outliery. Pokażę Ci krok po kroku, jak robić to mądrze, czytelnie i z zachowaniem dobrych praktyk.

Dlaczego w ogóle warto robić wykresy?

Jest taki moment w analizie danych, w którym masz już tabele, agregacje i zestawienia… ale wciąż nie czujesz, iż widzisz pełny obraz. Liczby potrafią być zdradliwe – szczególnie gdy pracujesz np. na danych sprzedażowych, które mogą mieć różną dynamikę, skrajne wartości albo sezonowość.

I tutaj właśnie wchodzą wykresy. One pozwalają zobaczyć dynamikę, porównać kategorie, zaobserwować trendy. W Pythonie masz do dyspozycji dwa dominujące narzędzia:

  • Pandas – bardzo szybkie tworzenie wykresów bez zbędnych parametrów.
  • Matplotlib – pełna kontrola nad każdym elementem wykresu.

I w praktyce te dwa światy się ze sobą łączą — Pandas korzysta pod spodem z Matplotlib, dlatego możesz np. stworzyć wykres jedną linijką, a potem dopieścić go komendami z Matplotlib.

Przygotowanie danych do wizualizacji

Zacznijmy od tego, iż mamy pewien przykładowy zestaw danych: daty, kategorię produktu, sprzedaż i ilość. Typowy dataset e-commerce. Zanim przejdziemy do samego rysowania, trzeba zadbać o format:

df['date'] = pd.to_datetime(df['date'])

Tutaj akurat format był prosty, więc nie musiałem podawać dodatkowych parametrów. Najważniejsze jest to, żeby data w dataframe była typu datetime — inaczej Pandas i Matplotlib potraktują ją jak zwykły tekst.

Opanuj analizę danych w Pythonie z moim kursem!

Opanujesz podstawy programowania w Pythonie, w tym typy danych, zmienne, listy, słowniki, funkcje oraz obsługę błędów. Nauczysz się korzystać z biblioteki pandas do zaawansowanej analizy danych i pracy z różnymi rodzajami danych. Zrozumiesz proces analizy, eksploracji (EDA) i wizualizacji. Tworzenie własnych funkcji przygotuje Cię do rozmów kwalifikacyjnych i rozwiązywania rzeczywistych problemów biznesowych.

Pierwszy przykład: suma sprzedaży po kategoriach (wykres słupkowy)

Zacznę od czegoś prostego. Chcę zobaczyć sumę sprzedaży w podziale na kategorię.

Krok 1: GroupBy

gr = df.groupby('category')['sales'].sum()

To jest absolutna podstawa analizy danych: wybierasz kolumnę, agregujesz ją i otrzymujesz prostą tabelkę.

Krok 2: Wykres w Pandas

Zamiast manualnie tworzyć wykres w Matplotlib, mogę skorzystać z metody .plot() dostępnej bezpośrednio na obiekcie Series:

gr.plot(kind='bar', color='teal') plt.title('Suma sprzedaży po kategoriach') plt.xlabel('Kategoria') plt.ylabel('Sprzedaż') plt.show()

Efekt? Prosty i czytelny wykres, który załatwia 90% codziennych potrzeb analityka.

Plus — mogę wyświetlić zarówno liczby, jak i wykres:

print(gr)

Drugi przykład: analiza średniej sprzedaży w czasie (wykres liniowy)

Tutaj robi się ciekawiej. Mamy dane dzienne i chcemy zobaczyć średnią sprzedaż z każdego dnia. Jedną z najfajniejszych rzeczy w Pandas jest możliwość robienia całej transformacji w jednej linijce.

GroupBy + agregacja + wykres w jednym

df.groupby('date')['sales'].mean().plot( kind='line', marker='o', color='green' ) plt.title('Średnia sprzedaż dzienna') plt.xlabel('Data') plt.ylabel('Średnia sprzedaż') plt.grid(True) plt.show()

Kilka rzeczy wartych podkreślenia:

  • marker='o' pomaga lepiej zobaczyć każdy punkt.
  • W danych czasowych wykres liniowy to naturalny wybór.
  • Grid („siatka”) poprawia czytelność.

To jest przykład wykresu, który pojawia się praktycznie w każdym realnym projekcie: analizujesz trend, wychwytujesz anomalie, sprawdzasz sezonowość.

Trzeci przykład: tabela przestawna (pivot) i wykres kilku kategorii na raz

To jest już bardziej zaawansowany przykład. Chcę zobaczyć maksymalną sprzedaż dla każdej kategorii w każdym dniu.

GroupBy po dwóch kolumnach

gr = df.groupby(['order_date', 'category'])['sales'].max()

Taki GroupBy tworzy MultiIndex — czyli indeks wielopoziomowy.

Żeby wykres był czytelny, używam unstack():

pivot = gr.unstack()

Dlaczego?

Bo wtedy:

  • daty są w wierszach,
  • kategorie są kolumnami,
  • każdy wiersz to jeden dzień,
  • każda kolumna to kategoria.

I dopiero teraz tworzę wykres:

pivot.plot(kind='bar') plt.title('Maksymalna sprzedaż według kategorii i daty') plt.xlabel('Data') plt.ylabel('Maksymalna sprzedaż') plt.grid(True) plt.show()

Pandas automatycznie dodaje legendę i kolory. To jest super wygodne, bo można w dwie-trzy linijki zbudować wykres, który w Excelu wymaga kilkunastu kliknięć.

Problem z datami: dlaczego Pandas zmienił date na timestamp?

Czasami Pandas i Matplotlib potrafią zinterpretować datę w sposób, który… nie wygląda dobrze. W moim przypadku format daty po stworzeniu pivotu zmienił się na timestamp — czyli format numeryczny.

A iż indeks po unstackowaniu jest właśnie datą, robię konwersję:

pivot.index = pivot.index.strftime('%Y-%m-%d')

To jest rozwiązanie, które warto zapamiętać, bo wiele wykresów z datami wygląda nieczytelnie właśnie dlatego, iż Matplotlib przekształca je na liczby.

Można oczywiście użyć innego formatu, np.:

'%d.%m.%Y'

albo:

'%Y'

jeżeli chcesz mieć rok jako 4 cyfry.

Dodanie siatki: drobiazg, ale robi ogromną różnicę

Nie bez powodu stosuję plt.grid(). W wizualizacji danych siatka często sprawia, iż wykres staje się o wiele łatwiejszy do oceny — szczególnie gdy masz wiele kategorii i każdy słupek reprezentuje inną wartość.

plt.grid(True)

Niby szczegół, ale w praktyce znacząco poprawia percepcję danych.

Czy lepiej używać Pandas czy Matplotlib?

To pytanie, które wraca zawsze.

I odpowiedź brzmi: to zależy.

Pandas – kiedy chcesz szybko

Pandas:

  • robi wykres jedną linijką,
  • automatycznie obsługuje legendę,
  • pod spodem używa Matplotlib,
  • świetny w prototypowaniu i analizach ad-hoc.

Przykład:

df['sales'].plot(kind='hist')

Matplotlib – kiedy chcesz kontrolę

Matplotlib daje:

  • szczegółowe sterowanie każdym elementem wykresu,
  • możliwość tworzenia skomplikowanych layoutów,
  • wpływ na style, linie, tła, podziały osi, adnotacje.

Na przykład:

plt.plot(df['date'], df['sales']) plt.xticks(rotation=45) plt.tight_layout()

Jak to działa razem?

Bardzo często robię tak:

  1. Tworzę wykres w Pandas (bo jest szybciej).
  2. Dodaję detale z Matplotlib (bo mam większą kontrolę).

To połączenie jest jednym z powodów, dla którego Python tak dobrze sprawdza się w analizie danych.

Kiedy warto użyć unstack()?

unstack() to najważniejszy element, gdy pracujesz z MultiIndex.

Jest absolutnie niezbędne, jeśli:

  • chcesz mieć w wierszach jedną zmienną (np. datę),
  • w kolumnach inną (np. kategorię),
  • pracujesz na danych zagregowanych po dwóch kolumnach.

Dzięki niemu dane zamieniają się w klasyczną tabelę przestawną (pivot), którą łatwo potem zwizualizować.

To jest jeden z tych kroków, który często sprawia trudność osobom uczącym się Pythona, bo MultiIndex potrafi wyglądać abstrakcyjnie. Ale kiedy zobaczysz wykres po unstack() — wszystko staje się jasne.

Czy trzeba robić wszystko w jednej linijce?

Nie. I bardzo mocno to podkreślam w kursie.

Możesz stworzyć agregację w jednej linijce — i czasem ma to sens. Ale czasem lepiej jest rozbić to na dwie-trzy linijki, żeby:

  • kod był czytelniejszy,
  • łatwiej było coś poprawić,
  • łatwiej go było komuś wytłumaczyć.

Pisanie kodu to nie wyścig na minimalną liczbę znaków.

Czytelność jest ważniejsza niż „popisywanie się jedną linijką”.

Zapisz się do
newslettera

🎁 i zgarnij darmowe bonusy:

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu

Zgadzam się na przetwarzanie moich danych osobowych przez KajoData Kajo Rudziński w celu realizacji usługi newsletter, a tym samym wysyłania mi informacji o produktach blogowych, usługach, lub nowościach, zgodnie z polityką prywatności. Wiem, iż zgodę tę mogę w każdej chwili cofnąć.
Zapisuję się Loading...

Dzięki! To nie koniec...

...pamiętaj, by teraz wejść na maila i potwierdzić subskrybcję 🙂 Jeżeli nic nie doszło, to sprawdź skrzynkę ze spamem.
* * * Gdy potwierdzisz newsletter, dostaniesz ostateczne potwierdzenie i obiecane prezenty w kolejnym mailu 🙂

Podsumowanie: czego uczy ta lekcja?

Ta część kursu pokazuje, jak efektywnie pracować z wizualizacjami w Pythonie:

  • jak robić agregacje GroupBy,
  • jak tworzyć szybkie wykresy w Pandas,
  • kiedy sięgnąć po Matplotlib,
  • jak działa unstack() w MultiIndex,
  • jak radzić sobie z datami,
  • jak poprawiać czytelność wykresów (siatka, marker, kolory, formatowanie),
  • jak łączyć kod Pandas i Matplotlib.

Ten materiał jest absolutną podstawą pracy analitycznej. W prawdziwych projektach wykresy są nie tylko „ładnym dodatkiem”, ale realnym narzędziem do komunikacji wyników — z menedżerem, z innymi analitykami, z biznesem.

Mam nadzieję, iż ten artykuł pomógł Ci zrozumieć, jak w praktyce wygląda wizualizacja danych w Pythonie i kiedy sięgać po konkretne narzędzia. jeżeli chcesz, podziel się proszę tym tekstem w swoich mediach społecznościowych — może pomoże komuś innemu wejść w świat analizy danych.

Inne interesujące artykuły:

  • Własne funkcje w Pythonie – jak budować realne rozwiązania krok po kroku
  • Jak działa CTE (WITH) w SQL? Najbardziej niedoceniana funkcja, która zmienia sposób pisania zapytań
  • Jak sprawdzam poprawność danych w Excelu: praktyczna lekcja z ISNUMBER i AND
  • Jak działa FULL JOIN i SELF JOIN w SQL? Pełne wyjaśnienie na przykładach z życia analityka
  • KajoDataSpace: najlepsze miejsce, żeby naprawdę wejść w świat analizy danych

Autorem artykułu jest Kajo Rudziński – analytical data architect, uznany ekspert w analizie danych, twórca KajoData oraz społeczności dla analityków KajoDataSpace.

To tyle w tym temacie. Analizujcie w pokoju!

Podobał Ci się ten artykuł 🙂?
Podziel się nim w Social Mediach 📱
>>> udostępnij go na LinkedIn i pokaż, iż codziennie uczysz się czegoś nowego
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości

Wolisz oglądać 📺 niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube

Idź do oryginalnego materiału