IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 数据分析第一章:第一节至第三节 -> 正文阅读

[Python知识库]数据分析第一章:第一节至第三节

前言:datawhale团队贡献的课程——《动手学数据分析》,这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。完成kaggle上泰坦尼克的任务,实战数据分析全流程。
资料:教材《Python for Data Analysis》

1 第一章:数据载入及初步观察

1.1 载入数据

数据集下载 https://www.kaggle.com/c/titanic/overview

1.1.1 任务一:导入numpy和pandas

import numpy as np
import pandas as pd

【提示】如果加载失败,学会如何在你的python环境下安装numpy和pandas这两个库
pip install numpy
pip install pandas

1.1.2 任务二:载入数据

(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据

train = pd.read_csv("train.csv")
train.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
train = pd.read_csv("C:/Users/JJY/Desktop/hands-on-data-analysis-master/第一单元项目集合/train.csv",engine='python')
train.head()
#调用pandas的read_csv()方法时,默认使用C engine作为parser engine,而当文件名中含有中文的时候就会出错,需要指定engine为Python。
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?
【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用googel,了解业务逻辑,明白输入和输出是什么。

#read_table 默认"\t"(制表符)为分隔符,加载csv文件需要特别指定sep=","
#read_csv 默认是","(逗号)为分隔符

train = pd.read_table("train.csv",sep=",")
train.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

1.1.3 任务三:每1000行为一个数据模块,逐块读取

chunker = pd.read_csv("train.csv",chunksize=1000)
print(type(chunker)) #chunker(数据块)的类型:可迭代的对象TextFileReader

#执行后结果篇幅过长,故注释
#for i in chunker:
#    print(i)
<class 'pandas.io.parsers.TextFileReader'>

【思考】什么是逐块读取?为什么要逐块读取呢?
–按指定大小分块读取大数据,避免因数据量大导致内存不足,但也会更耗时一些,数据的处理和清洗经常使用分块的方式处理

1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]

PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口

train = pd.read_csv("train.csv", names=["乘客ID","是否幸存","乘客等级","姓名","性别","年龄","堂兄弟/妹个数","父母子女个数","船票信息","票价","客舱","登船港口"],index_col="乘客ID",header=0)
train.head()
是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS

1.2 初步观察

导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等

1.2.1 任务一:查看数据的基本信息

train.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
是否幸存       891 non-null int64
乘客等级       891 non-null int64
姓名         891 non-null object
性别         891 non-null object
年龄         714 non-null float64
堂兄弟/妹个数    891 non-null int64
父母子女个数     891 non-null int64
船票信息       891 non-null object
票价         891 non-null float64
客舱         204 non-null object
登船港口       889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB

#【提示】有多个函数可以这样做,你可以做一下总结

#查看缺失值
train.isnull().sum(axis=0)
是否幸存         0
乘客等级         0
姓名           0
性别           0
年龄         177
堂兄弟/妹个数      0
父母子女个数       0
船票信息         0
票价           0
客舱         687
登船港口         2
dtype: int64

1.2.2 任务二:观察表格前10行的数据和后15行的数据

train.head(10)
是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
1012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
train.tail(15)
是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
87703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87903Laleff, Mr. KristomaleNaN003492177.8958NaNS
88011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88203Markun, Mr. Johannmale33.0003492577.8958NaNS
88303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
89011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False

train.isnull().head()
是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
1FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse

【总结】上面的操作都是数据分析中对于数据本身的观察

1.3 保存数据

1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
train.to_csv("train_chinese.csv")

【总结】数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。

1.4 知道你的数据叫什么

我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?

开始前导入numpy和pandas

import numpy as np
import pandas as pd

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]

#写入代码
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
print(example_2,type(example_2))

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
print(example_1,type(example_1))
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2 <class 'pandas.core.frame.DataFrame'>
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64 <class 'pandas.core.series.Series'>

1.4.2 任务二:根据上节课的方法载入"train.csv"文件

train = pd.read_csv("train.csv")

也可以加载上一节课保存的"train_chinese.csv"文件。通过翻译版train_chinese.csv熟悉了这个数据集,然后我们对trian.csv来进行操作

1.4.3 任务三:查看DataFrame数据的每列的名称

train.columns
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]

train["Cabin"].head()
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object
train.Cabin.head()
0     NaN
1     C85
2     NaN
3    C123
4     NaN
Name: Cabin, dtype: object

