第一章:第一节数据载入及初步观察-课程

本教程详细介绍了如何使用Python的pandas库加载和初步探索泰坦尼克号数据集,包括数据导入、块读取、表头翻译、数据观察、保存、数据类型理解、列筛选、数据排序和统计分析等任务,旨在提升数据分析实战能力。
摘要由CSDN通过智能技术生成

复习:这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。
这里有两份资料:
教材《Python for Data Analysis》和 baidu.com &
google.com(善用搜索引擎)

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这两个库

1.1.2 任务二:载入数据

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

#写入代码(相对路径)
df_csv=pd.read_csv('./train.csv')
df_csv


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
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 12 columns

#写入代码(绝对路径)
df_test_csv=pd.read_csv('E:/jupyter_notebook/hands-on-data-analysis-master/hands-on-data-analysis-master/第一单元项目集合/test_1.csv')
df_test_csv

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
.............................................
88688688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS100
88788788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S100
88888888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS100
88988989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C100
89089089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ100

891 rows × 14 columns

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

1.1.3 任务三:每1000行为一个数据模块,逐块读取
#写入代码   
#  Pandas 的 read_csv 函数提供2个参数:chunksize、iterator ,
# 可实现按行多次读取文件,避免内存不足情况。
# chunksize返回一个TextFileReader 对象,以便逐块处理文件。
df_csv=pd.read_csv('./train.csv',chunksize=100)
print(type(df_csv))
for chunk in df_csv:
    print(chunk.shape)

<class 'pandas.io.parsers.TextFileReader'>
(100, 12)
(100, 12)
(100, 12)
(100, 12)
(100, 12)
(100, 12)
(100, 12)
(100, 12)
(91, 12)

【思考】什么是逐块读取?为什么要逐块读取呢?

【提示】大家可以chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?

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

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

#写入代码
# 方法1
df_csv=pd.read_csv('./train.csv')
df_csv.columns=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']
df_csv.to_csv('train_Chinese1.csv')
df_csv
乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
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
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 12 columns

# 方法二 修改单独列  利用rename修改
df_csv=pd.read_csv('./train.csv')
df_csv.rename(columns={'Name':'乘客姓名'},inplace=True)
df_csv

PassengerIdSurvivedPclass乘客姓名SexAgeSibSpParchTicketFareCabinEmbarked
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
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 12 columns

【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?

1.2 初步观察

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

1.2.1 任务一:查看数据的基本信息
#写入代码
df_csv=pd.read_csv('./train.csv')
df_csv.shape #形状
df_csv.columns.values #列标签
df_csv.index.values  #行标签
df_csv.isnull().any()     # 是否包含null 列级别判断
df_csv[df_csv.isnull().values==True]  # 可以只显示存在缺失值的行列,清楚的确定缺失值的位置
df_csv.columns[df_csv.isnull().any()].tolist() # 空列找出来
df_csv.isnull().sum()  # 列中空的个数
cols=df_csv.columns
# for i in cols:
#     print(df_csv[i].dtype)  #查看列的类型

for i in cols:
    if str(df_csv[i].dtype)=='object':
        print(i)



Name
<class 'numpy.dtype[object_]'>
Sex
<class 'numpy.dtype[object_]'>
Ticket
<class 'numpy.dtype[object_]'>
Cabin
<class 'numpy.dtype[object_]'>
Embarked
<class 'numpy.dtype[object_]'>

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

1.2.2 任务二:观察表格前10行的数据和后15行的数据
#写入代码
df_csv.head(10) #前十行


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
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
8913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
91012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
#写入代码
df_csv.tail(15)

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
87687703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87787803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
87988011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88088112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88188203Markun, Mr. Johannmale33.0003492577.8958NaNS
88288303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88388402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88488503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
#写入代码
df_T_F=df_csv.isnull()
df_T_F

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
1FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
.......................................
886FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
887FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
888FalseFalseFalseFalseFalseTrueFalseFalseFalseFalseTrueFalse
889FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
890FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse

891 rows × 12 columns

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

【思考】对于一个数据,还可以从哪些方面来观察?找找答案,这个将对下面的数据分析有很大的帮助

1.3 保存数据

