在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用Python進行全面數據探索

jmiy_worldofai ? 來源:未知 ? 作者:李倩 ? 2018-10-25 09:15 ? 次閱讀

Kaggle 的房價預測競賽從 2016 年 8 月開始,到 2017 年 2 月結束。這段時間內,超過 2000 多人參與比賽,選手采用高級回歸技術,基于我們給出的 79 個特征,對房屋的售價進行了準確的預測。今天我們介紹的是目前得票數最高的優勝方案:《用 Python 進行全面數據探索》,該方案在數據探索,特征工程上都有十分出色的表現。

作者 Pedro Marcelino在競賽中使用的主要方法是關注數據科學處理方法,以及尋找能夠指導工作的有力文獻資料。作者主要參考《多元數據分析》(Multivariate Data Analysis, Hair et al., 2014)中的第三章 “檢查你的

數據”。作者將自己研究的方法歸為以下三步:

定義要解決的問題;

查閱相關文獻;

對他們進行修改以適合自己的要求。

“不過是站在巨人的肩膀上。”——Pedro Marcelino

下面我們就一起來看看作者是如何對數據進行分析的。

了解你的數據

方法框架:

理解問題:查看每個變量并且根據他們的意義和對問題的重要性進行哲學分析。

單因素研究:只關注因變量( SalePrice),并且進行更深入的了解。

多因素研究:分析因變量和自變量之間的關系。

基礎清洗:清洗數據集并且對缺失數據,異常值和分類數據進行一些處理。

檢驗假設:檢查數據是否和多元分析方法的假設達到一致。

開始之前:

importpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportnumpyasnpfromscipy.statsimportnormfromsklearn.preprocessingimportStandardScalerfromscipyimportstatsimportwarningswarnings.filterwarnings('ignore')%matplotlibinline#bringinthesixpacksdf_train=pd.read_csv('../input/train.csv')#checkthedecorationdf_train.columnsIndex(['Id','MSSubClass','MSZoning','LotFrontage','LotArea','Street','Alley','LotShape','LandContour','Utilities','LotConfig','LandSlope','Neighborhood','Condition1','Condition2','BldgType','HouseStyle','OverallQual','OverallCond','YearBuilt','YearRemodAdd','RoofStyle','RoofMatl','Exterior1st','Exterior2nd','MasVnrType','MasVnrArea','ExterQual','ExterCond','Foundation','BsmtQual','BsmtCond','BsmtExposure','BsmtFinType1','BsmtFinSF1','BsmtFinType2','BsmtFinSF2','BsmtUnfSF','TotalBsmtSF','Heating','HeatingQC','CentralAir','Electrical','1stFlrSF','2ndFlrSF','LowQualFinSF','GrLivArea','BsmtFullBath','BsmtHalfBath','FullBath','HalfBath','BedroomAbvGr','KitchenAbvGr','KitchenQual','TotRmsAbvGrd','Functional','Fireplaces','FireplaceQu','GarageType','GarageYrBlt','GarageFinish','GarageCars','GarageArea','GarageQual','GarageCond','PavedDrive','WoodDeckSF','OpenPorchSF','EnclosedPorch','3SsnPorch','ScreenPorch','PoolArea','PoolQC','Fence','MiscFeature','MiscVal','MoSold','YrSold','SaleType','SaleCondition','SalePrice'],dtype='object')

準備工作——我們可以期望什么?

為了了解我們的數據,我們可以分析每個變量并且嘗試理解他們的意義和與該問題的相關程度。

首先建立一個 Excel 電子表格,有如下目錄:

變量–變量名。

類型– 該變量的類型。這一欄只有兩個可能值,“數據” 或 “類別”。“數據” 是指該變量的值是數字,“類別” 指該變量的值是類別標簽

劃分– 指示變量劃分. 我們定義了三種劃分:建筑,空間,位置。

期望– 我們希望該變量對房價的影響程度。我們使用類別標簽 “高”,“中” 和 “低” 作為可能值。

結論– 我們得出的該變量的重要性的結論。在大概瀏覽數據之后,我們認為這一欄和 “期望” 的值基本一致。

評論– 我們看到的所有一般性評論。

我們首先閱讀了每一個變量的描述文件,同時思考這三個問題:

我們買房子的時候會考慮這個因素嗎?

如果考慮的話,這個因素的重要程度如何?

這個因素帶來的信息在其他因素中出現過嗎?

