當拿到資料之後,我通常的第一步一定是先看一下這筆資料大致長什麼樣子
這個時候有了能統計每個類別出現了幾次的部分就會很有用
而具體要針對一個或多個欄位的統計則是根據需求會有不同的應用情況
Counter是在colletions裡面的一個函數,可以用來計算任何可迭代容器(list, string)內的元素個數
from collections import Counter
A = ["Alice", "Bob", "Bob", "Bob", "Carol"]
Counter(A)
輸出:
Counter({'Alice': 1, 'Bob': 3, 'Carol': 1})
from collections import Counter
A = ["Alice", "Bob", "Bob", "Bob", "Carol"]
count_A = Counter(A)
print("Bob:", count_A["Bob"])
print("Amy:", count_A["Amy"]) # 不存在的key會回傳0而非跳error
輸出:
Bob: 3
Amy: 0
B = "Aaaaaa~"
Counter(B)
輸出:
Counter({'A': 1, 'a': 5, '~': 1})
這邊以UCI cars資料集為例
import pandas as pd
df = pd.read_csv("car.csv")
count_class = Counter(df["class"])
count_class
輸出:
Counter({'unacc': 1210, 'acc': 384, 'vgood': 65, 'good': 69})
from_dict()
的方法產生df2 = pd.DataFrame.from_dict(count_class,orient='index',columns=["Count"])
df2
輸出:
df2 = pd.DataFrame({"class":count_class.keys(),
"count": count_class.values()})
df2
輸出:
在需要統計多個欄位的時候,我們就不能用Counter了
這邊就介紹另一種方法,先利用DataFrame的groupby
的方式把所需的欄位給組合起來再計數就可以得到多欄位的統計結果了
df.groupby(["class", "safety"]).size().reset_index(name="次數")
輸出:
其實這個也可以用在單一欄位,只是我習慣上用Counter寫起來呼叫一個東西而已比較直觀