Как выполнить выборку в запросе sql, чтобы получить фрейм данных с pandas - PullRequest
0 голосов
/ 19 февраля 2020

Обратите внимание, что мой вопрос здесь немного другой:

Я работаю с pandas над набором данных, который содержит много данных (10M +):

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

Я знаю, что я можно сделать с функцией pandas с параметром frac, например

df_sample = df.sample(frac=0.01)

, однако я не хочу генерировать оригинальный df с таким размером. Интересно, каков наилучший способ создания фрейма данных с уже отобранными данными?

Я прочитал несколько sql постов, показывающих, что образцы данных были сгенерированы из среза, что абсолютно не приемлемо в моем случае. Образцы данных должны быть максимально равномерно распределены.

Может ли кто-нибудь пролить на меня больше света?

Большое спасибо.

ОБНОВЛЕНИЕ:

Ниже приведена таблица, показывающая, как выглядят данные:

enter image description here

Репутация - это поле, над которым я работаю. Вы можете видеть, что записи большинства имеют очень маленькую репутацию.

Я не хочу работать с кадром данных со всеми записями, я хочу, чтобы данные выборки также выглядели как данные без выборки, например, похожая гистограмма, это то, что я имел в виду "равномерно".

Надеюсь, это немного прояснится.

1 Ответ

0 голосов
/ 19 февраля 2020

Простая случайная выборка может быть выполнена с использованием следующего синтаксиса:

select * from mydata where rand()>0.9

Это дает каждой строке таблицы 10% шанс быть выбранным. Это не гарантирует определенный размер выборки и не гарантирует, что каждая ячейка представлена ​​(для этого потребуется слоистая выборка). Вот скрипка этого подхода , так что отвечает вашим требованиям. Однако, если вы хотите, чтобы образец был более репрезентативным или был определенного размера, нам нужно взглянуть на что-то более продвинутое.

...