【问题标题】:Mapping linear ranks from data points in python从python中的数据点映射线性等级
【发布时间】:2015-01-10 23:47:42
【问题描述】:

我将一个 csv 作为更大列表中的列表加载到行中 - 其中大约 500,000 个。行/子列表中的一项是分数。该分数是一个介于 0 - 1 之间的浮点数。这些分数恰好以非常不均匀的方式分散,我想标准化它们的分布。我不需要任何像钟形曲线这样棘手的东西,只需要一个从 1 到 0 的排名,步长均匀,并以任何方式分层(无论数量多少)。我也喜欢按分数降序排列的结果。

作为起点的示例列表:

list1 = [
    ['item1', 0.955, 'asdcwe', 'adcwett'],
    ['item2', 0.111, 'awioe', 'ocijwe'],
    ['item3', 0.111, 'dcuwq0eu', 'a9dfuwe'],
    ['item4', 0.5, 'aosdic', '204523'],
    ['item5', 1.0, 'oooo', 'ffff'],
    ['item6', 0.112, '03423', 'aewcew']]

示例结果:

sortedlist = [
    ['item5', 1.0, 'oooo', 'ffff'],
    ['item1', 0.8, 'asdcwe', 'adcwett'],
    ['item4', 0.6, 'aosdic', '204523'],
    ['item6', 0.4, '03423', 'aewcew'],
    ['item2', 0.2, 'awioe', 'ocijwe'],
    ['item3', 0.0, 'dcuwq0eu', 'a9dfuwe']]

(对我来说无关紧要的细节:最小值/最大值可以是包含或不包含的,因此在这种情况下,分数可能会导致 0.143 - 0.857。此外,如果 item2 和 item3 并列,则最终翻转结果,也没关系。)

【问题讨论】:

    标签: python python-2.7 csv mapping


    【解决方案1】:

    最简单的方法是排序,然后标准化:

    step = 1.0 / (len(list1) - 1)
    sortedlist = [l[:1] + [(len(list1) - i - 1) * step] + l[2:] 
                 for i, l in enumerate(sorted(list1, key=lambda item: item[1], reverse=True))]
    

    演示:

    >>> list1 = [
    ...     ['item1', 0.955, 'asdcwe', 'adcwett'],
    ...     ['item2', 0.111, 'awioe', 'ocijwe'],
    ...     ['item3', 0.111, 'dcuwq0eu', 'a9dfuwe'],
    ...     ['item4', 0.5, 'aosdic', '204523'],
    ...     ['item5', 1.0, 'oooo', 'ffff'],
    ...     ['item6', 0.112, '03423', 'aewcew']]
    >>> step = 1.0 / (len(list1) - 1)
    >>> sortedlist = [l[:1] + [(len(list1) - i - 1) * step] + l[2:] 
    ...              for i, l in enumerate(sorted(list1, key=lambda item: item[1], reverse=True))]
    >>> pprint(sortedlist)
    [['item5', 1.0, 'oooo', 'ffff'],
     ['item1', 0.8, 'asdcwe', 'adcwett'],
     ['item4', 0.6000000000000001, 'aosdic', '204523'],
     ['item6', 0.4, '03423', 'aewcew'],
     ['item2', 0.2, 'awioe', 'ocijwe'],
     ['item3', 0.0, 'dcuwq0eu', 'a9dfuwe']]
    

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      相关资源
      最近更新 更多