Я анализирую набор данных, содержащий 200 строк и 1200 столбцов, этот набор данных хранится в файле .CSV
. Чтобы обработать, я читаю этот файл, используя функцию R read.csv()
.
R занимает ≈ 600 секунд, чтобы прочитать этот набор данных. Позже у меня возникла идея, и я переместил данные в файл .CSV
и попытался прочитать их снова, используя функцию read.csv()
. Я был поражен, увидев, что это заняло ≈ 20 секунд. Как видите, это было в 30 раз быстрее.
Я проверил это для следующих итераций:
Чтение 200 строк и 1200 столбцов (не транспонировано)
> system.time(dat <- read.csv(file = "data.csv", sep = ",", header = F))
user system elapsed
610.98 6.54 618.42 # 1st iteration
568.27 5.83 574.47 # 2nd iteration
521.13 4.73 525.97 # 3rd iteration
618.31 3.11 621.98 # 4th iteration
603.85 3.29 607.50 # 5th iteration
Чтение 1200 строк и 200 столбцов (транспонировано)
> system.time(dat <- read.csv(file = "data_transposed.csv",
sep = ",", header = F))
user system elapsed
17.23 0.73 17.97 # 1st iteration
17.11 0.69 17.79 # 2nd iteration
20.70 0.89 21.61 # 3rd iteration
18.28 0.82 19.11 # 4th iteration
18.37 1.61 20.01 # 5th iteration
В любом наборе данных мы берем наблюдения в строках, а столбцы содержат переменные для наблюдения. Транспонировать меняет эту структуру данных. Это хорошая практика для транспонирования данных для обработки, даже если они выглядят странно?
Мне интересно, что заставляет R быстро читать наборы данных, когда я транспонирую данные. Я уверен, что это потому, что более ранние размеры были 200 * 1200
, которые стали 1200 * 200
после операции транспонирования.
Почему R быстро читает данные, когда я транспонирую данные?
Обновление: исследования и эксперименты
Первоначально я задал этот вопрос, потому что моему RStudio потребовалось много времени, чтобы прочитать и вычислить многомерный набор данных (многие столбцы сравниваются со строками [200 строк, 1200 столбцов]). Я использовал встроенную функцию R read.csv()
. Я прочитал комментарии ниже, согласно их предложениям, позже я экспериментировал с функцией read.csv2()
и fread()
, они все работают хорошо, но они работают медленно для моего исходного набора данных [200 строк * 1200 столбцов], и они читают транспонированный набор данных быстрее.
Я заметил, что это также верно для MS-Excel и Libre office Calc . Я даже пытался открыть его в Sublime Text editor , и даже для этого текстового редактора было легко (быстро) читать транспонированные данные. Я до сих пор не могу выяснить причину, почему все эти приложения ведут себя так. У всех этих приложений возникают проблемы, если в ваших данных много столбцов по сравнению со строками.
Итак, чтобы закончить всю историю, у меня есть только 3 вопроса.
- Что это за проблема? Это связано с операционными системами или это проблема уровня приложения?
- Это хорошая практика для транспонирования данных для обработки?
- Почему R и / или другие приложения быстро читают мои данные, когда я транспонирую данные?
Мои эксперименты, возможно, помогли мне заново открыть "1058 *, уже известное ".
мудрость, но я не мог найти что-либо актуальное в Интернете доброжелательно
поделиться такими хорошими методами программирования / анализа данных.