1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去

test_1 = pd.read_csv("test_1.csv")
test_1.head()
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkeda
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS100
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C100
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS100
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S100
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS100
del test_1["a"]
test_1.head()
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【思考】还有其他的删除多余的列的方式吗?

# 思考回答
test_2 = test_1.drop("a",axis=1)
test_2.head()
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
44503Allen, Mr. William Henrymale35.0003734508.0500NaNS

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素

train_1 = train.drop(['PassengerId','Name','Age','Ticket'],axis=1)
train_1.head()
SurvivedPclassSexSibSpParchFareCabinEmbarked
003male107.2500NaNS
111female1071.2833C85C
213female007.9250NaNS
311female1053.1000C123S
403male008.0500NaNS

【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?
–使用del, 一次只能删除一列,不能一次删除多列,使用drop方法一次删除多列

【思考回答】

如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用

1.5 筛选的逻辑

表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。

下面我们还是用实战来学习pandas这个功能。

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

train[train["Age"]<10]
train.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

#多条件时使用&,&的优先级高于>=或<=,所以要注意括号的使用,每个条件先使用括号
midage = train[(train["Age"]>=10) & (train["Age"]<50)]
midage.head()
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

【提示】了解pandas的条件筛选方式以及如何使用交集和并集操作

1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

#midage = midage.reset_index(drop=Frue) 
#因为midage从原数据中筛选出来且已有固定索引,需要将midage重置索引,reset_index()函数中参数drop=True 重置索引且不新增列
midage.loc[[100],["Pclass","Sex"]]
PclassSex
1003female

【提示】在抽取数据中,我们希望数据的相对顺序保持不变,用什么函数可以达到这个效果呢?
–使用reset_index()函数,将midage重置索引

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.loc[[100,105,108],['Pclass','Name','Sex']] 
PclassNameSex
1003Petranec, Miss. Matildafemale
1053Mionoff, Mr. Stoytchomale
1083Rekic, Mr. Tidomale

1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.iloc[[100,105,108],[2,3,4]]
PclassNameSex
1492Byles, Rev. Thomas Roussel Davidsmale
1603Cribb, Mr. John Hatfieldmale
1633Calic, Mr. Jovomale

【思考】对比ilocloc的异同

df.loc[行标签,列标签] 按照标签名称取数据
df.iloc[行位置,列位置] 按照位置取数据

1.6 了解你的数据吗?

教材《Python for Data Analysis》第五章

开始之前,导入numpy、pandas包和数据

#加载所需的库
import numpy as np
import pandas as pd
#载入之前保存的train_chinese.csv数据,关于泰坦尼克号的任务,我们就使用这个数据
train_c = pd.read_csv("train_chinese.csv")
train_c.head()
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS

1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序

【代码解析】

pd.DataFrame() :创建一个DataFrame对象

np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7