1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
#写入代码
# 注意:不同的操作系统保存下来可能会有乱码。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
df_csv.columns=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']
df_csv.to_excel('./train_chinese2.xlsx')
df_csv.to_csv('./train_chinese2.csv',encoding='GBK')

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

import numpy as np
import pandas as pd
1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]
#写入代码
pd_x={'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example=pd.Series(pd_x)
example
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
'''
#我们举的例子
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
'''
pd_y={'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(pd_y)
example_2
stateyearpop
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2
'''
#我们举的例子
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)
example_2
'''


1.4.2 任务二:根据上节课的方法载入"train.csv"文件
#写入代码
pd_csv=pd.read_csv('./train_Chinese1.csv')
pd_csv
Unnamed: 0乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
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
..........................................
88688688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88988989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 13 columns

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

1.4.3 任务三:查看DataFrame数据的每列的名称
#写入代码
column_names=pd_csv.columns
column_names
for column_name in column_names:
    print(column_name)
Unnamed: 0
乘客ID
是否幸存
乘客等级(1/2/3等舱位)
乘客姓名
性别
年龄
堂兄弟/妹个数
父母与小孩个数
船票信息
票价
客舱
登船港口
1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]
#写入代码
pd_csv['客舱']
0       NaN
1       C85
2       NaN
3      C123
4       NaN
       ... 
886     NaN
887     B42
888     NaN
889    C148
890     NaN
Name: 客舱, Length: 891, dtype: object
#写入代码
pd_csv.客舱
0       NaN
1       C85
2       NaN
3      C123
4       NaN
       ... 
886     NaN
887     B42
888     NaN
889    C148
890     NaN
Name: 客舱, Length: 891, dtype: object
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

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

#写入代码
pd_test_csv=pd.read_csv('test_1.csv')
pd_test_csv.columns  # 多余‘a'
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')
#写入代码
del pd_test_csv['a']
pd_test_csv.columns
Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

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

# 思考回答
# 采用drop方法 .drop('num',axix=1),不改变内存,及输入df的时候,它还是显示原数据
#  .drop('num',axix=1,inplace=True),改变内存,及输入df的时候,它显示改变后的数据
pd_test=pd_test_csv.drop('a',axis=1)
print(pd_test_csv.columns)
pd_test




Index(['Unnamed: 0', 'PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
       'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked', 'a'],
      dtype='object')
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
..........................................
88688688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88988989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 13 columns

1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素
#写入代码
pd_test_csv.drop(['PassengerId','Name','Age','Ticket'],axis=1)
Unnamed: 0SurvivedPclassSexSibSpParchFareCabinEmbarkeda
0003male107.2500NaNS100
1111female1071.2833C85C100
2213female007.9250NaNS100
3311female1053.1000C123S100
4403male008.0500NaNS100
.................................
88688602male0013.0000NaNS100
88788711female0030.0000B42S100
88888803female1223.4500NaNS100
88988911male0030.0000C148C100
89089003male007.7500NaNQ100

891 rows × 10 columns

【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?

【思考回答】

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

1.5 筛选的逻辑

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

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

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
#写入代码
pd_test_csv=pd.read_csv('test_1.csv')
pd_test_csv[pd_test_csv.Age<10]
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkeda
77803Palsson, Master. Gosta Leonardmale2.003134990921.0750NaNS100
10101113Sandstrom, Miss. Marguerite Rutfemale4.0011PP 954916.7000G6S100
16161703Rice, Master. Eugenemale2.004138265229.1250NaNQ100
24242503Palsson, Miss. Torborg Danirafemale8.003134990921.0750NaNS100
43434412Laroche, Miss. Simonne Marie Anne Andreefemale3.0012SC/Paris 212341.5792NaNC100
.............................................
82782782812Mallet, Master. Andremale1.0002S.C./PARIS 207937.0042NaNC100
83183183212Richards, Master. George Sibleymale0.83112910618.7500NaNS100
85085085103Andersson, Master. Sigvard Harald Eliasmale4.004234708231.2750NaNS100
85285285303Boulos, Miss. Nourelainfemale9.0011267815.2458NaNC100
86986987013Johnson, Master. Harold Theodormale4.001134774211.1333NaNS100

62 rows × 14 columns

1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
#写入代码
pd_test_csv=pd.read_csv('test_1.csv')
midage=pd_test_csv[(pd_test_csv.Age<50) & (pd_test_csv.Age>10)]
midage
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
.............................................
88588588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ100
88688688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS100
88788788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S100
88988989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C100
89089089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ100

576 rows × 14 columns

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

1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
#写入代码
# loc函数:通过行索引 "Index" 中的具体值来取行数据
# iloc函数:通过行号来取行数据
# midage.loc[[100],['Pclass','Sex']]
midage.iloc[[100],[3,5]]
PclassSex
1492male

【提示】在抽取数据中,我们希望数据的相对顺序保持不变,用什么函数可以达到这个效果呢?

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],[3,4,5]]
PclassNameSex
1492Byles, Rev. Thomas Roussel Davidsmale
1603Cribb, Mr. John Hatfieldmale
1633Calic, Mr. Jovomale

