Как неправильно хранить данные в таблицах?



Недели три назад в интернете форсился мем про хранение "параметров" людей в Excel-таблицах (примеры в комментариях). Я не поддерживаю такой утилитарный подход к окружающим, но оставляя за скобками морально-этические аспекты, хотелось бы рассказать, почему с технической стороны это было организовано неверно.

Основная претензия в том, что переменные (параметры) записаны в строках, а наблюдения (в данном случае люди) в столбцах. Это влечет за собой массу неудобств.



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



Во-вторых, для анализа подобных таблиц средствами языков программирования критично иметь одинаковый тип данных в столбцах. К примеру, в R это вытекает из структуры датафрейма (поскольку столбцы – это вектора, в которых требуется одинаковый тип данных).

Для переменных (признаков, параметров) обычно гарантируется одинаковый тип данных, в то время как для наблюдений – вовсе нет. Следовательно, в R при загрузке такой таблицы, все столбцы приведутся к наиболее общему типу – скорее всего строковому, что также усложнит или сделает невозможным анализ.



В-третьих, не в контексте конкретно таких таблиц, можно отметить, что в Excel-таблицах формата .xlsx максимальное количество столбцов: 16384 (2^14), в то время как строк: 1048576 (2^20). Следовательно, при заполнении наблюдений по столбцам, место закончится гораздо раньше.

В качестве иллюстрации я хотела привести пример, как в 2020 году британские медики заполняли новые случаи Covid-19 в эксель таблицу по столбцам, в результате чего новые случаи ковид просто не влезли! Однако я почитала еще, и оказалось, что проблема была немного другая: данные хранили в строках (ура!), но вместо .xlsx использовали устаревший формат .xls, который поддерживает только 65536 (2^16) строк. Похоже, что медицинские центры присылали данные в формате .csv, где нет ограничения на количество строк, в то время как министерство здравоохранения (Public Health England) открывало их в .xls формате, и все строки после 65536 для них исчезали. Таким образом потерялось около 16 тысяч положительных результатов ковид-тестов (а сколько всего было потерянных строк, не сообщается).



Вообще хранение большого количества строк в Excel в целом вызывает сомнение, но это отдельная тема, пока что отмечу, как у генетиков некоторые названия генов (MARCH1, SEPT2) превращались в даты (например описано здесь).



UPD: в комментариях дополнили про недостатки экселя:

- Превращение чисел в даты, что сильно раздражает и с этим сталкиваются не только генетики

- Привязка к региональным разделителям (по умолчанию запятая как десятичный разделитель, что приходится менять)

- Отсутствие стандартного обозначения пропущенных значений



Итак, использовать эксель для анализа и хранения данных возможно не лучшая затея, однако если вы все же это делаете, то храните наблюдения в строках, а переменные в столбцах, это придумано не случайно!



#stat_humor #data #excel