我們根據以上內容填好了電子表格,并且仔細觀察了 “高期望” 的變量。然后繪制了這些變量和房價之間的散點圖,填在了 “結論” 那一欄,也正巧就是對我們的期望值的校正。

我們總結出了四個對該問題起到至關重要的作用的變量:

OverallQual

YearBuilt.

TotalBsmtSF.

GrLivArea.

最重要的事情——分析 “房價”

描述性數據總結:

df_train['SalePrice'].describe()count1460.000000mean180921.195890std79442.502883min34900.00000025%129975.00000050%163000.00000075%214000.000000max755000.000000Name:SalePrice,dtype:float64

繪制直方圖

sns.distplot(df_train['SalePrice']);

從直方圖中可以看出:

偏離正態分布

數據正偏

有峰值

數據偏度和峰度度量:

print("Skewness:%f"%df_train['SalePrice'].skew())print("Kurtosis:%f"%df_train['SalePrice'].kurt())

Skewness: 1.882876

Kurtosis: 6.536282

“房價” 的相關變量分析

與數字型變量的關系:

1. 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));

可以看出 SalePrice 和 GrLivArea 關系很密切,并且基本呈線性關系。

2. TotalBsmtSF 與 SalePrice 散點圖

var='TotalBsmtSF'data=pd.concat([df_train['SalePrice'],df_train[var]],axis=1)data.plot.scatter(x=var,y='SalePrice',ylim=(0,800000));

TotalBsmtSF 和 SalePrice 關系也很密切,從圖中可以看出基本呈指數分布,但從最左側的點可以看出特定情況下 TotalBsmtSF 對 SalePrice 沒有產生影響。

與類別型變量的關系

1.‘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);

可以看出 SalePrice 與 OverallQual 分布趨勢相同。

2. YearBuilt 與 SalePrice 箱型圖

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);

兩個變量之間的關系沒有很強的趨勢性,但是可以看出建筑時間較短的房屋價格更高。

總結:

GrLivArea 和 TotalBsmtSF 與 SalePrice 似乎線性相關,并且都是正相關。對于 TotalBsmtSF 線性關系的斜率十分的高。

OverallQual 和 YearBuilt 與 SalePrice 也有關系。OverallQual 的相關性更強, 箱型圖顯示了隨著整體質量的增長,房價的增長趨勢。

我們只分析了四個變量,但是還有許多其他變量我們也應該分析,這里的技巧在于選擇正確的特征(特征選擇)而不是定義他們之間的復雜關系(特征工程)。

客觀分析

1. 相關系數矩陣

corrmat=df_train.corr()f,ax=plt.subplots(figsize=(12,9))sns.heatmap(corrmat,vmax=.8,square=True);

首先兩個紅色的方塊吸引到了我,第一個是 TotalBsmtSF 和 1stFlrSF 變量的相關系數,第二個是 GarageX 變量群。這兩個示例都顯示了這些變量之間很強的相關性。實際上,相關性的程度達到了一種多重共線性的情況。我們可以總結出這些變量幾乎包含相同的信息,所以確實出現了多重共線性。

另一個引起注意的地方是 SalePrice 的相關性。我們可以看到我們之前分析的 GrLivArea,TotalBsmtSF和 OverallQual 的相關性很強,除此之外也有很多其他的變量應該進行考慮,這也是我們下一步的內容。

2. SalePrice 相關系數矩陣

k=10#numberofvariablesforheatmapcols=corrmat.nlargest(k,'SalePrice')['SalePrice'].indexcm=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()

從圖中可以看出:

OverallQual,GrLivArea 以及 TotalBsmtSF 與 SalePrice 有很強的相關性。

GarageCars 和 GarageArea 也是相關性比較強的變量. 車庫中存儲的車的數量是由車庫的面積決定的,它們就像雙胞胎,所以不需要專門區分 GarageCars 和 GarageAre,所以我們只需要其中的一個變量。這里我們選擇了 GarageCars,因為它與 SalePrice 的相關性更高一些。

TotalBsmtSF 和 1stFloor 與上述情況相同,我們選擇 TotalBsmtS 。

FullBath 幾乎不需要考慮。

TotRmsAbvGrd 和 GrLivArea 也是變量中的雙胞胎。

YearBuilt 和 SalePrice 相關性似乎不強。

3. SalePrice 和相關變量之間的散點圖

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

