【问题标题】:to clustter the floating point data into suitable buckets in python在python中将浮点数据聚集到合适的桶中
【发布时间】:2015-12-31 16:27:36
【问题描述】:

我有一个 csv 文件,其中包含以升序排列的数千个浮点值。我想将这些值聚集/聚集到合适的集群中。

for example :
0.001
0.002
0.013
0.1
0.101
0.12
0.123
0.112
0.113
0.2

所以集群应该是这样的

0 - 0.1 with count 4
0.1 - 0.2 with count 6

如何在 python 中自动执行此集群任务?我需要保留一些初始参数吗?我对此一无所知。请帮忙。

【问题讨论】:

  • 价值有多高?
  • @PadraicCunningham :抱歉回复晚了,它是动态的,值可以达到任何水平,但有些范围会像 0.1、0.2 那样存在,但我想要某种方式来决定这些范围.. :) 但是根据您的回答,我将尝试与我想要的联系...非常感谢您的早期回复..如果您仍然可以告诉我我想要的是否可行,请告诉我.. :)
  • @POOJAGUPTA,这真的取决于增量可以是多少,比如我们达到 1.0、10.0 或 100.0 之后应该采取什么步骤?

标签: python cluster-analysis


【解决方案1】:

您可以bisect.bisect_left 以正确的增量查找元素在键列表中的位置,然后只需使用该索引从键列表中获取元素并使用 dict 增加其计数。

from bisect import bisect_left
with open("test.txt") as f:
    keys = [0.1, 0.2]
    d = dict.fromkeys(keys, 0)
    for line in f:
        ind = bisect_left(keys, float(line))
        d[keys[ind]] += 1
print(d)
{0.1: 4, 0.2: 6}

另一种方法是按适当的数量四舍五入:

with open("test.txt") as f:
    keys = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
    d = dict.fromkeys(keys, 0)
    for flt in map(float, f):
        k = round(flt + .05, 1) if flt > .05 else .1
        if flt not in d:
            d[k] += 1
        else:
            d[flt] += 1

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2017-09-12
    • 2018-06-19
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多