【问题标题】:Dispersing Random Sampling in CSV through Python [closed]通过Python在CSV中分散随机采样[关闭]
【发布时间】:2014-01-07 23:39:09
【问题描述】:

我有一个(大)目录 CSV,其中列 [0:3] = 电话号码、姓名、城市、州。

我创建了一个包含 20,000 个条目的随机样本,但当然,它对人口较多的州和城市的权重很大。

我将如何编写一个 python 代码(使用 CSV 或 Pandas - 我没有可用的 linecache),该代码将平等地优先/加权每个独特的城市和每个州(单独,而不是成对),并限制每个独特的城市到 3 个选择?


TRICKIER 想法:我将如何编写一个 Python 代码,以便对于每个被选中的随机行,它会检查该城市之前是否已被选中。如果该城市之前已经被选中,它会忽略它并再次选择一条随机线,将考虑过的该城市先前选择的数量减少一个。所以,假设它随机选择了之前已经选择过两次的圣安东尼奥。脚本忽略这个选择,将它放回列表中,减少当前考虑的先前圣安东尼奥选择的数量,然后再次随机选择一行。如果它再次从圣安东尼奥挑选一条线,那么它重复之前的过程,现在将考虑的圣安东尼奥选秀权减少到 0。因此,它必须连续三次选择圣安东尼奥,才能从圣安东尼奥添加另一条线。对于未来的选秀权,它必须连续四次选秀圣安东尼奥,每多选一次选秀权。

我不知道第二个选项在“分散”我的随机选择方面的效果如何——这只是一个想法,看起来是学习更多 pythonese 的有趣方式。沿着同一思路的任何其他想法将不胜感激。对统计抽样和样本分散的见解也将受到欢迎。

【问题讨论】:

  • 如果一个州有这么多城市,线路数量上限超过了州限制,应该删除哪些线路?

标签: python python-2.7 csv random pandas


【解决方案1】:

实现的方法很多,但抽象算法应该是这样的。

首先,要创建一个新的 CSV,该 CSV 满足关于以相等概率绘制每个状态的第二个标准,请按如下方式绘制每一行。

1) 从状态集合中,绘制一个状态(每个状态以 1 / # of states 的概率绘制)。让那个状态为 s。

2) 从大 CSV 中,从 STATE = s 的行集中绘制一行。

在绘制行时,请记录从给定州/城市对中绘制的行数。你可以用字典来做到这一点。然后,每次绘制连续行时,如果有任何州/城市对等于用户设置的上限,则在上面的步骤 2 中将这些州/城市对排除在有条件的抽奖之外。这将满足您的第一个要求。

这有意义吗?如果您开始使用一些尝试实现此功能的代码,如果有任何问题,我会很乐意为您整理。

如果您想要执行“有点棘手”的算法,其中选择城市的概率随着每次选择而降低,您可以轻松做到这一点。基本上,在您绘制 s 之后对州 s 内的城市进行条件,然后根据该州每个城市被绘制的次数加权(您拥有此信息,因为您一直在存储它以实现第一个要求)。您必须提出加权函数的形式,因为您的描述并未暗示它。

同样,如果您尝试编写此代码,我很乐意查看您发布的任何代码并提出建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多