如何用python处理excel做直方图_Excel/python 如何实现自动分箱 (直方图)

今天要完成一个数据大屏,我们想做一个板块:订单金额分布

怎么做呢?订单金额是连续型数据,订单金额随时在发生变化

其实是一个直方图制作,涉及到分箱技术

那如何实现自动分箱,自动将金额相近的订单金额分到同一组,尽可能体现组间差异性,组内相似性呢?

我们研究了excel制作直方图的原理

其实只要能确定箱子宽度,其他的自然就确定了

1、箱宽度:(3.5 * sigma)/n^(1/3)

sigma : 数据源的标准差

n:数据量大小

python 代码

import pandas as pd

import numpy as np

#虚拟一组数据

data = [0.1,0.1,0.1,0.1,0.1,0.1,45,46,48,49,102,104,105,105,106,200]

n = len(data) #计算样本量

sigma = np.std(data) #计算标准差

d = (3.5*sigma)/pow(n,1/3) #计算箱宽

d

out:78.82326487903292

#计算每个箱子的临界值

b = min(data)

bi = [b]

while b < max(data):

b = b + d

bi.append(round(b))

bi

out:[0.1, 79.0, 158.0, 237.0]

#判段源数据每个值属于哪个箱子

box = []

for i in data:

for j in range(len(bi)):

if bi[j]<=i and i

box.append(j)

box

out:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2]

#计算每个箱子的数值频数(纵坐标)

from collections import Counter

Counter(box).values()

out:dict_values([10, 5, 1]) #纵坐标

#制作横坐标

ci=[]

for i in bi:

a = i

b = a + d

c = '{}~{}'.format(round(a),round(b))

ci.append(c)

ci

out:['0~79.0', '79.0~158.0', '158.0~237.0', '237.0~316.0']

#画图

from matplotlib import pyplot as plt

plt.bar(ci[:3],list(Counter(box).values()))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值