pandas分区间,算频率

本篇博客通过使用Python的pandas库读取并处理销售数据,实现了对销售额的最大值、最小值及其范围进行计算,并进一步进行了分组区间划分,计算了各区间频数、频率等统计指标,最终绘制了频数分布柱状图。
部署运行你感兴趣的模型镜像
import pandas as pd
path='F:/python/python数据分析与挖掘实战/图书配套数据、代码/chapter3/demo/data/catering_fish_congee.xls'
data=pd.read_excel(path,header=None,index_col=0)
data.index.name='日期'
data.columns=['销售额(元)']

xse=data['销售额(元)']
print(xse.max())
print(xse.min())
print(xse.max()-xse.min())

fanwei=list(range(0,4500,500))
fenzu=pd.cut(xse.values,fanwei,right=False)#分组区间,长度91
print(fenzu.codes)#标签
print(fenzu.categories)#分组区间,长度8
pinshu=fenzu.value_counts()#series,区间-个数
print(pinshu.index)

import matplotlib.pyplot as plt
pinshu.plot(kind='bar')
#plt.text(0,29,str(29))


qujian=pd.cut(xse,fanwei,right=False)
data['区间']=qujian.values
data.groupby('区间').median()
data.groupby('区间').mean()#每个区间平均数

pinshu_df=pd.DataFrame(pinshu,columns=['频数'])
pinshu_df['频率f']=pinshu_df / pinshu_df['频数'].sum()
pinshu_df['频率%']=pinshu_df['频率f'].map(lambda x:'%.2f%%'%(x*100))

pinshu_df['累计频率f']=pinshu_df['频率f'].cumsum()
pinshu_df['累计频率%']=pinshu_df['累计频率f'].map(lambda x:'%.4f%%'%(x*100))

In[158]: pinshu_df
Out[158]: 
              频数       频率f     频率%     累计频率f      累计频率%
[0, 500)      29  0.318681  31.87%  0.318681   31.8681%
[500, 1000)   20  0.219780  21.98%  0.538462   53.8462%
[1000, 1500)  12  0.131868  13.19%  0.670330   67.0330%
[1500, 2000)  12  0.131868  13.19%  0.802198   80.2198%
[2000, 2500)   8  0.087912   8.79%  0.890110   89.0110%
[2500, 3000)   3  0.032967   3.30%  0.923077   92.3077%
[3000, 3500)   4  0.043956   4.40%  0.967033   96.7033%
[3500, 4000)   3  0.032967   3.30%  1.000000  100.0000%

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

区裂化(Partition Skew)是分布式计和大数据处理领域中的一个常见问题,通常出现在使用数据区策略的系统中,例如Hadoop、Spark或分布式数据库。它指的是在分布式数据处理过程中,数据在各个区之间分布不均,导致某些区的数据量远远大于其他区。这种不均衡的分布会引发计资源利用不均,从而影响整体任务的性能和效率。 在实际场景中,区裂化可能表现为某些任务节点需要处理大量数据,而其他节点则处于空闲状态[^2]。这种现象会显著延长任务的执行时间,并可能导致某些节点成为性能瓶颈。 区裂化的主要原因包括: 1. 数据本身的分布不均,例如某些键值的出现频率远高于其他键值。 2. 区策略设计不合理,未能充考虑数据分布特性。 3. 在使用Bucket Shuffle Join等特定操作时,区规则未能有效平衡数据分布。 为了避免区裂化,可以采取以下措施: 1. **重新设计区策略**:例如采用更细粒度的区规则或动态调整区数量。 2. **数据预处理**:对数据进行采样和析,确保区键的选择能够均匀分布数据。 3. **使用盐值(Salting)技术**:通过在区键中引入额外的随机值,将热点数据散到多个区中。 4. **优化SQL查询**:尽量使用`WHERE`条件进行区裁剪,以减少数据分布不均的影响[^2]。 ### 示例代码:使用盐值技术解决区裂化 以下是一个简单的Python示例,展示如何通过盐值技术缓解区裂化问题: ```python import pandas as pd import numpy as np # 模拟原始数据 data = {'key': ['A', 'B', 'C', 'A', 'A', 'B', 'C', 'C', 'C'], 'value': np.random.rand(9)} df = pd.DataFrame(data) # 引入盐值,将每个键值随机配到不同的区 df['salted_key'] = df['key'] + '_' + (np.random.randint(0, 3, size=len(df))).astype(str) # 按盐值键重新区 partitioned_data = df.groupby('salted_key') # 输出区结果 for key, group in partitioned_data: print(f"Partition {key}:") print(group) ``` ### 相关问题 1. 区裂化对分布式计性能的具体影响是什么? 2. 如何检测数据是否存在区裂化问题? 3. 在Spark中如何优化区策略以避免裂化? 4. 盐值技术是否适用于所有类型的区裂化场景? 5. 区裂化与数据倾斜是否是同一概念?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值