内容说明
这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。 这里有两份资料: 教材《Python for Data Analysis》和 baidu.com & google.com(善用搜索引擎)
学习地址:
https://github.com/datawhalechina/hands-on-data-analysis
载入数据
导入包
import numpy as np
import pandas as pd
import os
利用pandas载入在kaggle上下载到的数据
df=pd.read_csv('train')
df.head()
out
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | nan | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Thayer) | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.925 | nan | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.05 | nan | S |
初步观察
df_trian.isnull().sum()
out
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
查看数据名称
查看DataFrame数据的每列的名称
df.columns()
out
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
dtype='object')
筛选数据
我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
使用query方法筛选符合要求的数据
df.query('Age<=10')
out
对数据排序
利用船票价格进行排序
df.sort_values('Fare')
out
对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?
res=df.sort_values(['Fare','Age'],ascending=[True,False])
res.tail(200).groupby('Survived')[['PassengerId','Fare','Age']].agg({'PassengerId':'count','Fare':'mean','Age':'mean'})
out
res.head(200).groupby('Survived')[['PassengerId','Fare','Age']].agg({'PassengerId':'count','Fare':'mean','Age':'mean'})
out
对表格进行费用正序,年龄逆序排序,然后分别计算前200人和后两百人的数据。将船费高且年龄小的组称为A组,另外一组称为B组。可以发现,A组的生存人数较多,而B组生存人数较少,同时船费和年龄似乎成负相关,即船费越高,年龄往往会更小。
添加特征
通过泰坦尼克号数据计算出在船上最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’)
df['Family']=df['Sibsp']+df['Parch']
df['Family']
out
0 1
1 1
2 0
3 1
4 0
..
886 0
887 0
888 3
889 0
890 0
Name: Family, Length: 891, dtype: int64
对是否存活进行分组,然后求平均值
df.groupby('Survived')['Family'].mean()
out:
Survived
0 0.883424
1 0.938596
Name: Family, dtype: float64
可以看到,存活的人拥有的家庭人数大于遇难的人的家庭人数,我们可以推断,在灾难中,有家庭的人更倾向于互相帮助,所以有更大的机会存活。
总结
学习了对数据进行载入,然后对数据进行探索,包括排序以及运算后得到新指标等操作,并且试着对数据的运算结果进行自己的分析与解释。