【思考】对比ilocloc的异同

#加载所需的库
import numpy as np
import pandas as pd
#载入之前保存的train_chinese.csv数据,关于泰坦尼克号的任务,我们就使用这个数据
pd_train_chinese=pd.read_csv('./train_Chinese1.csv')
pd_train_chinese
Unnamed: 0乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
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
..........................................
88688688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88988989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 13 columns

1.6 了解你的数据吗?

教材《Python for Data Analysis》第五章

1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
# 具体请看《利用Python进行数据分析》第五章 排序和排名 部分

#自己构建一个都为数字的DataFrame数据

'''
我们举了一个例子
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 对象的索引行
'''


【代码解析】

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中的数据根据某一列,升序排列

#回答代码

df_np=np.arange(8).reshape((2,4))
df=pd.DataFrame(df_np,index=[2,1],columns=['d', 'a', 'b', 'c'])
df
dabc
20123
14567

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

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

1.让行索引升序排序

#代码
df.sort_index(axis=0)
dabc
14567
20123

2.让列索引升序排序

#代码  默认True 升序 Flase降序
df.sort_index(axis=1,ascending=True)
abcd
21230
15674

3.让列索引降序排序

#代码
df.sort_index(axis=1,ascending=False)
dcba
20321
14765

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

#代码
df.sort_values(by=['c','d'],ascending=False)
dabc
20123
14567
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?
'''
在开始我们已经导入了train_chinese.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可
head(20) : 读取前20条数据

'''

#代码

