一、資料來源
之前,我分享過一期爬蟲,用python爬取Top100排行榜:
最終資料結果,是這樣的:
在此資料基礎上,做python視覺化分析。
二、資料讀取
首先,讀取資料來源:
# 讀取csv資料
df = pd.read_csv(csv)
三、資料概覽
用shape檢視資料形狀:
# 檢視資料形狀
df.shape
用head檢視前n行:
# 檢視前5行
df.head(5)
用info檢視列資訊:
# 檢視列資訊
df.info()
用describe檢視統計性分析:
# 描述性統計分析
df.describe()
四、資料清洗
檢視是否存在空值:
# 檢視空值
df.isna().any()
每列都是False,沒有空值。
檢視是否存在重複值:
#檢視重複值
df.duplicated().any()
False代表沒有重複值。
上面我們看到,點踩數都是0,沒有分析意義,所以,用drop刪除此列:
# 刪除沒用的列
df.drop('點踩數', axis=1, inplace=True)
刪除之後,檢視刪除結果:
沒有點踩數了。
五、視覺化分析
5.1 相關性分析(Correlation)
資料中,有播放數、彈幕數、投幣數、點贊數、分享數、收藏數等眾多資料指標。
我想分析出,這些指標中,誰和綜合得分的關係最大,決定性最高。
直接採用pandas自帶的corr函式,得出相關性(spearman相關)矩陣:
可以看出,點贊數和綜合得分的相關性最高,達到了0.66。
根據此分析結論,進一步畫出點贊數和綜合得分的分佈散點圖,驗證此結論的正確性。
得出結論:隨著點贊數增多,綜合得分呈明顯上升趨勢,進一步得出,二者存在正相關的關係。
5.2 餅圖(Pie)
綜合得分劃分分佈區間,繪製出分佈餅圖。
首先,劃分資料區間:
# 設定分段
bins = [1000000, 1500000,2000000, 2500000, 3000000, 10000000]
# 設定標籤
labels = [
'100w-150w',
'150w-200w',
'200w-250w',
'250w-300w',
'300w-1000w'
]
# 按分段離散化資料
segments = pd.cut(score_list, bins, labels=labels) # 按分段切割資料
counts = pd.value_counts(segments, sort=False).values.tolist() # 統計個數
至於區間怎麼劃分,可以按照對資料的大致理解,和最終視覺化呈現的效果,微調劃分割槽間。
繪製餅圖:
得出結論:綜合得分在100w至150w這個區間的視訊最多,有36個視訊(佔比36%)
5.3 箱形圖(Boxplot)
箱形圖,是一種分析資料分佈、離散情況的資料分析方法。
首先,我嘗試了把這幾個資料指標,繪製在同一張圖裡:
可以發現,由於播放數遠遠大於其他資料指標,不在一個數量級,導致其他資料指標的box都擠到一塊了,視覺化效果很差,所以,我打算把每個box畫到一個圖裡,避免這種情況的發生。
以下程式碼,含知識點(subplot(n_row, n_col, order) n_row代表幾行,n_col代表幾列,order代表第幾個)
得出結論:每個資料指標都存在極值的情況(最大值距離box很遠),資料比較離散,方差較大。
5.4 詞雲圖(wordcloud)
針對視訊作者,畫出詞雲圖。
程式碼中各個細節設定項,已新增對應註釋,不再贅述。
和原始背景圖對比:
這個背景圖,是我找的一個動漫小人的圖片,對比詞雲圖,你會發現:
-
詞雲圖和背景圖的形狀,大體一致(mask引數的作用)
-
詞雲圖和背景圖的顏色分佈,大體一致(color_func引數的作用)
至此,全部分析結束。
六、同步講解視訊
此案例的講解視訊:
https://www.zhihu.com/zvideo/1513851213354893312
by 馬哥python說