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

点击上方 蓝字 关注我们

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

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

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

01

数组值求和:Sum函数

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

import numpy as np
L = np.random.random(100)
sum(L)
# 55.61209116604941
np.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.0850555667307118
M.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等相似,这里就不再一一赘述了。

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,189


import pandas as pd
data = 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 inline
import matplotlib.pyplot as plt
import seaborn; seaborn.set()  # set plot style
plt.hist(heights)
plt.title('Height Distribution of US Presidents')
plt.xlabel('height (cm)')
plt.ylabel('number');

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

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

往期推荐

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

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

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

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

 

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

点个在看 你最好看

全部评论

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务