【python】Kaggle入门:titanic 的特征提取与特征分析

目   录

0、概述

1、Anaconda的准备

2、导入必需包和数据集

3、数据分析

3.1 数据概览

3.2 数据初步分析

3.2.1 Pclass 客舱等级

3.2.2 Sex 性别

3.2.3 Age 年龄

3.2.4 SibSp 兄弟数量

3.2.5 Parch 父母与子女数量

3.2.6 Fare 票价

3.3 数据深入分析

3.3.1 PassengerId 乘客序号

3.3.2 Name 乘客姓名

3.3.3 Ticket 船票编号

3.3.4 Cabin 房间号

3.3.5 Embarked 上船的港口编号

3.3.6 SibSp+Parch 亲人数量

4、总结


0、概述

kaggle是一个数据挖掘网站,上面有许多各类数据挖掘问题与竞赛。对于数据挖掘专业的学生来说十分友好。

对我来说,无论是利用python进行数据分析还是pandas还是numpy都太枯燥了,因此选择用这个入门问题来学习一些有关数据挖掘的基本技能。

主要参考该网址的第二部分。对于大多数有一些pandas基础的人,直接看这个就可以了,我是初次接触这些,会把其中遇到的所有问题都写下来,供自己和大家查询。

1、Anaconda的准备

我这边有好几个虚拟环境,为了防止环境互相影响,决定对该问题新建一个环境。

参考网址使用Jupyter Notebook,所以在该环境里面要安装notebook。

安装好这些必须包以后,别忘了装nb_conda这个包,有了这个包才能随意在notebook里面切环境,否则只有一个默认环境没法切。如下:

不装nb_conda就只有第一个环境。

2、导入必需包和数据集

代码如下:

%matplotlib inline #notebook中的魔法函数
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore') #无视所有代码警告

train=pd.read_csv(r'F:\kaggle\titanic\train.csv') #读取训练集
test=pd.read_csv(r'F:\kaggle\titanic\test.csv') #读取测试集
PassengerId=test['PassengerId'] #读取测试集中PassengerId这一列
all_data=pd.concat([train,test],ignore_index=True) #将训练集和测试集合在一起
train.head()

上述代码的效果如下:

可以看到train已经成功保存了测试集中的数据。下面开始分析代码:

第一行的魔法函数的作用很简单,就是当我们使用plt.plot画一个函数之后,正常应该加一句plt.show才会显示图像,有了这句之后就不用再多写一句show了,plot之后直接显示图像。

之后是引入包,pandas和numpy不需要解释,seaborn是一个用于画图的库。

然后是warning的一句,这一句是隐藏所有的解释器的warning。

接下来进入正题:利用pandas的read_csv可以将csv文件的内容写入变量,作为一个类似二维数组的结构,称之为DataFrame。

如何对dataframe进行访问呢?

首先来看对列访问:

有三种形式,按行访问、按列访问、指定某元素访问。

对于按行访问:

比如说上面的第0行:

第一种:

test.iloc[0]

等价于访问“第0行”,iloc的特点是其访问的是从前往后数第几行,当然最开始的那行列名不算。

第二种:

test.loc[0]

等价于访问“序号那一列中名为0的行”,loc的特点是找左边第一列中名字与参数对得上的那一行并返回。

这俩效果都一样:

返回的都是Series。

按行访问还有一种类似切片的方式:

test[0:1]

效果如下:

相当于切下第0行,返回类型为DataFrame。

对于按列访问:

比如说对上文中的passergerId来说:

第一种:

test['PassengerId']

返回的效果如下:

其类型为Series,pandas中的一维数据结构,可以看做是字典,是序号到元素的映射。

第二种:

test[['PassengerId']]

返回的效果如下:

其类型为DataFrame,pandas中的二维数据结构。

访问某个指定元素:

可以混合使用上面的方法,毕竟返回的不是DataFrame就是Series,直接继续访问就好:

例如:

test.loc[0]['Name']

访问第0行中名为name的列。

又如:

test['Name'][0]

访问name这列中的第0个。

扯远了。接着看这里的代码。下一行就是按列访问名为PassengerId这一列,返回的是Series。

然后将测试集和训练集黏在一起,用的是concat函数。

最后访问训练集的前五行,用head,后五行则用tail。

3、数据分析

3.1 数据概览

我们既然已经将数据集导入了,那就来看看里面都是什么吧。

回想起我在数据挖掘课上刚学的那点三脚猫功夫:

列名就是每个人的属性咯,这样看来:

PassengerId为乘客序号,序数属性,没任何用——八成就是一个捞上来的顺序问题;

Survived为是否生还,二元属性,只有0和1,这是最重要的属性,是我们最后要预测的属性;

Pclass为客舱等级,数值属性,取值1,2,3,看上去应该挺重要的,是不是客舱等级越高就越容易生还?;

Name为乘客名字,标称属性,取值为人名,我觉得很难从中提取出什么属性,或许没名字代表必死?;

Sex为性别,二元属性,取值0,1,看来那个时候对于性别划分还没那么复杂;

Age为年龄,数值属性,取值整数,同样重要,老弱先行么;

SibSp为兄弟数量,数值属性;

Parch为父母与子女数量,数值属性,其值0,1,2,3等;

Ticket为船票编号,标称属性,和乘客名字差不多;

Fare为票价,数值属性,但是不是离散而是连续,应该和客舱等级有一定的联系,效果也差不多;

Cabin为房间号,标称属性,可能房间号有一定的规律;

Embarked上船的港口编号,标称属性。

知道了这些都是啥,下面来看看数据的缺失吧。很简单,使用如下指令:

train.info()

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值