泰坦尼克号
0 第零章:比赛介绍
使用机器学习创建一个模型,预测哪些乘客在泰坦尼克号沉船事故中幸存下来。
泰坦尼克号的沉没是历史上最臭名昭著的沉船之一。
1912年4月15日,在她的处女航中,被广泛认为"不沉"的"泰坦尼克号"在与冰山相撞后沉没。不幸的是,船上的每个人都没有足够的救生艇,导致2224名乘客和船员中有1502人死亡。
虽然生存中有一些运气因素,但似乎有些群体比其他群体更有可能生存下来。
在这个挑战中,我们要求您建立一个预测模型,回答以下问题:"什么样的人更有可能生存?"使用乘客数据(即姓名,年龄,性别,社会经济阶层等)。
0.1 目标
您的工作是预测乘客是否在泰坦尼克号沉没中幸存下来。
对于测试集中的每个乘客,您必须预测变量的 0 或 1 值。
0.2 指标
您的分数是您正确预测的乘客百分比。这称为准确性。
1 第一章:数据加载
1.1 载入数据
数据集下载 https://www.kaggle.com/c/titanic/overview
1.1.1 任务一:导入numpy和pandas
import numpy as np
import pandas as pd
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
# 相对路径导入csv文件
df = pd.read_csv('train.csv')
# 展示前 3 行信息
df.head(3)
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
pd.read_csv() 读取带分隔符的数据。默认分隔符为逗号(csv)
pd.read_table() 读取带分隔符的数据。默认分隔符为制表符“\t”(tsv)
TSV是用制表符(Tab, ‘\t’)作为字段值的分隔符;
CSV是用半角逗号(’,’)作为字段值的分隔符
# 使用read_csv读取csv和tsv
# data1 = pd.read_csv(file_path) #使用read_csv读取csv文件
# data2 = pd.read_csv(file_path,sep='\t') #使用read_csv读取tsv文件,将分隔符设置为'\t'
# 使用read_table读取csv和tsv
# data3 = pd.read_csv(file_path) #使用read_table读取tsv文件
# data4 = pd.read_csv(file_path,sep=',') #使用read_table读取tsv文件,将分隔符设置为','
1.1.3 任务三:每1000行为一个数据模块,逐块读取
# 逐块读取,防止爆内存,提前限制读入的大小,依次读入,每次1000行,不等列数(3or4)
chunker = pd.read_csv('train.csv', chunksize=1000)
print(type(chunker)) # #<class 'pandas.io.parsers.TextFileReader'>
for i in chunker:
print(i)
print(type(i))# <class 'pandas.core.frame.DataFrame'>
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-73-03aa9016448f> in <module>
1 # 逐块读取,防止爆内存,提前限制读入的大小,依次读入,每次1000行,不等列数(3or4)
2 chunker = pd.read_csv('train.csv', chunksize=1000)
----> 3 chunker.head()
4 # print(type(chunker)) # #<class 'pandas.io.parsers.TextFileReader'>
5 # for i in chunker:
AttributeError: 'TextFileReader' object has no attribute 'head'
什么是逐块读取?为什么要逐块读取呢?
ans:将数据分成很多个小块读入,减少内存的存储与计算资源
【提示】大家可以chunker(数据块)是什么类型?用for
循环打印出来出处具体的样子是什么?
1.1.4 任务四:将表头改成中文,索引改为乘客ID 对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据
PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口
# names定义新列名,header=0 忽略原始列名
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
# 默认head(5)
df.head()
是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | |
---|---|---|---|---|---|---|---|---|---|---|---|
乘客ID | |||||||||||
1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?
ans:因为使用块读入,块的数据类型为DataFrame。则可以使用DataFrame中的rename()
1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
df.info()
# 每一列的是否 有 非空值的个数 和 数据类型
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 是否幸存 891 non-null int64
1 仓位等级 891 non-null int64
2 姓名 891 non-null object
3 性别 891 non-null object
4 年龄 714 non-null float64
5 兄弟姐妹个数 891 non-null int64
6 父母子女个数 891 non-null int64
7 船票信息 891 non-null object
8 票价 891 non-null float64
9 客舱 204 non-null object
10 登船港口 889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB
1.2.2 任务二:观察表格前10行的数据和后15行的数据
df.head(10)
df.tail