数据分析(第三天)

探索性数据分析

#加载所需的库
import numpy as np
import pandas as pd

了解你的数据吗?

利用Python进行数据分析

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

arr = np.arange(8).reshape((2, 4)) # 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
arr
df = pd.DataFrame([[8, 'JackYang'],
                   [2, 'RocZhang'],
                   [8, 'Lily'],
                   [10, 'Tom']],
                  columns=['b', 'a'],
                  index=['three', 'one', 'two', 'one'])
df
ba
three8JackYang
one2RocZhang
two8Lily
one10Tom
【问题】:大多数时候我们都是想根据列的值来排序,所以将你构建的DataFrame中的数据根据某一列,升序排列

当对DataFrame排序时,你可以使用一列或者多列作为排序键。为了实现这个功能,传递一个或多个给sort_values的可选参数 by。

df.sort_values(by='b')
ba
one2RocZhang
three5JackYang
two8Lily
one10Tom

最基础的排序是你可以根据行(index)或者列(columns),使用 sort_index()进行排序。

df.sort_index() # 以 行索引(index) 进行排列,默认是升序
ba
one2RocZhang
one10Tom
three5JackYang
two8Lily
df.sort_index(axis=1) # 根据列索引进行排序
ab
threeJackYang5
oneRocZhang2
twoLily8
oneTom10
# 可以设置降序排列
df.sort_index(axis=1, ascending=False)
ba
three5JackYang
one2RocZhang
two8Lily
one10Tom
# 任选两列数据同时降序排列
df.sort_values(by=['b', 'a'], ascending=False) # 先 根据列 'b'中的值进行降序排列,再根据 列 a中的值进行降序排列
ba
one10Tom
two8Lily
three8JackYang
one2RocZhang

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

path = r'data\train.csv'
data = pd.read_csv(path)
data.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
data.sort_values(by=['Fare', 'Age'], ascending=False).head(20)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
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人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。

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

任务三:利用Pandas进行算术计算,计算两个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
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
frame1_a + frame1_b
abce
firstNaNNaNNaNNaN
one3.0NaN7.0NaN
secondNaNNaNNaNNaN
threeNaNNaNNaNNaN
two9.0NaN13.0NaN

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

pd.concat([frame1_a, frame1_b], axis=1) # 以列为基准
abcaec
one0.01.02.03.04.05.0
two3.04.05.06.07.08.0
three6.07.08.0NaNNaNNaN
firstNaNNaNNaN0.01.02.0
secondNaNNaNNaN9.010.011.0
pd.concat([frame1_a, frame1_b], axis=0) # 以行为基准
abce
one0.01.02.0NaN
two3.04.05.0NaN
three6.07.08.0NaN
first0.0NaN2.01.0
one3.0NaN5.04.0
two6.0NaN8.07.0
second9.0NaN11.010.0

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

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

data = pd.read_csv(r'data\train.csv')
data
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

max(data['SibSp'] + data['Parch'])
10

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

data.describe() # 统计数值型数据的基本信息
PassengerIdSurvivedPclassAgeSibSpParchFare
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

举例:

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

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

data['Fare'].describe() # , 'Parch', 'SibSp'
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: Fare, dtype: float64
data['Parch'].describe()
count    891.000000
mean       0.381594
std        0.806057
min        0.000000
25%        0.000000
50%        0.000000
75%        0.000000
max        6.000000
Name: Parch, dtype: float64
data['SibSp'].describe()
count    891.000000
mean       0.523008
std        1.102743
min        0.000000
25%        0.000000
50%        0.000000
75%        1.000000
max        8.000000
Name: SibSp, dtype: float64

总结:该教程很好,有很多知识点我都不太会,需要查找资料才可以解决,也学到了很多,以后的几天我会继续坚持,把数据分析知识点过一遍,非常感谢DataWhale。

[完]

参考

DataWhale开源社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值