【问题标题】:How to take a more balanced sample data Python如何获取更平衡的样本数据 Python
【发布时间】:2019-08-19 16:57:40
【问题描述】:

我有一个带有标准化百分比信息的数据框。 例如。

wordCount 个数百分比

2.0 1282 0.267345

1.0 888 0.185213

3.0 1124 0.170791

4.0 1250 0.152877

5.0 554 0.084864

6.0 333 0.058904

7.0 160 0.024290

8.0 111 0.016851

所有百分比的总和为 1。 数据框是 6000 个条目。我希望从中抽取 2000 个样本。 2000 样本应尽可能平衡。

它应该包含最大的少量百分比数据和最少的大量百分比数据。

我不知道该怎么做。

例如。 2000 的所有数据都来自 wordCount 8.0,最小数据来自 2.0。

当我绘制 gamma 分布时,线应尽可能平坦。

【问题讨论】:

    标签: python gamma-distribution gamma imbalanced-data


    【解决方案1】:

    首先,您需要计算从每个字数中抽取多少样本。假设“wc”是一个包含“wordCount”和“number”列的数据框:

     options = len(wc)
     remaining = 2000
     wc['how many'] = 0
     wc = wc.sort_values('number').reset_index().drop('index', axis=1)
     for i in range(options):
         wc['how many'][i] = min(wc['number'][i], remaining // (options - i))
         remaining -= wc['how many'][i]
    

    “多少”列现在包含您要从每个 wordCount 中采样的数字。 然后在您的数据框上,假设命名为“数据”,您应该有一个名为“wordCount”的匹配列,您可以使用以下方法对您需要的数字进行采样:

    for i in data['wordCount'].unique():
        part_data = data[data['wordCount'] == i]
        part_sample = part_data.sample(wc[wc['wordCount'] == i].iloc[0, -1])
        try:
            all_samples = pd.concat([all_samples, part_sample])
        except NameError:
            all_samples = part_sample.copy()
    

    最后,'all_samples' 应该有 2000 个样本以及您要求的分布。

    顺便说一句:在数据帧行上循环通常是一个非常糟糕的主意,它可以被矢量化,但由于它只有 8 行,我允许自己。

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2016-12-31
      • 2020-06-07
      • 2013-12-29
      相关资源
      最近更新 更多