介绍

如果你没有听过Kaggle,那你一定要来了解一下它:

Kaggle 为全球顶尖数据科学家举办竞赛活动。那些有着科学难题的公司(比如 NASA)可以通过网络将数据和问题提交给 Kaggle,任何顶尖科学家都可以提交问题解决方案,网站会通过对每位科学家的贡献进行排名。到目前为止,在一场竞赛中至少有 30000 人提交至少一种模型。

简单来说就是一个数据科学竞赛网站,非常有趣。接下来让我们一起学习机器学习吧。

这次的任务是:Titanic-Kaggle

我们的重点是学习机器学习的过程,所以这次不涉及具体的算法实现,而是使用第三方库来实现算法,这里推荐scikit-learn,它提供了许多工具和模型,使用起来非常方便。另外我们还是用了Pandas库( pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 )来提高效率,还有matplotlib 和 Seaborn ,通过图标直观的观察数据。

我们先写一段代码来看看原始数据吧。

import pandas as pd

input_df = pd.read_csv('data/raw/train.csv', header=0)
submit_df  = pd.read_csv('data/raw/test.csv',  header=0)

# 合并他们
df = pd.concat([input_df, submit_df])

# 重建index
df.reset_index(inplace=True)

# 删除reset_index()产生的index column
df.drop('index', axis=1, inplace=True)

print df.shape[1], "columns:", df.columns.values
print "Row count:", df.shape[0]

输出如下,共有1309条数据,12个feature:

12 columns: ['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch'
 'Ticket' 'Fare' 'Cabin' 'Embarked']
Row count: 1309

数据预处理

拿到数据第一步是观察一下数据,看看是否有缺失数据,分析一下相关特征等等。

def observe(df):
	print "column: ", df.shape[1]
	columns = df.columns
	for i in columns:
		print i, "missing ",pd.isnull(df[i]).sum(), " type:", df[i].dtypes

---
column:  12
Age missing  263  type: float64
Cabin missing  1014  type: object
Embarked missing  2  type: object
Fare missing  1  type: float64
Name missing  0  type: object
Parch missing  0  type: int64
PassengerId missing  0  type: int64
Pclass missing  0  type: int64
Sex missing  0  type: object
SibSp missing  0  type: int64
Survived missing  418  type: float64
Ticket missing  0  type: object

可以看到:

  1. Survived 的缺失可以忽略,因为test.csv中的数据本来就是没有Survived的。
  2. Cabin 缺失很严重,我想可以忽略这一个特征了。
  3. Age 缺失的并不多,而且Age是一个重要的特征,应该保留。
Powered by Fruition