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入门系列文章持续更新中,欢迎加入数据人专属交流群
往期推荐
分享数据知识,成就数据理想
点个在看 你最好看