Любой, кто проводит очень простые статистические исследования данных, живущих в реляционной базе данных, должен был вычислять перекрестные таблицы, также известные как таблицы непредвиденных обстоятельств ( страница википедии ). они незаменимы, когда вам нужно посчитать, сколько предметов попадают в несколько категорий одновременно. Например: сколько клиентов составляют женщины и любят шоколад?
У Сципи есть способы сделать это для матриц, используя вариацию гистограммы2d. Но для полноценного статистического анализа у вас должна быть возможность иметь таблицу (с именами переменных), из которой вы можете указать, какие переменные вы хотите табулировать. Более того, он должен работать для других типов переменных, а не только для числовых. На самом деле, числовая табуляция является более сложной, поскольку она требует биннинга. R
, естественно, имеет такую функцию, которая называется table
, которая может быть легко перенесена в Python. Однако, помните, я упомянул в заголовке, что я хотел бы использовать ORM, почему? Поскольку кросс-таблицы намного меньше, чем данные, используемые для их генерации, вы можете получить таблицу 2х2, рассчитанную на основе миллиардов записей в базе данных. Моя точка зрения такова: в серьезных приложениях вы не можете позволить себе переносить все данные в память и проходить через них. Таким образом, вам нужно преобразовать дизайн таблицы в SQL-запрос, чтобы подсчет выполнялся механизмом базы данных. И ORM позаботится о необходимых корректировках диалекта SQL, необходимых для того, чтобы вы могли запускать свой код с любым бэкэндом базы данных.
Пример SQL (на диалекте MySQL) для простой кросс-табуляции можно найти здесь .
Итак, теперь, когда я думаю, что мотивировал вас на проблему, вот вопросы: Реализована ли эта функциональность в любом Python ORM? Как бы вы реализовали это, используя, скажем, SQLAlchemy или Django ORM?