数据分析(二)
来源:互联网 发布:查自己淘宝的虚假交易 编辑:程序博客网 时间:2024/06/05 01:15
数据清洗
做完特征分析后,先来看一下train表变成什么样子,再看看还需要做些什么
train.head(10)
Cabin因为缺失值太多,暂且不考虑这一个特征。Ticket没看出有多大作用,也忽略掉。Age有一些缺失值,需要补上。还有一些特征已经提取过信息了,像SibSp, Parch已经归纳出IsAlone,就可以删除了。等等还有一些操作,得一步一步来。
首先先填补年龄,
前面说过年龄和称呼应该有很大关系,我们来验证下
fig = plt.figure()ax = fig.add_subplot(111)ax.set_ylabel('Mean')ax.set_xlabel('Title')train.groupby('Title').Age.mean().plot(kind='bar')plt.show()
这是各个称呼的年龄的平均值,再看看标准差
fig = plt.figure()ax = fig.add_subplot(111)ax.set_ylabel('Std')ax.set_xlabel('Title')train.groupby('Title').Age.std().plot(kind='bar')plt.show()
看来确实可以用称呼来模拟年龄
title_mapping = {"Mr": 3, "Miss": 2, "Mrs": 4, "Master": 1, "Rare": 5}for dataset in full_data: dataset['Title'] = dataset['Title'].map(title_mapping) dataset['Title'] = dataset['Title'].fillna(0) age_avg = dataset.groupby('Title').Age.mean() age_std = dataset.groupby('Title').Age.std() for i in range(1,6): dataset.loc[(dataset.Age.isnull()) & (dataset.Title == i), 'Age'] = np.random.randint(age_avg[i] - age_std[i],\ age_avg[i] + age_std[i]) dataset['Age'] = dataset['Age'].astype(int)train.head(15)
年龄已经补全了,然而我们要做的还有很多很多。接下来还要将年龄转换为类别,我这里就直接将年龄从0到80划分为5个年龄段
train['AgeBand'] = pd.cut(train['Age'], 5)for dataset in full_data: dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0 dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1 dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2 dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3 dataset.loc[ dataset['Age'] > 64, 'Age'] = 4train.head()
同样,还要将票价特征做同样的处理
train['FareBand'] = pd.qcut(train['Fare'], 4)train[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True)
for dataset in full_data: dataset.loc[ dataset['Fare'] <= 7.91, 'Fare'] = 0 dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1 dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare'] = 2 dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3 dataset['Fare'] = dataset['Fare'].astype(int)train.head(10)
特征有点多,先删减一点
train = train.drop(['Name', 'Ticket', 'Cabin', 'SibSp', 'FamilySize', 'Parch', 'AgeBand', 'FareBand', 'PassengerId'], axis = 1)train.head(10)
再然后就进入到最后的数据编码阶段,我们要对 Pclass, Sex, Embarked, IsAlone 进行一位有效编码,又叫独热编码
for dataset in full_data: dataset['Embarked'] = dataset['Embarked'].fillna('S') # 忘了补全train = pd.get_dummies(train, columns=["Pclass", "Embarked", "IsAlone", "Sex"])train.head(10)
到这里应该差不多了,但是我觉得有一个小缺陷,Title的编号是1到5,我希望1到5的顺序是由年龄的平均值递增的,而我之前并没有注意到,打乱了他们的顺序,代码已经改好了,上传的图片就不改了,差别也不大。最后再上一张正确的图
阅读全文
0 0
- 数据分析(二)
- 数据分析(二)
- Wireshark 数据分析(二)
- python数据分析(二)
- 数据分析实例--兰州二手房数据分析(二)
- 数据分析入门整理(二)
- 04# 数据分析 学习笔记(二)
- 12306泄露数据分析(二)
- spark大数据分析(二)
- 数据分析之旅(二)
- python数据分析实践(二)
- 数据分析面试题(二)
- 通信数据分析平台(二)
- Python数据分析学习笔记(二)
- Python数据分析笔记(二)
- [ArcGIS] 空间分析(二) 矢量数据
- 利用Python进行数据分析(二)
- 招聘数据分析<二>
- linux shell 运行jar 脚本不退出
- (学习java)顺序栈实现逆波兰表达式
- 计算字符中相邻位置相同字符的个数
- hdu5119(dp)
- 水池数目
- 数据分析(二)
- angular+ionic开发的页面,当子页面需要从父组件带参进入又需要可以脱离父组件进入,怎么配置?
- centos 7 安装 python 3 虚拟环境
- openresty图片上传
- Java学习:trim()函数、split()函数
- Java Web项目第二次总结
- 公网访问树莓派
- (学习java)链栈结构的简单实现
- Java多线程系列(七)—ReentrantLock源码分析