12.2024 | pandas | value_counts | python
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ę.
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
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
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.
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
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.
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
ascending=True
możemy to łatwo zmienić.[['col1', 'col2']].value_counts()
lub funkcję groupby()
.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!
Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.
Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.
Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.
Jestem współtwórcą grupy Hexe Capital SA.
Zapraszam do lektury i współpracy.
Krzysztof Surowiecki
Chcę porozmawiać o współpracy →Moje certyfikaty