盡管我們已經知道了一些主要特征,這一豐富的散點圖給了我們一個關于變量關系的合理想法。

其中,TotalBsmtSF 和 GrLiveArea 之間的散點圖是很有意思的。我們可以看出這幅圖中,一些點組成了線,就像邊界一樣。大部分點都分布在那條線下面,這也是可以解釋的。地下室面積和地上居住面積可以相等,但是一般情況下不會希望有一個比地上居住面積還大的地下室。

SalePrice 和 YearBuilt 之間的散點圖也值得我們思考。在 “點云” 的底部,我們可以觀察到一個幾乎呈指數函數的分布。我們也可以看到 “點云” 的上端也基本呈同樣的分布趨勢。并且可以注意到,近幾年的點有超過這個上端的趨勢。

缺失數據

關于缺失數據需要思考的重要問題:

這一缺失數據的普遍性如何?

缺失數據是隨機的還是有律可循?

這些問題的答案是很重要的,因為缺失數據意味著樣本大小的縮減,這會阻止我們的分析進程。除此之外,以實質性的角度來說,我們需要保證對缺失數據的處理不會出現偏離或隱藏任何難以忽視的真相。

total=df_train.isnull().sum().sort_values(ascending=False)percent=(df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)missing_data=pd.concat([total,percent],axis=1,keys=['Total','Percent'])missing_data.head(20)

當超過 15% 的數據都缺失的時候,我們應該刪掉相關變量且假設該變量并不存在。

根據這一條,一系列變量都應該刪掉,例如 PoolQC,MiscFeature,Alley 等等,這些變量都不是很重要,因為他們基本都不是我們買房子時會考慮的因素。

GarageX 變量群的缺失數據量都相同,由于關于車庫的最重要的信息都可以由 GarageCars 表達,并且這些數據只占缺失數據的 5%,我們也會刪除上述的 GarageX 變量群。同樣的邏輯也適用于 BsmtX 變量群。

對于 MasVnrArea 和 MasVnrType,我們可以認為這些因素并不重要。除此之外,他們和 YearBuilt 以及 OverallQual 都有很強的關聯性,而這兩個變量我們已經考慮過了。所以刪除 MasVnrArea 和 MasVnrType 并不會丟失信息。

最后,由于 Electrical 中只有一個損失的觀察值,所以我們刪除這個觀察值,但是保留這一變量。

df_train=df_train.drop((missing_data[missing_data['Total']>1]).index,1)df_train=df_train.drop(df_train.loc[df_train['Electrical'].isnull()].index)df_train.isnull().sum().max()#justcheckingthatthere'snomissingdatamissing...

異常值

單因素分析

這里的關鍵在于如何建立閾值,定義一個觀察值為異常值。我們對數據進行正態化,意味著把數據值轉換成均值為 0,方差為 1 的數據。

saleprice_scaled=StandardScaler().fit_transform(df_train['SalePrice'][:,np.newaxis]);low_range=saleprice_scaled[saleprice_scaled[:,0].argsort()][:10]high_range=saleprice_scaled[saleprice_scaled[:,0].argsort()][-10:]print('outerrange(low)ofthedistribution:')print(low_range)print(' outerrange(high)ofthedistribution:')print(high_range)

進行正態化后,可以看出:

低范圍的值都比較相似并且在 0 附近分布。

高范圍的值離 0 很遠,并且七點幾的值遠在正常范圍之外。

雙變量分析

1. 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));

從圖中可以看出:

有兩個離群的 GrLivArea 值很高的數據,我們可以推測出現這種情況的原因。或許他們代表了農業地區,也就解釋了低價。這兩個點很明顯不能代表典型樣例,所以我們將它們定義為異常值并刪除。

圖中頂部的兩個點是七點幾的觀測值,他們雖然看起來像特殊情況,但是他們依然符合整體趨勢,所以我們將其保留下來。

刪除點

df_train.sort_values(by='GrLivArea',ascending=False)[:2]df_train=df_train.drop(df_train[df_train['Id']==1299].index)df_train=df_train.drop(df_train[df_train['Id']==524].index)

2. TotalBsmtSF 和 SalePrice 雙變量分析

var='TotalBsmtSF'data=pd.concat([df_train['SalePrice'],df_train[var]],axis=1)data.plot.scatter(x=var,y='SalePrice',ylim=(0,800000));

核心部分

