2014-01-07 5 views
0

У меня есть (большой) каталог CSV с колонками [0: 3] = номер телефона, имя, город, штат.Дисперсия случайной выборки в CSV через Python

Я создал случайную выборку из 20 000 записей, но это, конечно, было взвешено в более населенных штатах и ​​городах.

Как написать код на Python (с использованием CSV или Pandas - у меня нет доступного linecache), который будет одинаково расставлять приоритеты/вес каждого уникального города и каждого состояния (отдельно, а не как пары), а также ограничивать каждый уникальный город до 3-х выборов?


хитрее идея: Как бы я написать код питона, что для каждой случайной линии, которая получает выбран, он проверяет, был ли этот город был подобран раньше. Если этот город был выбран раньше, он игнорирует его и снова выбирает случайную строку, уменьшая количество рассмотренных предыдущих выборов для этого города на единицу. Итак, скажите, что он случайно выбирает Сан-Антонио, который был выбран дважды раньше. Скрипт игнорирует этот выбор, помещает его обратно в список, уменьшает количество рассматриваемых в настоящее время предыдущих выборов Сан-Антонио, а затем случайным образом выбирает строку снова. ЕСЛИ он снова выбирает линию из Сан-Антонио, а затем повторяет предыдущий процесс, теперь сокращение считается, что Сан-Антонио выбирает 0. Таким образом, он должен будет выбрать Сан-Антонио три раза подряд, чтобы добавить еще одну линию из Сан-Антонио. Для будущих выборов он должен будет выбрать Сан-Антонио четыре раза подряд, плюс один за каждый дополнительный выбор.

Я не знаю, насколько хорошо второй вариант будет работать, чтобы «разбросать» мои случайные выборы - это всего лишь идея, и это выглядит как забавный способ узнать больше pythonese. Любые другие идеи по одной и той же линии мы будем очень благодарны. Также было бы полезно проанализировать статистическую выборку и рассеяние образцов.

+0

Если в штате есть так много городов с максимальным количеством строк, чтобы оно превышало предел состояния, какие строки следует удалить? –

ответ

2

Существует много способов реализовать это, но абстрактный алгоритм должен быть чем-то вроде этого.

Во-первых, чтобы создать новый CSV, который соответствует вашему второму критерию относительно каждого состояния, нарисованного с равной вероятностью, рисуйте каждую строку следующим образом.

1) Из множества состояний нарисуйте состояние (каждое состояние рисуется с вероятностью 1/# состояний). Пусть это состояние s.

2) Из большого CSV нарисуйте строку из набора строк, где STATE = s.

Когда вы рисуете строки, храните запись о количестве строк, взятых из данной пары «государство/город». Вы можете сделать это со словарем. Затем каждый раз, когда вы рисуете последовательную строку, если есть пары состояний/городов, равные колпаку, установленным пользователем, исключайте пары состояния/города из вашего условного розыгрыша на шаге 2 выше. Это удовлетворит ваше первое требование.

Это имеет смысл? Если вы начнете с небольшого кода, который пытается реализовать это, я с радостью буду его убирать, если у вас возникнут проблемы.

Если вы хотите сделать «несколько более сложный» алгоритм, в котором вероятность выбора города уменьшается с каждым выбором, вы можете сделать это без особых проблем. В основном, условия для городов в пределах штата после того, как вы нарисовали s, затем вес в соответствии с количеством раз, когда каждый город в этом состоянии был нарисован (у вас есть эта информация, потому что вы сохранили его для реализации первого требования). Вам придется придумать форму функции взвешивания, поскольку это не подразумевается вашим описанием.

Опять же, если вы попытаетесь это сделать, я рад взглянуть на любой код, который вы публикуете, и вносить предложения.

Смежные вопросы