Analityka Ecommerce. BI. Wykorzystanie AI. Dark Mode: ON OFF

Blog Analityczny. Narzędzia. Techniki. Rozwiązania Analityczne.

Miary centralne w analizie danych e-commerce: praktyczne zastosowanie w Pythonie i SQL

09.2024 | Miary Centralne | Python | SQL | Przeczytasz w 4 min.

Miary centralne w analizie danych e-commerce

Miary centralne to podstawowe narzędzia statystyczne, które pomagają nam zrozumieć typowe lub centralne wartości w zbiorze danych. W kontekście e-commerce, miary te mogą dostarczyć cennych informacji o zachowaniach klientów, trendach sprzedażowych i wydajności produktów. W tym artykule omówimy trzy kluczowe miary centralne: średnią arytmetyczną, medianę i modę, oraz pokażemy, jak je obliczać w Pythonie na przykładzie danych ze sklepu e-commerce.

1. Średnia arytmetyczna

Średnia arytmetyczna to suma wszystkich wartości podzielona przez liczbę obserwacji. Jest przydatna do określenia przeciętnej wartości w zbiorze danych.

Przykład w Pythonie:

Załóżmy, że mamy listę wartości zamówień w naszym sklepie e-commerce:

import numpy as np

zamowienia = [120, 80, 200, 150, 100, 250, 80, 300, 120, 180]

srednia = np.mean(zamowienia)
print(f"Średnia wartość zamówienia: {srednia:.2f} zł")

2. Mediana

Mediana to wartość środkowa w uporządkowanym zbiorze danych. Jest szczególnie przydatna, gdy mamy do czynienia z danymi zawierającymi wartości odstające.

Przykład w Pythonie:

mediana = np.median(zamowienia)
print(f"Mediana wartości zamówień: {mediana:.2f} zł")

3. Moda

Moda to wartość występująca najczęściej w zbiorze danych. W kontekście e-commerce może to być np. najpopularniejsza cena produktu.

Przykład w Pythonie:

from scipy import stats

moda = stats.mode(zamowienia)
print(f"Najczęstsza wartość zamówienia (moda): {moda.mode[0]:.2f} zł")

Kiedy wybrać którą miarę centralną?

Wybór odpowiedniej miary centralnej zależy od charakteru danych i celu analizy:

  1. Średnia arytmetyczna:
    • Najlepsza dla danych o rozkładzie symetrycznym, bez znaczących wartości odstających.
    • Przydatna, gdy chcemy uwzględnić wszystkie wartości w zbiorze danych.
    • Przykład: Średnia wartość zamówienia w sklepie e-commerce.
  2. Mediana:
    • Idealna dla danych z wartościami odstającymi lub o rozkładzie skośnym.
    • Odporna na ekstremalne wartości.
    • Przykład: Mediana czasu ładowania samochodów elektrycznych.
  3. Moda:
    • Najlepsza dla danych kategorialnych lub dyskretnych.
    • Przydatna do identyfikacji najczęstszych wartości.
    • Przykład: Najbardziej popularna godzina rozpoczęcia ładowania samochodu elektrycznego.

Praktyczne zastosowanie w analizie danych e-commerce

Teraz zastosujmy te miary do rzeczywistego scenariusza e-commerce. Załóżmy, że mamy dane o czasie spędzonym przez klientów na naszej stronie (w minutach) przed dokonaniem zakupu:

import pandas as pd
import matplotlib.pyplot as plt

# Symulowane dane
dane = pd.DataFrame({
    'czas_na_stronie': [5, 10, 15, 7, 12, 20, 8, 30, 25, 18, 22, 6, 14, 9, 11],
    'wartosc_zakupu': [50, 100, 150, 80, 120, 200, 70, 250, 180, 160, 190, 60, 130, 90, 110]
})

# Obliczanie miar centralnych
sredni_czas = np.mean(dane['czas_na_stronie'])
mediana_czasu = np.median(dane['czas_na_stronie'])
moda_czasu = stats.mode(dane['czas_na_stronie'])

print(f"Średni czas na stronie: {sredni_czas:.2f} minut")
print(f"Mediana czasu na stronie: {mediana_czasu:.2f} minut")
print(f"Najczęstszy czas na stronie (moda): {moda_czasu.mode[0]:.2f} minut")

# Wizualizacja
plt.figure(figsize=(10, 6))
plt.scatter(dane['czas_na_stronie'], dane['wartosc_zakupu'])
plt.axvline(sredni_czas, color='r', linestyle='--', label='Średnia')
plt.axvline(mediana_czasu, color='g', linestyle='--', label='Mediana')
plt.axvline(moda_czasu.mode[0], color='b', linestyle='--', label='Moda')
plt.xlabel('Czas spędzony na stronie (minuty)')
plt.ylabel('Wartość zakupu (zł)')
plt.title('Relacja między czasem na stronie a wartością zakupu')
plt.legend()
plt.show()