“房價” 到底是誰?

這個問題的答案,需要我們驗證根據數據基礎進行多元分析的假設。

我們已經進行了數據清洗,并且發現了 SalePrice 的很多信息,現在我們要更進一步理解 SalePrice 如何遵循統計假設,可以讓我們應用多元技術。

應該測量 4 個假設量:

正態性

同方差性

線性

相關錯誤缺失

正態性:

應主要關注以下兩點:

直方圖– 峰度和偏度。

正態概率圖– 數據分布應緊密跟隨代表正態分布的對角線。

1. SalePrice

繪制直方圖和正態概率圖:

sns.distplot(df_train['SalePrice'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['SalePrice'],plot=plt)

可以看出,房價分布不是正態的,顯示了峰值,正偏度,但是并不跟隨對角線。

可以用對數變換來解決這個問題

進行對數變換:

df_train['SalePrice']=np.log(df_train['SalePrice'])

繪制變換后的直方圖和正態概率圖:

sns.distplot(df_train['SalePrice'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['SalePrice'],plot=plt)

2. GrLivArea

繪制直方圖和正態概率曲線圖:

sns.distplot(df_train['GrLivArea'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['GrLivArea'],plot=plt)

進行對數變換:

df_train['GrLivArea']=np.log(df_train['GrLivArea'])

繪制變換后的直方圖和正態概率圖:

sns.distplot(df_train['GrLivArea'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['GrLivArea'],plot=plt)

3. TotalBsmtSF

繪制直方圖和正態概率曲線圖:

sns.distplot(df_train['TotalBsmtSF'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['TotalBsmtSF'],plot=plt)

從圖中可以看出:

顯示出了偏度

大量為 0 的觀察值(沒有地下室的房屋)

含 0 的數據無法進行對數變換

我們建立了一個變量,可以得到有沒有地下室的影響值(二值變量),我們選擇忽略零值,只對非零值進行對數變換。這樣我們既可以變換數據,也不會損失有沒有地下室的影響。

df_train['HasBsmt']=pd.Series(len(df_train['TotalBsmtSF']),index=df_train.index)df_train['HasBsmt']=0df_train.loc[df_train['TotalBsmtSF']>0,'HasBsmt']=1

進行對數變換:

df_train['TotalBsmtSF']=np.log(df_train['TotalBsmtSF'])

繪制變換后的直方圖和正態概率圖:

sns.distplot(df_train['TotalBsmtSF'],fit=norm);fig=plt.figure()res=stats.probplot(df_train['TotalBsmtSF'],plot=plt)

同方差性:

最好的測量兩個變量的同方差性的方法就是圖像。

1. SalePrice 和 GrLivArea 同方差性

繪制散點圖:

plt.scatter(df_train['GrLivArea'],df_train['SalePrice']);

2. SalePrice with TotalBsmtSF 同方差性

繪制散點圖:

plt.scatter(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'],df_train[df_train['TotalBsmtSF']>0]['SalePrice']);

可以看出 SalePrice 在整個 TotalBsmtSF 變量范圍內顯示出了同等級別的變化。

虛擬變量

將類別變量轉換為虛擬變量:

df_train=pd.get_dummies(df_train)

結論

整個方案中,我們使用了很多《多元數據分析》中提出的方法。我們對變量進行了哲學分析,不僅對 SalePrice 進行了單獨分析,還結合了相關程度最高的變量進行分析。我們處理了缺失數據和異常值,我們驗證了一些基礎統計假設,并且將類別變量轉換為虛擬變量。

但問題還沒有結束,我們還需要預測房價的變化趨勢,房價預測是否適合線性回歸正則化的方法?是否適合組合方法?或者一些其他的方法?

希望你可以進行自己的探索發現。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28429
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84878

原文標題:詳解 Kaggle 房價預測競賽優勝方案:用 Python 進行全面數據探索

文章出處:【微信號:worldofai,微信公眾號:worldofai】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python存儲數據詳解

    人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。2. csv文件Python可以將數據存儲為CSV文件格式,我們可以excel打開CSV文檔,進行數據的瀏覽,十分方
    發表于 03-29 15:47

    Python中常用的數據類型

    數據類型是每種編程語言必備屬性,只有給數據賦予明確的數據類型,計算機才能對數據進行處理運算,因此,正確使用
    發表于 04-19 15:14

    怎么有效學習Python數據分析?

    Python在人工智能、機器學習領域受到火熱追捧,很大程度上在于它擁有非常龐大的第三方庫,以及強大的通用編程性能。因此,快速掌握Python進行數據分析,就是學習Python各種第三方
    發表于 06-28 15:18

    Python機器學習經典實例教程指南和附帶源碼

    最火的Python語言、通過各種各樣的機器學習算法來解決實際問題!資料中介紹的主要問題如下:- 探索分類分析算法并將其應用于收入等級評估問題- 使用預測建模并將其應用到實際問題中- 了解如何使用無
    發表于 08-28 15:06

    利用Python進行數據分析之時間序列基礎

    《利用Python進行數據分析》 112時間序列基礎
    發表于 03-20 09:30

    如何利用Python進行數據分析

    《利用Python進行數據分析》 122高階GroupBy應用
    發表于 04-23 07:29

    python數據分析基礎之使用statasmodels進行線性回歸

    python 數據分析基礎 day16-使用statasmodels進行線性回歸
    發表于 06-19 11:22

    如何快速學會Python?利用Python進行數據分析

    比如量級稍微大些的數據,Office的性能根本不能滿足需求,而用 Python 可以輕松地處理、分析。而微軟也正在考慮將 Python 作為 Excel 的一種官方腳本語言,由于 Python
    的頭像 發表于 04-17 16:00 ?1.1w次閱讀

    Python語言的特點和使用Python對XML文件的數據進行解析說明

    各行各業都進入網絡化時代, xml 成為一種通用的數據文件在各種領域中得到廣泛應用。xml 作為測試用例的數據輸入,需要用Python 對xml 文件的數據
    發表于 08-28 10:33 ?6次下載
    <b class='flag-5'>Python</b>語言的特點和使用<b class='flag-5'>Python</b>對XML文件的<b class='flag-5'>數據</b><b class='flag-5'>進行</b>解析說明

    Python寫網絡爬蟲

    Python寫網絡爬蟲的方法說明。
    發表于 06-01 11:55 ?21次下載

    Python學習科學編程

    Python學習科學編程,Python經典教材。
    發表于 03-09 15:00 ?0次下載

    python有什么 如何用python創建數據

    python有什么 如何用python創建數據Python是一種高級編程語言,可以用于開發各種類型的應用程序和工具。它的廣泛應用使它在
    的頭像 發表于 08-28 16:41 ?1209次閱讀

    python讀取數據數據 python查詢數據python數據庫連接

    庫,獲取數據庫中的數據,并對數據進行增刪改查等操作。本文將詳細介紹Python如何連接數據庫、讀
    的頭像 發表于 08-28 17:09 ?1867次閱讀

    pycharm進行python爬蟲的步驟

    以下是使用PyCharm進行Python爬蟲的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個流行的
    的頭像 發表于 07-11 10:11 ?907次閱讀

    使用Python進行串口通信的案例

    當然!以下是一個使用Python進行串口通信的簡單示例。這個示例展示了如何配置串口、發送數據以及接收數據。我們將使用 pyserial 庫,這是一個非常流行的用于串口通信的
    的頭像 發表于 11-22 09:11 ?330次閱讀
    主站蜘蛛池模板: aa级毛片| 亚洲国产成人精彩精品| 国产网站在线| 久久成人免费网站| 精品国内视频| 拍拍拍美女黄色1000视频 | 久久精品国产大片免费观看| v片视频| 又长又大又粗又硬3p免费视| 女人爽到喷水的视频大全在线观看| 欧美日韩在线成人免费| 色拍拍拍| 午夜免费看片| 综合欧美亚洲| 欧美深深色噜噜狠狠yyy| 欧美tube6最新69| 97涩涩涩| jizz 大全欧美| 最近2018中文字幕2019视频 | 亚洲啪啪| 福利视频自拍| 超级乱淫片67194免费看| 九九热精品视频在线播放| 色综合视频一区二区三区| 91大神在线免费观看| 4虎影院在线观看| 国模视频在线| 经典三级第一页| 成人综合在线观看| 色惰网站| 五月sese| 中文天堂在线视频| 人操人摸| 巨乳色最新网址| 日本aaaa| 国产人免费人成免费视频| 四色成人网| 国产午夜剧场| 亚洲国产精品第一页| 色香蕉色香蕉在线视频| 国产日本特黄特色大片免费视频|