当前位置: 首页 > article >正文

模块四-数据转换与操作——24. 数据分箱

24. 数据分箱1. 概述数据分箱Binning是将连续变量离散化的过程将数值范围划分为多个区间每个区间称为一个箱。分箱常用于将连续变量转换为分类变量便于分析和建模。importpandasaspdimportnumpyasnp# 创建示例数据np.random.seed(42)dfpd.DataFrame({姓名:[f用户_{i}foriinrange(1,21)],年龄:np.random.randint(18,70,20),收入:np.random.randint(3000,30000,20),分数:np.random.randint(0,100,20),消费次数:np.random.randint(1,100,20)})print(原始数据:)print(df.head())2. cut() - 等宽分箱2.1 基本用法cut()将数据按指定的区间边界进行分箱。# 定义年龄区间age_bins[0,30,50,100]age_labels[青年,中年,老年]df[年龄段]pd.cut(df[年龄],binsage_bins,labelsage_labels)print(年龄段分布:)print(df[[年龄,年龄段]].head())# 查看各区间计数print(\n年龄段统计:)print(df[年龄段].value_counts())2.2 自动生成区间# 指定区间数量自动等宽分箱score_bins4# 分成4等份score_labels[低,中低,中高,高]df[分数等级]pd.cut(df[分数],binsscore_bins,labelsscore_labels)print(分数等级等宽:)print(df[[分数,分数等级]].head(10))print(\n区间分布:)print(df[分数等级].value_counts().sort_index())2.3 查看区间边界# 不指定 labels查看区间范围age_groupspd.cut(df[年龄],bins[0,30,50,100])print(年龄区间:)print(age_groups.head())# 查看区间类别print(\n区间类别:)print(age_groups.cat.categories)3. qcut() - 等频分箱qcut()根据数据的分位数进行分箱使每个箱包含大致相同数量的样本。# 等频分箱4等份df[收入等级_q]pd.qcut(df[收入],q4,labels[低,中低,中高,高])print(收入等级等频:)print(df[[收入,收入等级_q]].head())# 查看各区间样本数应该大致相等print(\n等频分箱统计:)print(df[收入等级_q].value_counts().sort_index())4. cut() vs qcut() 对比# 创建极端数据np.random.seed(42)datapd.DataFrame({值:np.random.exponential(10,100)# 指数分布数据})# 等宽分箱data[等宽]pd.cut(data[值],bins5,labels[箱1,箱2,箱3,箱4,箱5])# 等频分箱data[等频]pd.qcut(data[值],q5,labels[箱1,箱2,箱3,箱4,箱5])print(等宽 vs 等频对比:)print(等宽分箱分布:)print(data[等宽].value_counts().sort_index())print(\n等频分箱分布:)print(data[等频].value_counts().sort_index())5. 自定义分箱规则5.1 使用自定义函数defcustom_binning(x):ifx30:return青年elifx50:return中年else:return老年df[年龄段_自定义]df[年龄].apply(custom_binning)print(自定义分箱:)print(df[[年龄,年龄段_自定义]].head())5.2 使用字典映射# 先使用 cut再映射age_bins[0,30,50,100]df[年龄段代码]pd.cut(df[年龄],binsage_bins,labelsFalse)print(年龄段代码:)print(df[[年龄,年龄段代码]].head())# 代码映射为中文code_map{0:青年,1:中年,2:老年}df[年龄段_映射]df[年龄段代码].map(code_map)6. 分箱后的聚合分析# 按年龄段统计平均收入print(各年龄段平均收入:)print(df.groupby(年龄段)[收入].mean().round(0))# 按分数等级统计平均收入print(\n各分数等级平均收入:)print(df.groupby(分数等级)[收入].mean().round(0))# 多维度分组print(\n年龄段 × 分数等级 平均收入:)pivotdf.pivot_table(values收入,index年龄段,columns分数等级,aggfuncmean).round(0)print(pivot)7. 完整示例客户价值分群# 创建客户数据np.random.seed(42)customerspd.DataFrame({客户ID:[fCUST{i:04d}foriinrange(1,101)],年消费金额:np.random.exponential(5000,100).round(0),购买次数:np.random.poisson(15,100),客单价:np.random.normal(300,100,100).round(0),会员天数:np.random.randint(1,1000,100)})# 修正负值customers[客单价]customers[客单价].clip(lower0)print(*60)print(客户价值分群分析)print(*60)print(\n原始数据统计:)print(customers[[年消费金额,购买次数,客单价,会员天数]].describe())# 1. 消费金额分箱等频customers[消费等级]pd.qcut(customers[年消费金额],q4,labels[低消费,中低消费,中高消费,高消费])print(\n1. 消费等级分布:)print(customers[消费等级].value_counts())# 2. 购买频次分箱freq_bins[0,5,10,20,200]freq_labels[低频,中低频,中高频,高频]customers[频次等级]pd.cut(customers[购买次数],binsfreq_bins,labelsfreq_labels)print(\n2. 频次等级分布:)print(customers[频次等级].value_counts())# 3. 客单价分箱price_bins[0,200,300,400,1000]price_labels[低单价,中单价,高单价,超高单价]customers[单价等级]pd.cut(customers[客单价],binsprice_bins,labelsprice_labels)print(\n3. 单价等级分布:)print(customers[单价等级].value_counts())# 4. 会员时长分箱days_bins[0,30,90,180,365,1000]days_labels[新客,活跃,忠诚,资深,元老]customers[会员等级]pd.cut(customers[会员天数],binsdays_bins,labelsdays_labels)print(\n4. 会员等级分布:)print(customers[会员等级].value_counts())# 5. 客户价值评分defcalculate_score(row):# 消费金额得分0-40分amount_scoremin(row[年消费金额]/20000*40,40)# 频次得分0-30分freq_scoremin(row[购买次数]/30*30,30)# 单价得分0-20分price_scoremin(row[客单价]/500*20,20)# 忠诚度得分0-10分loyalty_scoremin(row[会员天数]/365*10,10)returnround(amount_scorefreq_scoreprice_scoreloyalty_score,2)customers[价值得分]customers.apply(calculate_score,axis1)# 6. 客户分群score_bins[0,25,50,75,100]score_labels[低价值,中低价值,中高价值,高价值]customers[客户分群]pd.cut(customers[价值得分],binsscore_bins,labelsscore_labels)print(\n5. 客户分群分布:)print(customers[客户分群].value_counts())# 7. 分群统计print(\n6. 各客户群平均指标:)segment_statscustomers.groupby(客户分群).agg({年消费金额:mean,购买次数:mean,客单价:mean,会员天数:mean,价值得分:mean}).round(2)print(segment_stats)# 8. 交叉分析print(\n7. 消费等级 × 会员等级 分布:)cross_tabpd.crosstab(customers[消费等级],customers[会员等级])print(cross_tab)8. 分箱方法对比方法特点适用场景cut()等宽区间宽度相同数据均匀分布cut()自定义边界灵活控制区间有业务含义的边界qcut()等频每箱样本数相同数据倾斜、需要平衡样本apply()自定义完全自定义复杂逻辑9. 总结函数说明示例cut(x, bins)等宽分箱pd.cut(df[age], bins[0,30,60,100])cut(x, bins, labels)带标签分箱pd.cut(df[age], bins4, labels[A,B,C,D])qcut(x, q)等频分箱pd.qcut(df[income], q4)cut(..., labelsFalse)返回区间代码pd.cut(df[age], bins3, labelsFalse)value_counts()统计分布df[bin].value_counts()

