Python大批量数值缩放及分布直方图绘制方法咨询
Python实现数值缩放与分布可视化方案
一、数据缩放实现
针对10万级以上的数值数据,推荐使用NumPy的向量化运算实现,效率远高于普通Python循环,完全符合你提到的缩放逻辑,0值会自动保留无需额外处理。
import numpy as np # 示例原始数据,实际使用时替换为你的全量数据集即可 raw_data = np.array([84.49, 60.885, 33.6, 0, 6.4, 89.361, 0, 0, 5.6, 0, 39.828]) target_sum = 500 # 计算缩放系数 raw_sum = raw_data.sum() scale_factor = target_sum / raw_sum # 执行缩放 scaled_data = raw_data * scale_factor # 验证结果,输出缩放后的总和,微小浮点精度误差属于正常现象 print(f"缩放后数据总和:{scaled_data.sum()}")
如果你的数据存储在csv等外部文件中,直接用np.loadtxt()或者pandas读取后转NumPy数组即可,10万条数据的缩放处理耗时在毫秒级。
二、缩放后数据分布直方图绘制
使用Matplotlib即可快速绘制分布直方图,针对0值占比较高的情况,也可以选择单独绘制非零值的分布来观察细节。
import matplotlib.pyplot as plt # 解决中文显示问题,不需要可删除下面两行配置 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘制全量数据直方图 plt.figure(figsize=(10, 6)) # bins参数代表分组数量,可根据数据分布特征自行调整 plt.hist(scaled_data, bins=20, edgecolor='black', alpha=0.7) plt.title('缩放后数值分布直方图') plt.xlabel('缩放后数值') plt.ylabel('频次') plt.grid(axis='y', alpha=0.3) plt.show() # 可选:仅绘制非零值的分布,避免0值占比过高掩盖其他数据的分布特征 non_zero_scaled = scaled_data[scaled_data > 0] plt.figure(figsize=(10, 6)) plt.hist(non_zero_scaled, bins=15, edgecolor='black', alpha=0.7, color='orange') plt.title('缩放后非零数值分布直方图') plt.xlabel('缩放后数值') plt.ylabel('频次') plt.grid(axis='y', alpha=0.3) plt.show()
内容的提问来源于stack exchange,提问作者Momba
相关产品推荐
相关产品推荐

