获取和查看数据集
了解我们如何获取和查看数据集。
预测泰坦尼克号上的生存情况
泰坦尼克号沉船事件是历史上最著名的海难之一。
1912年4月15日,泰坦尼克号在撞上冰山后沉没。当时被认为不会沉没的船只,船上缺乏足够的救生艇。结果,2224名乘客和船员中,有1502人不幸遇难。
当然,722名幸存者无疑有些运气成分。但似乎某些人群的生存几率明显更高。因此,泰坦尼克号沉船事件也成为了机器学习初学者的经典入门案例。
如果你已有机器学习经验,可能听说过Kaggle提供的著名泰坦尼克号机器学习竞赛。
如果你还不了解Kaggle,它属于全球最大的数据科学社区之一。提供大量有趣的公开数据集,是入门机器学习的理想平台。
需要解决的问题很简单:利用机器学习构建一个模型,根据乘客信息预测谁在泰坦尼克号海难中幸存。
获取数据集
要获取数据集,你需要注册一个Kaggle账号(免费),然后加入该竞赛。尽管Kaggle以竞赛为核心,但你无需主动提交解决方案即可参与。
当你加入竞赛时,必须接受并遵守相关规则,例如每日可提交次数、团队人数上限等竞赛特定要求。
在竞赛页面顶部的“Data”标签页中可以找到竞赛数据。向下滚动即可看到文件列表。数据包含三个文件:
train.csvtest.csvgender_submission.csv
train.csv 包含部分泰坦尼克号乘客的数据,用于训练你的算法判断乘客是否幸存。
test.csv 包含另一部分乘客的数据,用于评估你的算法表现。
gender_submission.csv 是一个示例文件,展示如何组织预测结果以便提交至Kaggle。由于你当前的目标是学习而非参赛,可以跳过此文件。
请下载 train.csv 和 test.csv 文件。
查看数据
第一步是加载数据。你可以使用Pandas库来完成。它是机器学习领域广受认可的数据处理工具,提供了多种实用功能,例如用于读取CSV文件的 read_csv 函数。
从CSV文件加载数据
1import pandas as pd 2train = pd.read_csv('train.csv') 3test = pd.read_csv('test.csv')
数据被加载到 train 和 test 变量中,它们都是Pandas的DataFrame对象。
DataFrame以二维结构存储数据,并带有标签,类似于数据库表或电子表格。它自带许多有用的属性和方法。
例如,DataFrame的 shape 属性返回一个包含行数和列数的元组。
泰坦尼克号数据集的形状
1import pandas as pd 2train = pd.read_csv('train.csv') 3test = pd.read_csv('test.csv') 4print('train has {} rows and {} columns'.format(*train.shape)) 5print('test has {} rows and {} columns'.format(*test.shape))
可以看到,训练集有891条记录,测试集有418条记录。更值得注意的是,训练集比测试集多出一列。
DataFrame的 info() 方法能提供更详细的信息。让我们查看训练集的具体情况。
训练集与测试集的结构
1import pandas as pd 2train = pd.read_csv('train.csv') 3test = pd.read_csv('test.csv') 4train.info() 5#test.info()
info 方法会列出所有列的信息:索引、列名、非空值数量以及数据类型。
我们也可以查看测试集的情况。只需取消注释上方代码框中的第5行即可。对比两个数据集可以发现,测试集缺少“Survived”这一列,该列用于标识乘客是否幸存。
正如Kaggle所说明的,他们使用测试集来评估提交结果。如果提前提供正确答案,比赛也就失去了意义。我们的任务正是预测正确的标签。
由于你并不打算将预测结果提交给Kaggle来评估模型性能,因此测试集在此阶段并无实际用途。
我们将重点放在训练集上。
info 输出的信息较为抽象。不如直接看看真实数据?这正是 head 方法的作用。
head 方法会显示列名及前五行数据。基于这些信息,我们来逐一分析各列内容。你也可以在Kaggle页面上查阅相应字段的说明。
查看数据
1import pandas as pd 2train = pd.read_csv('train.csv') 3test = pd.read_csv('test.csv') 4print(train.head())
每一列代表数据的一个特征。“PassengerId”是每行的连续编号。“Survived”表示乘客是否幸存(0=否,1=是)。“Pclass”是票务等级(1=一等舱,2=二等舱,3=三等舱)。接下来是直观易懂的字段:“Name”(姓名)、“Sex”(性别)、“Age”(年龄)。“SibSp”表示乘客在船上的兄弟姐妹或配偶人数。“Parch”表示乘客在船上的父母或子女人数。
此外还有“Fare”(票价)、“Cabin”(客舱号)以及登船港口(embarked),其中C=瑟堡,Q=昆士敦,S=南安普顿。