由数据挖掘的知识可知,数据预处理包括:
(1) 数据清理:填写缺失值,光滑噪声数据等等。
(2) 数据集成:将多个数据源合成一个数据源。此处只有1个csv文件,过
(3) 数据变换:平滑聚集,数据概化等。
(4) 数据规约: 目的是减小数据量,同时又不影响结果。此处数据共891<1000行,暂不处理
PassengerId 旅客ID
Survived 是否活下来了,1:yes 0:no
Pclass 旅客等级 1 2 3 依据某博客的分析可以基本认为与票价Fare正相关
Name 名字
Sex 性别
Age 年龄
SibSp 有多少兄弟姐妹/配偶同船
Parch 有多少父母/子女同船
Ticket 船票号码
Fare 船票收费
Cabin 所在小屋
Embarked 登船城市 C Q S 分别代表不同的城市
对该实际问题,妇女、儿童和上层阶级更容易幸存,而年龄代表身体素质,父母兄弟可以互助,但此处父母对于儿童是“正”,对于中青年是“负”,房间位置与碰撞时的角度有关也影响存活率,而以下将会重点对这几项进行处理。
1、数据清理
首先通过excel表格发现Age, Cabin, Embarked字段有空值需要填充:Age属性考虑使用平均值29.69911765记为30,Cabin房间号的值各不相同,观察所有幸存者并未发现明显规律,只好暂不使用该“幸运”因素。Embarked直观上与存活率关系不大,观察发现S市644人,空白2人,以多数填充方式处理
以上直接在csv文件中处理
2、数据变换
SibSp 8=7 5=5 4=18 3=16 2=28 共74个 < 100看做一类 记 0,1,2
Parch 2、3、4、5、6共95个也看做一类 记 0,1,2
Age 以[0:16), [16:40),[40:99)离散化处理
Fare 票价与Pclass和Parch、SibSp相关,亲朋通常会入住同一房间
Embarked S计0,C记1,Q记2
Sex 男记1,女记2
至此,共Pclass,Sex, Age , SibSp, Parch, Embarked 6类特征,加上Survived为target,提取如下:
#读文件
def load_data(filename):
csvfile = file(filename, 'rb')
reader = csv.reader(csvfile)
datafile = []
for line in reader:
datafile.append(line)
#print line
csvfile.close()
return datafile
#预处理
def data_clean(datafile):
l = len(datafile)
print l
target = [0 for i in range(l)]
datamat = [[0 for j in range(6)] for i in range(l)]
for i in range(l):
datamat[i][0] = int(datafile[i][1]) #C
if(datafile[i][3] == 'male'):
datamat[i][