需求: 對於這一組電影數據,如果我們希望統計電影分類(genre)的情況,應該如何處理數據?
電影數據的形式如下,我們需要統計出Genre列中出現的電影分類的情況,即每種分類出現了多少次
思路:重新構造一個全爲0的二維數組,列名爲分類,如果某一條數據中分類出現過,就讓0變爲1
1.先構造一個全0的數組,行代表每一部電影,有1000部;列代表1000部電影中所有包含的分類(不能重複)。
df = pd.read_csv("./data/Movie-Data.csv")
# 統計分類的列表
temp_list = df["Genre"].str.split(",").tolist() # 當前list的結構[[],[],[]]
# 取出每個電影分類,放到set裏面(去重),再轉爲list
genre_list = list(set([i for j in temp_list for i in j]))
# 構造全爲0的數組
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)
print(zeros_df)
效果:
2.遍歷每部電影,將電影對應分類的位置置爲1
# 給每個電影出現分類的位置賦值1
for i in range(df.shape[0]):
# 通過標籤索引行數據,此處實際操作了一行多列數據 參數二:是對應第i行電影的電影分類list
zeros_df.loc[i, temp_list[i]] = 1
打印先三行的效果,注意中間數據過長沒有顯示全,而不是沒有效果
3.對上面這個賦值過的數組,在0軸方向求和
4.可視化展示
數據集在kaggle上可以免費下載,需要數據集可以留言
完整代碼:
import pandas as pd
import numpy as np
"""
對於這一組電影數據,如果我們希望統計電影分類(genre)的情況,應該如何處理數據?
思路:重新構造一個全爲0的二維數組,列名爲分類,如果某一條數據中分類出現過,就讓0變爲1
"""
df = pd.read_csv("./data/Movie-Data.csv")
# 統計分類的列表
temp_list = df["Genre"].str.split(",").tolist() # 當前list的結構[[],[],[]]
# 取出每個電影分類,放到set裏面(去重),再轉爲list
genre_list = list(set([i for j in temp_list for i in j]))
# print(genre_list)
# 構造全爲0的數組
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)
# print(zeros_df)
# 給每個電影出現分類的位置賦值1
for i in range(df.shape[0]):
# 通過標籤索引行數據,此處實際操作了一行多列數據 參數二:是對應第i行電影的電影分類list
zeros_df.loc[i, temp_list[i]] = 1
# print(zeros_df.head(3))
# 統計每個分類的電影的數量和
genre_count = zeros_df.sum(axis=0)
print(genre_count)