码迷,mamicode.com
首页 > 其他好文 > 详细

kaggle数据挖掘竞赛初步--Titanic<数据变换>

时间:2015-03-20 23:44:48      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

缺失值填充之后,就要对其他格式有问题的属性进行处理了。比如Sex Embarked这些属性的值都是字符串类型的,而scikit learn中的模型都只能处理数值型的数据,需要将这些原始的字符串类型的数据转为数值型数据。所有数据通常可以分成两种类型:定量与定性。定量的属性(数值属性)通常蕴涵着可排序性,比如泰坦尼克号数据集中,年龄就是一个定量属性。定性属性(标称 序数 二元属性)的值是一些符号或事务的名称,每个值代表某种类别编码或状态,不是可测量量,是不具有排序意义的,比如Embarked(登船地点)。

对于字符串型的定性属性转换,如果单纯的用数字来代替的化,比如对于Embarked的三个值S Q C分别用1 2 3来代替,模型会把它当成是有顺序的数值属性,对于一些根据距离来确定分类的算法来说,就不能准确运行啦。那么应该怎么将定性属性转为数字呢?

(1)dummy varibles(不知道中文应该说成啥。。虚设属性?)

什么是dummy呢,举个栗子,Emarked属性的取值有三个S Q C,分别代表三个上船地点。dummy这个属性呢,就是向数据集里再加入三个属性暂且命名为Embarked_S Embarkde_Q 和Embarked_C,如果一个人是在S地点上船的,那么这三个属性的值就是(1,0,0),在Q点上船的就是(0,1,0),每个属性都是二元属性,1代表是,0代表否。所以dummy适用于值范围相对较少的属性。

1     import pandas as pd
    #creat dummy varibles from raw data 2 dummies_df = pd.get_dummies(df.Embarked) 3 #remana the columns to Embarked_S... 4 dummies_df = dummies_df.rename(columns=lambda x:Embarked_+str(x)) 5 df = pd.concat([df,dummies_df],axis=1)

这样就会3个dummy属性加到数据集里啦,用df.info()看一下:

技术分享

(2)factorizing(因子分解?)

用dummy可以处理像Embarked这样的值域范围较小的标称属性。对于Cabin(船舱号,A43 B55这种)这种标称属性,用dummy就不好处理了。pandas提供了一个factorize()函数,用以将标称属性的字符串值映射为一个数字,相同的字符串映射为同一个数字。不同于dummy,这种映射最后只生成一个属性。对于Cabin属性,我们可以将其分成两部分,字符串+数字,新建两个属性。对于字符串(A-E & U),可以用factorize()将其处理成数字。

 

kaggle数据挖掘竞赛初步--Titanic<数据变换>

标签:

原文地址:http://www.cnblogs.com/north-north/p/4354775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!