[PROJEKT] Analiza danych sklepu internetowego — kompleksowy projekt z analityki danych
28.11.2025
Zrób z nami projekt z analityki e-commerce.
Jeśli interesujesz się pracą z danymi i myślisz o tym, by związać swoją drogę zawodową z analityką, to z pewnością zainteresuje Cię ten artykuł. W tekście pokażemy Ci, jak krok po kroku możesz przeprowadzić analizę danych ze sklepu internetowego. Analityka i Big Data to dziś jedne z najważniejszych obszarów kształtujących strategie w branży e-commerce. Dzięki danym firmy mogą lepiej zrozumieć, kim są ich klienci, co kupują, jak często wracają i jakie czynniki wpływają na ich decyzje zakupowe.
Cel projektu
Jeśli myślisz o pracy w obszarze Data Science lub po prostu interesujesz się analityką i wyciąganiem wniosków, to dzisiaj mamy dla Ciebie nie lada gratkę. Razem z nami zrealizujesz swój pierwszy projekt. Aby to zrobić, musisz znać przynajmniej minimalne podstawy Pythona i potrafić pracować ze środowiskiem programistycznym.
Przeanalizujemy dane zakupowe ze sklepu internetowego. Dane pochodzą z publicznego zbioru na platformie Kaggle (E-commerce Customer for Behavior Analysis). Symuluje on kompleksowe środowisko e-commerce, rejestrując różne aspekty zachowań klientów i historię zakupów usług cyfrowych. Ten zbiór danych został zaprojektowany do analizy i modelowania predykcyjnego w dziedzinie e-commerce. Dane te pozwalają odpowiedzieć na wiele pytań biznesowych, takich jak:
- Jak wygląda struktura klientów — wiek, płeć?
- Kiedy sprzedaż rośnie, a kiedy spada?
- Które produkty i kategorie przynoszą najwięcej przychodu?
- Ilu klientów wraca, a ilu odchodzi (tzw. churn)?
- Kto należy do grona naszych najcenniejszych klientów (analiza RFM)?
Co będziemy robić krok po kroku 1. Przygotowanie środowiska
W naszym projekcie będziemy bazować na Pythonie oraz jego bibliotekach powszechnie wykorzystywanych w analizie danych:
- Pandas — do pracy z danymi w formie tabel (czyli DataFrame’ów). Umożliwia filtrowanie, grupowanie, tworzenie statystyk i przetwarzanie danych podobnie jak w Excelu, tylko szybciej i w sposób programowalny.
- Matplotlib — do wizualizacji danych, czyli rysowania wykresów i diagramów, które pomogą nam lepiej zrozumieć dane (tę bibliotekę wykorzystamy w kolejnej części projektu)
Możesz pracować w Jupyter Notebook, VS Code lub dowolnym środowisku obsługującym Pythona. Warto utworzyć sobie nowy folder projektu, np. ecommerce-project/, a dane wrzucić do podfolderu data/.
Na tym etapie w terminalu wpisz:
pip install pandas matplotlib numpy
Następnie utwórz folder o następującej strukturze:
ecommerce-project/
data/
notebooks/
2. Wczytanie danych
W tym projekcie będziemy bazować na gotowym zbiorze danych, który pobierzemy z portalu Kaggle w formacie CSV.
Pobierz zestaw danych z Kaggle, umieść go w folderze data/, a następnie wczytaj do projektu.
Przykładowy kod:
import pandas as pd
df = pd.read_csv("data/ecommerce_customer_data_custom_ratios.csv")
df.head()
Po rozpakowaniu pliku ecommerce_customer_data_custom_ratios.csv.zip mamy do dyspozycji zestaw następujących danych o transakcjach:
- Customer ID – unikalny identyfikator każdego klienta,
- Customer Name – nazwa klienta,
- Customer Age – wiek klienta,
- Gender – płeć klienta,
- Purchase Date – data każdego zakupu dokonanego przez klienta,
- Product Category – kategoria lub typ zakupionego produktu,
- Product Price – cena zakupionego produktu,
- Quantity – liczba sztuk zakupionego produktu,
- Total Purchase Amount – całkowita kwota wydana przez klienta w każdej transakcji,
- Payment Metod – metoda płatności użyta przez klienta (np. karta kredytowa, PayPal),
- Returns – informacja, czy klient zwrócił jakiekolwiek produkty z zamówienia (0 – brak zwrotu, 1 – zwrot),
- Churn – kolumna binarna wskazująca, czy klient zrezygnował (0 dla zatrzymanych, 1 dla odchodzących).
Dane wczytamy przy pomocy Pandas, który potrafi czytać pliki CSV wprost z archiwum ZIP. W efekcie otrzymamy tabelę danych, w której każdy wiersz odpowiada pojedynczej transakcji. Fragment widoku danych:

3. Pierwsze spojrzenie na dane
Już na tym etapie warto sprawdzić, czy pobrany przez nas zbiór danych nie zawiera błędów – to tzw. sanity check. Sprawdzamy podstawowe rzeczy:
- czy kolumny mają poprawne nazwy i typy (np. daty to faktycznie daty)?
- czy nie ma duplikatów wierszy lub brakujących wartości?
- czy liczba produktów i kwoty zakupów mają sens?
To bardzo ważne — w prawdziwym świecie dane nigdy nie są idealne. Warto zrozumieć ich strukturę, zanim zaczniemy właściwą analizę, żeby nie wyciągać błędnych wniosków. Oczywiście mamy tutaj do czynienia z gotowym zbiorem danych, jednak warto od samego początku wyrabiać sobie nawyk pilnowania porządku.
4. Przygotowanie kolumn i metryk
Gdy dane są już czyste, dodajemy kilka pomocniczych kolumn — na przykład datę transakcji w formacie dziennym i miesięcznym.
Dodajemy pomocnicze kolumny:
df["Purchase Month"] = df["Purchase Date"].dt.to_period("M")
df["Purchase Day"] = df["Purchase Date"].dt.date
Dzięki temu łatwo policzymy sumy sprzedaży, średnie wartości koszyków i inne kluczowe
wskaźniki. W tym kroku policzymy podstawowe wartości, które dadzą nam pierwsze informacje o kondycji wirtualnego sklepu.
Przykładowe metryki, które możemy przygotować:
- Liczba zamówień dziennie i miesięcznie
orders_per_month = df.groupby("Purchase Month")["Total Purchase Amount"].count()
- Przychód (revenue) — suma wszystkich zakupów
revenue_per_month = df.groupby("Purchase Month")["Total Purchase Amount"].sum()
- AOV (Average Order Value) — to nic innego jak średnia wartość zamówienia
aov = df["Total Purchase Amount"].mean()
Możesz zapytać: Ale co to za analiza? Przecież to podstawowe wartości, które na pewno mierzy każdy sklep internetowy… No właśnie, to dlatego warto wiedzieć, w jaki sposób zaimplementować je w bazowej analizie danych.
5. Kim są nasi klienci?
Właściciele sklepów internetowych stale szukają informacji na temat swoich klientów i ich zachowań zakupowych. Jest to oczywiste z perspektywy biznesu – im więcej wiemy o kliencie, jego cechach, motywacjach i wyborach – tym lepiej możemy dostosowywać swoją ofertę do potencjalnych oczekiwań. Wiedza o klientach jest też podstawą do tworzenia skutecznych strategii marketingowych i promocyjnych.
Z naszego zbioru danych możemy wydobyć informacje o wieku, płci i liczbie klientów w poszczególnych grupach. Dzięki temu odpowiadamy na pytania:
- Czy sklep jest popularniejszy wśród kobiet, czy mężczyzn?
- Jakie grupy wiekowe generują największy przychód?
- Czy starsi klienci kupują rzadziej, ale droższe produkty?
To moment, w którym dane zaczynają żyć — przestają być suchymi liczbami, a zaczynają opowiadać historię.
Rozkład płci możemy policzyć, korzystając z funkcji:
df["Gender"].value_counts()
Aby dowiedzieć się więcej o wieku naszych klientów, liczymy:
- średni wiek klienta
df["Customer Age"].mean()
- przychód według grup wiekowych:
W tym celu dodajemy grupy wiekowe
df["Age Group"] = pd.cut(df["Customer Age"], bins=[0, 20, 30, 40, 50, 60, 100],
labels=["<20", "20–29", "30–39", "40–49", "50–59", "60+"])
i analizujemy przychód dla każdej z nich:
df.groupby("Age Group")["Total Purchase Amount"].sum()
Otrzymujemy ciekawe dane, które mogą być przesłanką do wyciągnięcia wniosków przydatnych w targetowaniu kampanii promocyjnych do różnych grup wiekowych.
6. Co i kiedy się sprzedaje?
Zobaczmy, które kategorie produktów są najpopularniejsze i jak zmienia się sprzedaż w czasie.
df["Product Category"].value_counts()
Dzięki grupowaniu po kolumnach „Product Category” i „month” możemy zbudować prostą analizę sezonowości.
df.groupby(["Purchase Month", "Product Category"])["Total Purchase Amount"].sum()
Może się okazać, że elektronika sprzedaje się głównie w grudniu (okres prezentów), a artykuły biurowe — po wakacjach, gdy ludzie wracają do pracy.
Warto też sprawdzić metody płatności: np. czy klienci korzystający z PayPala kupują częściej, a może ci, którzy płacą kartą, dokonują większych zakupów jednorazowo?
df.groupby("Payment Method")["Total Purchase Amount"].mean()
7. Zwroty i ich wpływ na biznes
Kolejnym etapem jest analiza zwrotów. Zwroty mogą być naturalne w niektórych branżach (np. odzież), ale ich zbyt duża liczba to sygnał ostrzegawczy, że coś jest nie tak.
Na początek sprawdźmy udział zwrotów w we wszystkich zamówieniach:
df["Returns"].value_counts(normalize=True)
Analizując kolumnę Returns, policzymy udział zwrotów w poszczególnych kategoriach i zidentyfikujemy te, które generują najwięcej kosztów. Taka wiedza może pomóc firmie w poprawie jakości produktów lub opisów na stronie.
Zwroty według kategorii:
df.groupby("Product Category")["Returns"].mean()
Przyczyny dużej liczby zwrotów mogą być różne – od produktów niskiej jakości, przez niejasne lub błędne opisy, aż po problemy na etapie dostawy.
8. RFM – znajdź swoich najlepszych klientów
Analiza RFM to jedna z najprostszych i jednocześnie najskuteczniejszych metod segmentacji klientów w e-commerce i marketingu. Pozwala odpowiedzieć na pytanie: którzy klienci są najbardziej wartościowi, a którzy są blisko odejścia.
Analiza RFM opiera się na trzech wskaźnikach:
R — Recency (nowość zakupu)
Jak dawno klient dokonał ostatniego zakupu?
- im mniejsza wartość, tym lepiej,
- klient, który kupił 2 dni temu, jest bardziej „aktywny” niż ten, który kupił rok temu.
Przykład:
- Klient A: ostatni zakup 5 dni temu → R = niska liczba → bardzo aktywny
- Klient B: ostatni zakup 240 dni temu → R = wysoka liczba → ryzyko odejścia
2. F — Frequency (częstotliwość zakupów)
Jak często klient kupuje?
- klienci częściej wracający są bardziej lojalni,
- jednorazowi kupujący są znacznie mniej przewidywalni.
Przykład:
- Klient A: 12 zakupów
- Klient B: 2 zakupy
3. M — Monetary (wartość pieniężna)
Jak dużo pieniędzy klient wydał łącznie?
- klienci wydający więcej mają większą wartość dla firmy,
- można ich nagradzać programami lojalnościowymi.
Przykład:
- Klient A: wydał 3 200 zł
- Klient B: wydał 120 zł
Dzięki temu możemy podzielić klientów sklepu na kilka segmentów, np.:
- Champions – nasi najlepsi klienci, często kupujący i niedawno aktywni
- Loyal – regularni klienci, którzy kupują stabilnie
- At Risk – klienci, którzy dawno nic nie kupili i mogą “odpłynąć”.
Taka analiza pozwala prowadzić bardziej precyzyjne działania marketingowe — np. wysyłać kupony lojalnościowe lub przypomnienia. Jak to jednak ugryźć technicznie?
Najpierw wyliczamy każdy z wymienionych wyżej wskaźników:
import numpy as np
snapshot_date = df["Purchase Date"].max() + pd.Timedelta(days=1)
rfm = df.groupby("Customer ID").agg({
"Purchase Date": lambda x: (snapshot_date - x.max()).days,
"Customer ID": "count",
"Total Purchase Amount": "sum"
})
rfm.columns = ["Recency", "Frequency", "Monetary"]
Teraz dzielimy pozyskane dane na tzw. tercyle (trzy równe części często wykorzystywane w analizach statycznych):
rfm["R_score"] = pd.qcut(rfm["Recency"], 3, labels=[3,2,1])
rfm["F_score"] = pd.qcut(rfm["Frequency"], 3, labels=[1,2,3])
rfm["M_score"] = pd.qcut(rfm["Monetary"], 3, labels=[1,2,3])
Następnie potrzebujemy kodu, który pozwoli przypisać każdemu klientowi odpowiednie etykiety dla współczynnika R, M i F.
rfm["RFM"] = rfm["R_score"].astype(str) + rfm["F_score"].astype(str) + rfm["M_score"].astype(str)
I już. Tak opisanych klientów możemy dzielić na segmenty, posługując się poszczególnymi wartościami z tercyli, np:
- 333 – to nasi najlepsi klienci (mają maksymalną wartość w każdej kategorii, czyli kupują najczęściej i najdroższe produkty, a także dokonali niedawno kolejnego zakupu)
- 111 – to z kolei kod, który sygnalizuje niską aktywność klienta (kupuje najrzadziej, wybiera produkty o niskiej wartości i od dawna nie złożył żadnego zamówienia)
9. Churn – ilu klientów tracimy?
Churn to miara, która pokazuje jaki procent klientów przestaje korzystać z produktu, sklepu lub usługi w danym okresie. To po prostu wskaźnik odpływu klientów. W naszym zbiorze danych mamy kolumnę Churn, ktora pozwala oszacować, ilu klientów przestało kupować produkty w sklepie.
Dzięki obecności tej kolumny w zbiorze sam wskaźnik churn możemy obliczyć za pomocą stosunkowo prostej metody:
df["Churn"].mean()
Wyniki są wyrażone procentowo i pokazują % klientów, którzy odeszli. Możesz także analizować churn wg kategorii, wieku, płci, RFM itd.
Wysoki churn to sygnał, że coś w procesie sprzedaży lub obsługi nie działa, a klienci nie chcą wracać na ponowne zakupy. Z drugiej strony niski churn przy dużej liczbie nowych klientów to znak, że marka buduje lojalność.
10. Raportowanie i eksport wyników
Na końcu zapisujemy wyniki analiz do plików CSV. Dodaj kod do projektu:
rfm.to_csv("results/rfm.csv")
retention.to_csv("results/retention.csv")
revenue_per_month.to_csv("results/revenue.csv")
To pozwoli nam łatwo przygotować tabele i wykresy w kolejnej części projektu, w której zajmiemy się wizualizacją danych.
Warto też zapisywać pliki na przyszłość, by móc porównywać wyniki analiz i trendy w czasie.
Podsumowanie
Posługując się powyższymi instrukcjami, zrealizujesz swój pierwszy projekt z analizy danych. Możesz go dodać do swojego repozytorium, by w rekrutacjach pokazać potencjalnym pracodawcom. Teraz już wiesz, w jaki sposób przygotować dane do projektu, gdzie szukać publicznych zbiorów danych, a także, na co zwracać uwagę przy analizowaniu trendów w branży e-commerce.
Nauczyliśmy się:
- wczytywać i wstępnie analizować dane przy użyciu Pandas,
- analizować cechy oraz zachowania klientów,
- dzielić klientów na segmenty metodą R-F-M,
- analizować churn,
- zapisywać wyniki swoich analiz w formacie CVS.
Już wkrótce wspólnie zrealizujemy kolejną część projektu dotyczącą wizualizacji danych w postaci wykresów i tzw. heatmap. Zaglądajcie na naszego bloga!
Spodobało Ci się analizowanie danych i chcesz dowiedzieć się więcej na ten temat? Sprawdź nasz kurs Data Science lub rozwiąż test predyspozycji.