Tylko teraz 35% rabatu na hasło #DEV. Gwarancja Pracy lub Stażu gratis i wygodne finansowanie — nawet 40 rat 0%. Kto pierwszy, ten lepszy!
← Blog

[PROJEKT] Analiza danych sklepu internetowego — kompleksowy projekt z analityki danych

28.11.2025

[PROJEKT] Analiza danych sklepu internetowego — kompleksowy projekt z analityki danych

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:

 


Fragment zbioru 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.

 

[Kurs Data Science]