变量有重复值怎么分箱?

基于分位数分箱

     import pandas as pd
     import numpy as np

     data = pd.Series(np.random.randint(1, 100, size=100))
     data_with_duplicates = pd.concat([data, data[:20]])  # 添加一些重复值

     # 去除重复值
     data_unique = data_with_duplicates.drop_duplicates()

     quantiles = data_unique.quantile([0.25, 0.5, 0.75])
     bins = [data_unique.min(), quantiles[0.25], quantiles[0.5], quantiles[0.75], data_unique.max()]
     labels = ['Bin_1', 'Bin_2', 'Bin_3', 'Bin_4']
     data_binned_unique = pd.cut(data_unique, bins=bins, labels=labels)

     print(f"原始有重复值数据样本数量:{len(data_with_duplicates)}")
     print(f"去除重复值后分箱数据样本数量:{len(data_binned_unique)}")

等宽分箱

     min_value = data_with_duplicates.min()
     max_value = data_with_duplicates.max()
     bin_width = (max_value - min_value) / 4
     bins = [min_value + i * bin_width for i in range(5)]
     labels = ['Bin_1', 'Bin_2', 'Bin_3', 'Bin_4']
     data_binned_equal_width = pd.cut(data_with_duplicates, bins=bins, labels=labels)

     print(f"等宽分箱后数据样本数量:{len(data_binned_equal_width)}")

可视化分箱结果

     import matplotlib.pyplot as plt

     plt.hist(data_binned_unique, bins=len(labels), edgecolor='black')
     plt.title('Distribution after Binning (Unique Values)')
     plt.xlabel('Bins')
     plt.ylabel('Frequency')
     plt.show()

     plt.hist(data_binned_equal_width, bins=len(labels), edgecolor='black')
     plt.title('Distribution after Equal Width Binning')
     plt.xlabel('Bins')
     plt.ylabel('Frequency')
     plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值