第一章:第三节探索性数据分析

复习:在前面我们已经学习了Pandas基础,知道利用Pandas读取csv数据的增删查改,今天我们要学习的就是探索性数据分析,主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。

1 第一章:探索性数据分析

开始之前,导入numpy、pandas包和数据
#加载所需的库
import numpy as np
import pandas as pd
#载入之前保存的train_chinese.csv数据,关于泰坦尼克号的任务,我们就使用这个数据
csv2 = pd.read_csv("train_chinese.csv")
csv2.head(5)
乘客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

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 对象的索引行
'''
test_df = pd.DataFrame(np.arange(8).reshape((2, 4)), index=[2, 1], columns=['d', 'a', 'b', 'c'] )
test_df
dabc
20123
14567

【代码解析】

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

#回答代码
test_df.sort_values(by = 'b')
dabc
20123
14567

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

还可以通过索引进行排序

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

1.让行索引升序排序

#代码
test_df.sort_index()
dabc
14567
20123

2.让列索引升序排序

#代码
test_df.sort_index(axis = 1)
abcd
21230
15674

3.让列索引降序排序

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

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

#代码
test_df.sort_values(by = ['d','a'] , ascending = False)
dabc
14567
20123
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?

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

‘’’

#代码
csv2.sort_values(by = ['票价','年龄'] , ascending = False)[['票价','年龄']].head(5)
票价年龄
679512.329236.0
258512.329235.0
737512.329235.0
438263.000064.0
341263.000024.0
csv3 = csv2.sort_values(by = ['票价','年龄'] , ascending = False)
csv3.head(20)
乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
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人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

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

多做几个数据的排序

#代码
csv3 = csv2.sort_values(by = ['年龄' , '性别'] , ascending = False)
csv3.head(20)
乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
63063111Barkworth, Mr. Algernon Henry Wilsonmale80.0002704230.0000A23S
85185203Svensson, Mr. Johanmale74.0003470607.7750NaNS
969701Goldschmidt, Mr. George Bmale71.000PC 1775434.6542A5C
49349401Artagaveytia, Mr. Ramonmale71.000PC 1760949.5042NaNC
11611703Connors, Mr. Patrickmale70.5003703697.7500NaNQ
67267302Mitchell, Mr. Henry Michaelmale70.000C.A. 2458010.5000NaNS
74574601Crosby, Capt. Edward Giffordmale70.011WE/P 573571.0000B22S
333402Wheadon, Mr. Edward Hmale66.000C.A. 2457910.5000NaNS
545501Ostby, Mr. Engelhart Corneliusmale65.00111350961.9792B30C
28028103Duane, Mr. Frankmale65.0003364397.7500NaNQ
45645701Millet, Mr. Francis Davismale65.0001350926.5500E38S
43843901Fortune, Mr. Markmale64.01419950263.0000C23 C25 C27S
54554601Nicholson, Mr. Arthur Ernestmale64.00069326.0000NaNS
27527611Andrews, Miss. Kornelia Theodosiafemale63.0101350277.9583D7S
48348413Turkula, Mrs. (Hedwig)female63.00041349.5875NaNS
25225301Stead, Mr. William Thomasmale62.00011351426.5500C87S
55555601Wright, Mr. Georgemale62.00011380726.5500NaNS
57057112Harris, Mr. Georgemale62.000S.W./PP 75210.5000NaNS
82983011Stone, Mrs. George Nelson (Martha Evelyn)female62.00011357280.0000B28NaN
17017101Van der hoef, Mr. Wyckoffmale61.00011124033.5000B19S

#写下你的思考

年龄较大的乘客,堂兄妹和父母小孩个数较少,是否可以认为年龄较大的乘客亲戚较少,大多为孤寡老人,且男性较多。

csv3 = csv2.sort_values(by = ['乘客等级(1/2/3等舱位)' , '年龄'] , ascending = False)
csv3.head(20)
乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
85185203Svensson, Mr. Johanmale74.0003470607.7750NaNS
11611703Connors, Mr. Patrickmale70.5003703697.7500NaNQ
28028103Duane, Mr. Frankmale65.0003364397.7500NaNQ
48348413Turkula, Mrs. (Hedwig)female63.00041349.5875NaNS
32632703Nysveen, Mr. Johan Hansenmale61.0003453646.2375NaNS
949503Coxon, Mr. Danielmale59.0003645007.2500NaNS
15215303Meo, Mr. Alfonzomale55.500A.5. 112068.0500NaNS
22222303Green, Mr. George Henrymale51.000214408.0500NaNS
40640703Widegren, Mr. Carl/Charles Petermale51.0003470647.7500NaNS
63163203Lundahl, Mr. Johan Svenssonmale51.0003477437.0542NaNS
48248303Rouse, Mr. Richard Henrymale50.000A/5 35948.0500NaNS
59759803Johnson, Mr. Alfredmale49.000LINE0.0000NaNS
73673703Ford, Mrs. Edward (Margaret Ann Watson)female48.013W./C. 660834.3750NaNS
77177203Jensen, Mr. Niels Pedermale48.0003500477.8542NaNS
13213303Robins, Mrs. Alexander A (Grace Charity Laury)female47.010A/5. 333714.5000NaNS
59259303Elsbury, Mr. William Jamesmale47.000A/5 39027.2500NaNS
87387403Vander Cruyssen, Mr. Victormale47.0003457659.0000NaNS
20320403Youseff, Mr. Geriousmale45.50026287.2250NaNC
12913003Ekstrom, Mr. Johanmale45.0003470616.9750NaNS
16716803Skoog, Mrs. William (Anna Bernhardina Karlsson)female45.01434708827.9000NaNS
csv3 = csv2.sort_values(by = ['乘客等级(1/2/3等舱位)' , '年龄'] , ascending = True)
csv3.head(20)
乘客ID是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
30530611Allison, Master. Hudson Trevormale0.9212113781151.5500C22 C26S
29729801Allison, Miss. Helen Lorainefemale2.0012113781151.5500C22 C26S
44544611Dodge, Master. Washingtonmale4.00023363881.8583A34S
80280311Carter, Master. William Thornton IImale11.0012113760120.0000B96 B98S
43543611Carter, Miss. Lucile Polkfemale14.0012113760120.0000B96 B98S
68969011Madill, Miss. Georgette Alexandrafemale15.000124160211.3375B5S
32933011Hippach, Miss. Jean Gertrudefemale16.000111136157.9792B18C
50450511Maioni, Miss. Robertafemale16.000011015286.5000B79S
85385411Lines, Miss. Mary Conoverfemale16.0001PC 1759239.4000D28S
30730811Penasco y Castellana, Mrs. Victor de Satode (M...female17.0010PC 17758108.9000C65C
55055111Thayer, Mr. John Borland Jrmale17.000217421110.8833C70C
78178211Dick, Mrs. Albert Adrian (Vera Gillespie)female17.00101747457.0000B20S
31131211Ryerson, Miss. Emily Boriefemale18.0022PC 17608262.3750B57 B59 B63 B66C
50550601Penasco y Castellana, Mr. Victor de Satodemale18.0010PC 17758108.9000C65C
58558611Taussig, Miss. Ruthfemale18.000211041379.6500E68S
70070111Astor, Mrs. John Jacob (Madeleine Talmadge Force)female18.0010PC 17757227.5250C62 C64C
272801Fortune, Mr. Charles Alexandermale19.003219950263.0000C23 C25 C27S
13613711Newsom, Miss. Helen Monypenyfemale19.00021175226.2833D47S
29129211Bishop, Mrs. Dickinson H (Helen Walton)female19.00101196791.0792B49C
74874901Marvin, Mr. Daniel Warnermale19.001011377353.1000D30S

乘客等级在3等的,生存率不高.乘客等级在1等的,生存率越高。客舱等级越高,生存率越高。

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
“”"

#代码
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
abc
one0.01.02.0
two3.04.05.0
three6.07.08.0
frame1_b
aec
first0.01.02.0
one3.04.05.0
two6.07.08.0
second9.010.011.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如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
‘’’

#代码
cpd = pd.read_csv("train_chinese.csv")
cpd.head(5)
乘客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

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

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

#代码
max(cpd['堂兄弟/妹个数']+cpd['父母与小孩个数'])
#怎么都想不出来,看了原答案原来是这样子。果然最简单的往往最复杂
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

"""
"\n我们举了一个例子:\nframe2 = pd.DataFrame([[1.4, np.nan], \n                       [7.1, -4.5],\n                       [np.nan, np.nan], \n                       [0.75, -1.3]\n                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])\nframe2\n\n"
#代码
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'])

调用 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 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?

‘’’
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
‘’’

#代码
cpd.describe()[['票价']]
票价
count891.000000
mean32.204208
std49.693429
min0.000000
25%7.910400
50%14.454200
75%31.000000
max512.329200
cpd.describe()[['父母与小孩个数']]
父母与小孩个数
count891.000000
mean0.381594
std0.806057
min0.000000
25%0.000000
50%0.000000
75%0.000000
max6.000000

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

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

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

cpd.columns
Index(['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)', '乘客姓名', '性别', '年龄', '堂兄弟/妹个数',
       '父母与小孩个数', '船票信息', '票价', '客舱', '登船港口'],
      dtype='object')

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

cpd.describe()[['年龄']]
年龄
count714.000000
mean29.699118
std14.526497
min0.420000
25%20.125000
50%28.000000
75%38.000000
max80.000000
cpd.describe()[['是否幸存' , '年龄']]
是否幸存年龄
count891.000000714.000000
mean0.38383829.699118
std0.48659214.526497
min0.0000000.420000
25%0.00000020.125000
50%0.00000028.000000
75%1.00000038.000000
max1.00000080.000000
# 写下你的其他分析
cpd.describe()
乘客ID是否幸存乘客等级(1/2/3等舱位)年龄堂兄弟/妹个数父母与小孩个数票价
count891.000000891.000000891.000000714.000000891.000000891.000000891.000000
mean446.0000000.3838382.30864229.6991180.5230080.38159432.204208
std257.3538420.4865920.83607114.5264971.1027430.80605749.693429
min1.0000000.0000001.0000000.4200000.0000000.0000000.000000
25%223.5000000.0000002.00000020.1250000.0000000.0000007.910400
50%446.0000000.0000003.00000028.0000000.0000000.00000014.454200
75%668.5000001.0000003.00000038.0000001.0000000.00000031.000000
max891.0000001.0000003.00000080.0000008.0000006.000000512.329200

解:泰坦尼克号中,大部分乘客都是处于低等级的3等舱位,平均年龄较低,大部分乘客都很年轻。

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推荐,HR人力资源的数据思维工具包合集,共40份。 一、数据分析PPT 【绩效】绩效管理数据分析 【培训】培训数据分析报告(PPT-63页) 【述职】HR年底漂亮的述职报告模板(拿来即用) 【通用】人力资源常用分析数据 【通用】人力资源数据分析 【通用】数据分析师培训(1) 【通用】数据分析师培训(2) 【通用】数据分析师培训(3) 【通用】HR管理数据分析-基础篇 【薪酬】龙湖地产企业薪酬数据分析报告 【招聘】招聘数据分析报告 【培训】大数据时代的人力资源管理 【通用】大数据与人力资源管理 【通用】企业人力资源数据分析 【通用】人力资源数据中心建设探讨 二、数据分析表格 部门绩效考核统计分析表 工作周报数据分析表excel模板 公司人力成本分析表(siow) 年度入职与离职人员统计 培训看板 人力资源汇总表(基础数据、结构分析、离职分析、保险、费用、绩效等) 人力资源结构分析表 人力资源结构分析表 人力资源数据分析指标 人力资源统计分析表 人力资源预算分析表 人事信息看板 人员业绩分析表 人员业绩分析表Excel图表 入离职数据分析更新版 薪酬看板 薪酬总额测算表(部门) 员工离职统计及分析表 员工入职统计及分析表 员工招聘、离职成本核算表 月度绩效指标及月度绩效分析表 招聘看板 招聘员工统计分析表 招聘员工统计分析Excel表格 HR月分析数据模板

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值