相关文章:

模块四-数据转换与操作——24. 数据分箱

24. 数据分箱 1. 概述 数据分箱(Binning)是将连续变量离散化的过程,将数值范围划分为多个区间,每个区间称为一个"箱"。分箱常用于将连续变量转换为分类变量,便于分析和建模。 import pandas as pd import nu…...

别再乱接电阻了!STM32F407 SWD调试电路设计,从手册到实战的完整避坑指南

STM32F407 SWD调试电路设计:从芯片手册到工程实践的黄金法则 在嵌入式开发领域,调试接口的设计往往被当作"简单连线"而草率处理,直到某天你发现烧录器频繁断开连接、芯片无法识别,或是批量生产中出现随机性下载失败——…...

【工业视觉】基于序列图像动态特征提取的熔炼结晶过程建模与量化分析

1. 工业视觉在熔炼结晶过程中的核心价值 我第一次接触工业视觉在熔炼结晶中的应用是在2018年一个铜冶炼项目。当时工厂老师傅们还在用肉眼观察结晶状态,不仅效率低下,而且不同操作员的判断标准差异能达到15%。这种主观性带来的工艺波动直接影响了产品质量…...

软件测试工程师的“技术外交”:如何搞定开发?

当质量守卫者遇上代码创造者在软件工程的世界里,测试与开发的关系常被比喻为“猫鼠游戏”——一个拼命构建,一个拼命破坏。这种刻板印象背后,隐藏着一条真实而残酷的职场定律:测试工程师的专业价值,一半取决于技术能力…...

