Python生成特定长度的唯一范围并对它们进行分类

2024-03-20

我有一个数据框列,它指定用户执行某项活动的次数。 例如。

>>> df['ActivityCount']
Users     ActivityCount
User0     220
User1     190
User2     105
User3     109
User4     271
User5     265
     ...
User95     64
User96     15
User97    168
User98    251
User99    278
Name: ActivityCount, Length: 100, dtype: int32


>>> activities = sorted(df['ActivityCount'].unique())
[9, 15, 16, 17, 20, 23, 25, 26, 28, 31, 33, 34, 36, 38, 39, 43, 49, 57, 59, 64, 65, 71, 76, 77, 78,
83, 88, 94, 95, 100, 105, 109, 110, 111, 115, 116, 117, 120, 132, 137, 138, 139, 140, 141, 144, 145, 148, 153, 155, 157, 162, 168, 177, 180, 182, 186, 190, 192, 194, 197, 203, 212, 213, 220, 223, 231, 232, 238, 240, 244, 247, 251, 255, 258, 260, 265, 268, 269, 271, 272, 276, 278, 282, 283, 285, 290]

根据他们的 ActivityCount,我必须将用户分为 5 个不同的类别,例如A, B, C, D and E。 活动计数范围随时间变化。在上面的例子中,它大约介于两者之间(9-290)(系列中的最低和最高),可能是(5-500) or (5 to 30)。 在上面的示例中,我可以将最大活动数除以 5,并将每个用户分类在 58 的范围内(from 290/5) like Range A: 0-58, Range B: 59-116, Range C: 117-174...etc

有没有其他方法可以使用 pandas 或 numpy 来实现此目的,以便我可以直接对给定类别中的列进行分类? 预期输出:-

>>> df
Users     ActivityCount  Category/Range 
User0     220             D
User1     190             D
User2     105             B 
User3     109             B
User4     271             E  
User5     265             E
     ...
User95     64             B
User96     15             A
User97    168             C
User98    251             E
User99    278             E

自然的方法是将数据分成 5 个数量,然后根据这些数量将数据分成箱。幸运的是,pandas 可以让你轻松做到这一点:

df["category"] = pd.cut(df.Activity, 5, labels= ["a","b", "c", "d", "e"])

输出类似于:

    Activity Category
34       115        b
15        43        a
57       192        d
78       271        e
26        88        b
6         25        a
55       186        d
63       220        d
1         15        a
76       268        e

另一种观点——聚类

在上面的方法中,我们将数据分为 5 个 bin,其中不同 bin 的大小相等。另一种更复杂的方法是将数据分为 5 个簇,并旨在使每个簇中的数据点尽可能彼此相似。在机器学习中,这称为聚类/分类问题。

一种经典的聚类算法是k-means https://en.wikipedia.org/wiki/K-means_clustering。它通常用于具有多个维度的数据(例如每月活动、年龄、性别等)。因此,这是一个非常简单的聚类案例。

在这种情况下,k-means聚类可以通过以下方式完成:

import scipy
from scipy.cluster.vq import vq, kmeans, whiten

df = pd.DataFrame({"Activity": l})

features = np.array([[x] for x in df.Activity])
whitened = whiten(features)
codebook, distortion = kmeans(whitened, 5) 
code, dist = vq(whitened, codebook)

df["Category"] = code

输出如下:

    Activity  Category
40       138         1
79       272         0
72       255         0
13        38         3
41       139         1
65       231         0
26        88         2
59       197         4
76       268         0
45       145         1

一些注意事项:

  • 类别的标签是随机的。在这种情况下,标签“2”指的是比标签“1”更高的活性。
  • 我没有将标签从 0-4 迁移到 A-E。这可以使用 pandas 轻松完成map.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python生成特定长度的唯一范围并对它们进行分类 的相关文章

