泰坦尼克号 第一章

这篇博客介绍了如何使用Python的pandas库对泰坦尼克号数据集进行处理,包括数据加载、列名翻译、逐块读取以节省内存、数据基本信息查看以及缺失值检查。此外,还展示了如何将数据保存为新的CSV文件,并提供了pandas的基础知识,如Series和DataFrame的数据结构。博客最后通过实际操作展示了如何筛选特定年龄范围内的乘客数据,并进行了数据排序和切片操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


泰坦尼克号

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霖承科技 LinChance

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值