Teamcenter: RAC插件开发实战——从环境搭建到BOM报表生成

1. 环境搭建:Target Platform配置实战 第一次接触Teamcenter RAC插件开发时,最让我头疼的就是环境配置。记得当时为了调试一个简单的菜单按钮,整整折腾了两天环境问题。下面分享我验证过的配置流程,帮你避开那些坑。 开发RAC插件需…...

终极指南:PersistentWindows如何彻底解决Windows多显示器窗口管理难题

终极指南:PersistentWindows如何彻底解决Windows多显示器窗口管理难题 【免费下载链接】PersistentWindows fork of http://www.ninjacrab.com/persistent-windows/ with windows 10 update 项目地址: https://gitcode.com/gh_mirrors/pe/PersistentWindows …...

别光抄答案!用Python函数通关Educoder计算思维训练,我总结了这3个实战技巧

用Python函数通关Educoder计算思维训练的3个实战技巧 当你在Educoder平台面对Python函数题目时,是否曾陷入"看懂答案却不会独立解题"的困境?本文将从计算思维的本质出发,分享三个突破函数学习瓶颈的实战技巧。不同于直接提供参考答…...

程序员35岁转型记:我如何成为AI产品经理?

当“质量守卫者”遇见职业天花板如果你是一名软件测试工程师,你一定熟悉这样的场景:凌晨三点还在盯着自动化脚本的运行日志,白天反复和开发争论一个缺陷的定级,周报里写满了用例覆盖率和漏测率,但晋升答辩时评委却问你…...

使用 Taotoken CLI 工具一键配置团队成员的开发环境

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken CLI 工具一键配置团队成员的开发环境 在团队开发中,统一管理大模型 API 的接入配置是一项常见且繁琐的任…...

BQ34Z100-G1电量计配置不求人:用咸鱼EV2400+BqStudio完成电池组参数学习的保姆级教程

BQ34Z100-G1电量计配置实战:从零搭建高精度电池管理系统 在新能源和储能系统蓬勃发展的今天,精确的电池电量计量已成为电池管理系统(BMS)的核心竞争力。德州仪器(TI)的BQ34Z100-G1阻抗跟踪电量计凭借其出色的精度和稳定性,在工业储能、电动工…...

2026企业数字化必看:实在Agent订单数据处理智能助理实战及ERP自动录入教程

进入2026年,全球企业级自动化市场已完成从“流程驱动”向“智能体(Agent)驱动”的范式转移。根据Gartner与IDC在2025年底发布的联合报告显示,超过85%的500强企业已在其核心业务流程中部署了具备自主决策能力的数字员工。在这一背景…...

时间序列分类的能效优化与剪枝策略实践

1. 时间序列分类的能效挑战与剪枝策略概述时间序列分类(Time Series Classification, TSC)作为机器学习的重要分支,在医疗监测、工业设备故障诊断、金融行为分析等领域发挥着关键作用。随着应用场景的复杂化和数据规模的扩大,传统…...

RK3568 Debian系统Docker安装与ARM64容器化部署实战指南

1. 项目概述与核心价值最近在折腾一块基于瑞芯微RK3568的开发板,想在上面跑一些服务,自然而然地就想到了Docker。毕竟,Docker带来的环境隔离和便捷部署,对于嵌入式开发和边缘计算场景来说,简直是“神器”。但当我真正动…...

3分钟搞定!FigmaCN终极中文插件:让英文界面秒变中文的免费神器

3分钟搞定!FigmaCN终极中文插件:让英文界面秒变中文的免费神器 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?专业术…...

Intel Lunar Lake核显架构解析:Xe2-LPG如何重塑轻薄本图形性能

1. 项目概述:一次架构驱动的核显革命最近,Intel Lunar Lake(月亮湖)移动处理器的核显性能数据开始陆续曝光,行业内讨论的热度很高。作为一个长期关注移动平台图形性能的从业者,我第一时间梳理了目前能获取到…...

树莓派Pico上使用Blinka兼容层调用CircuitPython传感器库

1. 项目概述与核心价值如果你手头有一块树莓派 Pico,正在用 MicroPython 开发,但眼馋 CircuitPython 生态里那海量且维护良好的传感器驱动库,比如 Adafruit 官方出品的那些,那么你肯定想过:能不能直接在 MicroPython 里…...