随机推荐

  • C# 将行添加到具有自动增量列的数据表

    我有一个数据表 其中包含 A B C 列 我已将 A 列的 is Identity 属性设置为 true 但现在无法向表中添加任何行 我正在尝试的代码是这样的 dsA dtA row dsA dtA NewdtARow row B 1 ro
  • JavaScript 超时 - 规范 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这不仅仅是一个问题 它是一个确保Ja
  • 为什么 git revert 会抱怨缺少 -m 选项?

    所以我正在和其他人一起开发一个项目 并且有多个 github 分支正在开发中 有人刚刚修复了一个问题 我与他的分支合并 但后来我意识到我可以找到更好的解决方案 我想恢复我刚刚所做的提交 我尝试这样做git revert HEAD但它给了我这
  • 如何使用 refs/remotes 中的所有分支和标签克隆 git 存储库?

    我有一个从 svn 存储库创建的本地 git 存储库 git svn clone s svn 然后我创建了一个备份遥控器并将所有内容推送到其中 git remote add backup git myhost mybackup git gi
  • 子进程输出到 stdout 和 PIPE

    我正在使用subprocess像这样的模块 ping subprocess Popen fping exe 192 168 2 3 196 65 58 69 stdout PIPE output ping stdout readlines
  • AspectJ 的 NoSuchMethodError

    注意 这是概念实现的证明 而不是最终的事情 我有第三个 派对附加组件 我想限制他们对声音的使用 例如限制持续时间等 安全管理器不可能实现 为了实现这一点 我考虑用包装器替换 AudioSystem getLine 的返回值 这是测试方面 A
  • 如何使用 python 从 JSON 中提取特定字段和值?

    我正在迭代 JSON 我想从此对象中提取以下字段 Id 开放日期 User 票证状态 结束日期 我的数据结构如下 filtered data id 1021972 Aging Deferred Transferred Aging Open
  • MongoDB 全文搜索

    创建索引 db MyCollection createIndex text name FullTextIndex 搜索匹配项 db MyCollection find text search myWord count 结果为 1 对于具有值
  • 接口从类加载器中不可见

    我是新玩的 框架并使用 wsdl2java 工具 我正在开发一部戏 需要与 SOAP Web 服务交互的应用程序 我有 WSDL 并使用 jaxws 从它创建对象 它创建了一堆 java 类和 1 个接口 当我尝试进行 Web 服务调用时
  • 如何让R8 + proguard-android-optimize.txt + Google Drive API 无缝工作?

    这是我们的R8版本 当前版本是 1 4 94 来自 go r8bot luci r8 ci archive 0 5g74 的内部版本 390954928f0db9c3b888a367f7f128ce3bbfb160 当我从 buildTyp
  • 具有多个服务器和 php 工作人员的 Gearman

    我在多个服务器上运行的 gearman 工作人员遇到了问题 我似乎无法解决 当工作服务器脱机而不是工作进程被取消时 就会出现此问题 并导致所有其他工作进程出错和失败 仅 1 个客户和 2 个工作人员的示例 Client client new
  • 从docker容器访问主机的ssh隧道

    使用 ubuntu tusty 有一个在远程计算机上运行的服务 我可以通过 ssh 隧道通过端口转发来访问该服务localhost 9999 我有一个正在运行的 docker 容器 我需要从容器内通过主机的隧道访问该远程服务 我尝试从容器到
  • 没有 Web 应用程序服务器的 Java Web 服务

    我们有一个消息处理服务器 它 启动几个线程 处理消息 与数据库交互等 现在客户想要一个网络服务服务器在服务器上 他们将能够通过 Web 服务客户端查询消息处理服务器 例如给我今天的所有消息 或者删除带有 id 的消息 问题是 服务器只是一个
  • Meteorjs 加载消息

    我构建了应用程序 从 mongodb 加载初始数据集需要时间 我想显示加载 gif 直到数据加载完成 你能帮我做这件事吗 Use Session在 的里面onReady 的回调Meteor subscribe 函数 当订阅完成时调用 Met
  • 如何为 jQuery 选择器创建自定义函数

    如何创建一个自定义函数来附加到 jQuery 选择器 看起来像这样的东西 my class my function 您想要将该功能添加到jQuery fn 这是对 jQuery 对象原型的引用 欲了解更多详情 请查看 http docs j
  • sp_dbcmptlevel 被弃用后如何检查 SQL Server 数据库兼容性?

    根据 BOL SQL Server 联机丛书 sp dbcmptlevel http technet microsoft com en us library ms178653 aspx Microsoft SQL Server 的未来版本将
  • 按下退出按钮时最小化移动应用程序

    我正在使用 J2ME 和 LWUIT 开发移动应用程序 每当默认退出时Button 红色 在装有 symbian 操作系统的手机上按下 我希望我的应用程序最小化并且不退出 我该如何实现这一目标 根据诺基亚文档http library dev
  • Mysql - 根据顺序从另一列更新表列

    我有一个带有列的表格id name position old position 专栏old position包含用于在进行选择时定义顺序的唯一编号 但这些数字不是连续的 即使已订购 例如 2 12 11 14 20 35 45 28 我想要
  • Sqlite 应用内数据库迁移的最佳实践

    我在 iPhone 上使用 sqlite 我预计数据库架构可能会随着时间的推移而改变 每次成功迁移有哪些陷阱 命名约定和需要注意的事项 例如 我考虑过在数据库名称后附加一个版本 例如 Database v1 我维护的应用程序需要定期更新 s
  • Python生成特定长度的唯一范围并对它们进行分类

    我有一个数据框列 它指定用户执行某项活动的次数 例如 gt gt gt df ActivityCount Users ActivityCount User0 220 User1 190 User2 105 User3 109 User4 2