Funkcja value_counts() w bibliotece Pandas (Python) jest jednym z najprostszych, a zarazem najbardziej praktycznych narzędzi do szybkiego zliczania wystąpień poszczególnych wartości w danych. W świecie e-commerce często chcemy sprawdzić, jak często kupowane są poszczególne produkty lub które kategorie są najbardziej popularne. Dzięki value_counts() możemy w mgnieniu oka dokonać szybkiej analizy, co bardzo pomaga w codziennej pracy z danymi.
W tym artykule pokazujemy, w jaki sposób wykorzystujemy value_counts() w analizie e-commerce i na co zwracamy uwagę.
Podstawowe użycie
Załóżmy, że mamy DataFrame z przykładowymi danymi o sprzedawanych produktach w naszym sklepie internetowym:
import pandas as pd
data = {
'product_name': ['Koszulka', 'Koszulka', 'Spodnie', 'Buty', 'Buty', 'Buty', 'Czapka'],
'category': ['Odzież', 'Odzież', 'Odzież', 'Obuwie', 'Obuwie', 'Obuwie', 'Akcesoria'],
'price': [49.99, 49.99, 89.90, 129.99, 129.99, 129.99, 29.99]
}
df = pd.DataFrame(data)
print(df)
Przykładowy wynik:
product_name category price
0 Koszulka Odzież 49.99
1 Koszulka Odzież 49.99
2 Spodnie Odzież 89.90
3 Buty Obuwie 129.99
4 Buty Obuwie 129.99
5 Buty Obuwie 129.99
6 Czapka Akcesoria 29.99
Aby zobaczyć, które produkty pojawiają się najczęściej (np. w zamówieniach lub w asortymencie), wywołujemy:
df['product_name'].value_counts()
Wynik:
Buty 3
Koszulka 2
Spodnie 1
Czapka 1
Name: product_name, dtype: int64
Zobaczmy też zliczenie po kategoriach:
df['category'].value_counts()
Wynik:
Obuwie 3
Odzież 3
Akcesoria 1
Name: category, dtype: int64
Sortowanie wyników
Domyślnie value_counts() sortuje wyniki malejąco (najczęściej występująca wartość na górze). Aby zmienić kolejność i posortować rosnąco, używamy parametru ascending=True:
df['product_name'].value_counts(ascending=True)
Wynik:
Spodnie 1
Czapka 1
Koszulka 2
Buty 3
Name: product_name, dtype: int64
Normalizacja wyników
Czasami, zamiast liczby wystąpień, interesuje nas odsetek danego produktu czy kategorii w sprzedaży. W takim przypadku stosujemy parametr normalize=True:
df['product_name'].value_counts(normalize=True)
Wynik (wartości mogą się różnić w zależności od zaokrągleń):
Buty 0.428571
Koszulka 0.285714
Spodnie 0.142857
Czapka 0.142857
Name: product_name, dtype: float64
Dzięki temu widzimy, jaki procent (np. ~42,86% dla „Buty”) stanowią poszczególne produkty.
Zliczanie wartości w kilku kolumnach
Bywa, że potrzebujemy sprawdzić, jak często występują kombinacje wartości — np. jakie produkty w danej kategorii są najpopularniejsze. Możemy do tego użyć value_counts() na wielu kolumnach:
df[['category', 'product_name']].value_counts()
Wynik:
category product_name
Obuwie Buty 3
Odzież Koszulka 2
Spodnie 1
Akcesoria Czapka 1
dtype: int64
W ten sposób widzimy, że w kategorii „Obuwie” królują „Buty”, a w „Odzieży” — „Koszulka”.
Możemy też sięgnąć po groupby() i size():
df.groupby(['category', 'product_name']).size().reset_index(name='counts')
Wynik:
category product_name counts
0 Akcesoria Czapka 1
1 Obuwie Buty 3
2 Odzież Koszulka 2
3 Odzież Spodnie 1
Szybkie filtrowanie i liczenie
Czasami interesują nas produkty, które występują więcej niż raz. Możemy wykorzystać value_counts() do zbudowania filtra:
product_counts = df['product_name'].value_counts()
duplikaty = product_counts[product_counts > 1].index
df_duplikaty = df[df['product_name'].isin(duplikaty)]
print(df_duplikaty)
Wynik:
product_name category price
0 Koszulka Odzież 49.99
1 Koszulka Odzież 49.99
3 Buty Obuwie 129.99
4 Buty Obuwie 129.99
5 Buty Obuwie 129.99
W ten sposób otrzymujemy tylko te wiersze, w których dany produkt występuje częściej niż raz.
Parametr dropna
Często w danych e-commerce napotykamy brakujące wartości (NaN) — np. brak kategorii w niektórych rekordach. Domyślnie value_counts() nie uwzględnia braków danych, ale wystarczy ustawić dropna=False, by je zliczyć:
df_with_nan = pd.DataFrame({
'product_name': ['Buty', None, 'Koszulka', None, 'Spodnie']
})
print(df_with_nan['product_name'].value_counts(dropna=False))
Wynik:
Buty 1
Koszulka 1
Spodnie 1
NaN 2
Name: product_name, dtype: int64
Podsumowanie
- value_counts() to prosta i niezwykle przydatna metoda w Pandas do zliczania wystąpień wartości — idealna w analizie e-commerce (np. do sprawdzania popularności produktów, kategorii).
- Domyślnie wyniki są sortowane malejąco, ale parametrem
ascending=Truemożemy to łatwo zmienić. - Za pomocą normalize=True otrzymujemy udziały procentowe zamiast liczbowej ilości wystąpień.
- Analizę wielu kolumn przeprowadzamy przez
[['col1', 'col2']].value_counts()lub funkcjęgroupby(). - Brakujące dane (NaN) można włączyć do zliczeń, ustawiając dropna=False.
value_counts()świetnie sprawdza się w tworzeniu filtrów, np. do wyłapania popularnych lub rzadko zamawianych produktów.
Warto z tego narzędzia korzystać już na wczesnym etapie analizy — pozwala nam szybko zorientować się w strukturze danych i wyłapać kluczowe informacje (np. najchętniej kupowane produkty), co przekłada się na lepsze decyzje biznesowe. Powodzenia w analizie!