python數據建模常用可視化總結
數據分析的第一個階段數據理解與準備通常都由數據可視化開始,數據分析的最後一般也由數據可視化製作報告結束。因此,掌握數據可視化對於數據分析非常重要。
在數據分析的開始,數據可視化可以幫助我們很快的理解各個變數的特性與分布情況。
本文將結合數據分析的實際需求,對常用的數據可視化進行總結。數據可視化之後,我們一般需要對數據進行基本處理,可以參考這篇:
Keyen:利用python完成大數據建模前期數據準備
#文章中可視化代碼默認載入常用包:
import seaborn as snsimport pandas as pdimport numpy as npimport matplotlib.pyplot as plt% matplotlib inline
為了展示風格統一、觀看效果好,在進行可視化分析之前,對輸出圖片風格進行統一設置。
本文採取哈佛大學CS109數據科學課程推薦設置:
#哈佛大學Data Science課程CS109推薦的matplotlib 默認設置#可以方便的設置一次,保證整體風格一致from matplotlib import rcParams#圖片大小rcParams["figure.figsize"] = (10, 6)#圖片精度rcParams["figure.dpi"] = 150#線寬rcParams["lines.linewidth"] = 2#是否顯示網格rcParams["axes.grid"] = True#axes 填充顏色為淺灰rcParams["axes.facecolor"] = "#eeeeee"#字體大小為14rcParams["font.size"] = 14#邊框為無色rcParams["patch.edgecolor"] = "none"
用於分析的數據來自數據競賽平台kaggle,為House Price Prediction set:
House Prices: Advanced Regression Techniques
#導入數據df_train = pd.read_csv(".../train.csv")
前期準備工作完成,自此進入數據可視化階段:
1.箱形圖
箱形圖展示的信息為數據的分布情況,展示信息如下圖所示:
箱形圖主要用於觀察在某一/幾種情況下,數據的分布情況。以案例數據為例,我們可以觀察分類變數土地形狀"LotShape"中不同類別下房屋售價"SalePrice"的分布:
# sns繪製箱線圖ax = sns.boxplot(y = "SalePrice", x = "LotShape", data = df_train)
可以看到,前三個分類中數據存在右側長尾分布的情況,第四個分類非常接近正態分布。房屋售價與土地的不規則程度呈正相關。
如果想進一步細分,可增加hue變數賦值。
此例中,增加土地傾斜度分類"LandSlope":
#給hue變數賦值ax = sns.boxplot(y = "SalePrice", x = "LotShape", hue = "LandSlope",data = df_train)
可以看到,箱形圖被進一步劃分為3*3 即9種情況(理論情況)下的售價分布。但是,最後2種情況數據較少或沒有,說明不規則程度高&高傾斜度的房屋出售量少,與實際中此類土地建設房屋的概率較低預期一致。
2.小提琴圖
小提琴圖作用與箱形圖類似,箱線圖展示了分位數的位置,小提琴圖則展示了任意位置的密度,通過小提琴圖可以知道哪些位置的密度較高。在上圖中,白點是中位數,黑色盒型的範圍是下四分位點到上四分位點,細黑線表示須。外部形狀即為核密度估計。
主要在需要觀察分布密度時使用。
ax= sns.violinplot(y = "SalePrice", x = "LandSlope", data = df_train)
小提琴圖進一步細分與箱形圖類似,均是給hue變數賦值,就不在贅述了。
3.散點圖
散點圖用兩組數據構成多個坐標點,考察坐標點的分布,判斷兩變數之間是否存在某種關聯或總結坐標點的分布模式。散點圖將序列顯示為一組點。值由點在圖表中的位置表示。
通常用於觀察數據關聯方式、及是否有異常值
此例中使用房屋售價與樓上居住面積:
#常用的2變數散點圖plt.scatter(y = "SalePrice", x= "GrLivArea", data = df_train)
可以觀察到,整體而言,房屋售價與樓上居住面積呈正相關。非常可能存在線性關係。這個觀察結果與實際認知中,以面積計算房價基本一致。
此外,右下角還存在著2個非常明顯的異常值。面積最大,但售價很低。
4.條形圖
條形圖主要用於對比或排序展示數據的量/百分比。
在數據分析初期,通常用於數據基本情況的觀察,如缺失情況等。
此例中,將使用條形圖對數據缺失情況進行摸底:
#統計各變數缺失數據總和missingTotal = df_train.isnull().sum()#僅選取有缺失的變數missingExist = missingTotal[missingTotal > 0]#將有缺失的變數按降序排列missingExist.sort_values(inplace=True)#將排好的數據以柱狀圖呈現f, ax = plt.subplots(figsize = (12, 9))missingExist.plot.bar()
可以看到,有缺失數據的變數共有19個,其中後6個變數存在大比例缺失。
之後,我們就可以根據數據的缺失比例、缺失的原因以及數據的類型進行有針對性的工作。
5.直方圖
直方圖通常用於觀察數據的分布是否符合正態分布。
ax = sns.distplot(df_train["SalePrice"])
因變數房屋售價的分布為正偏態,如果需要進行線性回歸分析,則需要將房屋售價進行對數轉換處理。
推薦閱讀:
※[賽車知識]F1遙感數據分析——整理自網路
※隨機森林——二元分類的利器之Kaggle初體驗Titanic: Machine Learning from Disaster
※numpy+pandas除了效率對比excel還有什麼功能上的優勢嗎?
※互聯網數據崗位定位與分工