
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:
- Tworzę wykres w Pandas (bo jest szybciej).
- 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
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








