天天看點

資料探索性分析EDA(可做子產品集合)

1.資料導入

import pandas as pd
titanic = pd.read_csv('titanic.csv')
           

2.檢視資料的行列數、資料類型、數值型資料分布情況

print(titanic.shape)
print(titanic.describe())
print(titanic.info())
           

3.合并标簽和特征資料集(與前兩步資料無關,僅做代碼示例)

4.資料基本資訊(類型、缺失資訊等)的封裝方法

def resumetable(df):
  #顯示資料的shape
  print(f''Dataset Shape:{df.shape}'')
  
  #建立一個新的Dataframe,用來展示需要的資料基本資訊
  summary=pd.Dataframe(df.dtypes,columns={'dtypes'}
  summary=summary.reset_index()
  summary['Name']=summary['index']
  summary=summary['Name','dtypes']
  summary['Missing']=df.isnull().sum().values
  summary['Uniques']=df.nunique().values
  summary['FirstValue']=df.loc[0].values
  summary['SecondValue']=df.loc[1].values
  summary['ThirdValue']=df.loc[2].values
  #熵(可以了解為資料的離散化程度,同一個特征,不同的取值越多,熵就越大)
  for name in summary['Name'].value_counts().index:
      summary.loc[summary['Name']==name,'entropy']=round(stats.entropy(df[name].value_counts(),base=2),2)
  return summary
           

5.單變量分析——針對分布情況

(1)數值型(主要使用——直方圖、箱線圖、小提琴圖)

#單個特征的分布情況(直方圖)
sns.distplot(titanic['fare'],kde=False)
#單個特征的分布情況(箱線圖)
sns.boxplot(titanic['fare'])
           

(2)類别型

print(titanic['Pclass'].value_counts())
#seaborn方法
sns.countplot(titanic['Pclass'])
           

ps:對于隻有一種類别的變量(或類别之間極其不平衡約等于隻有一種類别),考慮删掉該變量

類别型的其他分析:

f, [ax1,ax2,ax3] = plt.subplots(1,3,figsize=(20,5))
sns.countplot(x='Sex', hue='Survived', data=data_train, ax=ax1)
sns.countplot(x='Pclass', hue='Survived', data=data_train, ax=ax2)
sns.countplot(x='Embarked', hue='Survived', data=data_train, ax=ax3)
ax1.set_title('Sex特征分析')
ax2.set_title('Pclass特征分析')
ax3.set_title('Embarked特征分析')
f.suptitle('定類/定序資料類型特征分析',size=20,y=1.1)

f, [ax1,ax2] = plt.subplots(1,2,figsize=(20,5))
sns.countplot(x='SibSp', hue='Survived', data=data_train, ax=ax1)
sns.countplot(x='Parch', hue='Survived', data=data_train, ax=ax2)
ax1.set_title('SibSp特征分析')
ax2.set_title('Parch特征分析')

plt.show()
           
資料探索性分析EDA(可做子產品集合)

Sex: 對于女性而言,男性總人數雖多,但是獲救率明顯很低(先救婦女);

Pclass: 社會等級為3的總人數最多(也就是大多數人都是普通老百姓),但是獲救率非常低(社會價值高的人優先留下);

Embarked: 登陸港口S數量最多,但是獲救率也是最低的,C港口獲救率最高;

SibSp: 兄弟姐妹數量最低為0的人數最多,但是獲救率最低,而為1的獲救率相對較高,超過50%;

Parch: 情況基本同SibSp一樣,後續可以考慮将二者合并;

就以上5個特征來看,Sex和Pclass兩個特征是其中非常有影響的兩個。

6.資料相關性

除了對特征權重選擇外,我們也要分析特征相關性來篩選特征。相關性大的特征容易造成過拟合現象,是以需要進行剔除。最好的情況就是:所有特征相關性很低,各自的方差或者說資訊量很高。使用了seaborn的heatmap展示相關性,代碼如下:

features_selected = features
# data_corr 
df_corr = df[features_selected].copy()

colormap = plt.cm.RdBu
plt.figure(figsize=(20,20))
sns.heatmap(df_corr.corr(),linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True)
plt.show()
           
資料探索性分析EDA(可做子產品集合)
EDA

繼續閱讀