1. 程式人生 > >python資料分析超簡單入門 -- 專案實踐篇

python資料分析超簡單入門 -- 專案實踐篇

| 導語 適用於資料分析小白們~ ------ up主也是小白一枚,大加一起交流哈

寫在前面的話:

1、專案來源於up主自學udacity中的一個專案實踐,up主自身能力不足,因此文章很淺顯

2、泰坦尼克資料集是kaggle中一個好的可選資料集,網上有很多基於此資料集的分析&存活預測實踐的文章

3、要有點python基礎哦~ 沒有也沒關係,先下載軟體跑跑程式碼也是好的

話不多說,這就開始~

一、前期準備

資料下載:https://d17h27t6h515a5.cloudfront.net/topher/2016/December/584bcec3_titanic-data/titanic-data.csv

軟體準備:python 2.7  (安裝 pandas 庫)                                                                                         多嘴說一句,懶得裝各種庫各種包的童鞋,請直接下載anaconda。

更多Python課程資料請加python程式語言學習QQ群 515267276”,

即可免費獲得精品課程資料哦!

另外推薦jupyter,程式碼+報告結合神器

pandas --- 用過的人都說好用,沒用過的小夥伴趕緊開始嘗試吧~~     

               

      

二、分析開始

1、匯入資料&檢視基本資訊

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt
data_src='titanic-data.csv'df = pd.read_csv(data_src,header=0) # 匯入資料print df.info()  # 檢視資料集的基本資訊,print df.describe() # 檢視資料的摘要資訊print df.head()  # 檢視前幾行資料,方便了解資料具體情況

以   “ print df.info()  ”    為例,執行後輸出如下結果:

其中:

  • PassengerId => 乘客ID

  • Survived => 是否生還

  • Pclass => 乘客等級(1/2/3等艙位)

  • Name => 乘客姓名

  • Sex => 性別

  • Age => 年齡

  • SibSp => 堂兄弟/妹個數

  • Parch => 父母與小孩個數

  • Ticket => 船票資訊

  • Fare => 票價

  • Cabin => 客艙

  • Embarked => 登船港口

 

從資料集的基本資訊可以看出,Age \ Cabin \ Embarked 是存在缺失值的,其中Cabin欄位缺失值過多。

對於少量缺失值的情況,常用的方法是去除和補齊,數值型的資料是可以根據統計學的方法或者機器學習的方法將其進行補齊的。

對於存在大量缺失值的欄位,應衡量此欄位的重要程度與修復代價之間的權重。up主是果斷的沒有再考慮這個欄位了

2、分析 乘客存活率與各單變數之間的關係

 先看下全部樣本的存活率是多少:

survived_rate = float(df['Survived'].sum()) / df['Survived'].count()print 'survived_rate: ',survived_rate

執行程式碼輸出:survived_rate: 0.383838383838    

【艙位】

再看下 艙位和存活率之間的關係:

x=[df[(df.Pclass==1)]['Pclass'].size,df[(df.Pclass==2)]['Pclass'].size,df[(df.Pclass==3)]['Pclass'].size]
y=[df[(df.Pclass==1) & (df.Survived == 1)]['Pclass'].size,\
        df[(df.Pclass==2) & (df.Survived == 1)]['Pclass'].size, \
       df[(df.Pclass == 3) & (df.Survived == 1)]['Pclass'].size]
print '1 Pclass number:' + str(x[0]) + '    ' + '1 Pclass survive:' + str(y[0]) + '    ' + '1 Pclass survive rat:', float(y[0]) / x[0]
print '2 Pclass number:' + str(x[1]) + '    ' + '2 Pclass survive:' + str(y[1]) + '    ' + '2 Pclass survive rat:', float(y[1]) / x[1]
print '3 Pclass number:' + str(x[2]) + '    ' + '3 Pclass survive:' + str(y[2]) + '    ' + '3 Pclass survive rat:', float(y[2]) / x[2]
    
Pclass_survived_rate = (df.groupby(['Pclass']).sum() / df.groupby(['Pclass']).count())['Survived']
Pclass_survived_rate.plot(kind='bar')
plt.title('Pclass_survived_rate') 
plt.show()

輸出結果如下:

可以很清楚的看出,艙位與存活率之間的關係。三等艙的乘客們很慘~

【性別】

可以再簡單看看性別的影響:

Sex_survived_rate = (df.groupby(['Sex']).sum() / df.groupby(['Sex']).count())['Survived']
Sex_survived_rate.plot(kind='bar')
plt.title('Sex_survived_rate') 
plt.show()

                                 

【年齡】

資料集裡面的年齡是一個數值型變數,先按照未處理的裸資料來繪圖

Age_survived_rate=(df.groupby(['Age']).sum()/df.groupby(['Age']).count())['Survived']
Age_survived_rate.plot()
plt.title('Age_survived_rate') 
plt.show()

                                  

得出的結果特別難懂。

對於連續型數值變數,可以先做特徵離散化,將年齡分佈在各個年齡段中,效果就好多了呢~

這裡引出了特徵工程中的概念---離散化。

最近up主剛上了一屆特徵工程的課,等待up主的課後筆記吧~

age_clean_date=df[~np.isnan(df['Age'])] #去除年齡資料中的NaN ages=np.arange(0,81,5) #0~80歲,每5歲一段(年齡最大80歲) age_cut=pd.cut(age_clean_date.Age,ages) 
age_cut_grouped=age_clean_date.groupby(age_cut) 
age_Survival_Rate=(age_cut_grouped.sum()/age_cut_grouped.count())['Survived'] #計算每年齡段的倖存率 age_Survival_Rate.plot(kind='bar')
plt.title('Age_group_survived_rate') 
plt.show()

                                 

感興趣的小夥伴可以多嘗試幾個變數,看看能不能找到更有趣的結論哦~

3、分析 乘客存活率與複合變數之間的關係

一個數據表象,往往是多個因素影響的結果,其中多個因素的影響力各不同(可以稍微聯想主成份分析的概念)。因此複合變數的分析也是必不可少的哦~ 

單變數中艙位和性別對存活率的影響都很大,up主好奇到底是哪一個主要決定了乘客能否登上救生船,因此就對艙位和性別整合為複合變數,做了分析。

Pclass_Sex_survived_rate=(df.groupby(['Sex','Pclass']).sum()/df.groupby(['Sex','Pclass']).count())['Survived']
Pclass_Sex_survived_rate.plot(kind='bar')
plt.title('Pclass_Sex_survived_rate') 
plt.show()

                                

結果發現三等艙的女性存活率 高於 一等艙的男性存活率。可見當時的紳士風度啊!

4、挑選更有意思的分析角度,得出讓人信服的資料結論

對的,你沒看錯,up主自認得出的結論很淺顯,就不在這邊現眼了,大家各自表演吧~~

更多Python課程資料請加python程式語言學習QQ群 515267276”,

即可免費獲得精品課程資料哦!