sql 中位数_Python入门教程(四):用Python实现SQL中的分组聚合

1525a5ead500ad84e7ae7a04f90e150f.png

点击上方 蓝字 关注我们

974a6b1963887e78583811cc05b18e6f.png 376a763be53122664e7b59ddb3987248.png

我们先假设一个场景,当你面对大量数据时,你想要得出一个整体的数据概况,你会去怎么去做?

对于我来说呢,如果面对大量数据时,我会去计算相关数据的概括统计值,包括均值,标准差,中位数等等,它们可以让我们概括出数据中的“经典值”。

在数据分析中,我们常用到的工具是SQL,这些函数在SQL中你可能已经用的比较熟悉了,今天呢我们就讲一讲这些函数在Python中的应用。

01

数组值求和:Sum函数

如果你想要计算数组中所有元素的和,那么你可以用Python中内置的sum函数,也可以直接用Python自己的sum函数。

import numpy as npL = np.random.random(100)sum(L)# 55.61209116604941np.sum(L)# 55.612091166049424

二者语法相似,但是在执行效果方面,Numpy中的sum计算更快,因为其是在编译码中执行操作的。

big_array = np.random.rand(1000000)%timeit sum(big_array)%timeit np.sum(big_array)# 10 loops, best of 3: 104 ms per loop# 1000 loops, best of 3: 442 µs per loop

02

最大值/最小值

Python也有内置的min以及max函数,分别用于获取数组中的最大值与最小值。

min(big_array), max(big_array)# (1.1717128136634614e-06, 0.9999976784968716)np.min(big_array), np.max(big_array)#  (1.1717128136634614e-06, 0.9999976784968716)%timeit min(big_array)%timeit np.min(big_array)# 10 loops, best of 3: 82.3 ms per loop# 1000 loops, best of 3: 497 µs per loop
Numpy也有对应的函数,语法相似,但是执行效果更快。
print(big_array.min(), big_array.max(), big_array.sum())# 1.17171281366e-06 0.999997678497 499911.628197

03

多维度聚合

常用的聚合操作是沿着一行或者一列聚合。例如,假设你有一些数据存储在二维数组中,如下所示。默认情况下,每一个Numpy聚合函数将会返回对整个数组的聚合结果。

M = np.random.random((3, 4))print(M)# [[ 0.8967576   0.03783739  0.75952519  0.06682827]#  [ 0.8354065   0.99196818  0.19544769  0.43447084]#  [ 0.66859307  0.15038721  0.37911423  0.6687194 ]]

聚合函数还有一个axis参数,当指定axis=0时,可以找到每一列的最大最小值;指定axis=1时,可以找出每一列的最大最小值。

tips:axis关键字指定的是数组将会被折叠的维度,而不是将要被返回的维度。

axis=0意味着第一个轴要被折叠——对于每一个数组,意味着每一列的值都将被聚合。

M.sum()# 6.0850555667307118M.min(axis=0)# 该函数返回四个值,对应四列数字的计算值。# array([ 0.66859307,  0.03783739,  0.19544769,  0.06682827])M.max(axis=1)# array([ 0.8967576 ,  0.99196818,  0.6687194 ])

04

其他聚合函数汇总

除了min,max之外,Numpy还提供了各种各样的聚合函数,如下表所示,可以计算最大最小值,求和,均值,方差,标准差等。这些聚合函数对于NaN值都有安全处理策略,即计算时忽略所有的缺失值。这些聚合函数的语法和上面所讲的min,max等相似,这里就不再一一赘述了。

7e63981c7e6731cd2377baba70e5851f.png

05

美国总统的平均身高

下面我们通过一个例子来说明在具体的计算中如何使用这些函数。我们的示例数据时美国总统的身高数据,如果你想要获得这份数据,详见文末,我们提供了数据下载的方式。

首先,我们先看一下这份数据都有些什么内容;然后,我们通过Python中的Pandas模块导入这份数据。Pandas导入数据之后,数据格式会自动变成DataFrame类型,我们需要将其转换为array类型进行处理。

!head -4 data/president_heights.csv# order,name,height(cm)# 1,George Washington,189# 2,John Adams,170# 3,Thomas Jefferson,189import pandas as pddata = pd.read_csv('data/president_heights.csv')heights = np.array(data['height(cm)'])print(heights)# [189 170 189 163 183 171 185 168 173 183 173 173 175 178 183 193 178 173# 174 183 183 168 170 178 182 180 183 178 182 188 175 179 183 193 182 183#  177 185 188 188 182 185]

有了这个array之后呢,我们就可以计算很多的概括统计值了。

print("Mean height:       ", heights.mean())print("Standard deviation:", heights.std())print("Minimum height:    ", heights.min())print("Maximum height:    ", heights.max())# Mean height:        179.738095238# Standard deviation: 6.93184344275# Minimum height:     163# Maximum height:     193

这个例子中,聚合操作将整个数组减少到了单个概括值,这个概括值给出了这些数值信息的分布,我们也可以计算其分位数。

print("25th percentile:   ", np.percentile(heights, 25))print("Median:            ", np.median(heights))print("75th percentile:   ", np.percentile(heights, 75))# 25th percentile:    174.25# Median:             182.0# 75th percentile:    183.0

由上述结果可以看到,美国总统的身高中位数为182cm。为了更加直观的展示数据,我们可以对数据进行可视化

%matplotlib inlineimport matplotlib.pyplot as pltimport seaborn; seaborn.set()  # set plot styleplt.hist(heights)plt.title('Height Distribution of US Presidents')plt.xlabel('height (cm)')plt.ylabel('number');

全部代码已上传,公众号后台回复【Numpy聚合函数】即可获得。

3af57e2012ed4bffbb707dd79fb528dc.png 9d0b4d894362de056058779a22ea6eb9.png

python入门系列文章持续更新中,欢迎加入数据人专属交流群

f33676df24854e7da1755dfdfabc2173.png

往期推荐

Python入门教程(一):初识Numpy

Python入门教程(二):Numpy数组基础

SQL知识大全(六):SQL中的开窗函数

刷爆全网的动态条形图,原来5行Python代码就能实现!

980d3a1f29a1ddf3f966dde5bb99c4ea.png 

分享数据知识,成就数据理想

点个在看 你最好看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值