如何在 sql 查询中进行采样以使用 pandas 获取数据帧

How to do sampling in sql query to get dataframe with pandas

注意我的问题在这里有点不同:

我正在使用 pandas 处理包含大量数据 (10M+) 的数据集:

q = "SELECT COUNT(*) as total FROM `<public table>`"
df = pd.read_gbq(q, project_id=project, dialect='standard')

我知道我可以使用带有 frac 选项的 pandas 函数,例如

df_sample = df.sample(frac=0.01)

但是,我不想生成那个大小的原始 df。我想知道用已经采样的数据生成数据框的最佳做法是什么。

我读过一些 sql 的帖子,显示示例数据是从切片生成的,这在我的案例中是绝对不被接受的。样本数据需要尽量均匀分布

谁能给我更多的光?

非常感谢。

更新:

下面是 table 显示数据的样子:

声誉是我从事的领域。您可以看到多数记录的声誉很小。

我不想使用包含所有记录的数据框,我希望采样数据也看起来像未采样数据,例如,类似的直方图,这就是我的意思 "evenly"。

我希望这能澄清一点。

可以使用以下语法执行简单的随机抽样:

select * from mydata where rand()>0.9

这使 table 中的每一行都有 10% 的机会被选中。它不保证一定的样本量或保证每个 bin 都有代表(这需要分层样本)。这是这种方法的 fiddle

http://sqlfiddle.com/#!9/21d1ee/2

平均而言,随机抽样将提供与基础数据相同的分布,因此符合您的要求。但是,如果您希望 'force' 样本更具代表性或强制其具有一定的大小,我们需要研究一些更高级的东西。