数智化转型网szhzxw.cn 数字化转型网专题栏目 数据集如何构建(数据采集&数据清洗)?

数据集如何构建(数据采集&数据清洗)?

数字化转型网数据专题将关注数据治理、数据质量管理、数据架构、主数据管理、数据仓库、元数据管理、数据备份、数据挖掘、数据分析、数据安全、大数据、数据合规、等数据相关全产业链相关环节。

同样由于这是一个比赛,我们拿到的基本上是已经相对完整的数据了。打开从网站上下载的文件包,train.csv是训练数据集,即建模的样本,test.csv是测试集数据,即需要通过模型验证预测结果的数据,用excel打开数据长这样:数字化转型网www.szhzxw.cn

数据总共有11个维度,训练集和测试集数据维度相同,分别是:

PassengerId:乘客ID,主键索引

Survived:是否生还,1-生还,0-未生还,是本项目需要建模预测的结果

Pclass:客舱等级,1/2/3等舱

Name:姓名

Sex:性别

Age:年龄

SibSp:兄弟姐妹/妻子等旁系亲属数量数字化转型网www.szhzxw.cn

Parch:父母/小孩这类直系亲属数量

Ticket:票号

Fare:票价

Cabin:客舱编号

Embarked:登船港口编号

在现实情况下,该选用什么样的数据指标,不同的数据维度该进行怎么样的处理,一般都需要数据的同学自己构建。针对这个项目示例拿到的数据,我们其实也可以增加自己设计出来的新的数据指标。拿到上面的数据集之后,我们还不能直接用,一般需要经过两个步骤才能正式把数据“喂”给模型。

1.数据预处理

我们先用pandas加载csv文件:

# 训练集

train_data = pd.read_csv(“./train.csv”)数字化转型网www.szhzxw.cn

# 测试集

test_data = pd.read_csv(“./test.csv”)

从数据截图可以看到文档中数据其实不是那么“干净”,首先很多数据都不是“数”,可能是一个字符串或者一串编码,这样的数据是无法直接进行建模计算的。另一个问题是很多数据维度质量并不高,存在大量的缺失值。因此我们首先要保证喂给模型的数据是“干净”的,即每个维度都需要是数学上能够直接运算的编码。在这里我们介绍一种比较简单直观的”one-hot”编码方式。这种方式的基本思想是,把不能直接运算的特征转化为离散编码的模式,把每种取值都看作一种状态,用0/1的形式来表示每个样本是否激活的该状态。

比如针对性别这个特征,原本只有一列“male/female”的取值,那么我们可以把他转化为两列,“是否male”和”是否female”,那当一个乘客的性别为“male”时,他在数据编码当中的取值就变成了“是否male-1”,“是否female-0”,这样便保证了数据可以被建模计算。在python当中,我们可以使用pandas的函数来快速实现:

pd.get_dummies(train_data[features])数字化转型网www.szhzxw.cn

构建完成的数据集形式如下图所示:

除特征编码以外,我们还需要有选择性地对重要的数据维度缺失值进行填补,各维度缺失情况如下:

这里其实有很多技巧,简单一点的可以用默认值进行填补,比如均值填补,中位数填补等等。或者可以用一些先验的知识进行辅助判断,比如对于年龄的缺失值,我们可以根据姓名当中的称谓,Miss,Mr,Master来判断乘客的年龄范围,再用中位数进行填补。这些技巧我们先不过多赘述,我们这里先采较为简单的方式对这些维度进行处理:年龄-均值,客舱编号-默认值,港口编号-众数。

#顺便复习一下其他的预处理技巧

#缺失值处理可以使用fillna方法填充缺失值。例如,对于年龄这一列,可以使用中位数填充缺失值

df[‘Age’].fillna(df[‘Age’].median(), inplace=True)

#归一化:可以使用sklearn.preprocessing模块中的MinMaxScaler类进行归一化

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

df[‘Fare’] = scaler.fit_transform(df[[‘Fare’]])数字化转型网www.szhzxw.cn

#标准化:可以使用sklearn.preprocessing模块中的StandardScaler类进行标准化

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

df[‘Age’] = scaler.fit_transform(df[[‘Age’]])

#分箱处理:可以使用pandas.cut方法对连续型变量进行分箱处理

df[‘Age’] = pd.cut(df[‘Age’], 5, labels=False)

#特征选择:可以使用相关系数、卡方检验、互信息等方法进行特征选择

corr = df.corr()[‘Survived’].abs().sort_values(ascending=False)

top_features = corr.index[1:4]

#数据变换:可以使用对数变换、平方根变换等方法对数据进行变换

df[‘Fare’] = np.log1p(df[‘Fare’])数字化转型网www.szhzxw.cn

#异常值处理:可以使用箱线图、Z-score等方法检测异常值,并将其删除或替换

Q1 = df[‘Fare’].quantile(0.25)

Q3 = df[‘Fare’].quantile(0.75)

IQR = Q3 – Q1

upper_bound = Q3 + 1.5 * IQR

df.loc[df[‘Fare’] > upper_bound, ‘Fare’] = upper_bound

#文本数据处理:可以使用词袋模型、TF-IDF等方法对文本数据进行处理

