如何在 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' 样本更具代表性或强制其具有一定的大小,我们需要研究一些更高级的东西。
注意我的问题在这里有点不同:
我正在使用 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' 样本更具代表性或强制其具有一定的大小,我们需要研究一些更高级的东西。