pd_train_chinese.sort_values(by=['票价'],ascending=False).head(20)
Unnamed: 0乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
25825825911Ward, Miss. Annafemale35.000PC 17755512.3292NaNC
73773773811Lesurer, Mr. Gustave Jmale35.000PC 17755512.3292B101C
67967968011Cardeza, Mr. Thomas Drake Martinezmale36.001PC 17755512.3292B51 B53 B55C
88888911Fortune, Miss. Mabel Helenfemale23.03219950263.0000C23 C25 C27S
27272801Fortune, Mr. Charles Alexandermale19.03219950263.0000C23 C25 C27S
34134134211Fortune, Miss. Alice Elizabethfemale24.03219950263.0000C23 C25 C27S
43843843901Fortune, Mr. Markmale64.01419950263.0000C23 C25 C27S
31131131211Ryerson, Miss. Emily Boriefemale18.022PC 17608262.3750B57 B59 B63 B66C
74274274311Ryerson, Miss. Susan Parker "Suzette"female21.022PC 17608262.3750B57 B59 B63 B66C
11811811901Baxter, Mr. Quigg Edmondmale24.001PC 17558247.5208B58 B60C
29929930011Baxter, Mrs. James (Helene DeLaudeniere Chaput)female50.001PC 17558247.5208B58 B60C
55755755801Robbins, Mr. VictormaleNaN00PC 17757227.5250NaNC
70070070111Astor, Mrs. John Jacob (Madeleine Talmadge Force)female18.010PC 17757227.5250C62 C64C
38038038111Bidois, Miss. Rosaliefemale42.000PC 17757227.5250NaNC
71671671711Endres, Miss. Caroline Louisefemale38.000PC 17757227.5250C45C
52752752801Farthing, Mr. JohnmaleNaN00PC 17483221.7792C95S
37737737801Widener, Mr. Harry Elkinsmale27.002113503211.5000C82C
73073073111Allen, Miss. Elisabeth Waltonfemale29.00024160211.3375B5S
77977978011Robert, Mrs. Edward Scott (Elisabeth Walton Mc...female43.00124160211.3375B3S
68968969011Madill, Miss. Georgette Alexandrafemale15.00124160211.3375B5S

【思考】排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

当然,这只是我的想法,你还可以有更多想法,欢迎写在你的学习笔记中。

多做几个数据的排序

#代码
pd_train_chinese.sort_values(by=['年龄'],ascending=True).head(20)
Unnamed: 0乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
80380380413Thomas, Master. Assad Alexandermale0.420126258.5167NaNC
75575575612Hamalainen, Master. Viljomale0.671125064914.5000NaNS
64464464513Baclini, Miss. Eugeniefemale0.7521266619.2583NaNC
46946947013Baclini, Miss. Helene Barbarafemale0.7521266619.2583NaNC
78787912Caldwell, Master. Alden Gatesmale0.830224873829.0000NaNS
83183183212Richards, Master. George Sibleymale0.83112910618.7500NaNS
30530530611Allison, Master. Hudson Trevormale0.9212113781151.5500C22 C26S
82782782812Mallet, Master. Andremale1.0002S.C./PARIS 207937.0042NaNC
38138138213Nakid, Miss. Maria ("Mary")female1.0002265315.7417NaNC
16416416503Panula, Master. Eino Viljamimale1.0041310129539.6875NaNS
18318318412Becker, Master. Richard Fmale1.002123013639.0000F4S
38638638703Goodwin, Master. Sidney Leonardmale1.0052CA 214446.9000NaNS
17217217313Johnson, Miss. Eleanor Ileenfemale1.001134774211.1333NaNS
78878878913Dean, Master. Bertram Veremale1.0012C.A. 231520.5750NaNS
64264264303Skoog, Miss. Margit Elizabethfemale2.003234708827.9000NaNS
77803Palsson, Master. Gosta Leonardmale2.003134990921.0750NaNS
53053053112Quick, Miss. Phyllis Mayfemale2.00112636026.0000NaNS
29729729801Allison, Miss. Helen Lorainefemale2.0012113781151.5500C22 C26S
82482482503Panula, Master. Urho Abrahammale2.0041310129539.6875NaNS
20520520603Strom, Miss. Telma Matildafemale2.000134705410.4625G6S
#写下你的思考
# 按照年龄倒序前20 只存活了4到5个  正序存活了12个




1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果
# 具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分

#自己构建两个都为数字的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'])
frame1_a
"""
#代码
framel_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'])
frame1_b
aec
first0.01.02.0
one3.04.05.0
two6.07.08.0
second9.010.011.0

将frame_a和frame_b进行相加

#代码
framel_a+frame1_b
abce
firstNaNNaNNaNNaN
one3.0NaN7.0NaN
secondNaNNaNNaNNaN
threeNaNNaNNaNNaN
two9.0NaN13.0NaN

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

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

1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
'''
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
'''

#代码
pd_penple=pd_train_chinese['父母与小孩个数']+pd_train_chinese['堂兄弟/妹个数']
max(pd_penple.values)

10

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

多做几个数据的相加,看看你能分析出什么?

#代码

#写下你的其他分析






1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
#(1) 关键知识点示例做一遍(简单数据)
# 具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计 部分

#自己构建一个有数字有空值的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

"""
#代码
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 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
'''
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
'''
#代码
pd_train_chinese['票价'].describe()
count    891.000000
mean      32.204208
std       49.693429
min        0.000000
25%        7.910400
50%       14.454200
75%       31.000000
max      512.329200
Name: 票价, dtype: float64

【思考】从上面数据我们可以看出,试试在下面写出你的看法。然后看看我们给出的答案。

当然,答案只是我的想法,你还可以有更多想法,欢迎写在你的学习笔记中。

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

# 写下你的其他分析
pd_train_chinese['年龄'].describe()
pd_train_chinese['是否幸存'].describe()

count    891.000000
mean       0.383838
std        0.486592
min        0.000000
25%        0.000000
50%        0.000000
75%        1.000000
max        1.000000
Name: 是否幸存, dtype: float64

【思考】有更多想法,欢迎写在你的学习笔记中。

【总结】本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值