1. 程式人生 > >(原創)競賽-關於房價預測模型的數據預分析1

(原創)競賽-關於房價預測模型的數據預分析1

ria 另一個 sns 相同 kernel fmt com image 6.5

註:該部分參考kaggle房價模型的大神Pedro Marcelino提供的kernel

在我們拿到數據後,應該預先分析一下數據。

1、總覽數據

import numpy as np
import pandas as pd
df_train=pd.read_csv(‘train.csv‘)
df_train.head()#結果在這裏不展示

通過以上可以對數據有大體的了解,會發現既有數值型數據,也有類別型數據。註意區別。

df_train.columns#展示各列的名字

2、對特定列進行分析

df_train[‘SalePrice‘].describe()#研究房價(target),即結果一列,會顯示該列的均值 方差 標準差 四分位數 最值等信息

and

#對最後一列的數據做可視化
import seaborn as sns
import matplotlib.pyplot as plt
sns.distplot(df_train[‘SalePrice‘])
plt.show()

技術分享圖片

#skewness and kurtosis
print("Skewness: %f" % df_train[‘SalePrice‘].skew())
print("Kurtosis: %f" % df_train[‘SalePrice‘].kurt())
#Skewness: 1.882876     Kurtosis: 6.536282

偏度(skewness)也稱為偏態、偏態系數,是統計數據分布偏斜方向和程度的度量,是統計數據分布非對稱程度的數字特征。
峰度(peakedness;kurtosis)又稱峰態系數。表征概率密度分布曲線在平均值處峰值高低的特征數。直觀看來,峰度反映了峰部的尖度。

3、分析某個元素與結果列(saleprice)的關系

#scatter plot grlivarea/saleprice即研究某個特征與房價的關系
var = ‘GrLivArea‘
data = pd.concat([df_train[‘SalePrice‘], df_train[var]], axis=1)
data.plot.scatter(x=var, y=‘SalePrice‘, ylim=(0,800000));
plt.show()

技術分享圖片

#檢查另一個特征與房價的關系
var=‘TotalBsmtSF‘
data=pd.concat([df_train[‘SalePrice‘],df_train[var]],axis=1)
data.plot.scatter(x=var,y=‘SalePrice‘,ylim=(0,800000))
plt.show()

技術分享圖片
註意,以上兩個是對數值型數據的分析,下面是類別型數據的分析。

#以上都是數值型數據與房價的分布,下面時類別型數據與房價的分布描述
#box plot overallqual/saleprice
var = ‘OverallQual‘
data = pd.concat([df_train[‘SalePrice‘], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
plt.show()

技術分享圖片
分析這張圖:在這裏我們使用的是箱型圖(盒圖),主要包含六個數據節點,將一組數據從大到小排列,分別計算出上邊緣,上四分位數Q3,中位數,下四分位數Q1,下邊緣,分散的是異常值。上下邊緣之間是正常數據的分布區間

#類別型數據
var = ‘YearBuilt‘
data = pd.concat([df_train[‘SalePrice‘], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000)
plt.xticks(rotation=90)
plt.show()

技術分享圖片

相關性的分析:

#correlation matrix相關矩陣
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True)
plt.show()

技術分享圖片
分析:相關矩陣可以用顏色和數值表示任意兩個元素之間的相關性,顏色越淡,表示相關性越強,反之相關性越弱,可參考colorbar。

#saleprice correlation matrix 相關矩陣
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, ‘SalePrice‘)[‘SalePrice‘].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt=‘.2f‘, annot_kws={‘size‘: 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()

技術分享圖片
分析:兩個相同元素之間的相關性是1,如saleprice與saleprice,另外從圖中我們看到garagecars與garagearea的相關性在0.88,表明這兩個元素相關性很強,因此在後面做數據分析(機器學習)時,可以只取其中一個元素特征即可。相似的還有totalbsmtSF與1stFlrSF。同時,如果一個特征與saleprice之間的相關性很弱,那麽這個特征可以舍去。

#scatterplot
sns.set()
cols = [‘SalePrice‘, ‘OverallQual‘, ‘GrLivArea‘, ‘GarageCars‘, ‘TotalBsmtSF‘, ‘FullBath‘, ‘YearBuilt‘]
sns.pairplot(df_train[cols], size = 2.5)
plt.show()

技術分享圖片
分析:

(原創)競賽-關於房價預測模型的數據預分析1