df[‘Title’] = df[‘Name’].str.extract(‘ ([A-Za-z]+)\.’, expand=False)

df = pd.concat([df, pd.get_dummies(df[‘Title’], prefix=’Title’)], axis=1)

df.drop(‘Title’, axis=1, inplace=True)数字化转型网www.szhzxw.cn

#时间数据处理:可以提取出时间数据中的年、月、日、星期等信息

df[‘Year’] = pd.DatetimeIndex(df[‘Date’]).year

那么处理完编码和缺失值之后,我们是不是可以直接进行建模了呢?反正我只要能把所有变量转换成编码,那我直接数据维度越多越好,扔给机器去学习不就好了?

这里就涉及到的一个新的概念叫做过拟合,也就是指的是模型在训练集上表现的很好,但是对未知样本的预测表现一般,如果你选取的特征维度过多,且与预测目标的相关性不大,那么可能就出现这种情况。举个例子,假设在刚刚构建数据集的时候我选择了“姓名”这个维度作为特征,那编码过后的数据集就变成了“是否张三”,“是否李四”,那么模型接收到的数据信息可能就变成了“只有姓名时张三和李四的人生还”,那么此时来了一个用户姓名叫“赵四”,完全不在训练集的名单里面,那姓名这个特征在模型当中就变成了噪声,有还不如没有。

且另一方面,数据维度的增加意味着模型的大小和训练代价的增大,如果数据特征太过稀疏,则数据集可能会长成这个样子:数字化转型网www.szhzxw.cn

这样的数据会导致模型训练和预测的性能相当低,实际应用场景当中我们肯定是尽可能精简。所以,在把数据喂给模型之前,我们还需要做一件事,那就是特征筛选。

2.特征筛选

1、如何构建特征其实有很多技巧,这里我们先用大家比较熟悉的分析方法来试一试,我们把这个数据集扔到excel里面做透视,对可能相关的数据特征进行对比分析,观察不同维度下的乘客存活率,以下是一份简单的对各个单一特征维度下乘客的生还率分析:

从数据中可以看出,女性乘客的生还率对比男性要高,青年和中年的生还率略高于老人和儿童,同时客舱等级越高级、票价越贵乘客的生还率也越高,有1~2个亲属的乘客生还概率最高,其次是单身汉,亲属越多的乘客生还概率越低等等。

进一步分析我们可能还会发现,客舱编号跟客舱等级呈正相关,只有一等舱/少量二等舱才有编号,B/D/E几个客舱的乘客生还率更高,直系亲属的数量通常和年龄呈正相关,旁系亲属越多的乘客可能是一家人集体出行等信息。

除此之外,除了群体特征以外,我们还需要考虑数据的方差等因素。在实际分析过程当中,一个一个去做变量分析也是比较费时间的,一般我们可以采取一些统计学方法来检验各个数据维度之间的相关性,例如卡方检验,皮尔逊相关系数等等。我们可以把每个变量之间的相关系数绘制成矩阵,这样我们就可以知道,哪些变量跟预测目标相关性更强,哪些变量性质重复容易引起过拟合,那么我们就可以考虑降维或者重新构造新的特征。在代码实现当中,我们这里使用sklearn的特征选择工具来计算相关性,我以卡方值的计算为例子:数字化转型网www.szhzxw.cn

X_new = SelectKBest(chi2, k=50).fit(X, y)

得到的结果如下:

这里便可以得到one-hot编码之后的每一个特征与存活率的相关性,卡方值越大,相关性越高,我们便可以依此来选择我们要使用的重要特征。我们演示的时候先把尽可能多的维度作为特征放进去试一下:

features = [“Age”,”Pclass”,”Sex”, “SibSp”, “Parch”,”Fare”,”Embarked”,”Cabin”]

声明:本文来自网络,版权归作者所有。文章内容仅代表作者独立观点,不代表数字化转型网立场,转载目的在于传递更多信息。如有侵权,请联系我们。数字化转型网www.szhzxw.cn

数字化转型网数据专题包含哪些内容

数字化转型网数据专题将关注数据治理、数据质量管理、数据架构、主数据管理、数据仓库、元数据管理、数据备份、数据挖掘、数据分析、数据安全、大数据、数据合规、等数据相关全产业链相关环节。

数字化转型网数据专题包含: 数字化转型网(www.szhzxw.cn)

1、数据相关外脑支持:100+数据相关专家、100+数据实践者、1000+相关资料

2、数据研习社:与全球数据相关专家、实践者共同探讨相关问题,推动产业发展!

3、国际认证培训:目前已引进DAMA国际认证CDMP,其他国内外认证也在逐步引进中

4、典型案例参考:与数字化转型网数据要素X研习社社员一起学习典型案例,共探企业数据落地应用

本文由数字化转型网(www.szhzxw.cn)转载而成,来源于 渭河数分星球;编辑/翻译:数字化转型网Jack。

免责声明: 本网站(http://www.szhzxw.cn/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。 本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等) 版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。https://www.szhzxw.cn/64616.html
联系我们

联系我们

17717556551

邮箱: editor@cxounion.org

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部