Ten kod nie tylko oblicza miary centralne, ale także tworzy wykres rozrzutu pokazujący relację między czasem spędzonym na stronie a wartością zakupu, z zaznaczonymi liniami dla średniej, mediany i mody czasu spędzonego na stronie.

Przykład SQL: Analiza danych ładowania samochodów elektrycznych

Załóżmy, że mamy tabelę charging_sessions z danymi o ładowaniu samochodów elektrycznych:

-- Tworzenie tabeli
CREATE TABLE ladowanie_samochodow (
    id INT PRIMARY KEY,
    id_samochodu VARCHAR(10),
    start_ladowania TIMESTAMP,
    koniec_ladowania TIMESTAMP
);

-- Wczytywanie danych z pliku CSV
-- Uwaga: Poniższa komenda jest specyficzna dla PostgreSQL. Dla innych systemów bazodanowych może być potrzebna inna składnia.
COPY ladowanie_samochodow(id, id_samochodu, start_ladowania, koniec_ladowania)
FROM '/sciezka/do/pliku/ladowanie_samochodow.csv'
DELIMITER ',' 
CSV HEADER;

-- Obliczanie średniego czasu ładowania
SELECT AVG(EXTRACT(EPOCH FROM (koniec_ladowania - start_ladowania))/60) AS sredni_czas_ladowania_minuty
FROM ladowanie_samochodow;

-- Obliczanie mediany czasu ładowania
WITH czasy_ladowania AS (
    SELECT EXTRACT(EPOCH FROM (koniec_ladowania - start_ladowania))/60 AS czas_ladowania_minuty
    FROM ladowanie_samochodow
    ORDER BY czas_ladowania_minuty
)
SELECT 
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY czas_ladowania_minuty) AS mediana_czasu_ladowania_minuty
FROM czasy_ladowania;

-- Obliczanie mody (najczęstszego czasu ładowania)
WITH czasy_ladowania AS (
    SELECT ROUND(EXTRACT(EPOCH FROM (koniec_ladowania - start_ladowania))/60) AS czas_ladowania_minuty
    FROM ladowanie_samochodow
)
SELECT czas_ladowania_minuty, COUNT(*) AS liczba_wystapien
FROM czasy_ladowania
GROUP BY czas_ladowania_minuty
ORDER BY liczba_wystapien DESC
LIMIT 1;

-- Analiza godzin rozpoczęcia ładowania
SELECT 
    EXTRACT(HOUR FROM start_ladowania) AS godzina_rozpoczecia,
    COUNT(*) AS liczba_ladowan
FROM ladowanie_samochodow
GROUP BY godzina_rozpoczecia
ORDER BY liczba_ladowan DESC;

Podpowiedź => Pełny zestaw danych (100 rekordów) można wygenerować przy użyciu skryptu Pythona i zapisać do pliku CSV:

import csv
from datetime import datetime, timedelta
import random

def generate_charging_data(num_records=100):
    data = []
    start_date = datetime(2024, 8, 29)

    for i in range(1, num_records + 1):
        car_id = random.randint(100, 199)
        start_time = start_date + timedelta(hours=random.randint(0, 23), minutes=random.randint(0, 59))
        duration = timedelta(hours=random.uniform(1, 4))
        end_time = start_time + duration

        data.append([i, car_id, start_time, end_time])

    return data

# Generowanie danych
charging_data = generate_charging_data()

# Zapisywanie do pliku CSV
with open('charging_sessions.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['id', 'car_id', 'start_time', 'end_time'])
    writer.writerows(charging_data)

print("Plik CSV z danymi został wygenerowany.")

Ten skrypt generuje plik charging_sessions.csv, który można zaimportować do bazy danych SQL lub użyć bezpośrednio w analizie.

Wnioski

Miary centralne są niezwykle przydatne w analizie danych e-commerce. Pozwalają na:

  1. Zrozumienie typowych zachowań klientów (np. średni czas spędzony na stronie).
  2. Identyfikację najczęstszych wartości (np. najpopularniejsza kwota zakupu).
  3. Analizę trendów i odstępstw od normy.

Pamiętajmy, że każda z tych miar ma swoje zalety i ograniczenia. Średnia jest wrażliwa na wartości skrajne, podczas gdy mediana jest bardziej odporna. Moda może być szczególnie przydatna dla danych kategorialnych lub dyskretnych. Najlepsze rezultaty osiągniesz, używając ich w połączeniu i interpretując w kontekście swojego biznesu e-commerce.

Potrzebujesz wsparcia analitycznego?

Napisz do mnie poprzez formularz kontaktowy.