2013-02-17 3 views
2

Я пишу код сбора данных в Python. Я хотел бы создать файл фрейма данных, который будет так же легко импортировать в R, насколько это возможно. Я полностью контролирую, что мой код Python будет производить, и я хотел бы избежать ненужной обработки данных со стороны R, например, преобразование столбцов в числовые/числовые векторы и т. Д. Кроме того, если это возможно, я хотел бы сделать импорт этих данных максимально простым на стороне R, предпочтительно, вызвав одну функцию с единственным аргументом имени файла.Предпочтительный формат данных для R dataframe

Как хранить данные в файле, чтобы сделать это возможным?

+0

Hi liori, похоже, что это не статистический вопрос (см. Область статистики stets.SE, как указано в FAQ), но чисто R-вопрос, и в этом случае он должен быть перенесен в stackoverflow, где он находится в теме , –

+0

Есть уже некоторые связанные вопросы по SO с тегом 'r', которые могут вам пригодиться. Если ни одна из них не поможет вам изменить свой вопрос (который, скорее всего, будет перенесен туда), чтобы добавить некоторые детали (например, насколько велики данные, какие типы данных вам понадобятся для завершения в кадре данных) и искать более конкретные ответы. –

+0

@Glen_b: Ах, извините.Не могли бы вы связать связанные вопросы? Я ничего не мог найти ... или, может быть, мои запросы не использовали правильные ключевые слова. – liori

ответ

4

Вы можете записать данные в CSV, используя csv модуль http://docs.python.org/2/library/csv.html Пайтона, то это просто вопрос использования read.csv в R. (См ?read.csv)

Когда вы читаете в данных в R с использованием read.csv, если не указано иное, символьные строки будут преобразованы в коэффициенты, числовые поля будут преобразованы в числовые. Пустые значения будут преобразованы в NA.

Первое, что вам нужно сделать после импорта некоторых данных, - это посмотреть на ?str, чтобы обеспечить класс данных, содержащийся в соответствии с вашими ожиданиями. Много раз я совершил ошибку и смешал значение символа в числовом поле и в итоге получил вместо множителя коэффициент.

Следует отметить, что вам, возможно, придется установить свои собственные строки NA. Например, если у вас есть «-», «.» Или какой-либо другой такой символ, обозначающий пробел, вам нужно будет использовать аргумент na.strings (который может принимать вектор строк, т.е. c("-",".")), до read.csv.

Если у вас есть поля даты, вам необходимо их правильно преобразовать. R не обязательно признавать даты или времени без вас указать, какие они есть (см ?as.Date)

Если вы заранее знаете, что каждый столбец будет вам можно указать класс, используя colClasses.

Подробное описание ?read.csv предоставит вам более подробную информацию. Но я изложил некоторые общие проблемы.

+0

+1. Я также часто использую CSV в качестве общего формата, когда вам нужно передавать данные между Python и R. Это не лучшее решение для всех ситуаций (например, очень большие файлы данных), но на практике он отлично работает для большинства из них. – lgautier

+0

Я думал об этом больше, и если бы он мог вызвать Rpy прямо из python, он мог бы использовать встроенную сериализацию R (readRDS, saveRDS), которые быстрей и поддерживали их форматы. –

+0

Да (это в комментариях к вопросу). – lgautier

4

Предложение Брэндона по использованию CSV велико, если ваши данные не огромны, и особенно если он не содержит целую галочку с плавающей запятой, и в этом случае формат CSV крайне неэффективен.

Опция, которая обрабатывает огромные наборы данных немного лучше, может заключаться в создании эквивалентного DataFrame в pandas и использовании его возможностей для сброса в hdf5, а затем открыть его в R таким образом. См. Например, this question.

Этот другой подход кажется излишним, но вы также можете напрямую перенести данные в память в R с помощью pandas's experimental R interface, а затем сохранить его непосредственно из R.

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