我想生成一个累积图,显示给定值下小于或等于该值的数据的百分比,在python / matplotlib / pandas中,我可以使用pandas提供的分位数函数(我猜numpy也可以)来实现这一点:
import numpy as np
import matplotlib.pyplot as plt
def plot_quantile(series, start=0., end=0.99):
y = np.linspace(start,end, 500)
x = series.quantile(y)
plt.plot(x, y*100)
plt.xlabel("Duration in minutes")
plt.ylabel("% of drives less than x minutes")
plt.grid()
plot_quantile(df.duration)
在本例中,我绘制了the NYC taxi dataset的出租车乘坐时间分布。
我想用bigquery的SQL查询生成类似的数据,我非常接近下面的查询:
select
approx_quantiles(duration, 100) as duration_quantile
from base_table
这给了我101个数据点,从最小值开始,到最大值结束。现在我有两个问题:
- 我不知道这些值是如何对应分位数的(例如,哪个值是P50?)-我也需要为绘图生成这些数字,正如您在python代码中看到的。
- 我似乎没有办法在顶部附近截断它--因为最大值很可能是一个非常大的离群值,这使得我的图很难阅读。
1条答案
按热度按时间gupuwyp21#
下面可能不是你想要的,但希望它对你有帮助。
bigquery-public-project
中使用了另一个数据集,而不是 * NYC出租车数据集 *。以上查询显示了累积分布,如Looker Studio中的以下查询所示。
我似乎没有办法在顶部附近截断它--因为最大值很可能是一个非常大的离群值,这使得我的图很难阅读。
是的,像你说的那样不容易读。
Looker Studio提供了一个自定义的过滤器,如果你把它应用到图表上,你可以得到一个更平滑的曲线。
如果您希望在查询中使用
QUALIFY
条件,可以在上述查询的底部添加QUALIFY
条件,而不是在LookerStudio中进行过滤。