杰理之似于“PO”声,如果切换的时机刚好在音量较高的时候,比较容易出现【篇】

似于“PO”声,如果切换的时机刚好在音量较高的时候,比较容易出现...

从零打造互动徽章:激光切割与电容触摸的软硬件融合实践

1. 项目概述与核心思路如果你参加过技术大会或者创客市集,一定对那些闪烁着酷炫灯光、能与人互动的徽章印象深刻。这类被称为“Badge”的可穿戴设备,早已超越了单纯的身份标识功能,成为了展示技术、创意和社群文化的微型平台。今天要分享的&a…...

TarsCpp协程实现原理:从用户态上下文切换看高性能RPC框架设计

1. 从线程到协程:为什么TarsCpp要拥抱协程?在分布式微服务架构里,我们每天都在和RPC、网络IO、并发处理打交道。传统的多线程模型,一个请求一个线程,逻辑清晰,但线程创建、上下文切换的开销,以及…...

使用Python快速接入Taotoken并切换不同模型进行对话测试

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Python快速接入Taotoken并切换不同模型进行对话测试 本文面向希望快速上手Taotoken平台的Python开发者。我们将通过一份最小化…...

从几何视角解析单层感知机:超平面、分类与学习算法

1. 单层感知机:从几何空间看分类本质 第一次接触单层感知机时,很多人会被各种数学符号绕晕。其实换个角度看,它就是个拿着尺子在高维空间里画分界线的工具。想象你面前有一堆红蓝两色的气球,单层感知机要做的,就是找到…...

长期使用Taotoken聚合API对项目运维复杂度的简化感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken聚合API对项目运维复杂度的简化感受 作为项目维护者,我们团队在过去一段时间里,将多个大模…...

你还在用自然语言写MJ提示词?专业级结构化提示词已进入Token级编排时代:详解::权重、--no冲突域、[]嵌套层级与多模态对齐原理

更多请点击: https://intelliparadigm.com 第一章:自然语言提示词的局限性与结构化范式跃迁 传统自然语言提示(Prompt)虽具备易用性和低门槛优势,但在复杂任务中暴露出显著瓶颈:语义模糊性、上下文敏感性弱…...

Vivado工程实战:在ZCU102上配置MIG控制器时,SLEW属性设置成SLOW还是FAST?

Vivado工程实战:ZCU102平台MIG控制器SLEW属性深度解析 在Xilinx ZCU102开发板上进行DDR4接口设计时,MIG控制器的配置往往成为项目成败的关键。许多工程师能够顺利完成基础配置,却在面对诸如SLEW属性这类"细微"参数时陷入选择困境。…...

Godot游戏开发:模块化系统集成与事件驱动架构实战

1. 项目概述与核心价值如果你正在用Godot引擎做游戏,尤其是那种玩法稍微复杂一点的,比如RPG、策略游戏或者带点模拟经营元素的,那你肯定遇到过这样的问题:每次开新项目,都得从零开始搭一套基础系统。角色状态管理、物品…...

Nornir网络自动化监控插件:集成Sentry实现异常告警与上下文追踪

1. 项目概述:一个为Nornir网络自动化框架量身定制的告警与监控插件 如果你和我一样,长期使用Nornir框架来管理成百上千的网络设备,那你一定遇到过这样的场景:一个精心编写的自动化任务在测试环境跑得飞快,一旦放到生产…...

Agent监控管理工具agenttop:实现自动化任务的可观测性与可控性

1. 项目概述与核心价值最近在开源社区里,我注意到一个名为vicarious11/agenttop的项目开始受到一些开发者的关注。乍一看这个标题,你可能会和我最初的反应一样:这又是一个“Agent”相关的工具,现在这类项目多如牛毛。但当我花时间…...

AI驱动的代码冻结守护者:开源项目xcf如何提升软件发布质量

1. 项目概述:当AI遇上代码冻结,一个开源协作范式的诞生最近在开源社区里,一个名为CodeFreezeAI/xcf的项目引起了我的注意。乍一看这个标题,可能会让人有些困惑:“CodeFreeze” 通常指的是软件开发流程中的“代码冻结”…...

2026届最火的AI科研神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能生成内容,也就是AIGC,它的广泛运用带来了效率的提升&#x…...

AMD Ryzen终极调试指南:7步解锁SMUDebugTool硬件级控制

AMD Ryzen终极调试指南:7步解锁SMUDebugTool硬件级控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...