kaggle笔记01: Titanic: Machine Learning from Disaster(一)

参考:https://www.kaggle.com/ldfreeman3/a-data-science-framework-to-achieve-99-accuracy

1. 定义问题: 预测是否存活。as the saying goes, don’t put the cart before the horse. This sensational tragedy shocked the international community and led to better regulations for ships.

2. 收集数据。drowning in data, yet staving for knowledge。
3. 数据准备,data wrangling。
It’s important to note, more predictor variables do not make a better model, but the right variables.
4C: correcting, completing, creating and converting.

  • correcting aberrant values and outliers.
  • completing missing information,决策树可以有缺失值,建议均值或中位数填充。
  • 在这个例子里,年龄、fare用中位数填充,embarked用众数填充。删掉passenger ID, cabin, ticket三列。
data = pd.read_csv('E:/study/data/titanic_kaggle/train.csv',delimiter=',',header=0)
#注意中位数写法 不是np.median() 填充完检查一下
data['Age'].fillna(data['Age'].median(),inplace=True)
data['Fare'].fillna(data['Fare'].median(),inplace=True)
# embarked用众数填充
count_e ={}
for e in data['Embarked']:
    if e not in count_e:
        count_e[e] = 0
    else:
        count_e[e] +=1
# 字典排序
mode = sorted(count_e.items(),key=lambda v:v[1],reverse=True)[0][0] 
data['Embarked'] = data['Embarked'].fillna(mode)
target = data['Survived']
data = data.drop(['PassengerId','Cabin','Ticket','Survived'],axis=1)
  • creating new features for analysis,增加新变量:
    同乘人数,familySize。
    isalone二值函数,大于1人为0。
    farebin将fare4等分。agebin将age5等分。
    如果年龄与因变量线性关系,则保留类别变量,但小孩更易存活,所以下文改成哑变量更合理。
    title,从name里提Mr等。
  • converting fields to the correct format,变量格式转化:
    无序类别变量变哑变量。如性别,embarked,agebin,farebin,title。
  • 分割训练与测试数据。
data['FamSize'] = data['SibSp']+data['Parch']+1
data['Isalone']=1
# famsize>1则isalone为0
data['Isalone'].loc[data['FamSize']>1]=0
#age5等分
data['AgeBin'] = pd.cut(data['Age'].astype(int),5)
#data['agebin_']=[]
#for r in range(len(data)):
#    data['agebin'].append(str(data['AgeBin'][r]))
    
data['FareBin'] = pd.cut(data['Fare'],4)
#expand=True返回dataframe,title 取值太多,计数小于10的定义为misc
data['Title'] = data['Name'].str.split(',',expand=True)[1].str.split('.',expand=True)[0]
title_name = (data['Title'].value_counts()<10)
data['Title'] = data['Title'].apply(lambda x: 'misc' if title_name.loc[x]==True else x)

# labelEncoder变类别变量 再get_dummies哑变量 
label= LabelEncoder()
data['age_code'] = label.fit_transform(data['AgeBin'])
data['fare_code'] = label.fit_transform(data['FareBin'])

sex_df = pd.get_dummies(data['Sex'],prefix='sex_')
embark_df = pd.get_dummies(data['Embarked'],prefix='embark_')
title_df = pd.get_dummies(data['Title'],prefix='title_')
class_df = pd.get_dummies(data['Pclass'],prefix='pclass_')
age_df = pd.get_dummies(data['age_code'],prefix='age_')
fare_df = pd.get_dummies(data['fare_code'],prefix='fare_')
# merge相同键值合并,concate axis=1 列合并
data_dummy = pd.concat([sex_df,embark_df,title_df,class_df,age_df,fare_df],axis=1)
x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.3)
x_train_dummy,x_test_dummy,y_train_dummy,y_test_dummy = train_test_split(data_dummy,target,test_size=0.3)

data示例:
在这里插入图片描述

data_dummy示例:
在这里插入图片描述

4. 探索数据。

  • 统计各属性不同取值,得到的存活率平均值。
    一等舱存活率62.9%,三等舱仅为24%。女性存活率74%,男性仅为18.9%。64岁以上的存活率仅为9%,16岁以下的存活率55%。从C出发的存活率55%,有三个家人以内陪同的存活率高,税费高于128的存活率高。
  • 画出连续或取值多的属性fare、age、familysize的箱型图或柱状图看分布情况。以age为例,plt.boxplot()看出年龄分布。
  • 画出类别变量embarked、pclass、isalone、title、sex等与survived关系柱图。以pclass为例,plt.hist()看出一二三等仓存活及死亡的人数,sns.barplot()看出一二三等仓存活的可能性。
  • 考虑多变量与survived关系,sns.pairplot()。
  • 做出热图。
col=['Pclass','Sex','AgeBin','SibSp','Parch','Embarked','FamSize','Isalone','FareBin','Title']
for c in col:
    target.groupby(data[c]).mean()  
data['Survived']=target
plt.subplot(131)
plt.boxplot(data['Age'],showmeans=True)
plt.title('age')
plt.subplot(132)
plt.hist(x=[data[data['Survived']==1]['Pclass'],data[data['Survived']==0]['Pclass']],stacked=True,label=['survived','dead'])
plt.title('Pclass-survived')
plt.xlabel('pclass')
plt.ylabel('# passengers')   
plt.legend()
plt.subplot(133)
sns.barplot(x='Pclass',y='Survived',order=[1,2,3],data=data)
sns.pairplot(data)
dfdata= data.corr()
sns.heatmap(dfdata,center=0)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33476409/article/details/83023759