Случайным образом выбрать строки из таблицы - Python Pandas Read SQL - PullRequest
1 голос
/ 06 марта 2019

Я должен выбрать случайные строки из таблицы Post GRE в заданном диапазоне времени и даты. То, что я сейчас делаю, - это запрос таблицы в диапазоне дат и времени, а затем случайный выбор строк (см. Ниже). Это становится очень неэффективным с точки зрения запросов, поскольку у меня есть 10 ГБ данных в этом диапазоне. Есть лучший способ сделать это? Пожалуйста, сообщите

sp = pd.read_sql("SELECT * FROM table1 WHERE timestamp >= '"+sampling_start_date+"' and timestamp <= '"+sampling_end_date+"'", con)

random_subset = sp.sample(n=300)

Формат штампа времени указан ниже

sampling_start_date = "2018-08-17 20:00:00"

1 Ответ

0 голосов
/ 07 марта 2019

Выбор случайного числа строк из таблицы

Случайная выборка строк может быть выбрана с помощью функции SQL случайного числа.Например, в PostgreSQL это random().

. Количество выбранных строк зависит от количества строк, которые будут выбраны без случайной выборки, и от вероятности выборки,

ДляНапример, если таблица содержит 5000 строк, а вероятность выборки меньше 0,1, будет выбрано около 500 строк (10% от 5000).

Если в предложении WHERE без случайной выборки, скажем, скажем1500 строк, а вероятность выборки меньше 0,2, тогда будет выбрано около 300 строк (20% из 1500).

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

Также обратите внимание, что если вы хотите повторить этот процесс и получитькаждый раз одни и те же результаты, вам нужно запустить генератор случайных чисел с одинаковым значением.Вы можете сделать это с помощью функции setseed():

SELECT setseed(.123);

Последнее, функция random() существует в PostgeSQL.Другие механизмы базы данных могут использовать другое имя для этой функции (например, в MySQL и SQL Server, я считаю, что это rand()).

См. Следующие операторы выбора для некоторых примеров.

-- all rows
select count(*) from my_table;
--   5264

-- should get about half of all rows
select count(*) from my_table where random() < 0.5;
--  2734

-- should get about 10% of all rows
select count(*) from my_table where random() < 0.1;
--   513

-- all rows matching some criteria
select count(*) from my_table where id > 100000 and id < 400000;
-- 3023

-- about half of the rows matching the above criteria
select count(*) from my_table where id > 100000 and id < 400000 and random() < 0.5;
-- 1527

-- about 10% of the rows matching the above criteria
select count(*) from my_table where id > 100000 and id < 400000 and random() < 0.1;
-- 283
...