index=['2, 1] :DataFrame 对象的索引列

columns=[‘d’, ‘a’, ‘b’, ‘c’] :DataFrame 对象的索引行

【问题】:大多数时候我们都是想根据列的值来排序,所以将你构建的DataFrame中的数据根据某一列,升序排列

df1 = pd.DataFrame(np.arange(8).reshape((2, 4)),index=[2,1],columns=['d', 'a', 'b', 'c'])
df1
df1.sort_values(by="c",ascending=True)
dabc
20123
14567

【思考】通过书本你能说出Pandas对DataFrame数据的其他排序方式吗?

【总结】下面将不同的排序方式做一个总结

1.让行索引升序排序

df1.sort_index()  
dabc
14567
20123

2.让列索引升序排序

df1.sort_index(axis=1)
abcd
21230
15674

3.让列索引降序排序

df1.sort_index(axis=1,ascending=False) # ascending=False为降序排列,默认是升序
dcba
20321
14765

4.让任选两列数据同时降序排序

df1.sort_values(by=["a","b"],ascending=False)
dabc
14567
20123

1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?

'''
在开始我们已经导入了train_chinese.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可
head(20) : 读取前20条数据
'''

train_c.sort_values(by=["票价","年龄"],ascending=False).head(20)
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
67968011Cardeza, Mr. Thomas Drake Martinezmale36.001PC 17755512.3292B51 B53 B55C
25825911Ward, Miss. Annafemale35.000PC 17755512.3292NaNC
73773811Lesurer, Mr. Gustave Jmale35.000PC 17755512.3292B101C
43843901Fortune, Mr. Markmale64.01419950263.0000C23 C25 C27S
34134211Fortune, Miss. Alice Elizabethfemale24.03219950263.0000C23 C25 C27S
888911Fortune, Miss. Mabel Helenfemale23.03219950263.0000C23 C25 C27S
272801Fortune, Mr. Charles Alexandermale19.03219950263.0000C23 C25 C27S
74274311Ryerson, Miss. Susan Parker "Suzette"female21.022PC 17608262.3750B57 B59 B63 B66C
31131211Ryerson, Miss. Emily Boriefemale18.022PC 17608262.3750B57 B59 B63 B66C
29930011Baxter, Mrs. James (Helene DeLaudeniere Chaput)female50.001PC 17558247.5208B58 B60C
11811901Baxter, Mr. Quigg Edmondmale24.001PC 17558247.5208B58 B60C
38038111Bidois, Miss. Rosaliefemale42.000PC 17757227.5250NaNC
71671711Endres, Miss. Caroline Louisefemale38.000PC 17757227.5250C45C
70070111Astor, Mrs. John Jacob (Madeleine Talmadge Force)female18.010PC 17757227.5250C62 C64C
55755801Robbins, Mr. VictormaleNaN00PC 17757227.5250NaNC
52752801Farthing, Mr. JohnmaleNaN00PC 17483221.7792C95S
37737801Widener, Mr. Harry Elkinsmale27.002113503211.5000C82C
77978011Robert, Mrs. Edward Scott (Elisabeth Walton Mc...female43.00124160211.3375B3S
73073111Allen, Miss. Elisabeth Waltonfemale29.00024160211.3375B5S
68969011Madill, Miss. Georgette Alexandrafemale15.00124160211.3375B5S

【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。
1、按照现有的交通工具,客舱越好舱内人均面积越高,逃生空间大,而且是否救生设备更多更靠近(如救生圈,救生衣,救生艇),需要进一步研究泰坦尼克号的结构
2、存活的乘客中年龄均在50及以下,青年中年人存活率是否更高,需要进一步分析每个年龄段(以十岁一个区间)的生存率,以及结合逃生时的具体情况(妇孺优先)

#按乘客等级进行升序排列
train_c.sort_values(by=["乘客等级"]).head(20)
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
44544611Dodge, Master. Washingtonmale4.00023363881.8583A34S
31031111Hays, Miss. Margaret Bechsteinfemale24.00001176783.1583C54C
30931011Francatelli, Miss. Laura Mabelfemale30.0000PC 1748556.9292E36C
30730811Penasco y Castellana, Mrs. Victor de Satode (M...female17.0010PC 17758108.9000C65C
30630711Fleming, Miss. MargaretfemaleNaN0017421110.8833NaNC
30530611Allison, Master. Hudson Trevormale0.9212113781151.5500C22 C26S
71071111Mayne, Mlle. Berthe Antonine ("Mrs de Villiers")female24.0000PC 1748249.5042C90C
71171201Klaber, Mr. HermanmaleNaN0011302826.5500C124S
31131211Ryerson, Miss. Emily Boriefemale18.0022PC 17608262.3750B57 B59 B63 B66C
71271311Taylor, Mr. Elmer Zebleymale48.00101999652.0000C126S
29829911Saalfeld, Mr. AdolphemaleNaN001998830.5000C106S
29729801Allison, Miss. Helen Lorainefemale2.0012113781151.5500C22 C26S
29529601Lewy, Mr. Ervin GmaleNaN00PC 1761227.7208NaNC
71671711Endres, Miss. Caroline Louisefemale38.0000PC 17757227.5250C45C
29129211Bishop, Mrs. Dickinson H (Helen Walton)female19.00101196791.0792B49C
29029111Barber, Miss. Ellen "Nellie"female26.00001987778.8500NaNS
57157211Appleton, Mrs. Edward Dale (Charlotte Lamson)female53.00201176951.4792C101S
29930011Baxter, Mrs. James (Helene DeLaudeniere Chaput)female50.0001PC 17558247.5208B58 B60C
28428501Smith, Mr. Richard WilliammaleNaN0011305626.0000A19S
70870911Cleaver, Miss. Alicefemale22.0000113781151.5500NaNS
#按乘客等级进行降序排列
train_c.sort_values(by=["乘客等级"],ascending=False).head(20)
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
51151203Webber, Mr. JamesmaleNaN00SOTON/OQ 31013168.0500NaNS
50050103Calic, Mr. Petarmale17.0003150868.6625NaNS
50150203Canavan, Miss. Maryfemale21.0003648467.7500NaNQ
50250303O'Sullivan, Miss. Bridget MaryfemaleNaN003309097.6292NaNQ
50350403Laitinen, Miss. Kristina Sofiafemale37.00041359.5875NaNS
50850903Olsen, Mr. Henry Margidomale28.000C 400122.5250NaNS
50951013Lang, Mr. Fangmale26.000160156.4958NaNS
51051113Daly, Mr. Eugene Patrickmale29.0003826517.7500NaNQ
51451503Coleff, Mr. Satiomale24.0003492097.4958NaNS
53253303Elias, Mr. Joseph Jrmale17.01126907.2292NaNC
51751803Ryan, Mr. PatrickmaleNaN0037111024.1500NaNQ
51952003Pavlovic, Mr. Stefomale32.0003492427.8958NaNS
52152203Vovk, Mr. Jankomale22.0003492527.8958NaNS
52252303Lahoud, Mr. SarkismaleNaN0026247.2250NaNC
52452503Kassem, Mr. FaredmaleNaN0027007.2292NaNC
52552603Farrell, Mr. Jamesmale40.5003672327.7500NaNQ
52852903Salonen, Mr. Johan Wernermale39.00031012967.9250NaNS
49950003Svensson, Mr. Olofmale24.0003500357.7958NaNS
49749803Shellard, Mr. Frederick WilliammaleNaN00C.A. 621215.1000NaNS
#按年龄进行降序排列
train_c.sort_values(by=["年龄"]).head(20)
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
80380413Thomas, Master. Assad Alexandermale0.420126258.5167NaNC
75575612Hamalainen, Master. Viljomale0.671125064914.5000NaNS
64464513Baclini, Miss. Eugeniefemale0.7521266619.2583NaNC
46947013Baclini, Miss. Helene Barbarafemale0.7521266619.2583NaNC
787912Caldwell, Master. Alden Gatesmale0.830224873829.0000NaNS
83183212Richards, Master. George Sibleymale0.83112910618.7500NaNS
30530611Allison, Master. Hudson Trevormale0.9212113781151.5500C22 C26S
82782812Mallet, Master. Andremale1.0002S.C./PARIS 207937.0042NaNC
38138213Nakid, Miss. Maria ("Mary")female1.0002265315.7417NaNC
16416503Panula, Master. Eino Viljamimale1.0041310129539.6875NaNS
18318412Becker, Master. Richard Fmale1.002123013639.0000F4S
38638703Goodwin, Master. Sidney Leonardmale1.0052CA 214446.9000NaNS
17217313Johnson, Miss. Eleanor Ileenfemale1.001134774211.1333NaNS
78878913Dean, Master. Bertram Veremale1.0012C.A. 231520.5750NaNS
64264303Skoog, Miss. Margit Elizabethfemale2.003234708827.9000NaNS
7803Palsson, Master. Gosta Leonardmale2.003134990921.0750NaNS
53053112Quick, Miss. Phyllis Mayfemale2.00112636026.0000NaNS
29729801Allison, Miss. Helen Lorainefemale2.0012113781151.5500C22 C26S
82482503Panula, Master. Urho Abrahammale2.0041310129539.6875NaNS
20520603Strom, Miss. Telma Matildafemale2.000134705410.4625G6S

1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

#构建两个都为数字的DataFrame数据
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
print(frame1_a)
print(frame1_b)
         a    b    c
one    0.0  1.0  2.0
two    3.0  4.0  5.0
three  6.0  7.0  8.0
          a     e     c
first   0.0   1.0   2.0
one     3.0   4.0   5.0
two     6.0   7.0   8.0
second  9.0  10.0  11.0

将frame_a和frame_b进行相加

frame1_a + frame1_b
abce
firstNaNNaNNaNNaN
one3.0NaN7.0NaN
secondNaNNaNNaNNaN
threeNaNNaNNaNNaN
two9.0NaN13.0NaN

【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分,多在网络上查找相关学习资料。

1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

'''
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
'''

max(train_c["堂兄弟/妹个数"] + train_c["父母子女个数"])
10

【提醒】我们只需找出”兄弟姐妹个数“和”父母子女个数“之和最大的数,当然你还可以想出很多方法和思考角度,欢迎你来说出你的看法。

train_c.sort_values(by=['父母子女个数','堂兄弟/妹个数'],ascending=False).head()
#排序方式:先依据第一列排序,再依据第二列排序
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
67867903Goodwin, Mrs. Frederick (Augusta Tyler)female43.016CA 214446.9000NaNS
131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS
252613Asplund, Mrs. Carl Oscar (Selma Augusta Emilia...female38.01534707731.3875NaNS
61061103Andersson, Mrs. Anders Johan (Alfrida Konstant...female39.01534708231.2750NaNS
63863903Panula, Mrs. Juha (Maria Emilia Ojala)female41.005310129539.6875NaNS
train_c.sort_values(by=['堂兄弟/妹个数','父母子女个数'],ascending=False).head()
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
15916003Sage, Master. Thomas HenrymaleNaN82CA. 234369.55NaNS
18018103Sage, Miss. Constance GladysfemaleNaN82CA. 234369.55NaNS
20120203Sage, Mr. FrederickmaleNaN82CA. 234369.55NaNS
32432503Sage, Mr. George John JrmaleNaN82CA. 234369.55NaNS
79279303Sage, Miss. Stella AnnafemaleNaN82CA. 234369.55NaNS

1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息

#自己构建一个有数字有空值的DataFrame数据
frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2
onetwo
a1.40NaN
b7.10-4.5
cNaNNaN
d0.75-1.3

调用 describe 函数,观察frame2的数据基本信息

frame2.describe()
onetwo
count3.0000002.000000
mean3.083333-2.900000
std3.4936852.262742
min0.750000-4.500000
25%1.075000-3.700000
50%1.400000-2.900000
75%4.250000-2.100000
max7.100000-1.300000

1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?

train_c[["票价","父母子女个数"]].describe()
票价父母子女个数
count891.000000891.000000
mean32.2042080.381594
std49.6934290.806057
min0.0000000.000000
25%7.9104000.000000
50%14.4542000.000000
75%31.0000000.000000
max512.3292006.000000

【思考】从上面数据我们可以看出, 票价数据共有891个,平均值32.20,标准差约49.69,票价波动大,25%的人的票价低于7.91,50%的人的票价低于14.45,75%的人的票价低于31.00,票价最大值512.33,最小值0

多做几个组数据的统计,看看你能分析出什么?

'''
describe()默认只对数字类型的数据,生成描述性统计,总结数据集分布的中心趋势,分散和形状,不包括NaN值
describe(include=[object])则只对对象类型的数据(例如字符串或时间),生成描述性统计
describe(include="all")对所有数据类型,生成对应的描述性统计
'''

train_c.describe(include="all")
乘客ID是否幸存乘客等级姓名性别年龄堂兄弟/妹个数父母子女个数船票信息票价客舱登船港口
count891.000000891.000000891.000000891891714.000000891.000000891.000000891891.000000204889
uniqueNaNNaNNaN8912NaNNaNNaN681NaN1473
topNaNNaNNaNMinahan, Dr. William EdwardmaleNaNNaNNaNCA. 2343NaNC23 C25 C27S
freqNaNNaNNaN1577NaNNaNNaN7NaN4644
mean446.0000000.3838382.308642NaNNaN29.6991180.5230080.381594NaN32.204208NaNNaN
std257.3538420.4865920.836071NaNNaN14.5264971.1027430.806057NaN49.693429NaNNaN
min1.0000000.0000001.000000NaNNaN0.4200000.0000000.000000NaN0.000000NaNNaN
25%223.5000000.0000002.000000NaNNaN20.1250000.0000000.000000NaN7.910400NaNNaN
50%446.0000000.0000003.000000NaNNaN28.0000000.0000000.000000NaN14.454200NaNNaN
75%668.5000001.0000003.000000NaNNaN38.0000001.0000000.000000NaN31.000000NaNNaN
max891.0000001.0000003.000000NaNNaN80.0000008.0000006.000000NaN512.329200NaNNaN

【总结】本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,构建自己的数据分析思维,这也是第一章最重要的点,对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节将开始对数据进行清洗,进一步分析。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:49:15  更:2021-07-14 10:50:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:35:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码