【数据分析】 Titanic乘客获救预测(1)基础准备

数据分析 专栏收录该内容
3 篇文章 0 订阅

1 数据加载

数据分析入门的经典案例啦,数据可在Kaggle上进行下载。 下载地址

1.1 载入数据

  • 数据格式

    一般在进行机器学习算法时,常见的数据格式为csv以及tsv
    csv comma separated values,即“逗号分隔值”
    tsv:tab separated values,即“制表符分隔值”

  • 读取函数

    查看原始数据格式为csv,选择对应的读取函数pd.read_csv()
    read_csv()函数用于读取以’,'分割的文件到DataFrame
    read_table()函数用于读取以’/t’分割的文件到DataFrame
    函数详细解析可参考 官方文档

import pandas as pd
import numpy as np

train_data = pd.read_csv('titanic/titanic_train.csv') #csv数据存储路径
test_data = pd.read_csv('titanic/titanic_test.csv')
print(train_data.head(3)) #head函数获取前3行数据

输出结果如下
在这里插入图片描述

1.2 read_csv()函数

  • 分块处理
    当数据规模非常大时,一次性读取整个csv文件系统内存吃不消,这时可利用read_csv()中的一个参数chunksize来进行分块处理。
# 每2000行为一个数据块,逐块读取
chunker = pd.read_csv('data_train.csv', chunksize=2000)
  • 修改表头
# 查看原始数据的表头
print(data_train.columns)

在这里插入图片描述

# 将表头改为中文方便熟悉数据
data_train = pd.read_csv('titanic/titanic_train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)

在这里插入图片描述

1.3 观察数据

# 查看数据基本信息
print(data_train.info())

# 查看数据前n行/后n行数据
print(data_train.head(10))
print(data_train.tail(10))

# 判断数据是否为空 为空返回True,否则返回False
print(data_train.isnull().head())

1.4 保存数据

将修改后的数据集输出至指定目录下

data_train.to_csv('titanic/train_chinese.csv', encoding='utf-8') # utf-8避免中文输出乱码

常见编码格式区别:

  • UTF-8 Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。用以解决国际上字符的一种多字节编码,对英文使用8位,中文使用24位来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。
  • GBK 是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK无论中、英文字符均使用双字节来表示,包含全部中文字符,是国家编码,通用性比UTF8差。
  • GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换

2 pandas基础

2.1 数据结构

pandas中有两类非常重要的数据结构,序列Series和数据框DataFrame。
Series类似于numpy中的一维数组,通用一维数组可用的函数或方法,同时还可通过索引标签的方式获取数据,还具有索引的自动对齐等功能
DataFrame类似于numpy中的二维数组,通用numpy数组的函数和方法,还具有其他灵活应用

2.1.1 Series的创建

  • 通过一维数组创建
import numpy as np, pandas as pd

arr = np.arange(7)
s1 = pd.Series(arr)

print(s1)
print(type(s1)) #查看s1的数据类型

type为Series

  • 通过字典创建
dic1 = {'a':10,'b':20,'c':30,'d':40,'e':50}
print(dic1)
print(type(dic1))

在这里插入图片描述

  • 通过DataFrame中的某一行或某一列创建序列

2.1.2 DataFrame的创建

  • 通过二维数组创建
arr = np.array(np.arange(15)).reshape(3,5) #得到一个大小为(3,5)的二维矩阵
df1 = pd.DataFrame(arr)
print(df1)
print(type(df1))

  • 通过字典的方式创建
dic = {'A':[1,2,3,4],'B':[5,6,7,8],'C':[9,10,11,12]}
df2 = pd.DataFrame(dic)
print(df2)
print(type(df2))

在这里插入图片描述

  • 通过DataFrame的方式创建
df3 = df2[['A','C']] # 取df2中column为AC的部分
print(df3)
print(type(df3))

在这里插入图片描述

2.2 pandas基础操作

2.2.1 删除

对于DataFrame数据进行删除操作一般有以下两个函数(del慎用)

  • Drop 可选择原址删除 / 视图删除,可多列
    df.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’)
    drop可对多行或多列删除,传入inpalce=True对原数据修改,默认inplace=False

  • Del 原址数据删除,仅一次删除1列,不可多列
    del df[‘…’]

2.2.2 条件筛选

  • 根据属性’Age‘的大小筛选乘客信息
# 显示年龄在10岁以下的乘客信息
df[df["Age"]<10].head(3)

# 显示年龄在10岁以上和50岁以下的乘客信息
df[(df["Age"]>10)& (df["Age"]<50)].head(3)

  • 筛选后重置索引
    筛选后利用reset_index()重置索引,获得新的index,原来的index变成数据列,保留在数据框中
    可使用参数drop=True,删除原先索引,drop参数默认值为False
df = df = pd.DataFrame(np.arange(12).reshape(3,4),index=[11,22,33])
print('原始df\n',df)
print('重置索引后\n',df.reset_index())
print('删除旧索引\n',df.reset_index(drop=True))

在这里插入图片描述

2.2.3 查找

  • loc 根据index索引 works on labels in the index
  • iloc 根据行号索引 works on the positions in the index (so it only takes integers)

下面给出一个例子能更直观的看出二者区别

df = pd.DataFrame(np.arange(12).reshape(3,4),index=[2,3,1])
print('原始df\n',df)
print('loc[2]\n',df.loc[2])
print('iloc[2]\n',df.iloc[2])

在这里插入图片描述

3 初步数据分析

3.1 查看统计数据

  • describe()函数可十分方便的查看数据基本统计信息,对数据概览非常友好

    count : 样本数据大小
    mean : 样本数据的平均值
    std : 样本数据的标准差
    min : 样本数据的最小值
    25% : 样本数据25%的时候的值
    50% : 样本数据50%的时候的值
    75% : 样本数据75%的时候的值
    max : 样本数据的最大值

3.2 排序

3.2.1 排序基本方法

  • 首先得到一个3x4的dataframe,index以此为3,2,1,columns依次为d,b,a,c
df = pd.DataFrame(np.arange(12).reshape(3,4),index=[3,2,1],columns=['d','b','a','c'])
print(df)

在这里插入图片描述

# 根据列值降序排序
print(df.sort_values(by='c',ascending=False)) # ascending默认为True,即升序

# 行索引升序排序
print(df.sort_index()) 

# 列索引升序排序
print(df.sort_index(axis=1)) 

3.2.2 排序分析

在泰坦尼克号数据集中,如果我们仅仅关注年龄和票价两列,根据常识我们知道更高的票价意味着更好的舱位和更优的逃生机会。为了验证这一猜想,进行如下操作。

  • 对于数据集按照票价与年龄进行降序排列,得到排序后的数据集sort_data
  • 计算sort_data前n人中的存活人数比率survived_rate
  • 通过结果可得,票价年龄越高的人存活率越高
data1 = pd.read_csv('titanic/train_chinese.csv')
def survived_rate(n):
    sort_data = data1.sort_values(['票价', '年龄'], ascending=False).head(n)
    return ((sort_data['是否幸存'].sum())/n)

print(survived_rate(10),survived_rate(30),survived_rate(100),survived_rate(200),survived_rate(300))

在这里插入图片描述
However这个推论并不严谨,主要有以下几个原因:

  • 通过对数据集处理可知,存在多人共用一个票号的问题,猜测存在家庭票,故票价需要按照票号数分配到每个人头上才更加合理
  • age数据存在缺失,还未补全,可能影响结果

2020.8.18
TBC…

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

baekii

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值