Сводные таблицы в программах для работы с электронными таблицами кажутся крутыми, но обычные пользователи игнорируют их. И есть альтернатива: несколько строк чистого кода Python могут сделать то же самое за вас.

Соответствующий код Python на IdeOne можно просмотреть и запустить здесь.

Сводные таблицы рекламируются как самая крутая функциональность программ для работы с электронными таблицами и инструмента базы данных Microsoft Access.

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

Вот несколько основных фактов о том, для чего они хороши, и в чем трудности, почему они не нравятся обычным пользователям:

  • Сводные таблицы предназначены для создания отчетов и подачи интерактивных диаграмм.
  • Они не подходят для предоставления исходных данных для дальнейших расчетов. Если вы используете для этого сводные таблицы, вам придется копировать результаты вручную.
  • Сводные таблицы не могут сводить обычные таблицы (также называемые кросс-таблицами). Если у вас есть входные данные в формате кросс-таблицы, вы либо преобразуете свои данные в список, похожий на таблицу базы данных (см. Ниже), чтобы заполнить сводную таблицу (что ужасно и вообще не поддерживается программами для работы с электронными таблицами), или вы застряли. (Объект Pandas DataFrame, который в основном является интеллектуальным эквивалентом кросс-таблицы, может быть повернут таким образом, см. также подсказку для Pandas ниже, но я не буду вдаваться в такие данные в этом посте. .)
  • Их макет меняется в зависимости от используемых столбцов и строк.
  • Они нарушают логику WYSIWYG программ электронных таблиц, в то время как им требуется источник данных, похожий на таблицу базы данных, с заполнением каждого поля каждой строки. Обычные пользователи электронных таблиц, которые не знакомы с основными понятиями базы данных, находят это трудным для понимания. В этом отношении сводные таблицы лучше подходят для Microsoft Access и других приложений баз данных (в SQL также есть сводные функции).
  • С большими базами данных сводные таблицы работают медленно, если вообще работают, потому что выполняют много ненужных вычислений.
  • В предыдущих версиях программ для работы с электронными таблицами вам приходилось уделять особое внимание тому, чтобы диапазон входных источников данных расширялся до новых строк, если вы добавляете данные в свою сводную таблицу. В последних версиях это делается автоматически.
  • В сводных таблицах у вас есть несколько вариантов суммирования значений (сумма, среднее, количество и т. д.) и представления агрегированных значений (нормальное, процентное значение строки, столбца или общее количество). Самый продвинутый расчет, на который способны сводные таблицы, — это показ значений в виде индекса — странное выражение, используемое в этом смысле только создателями Microsoft Excel, обозначающее понятие, называемое в статистике важностью или подъемом. Индекс в этом контексте является слабой заменой статистического анализа корреляции.
  • В сводных таблицах вы можете «развернуть» ячейки, показывающие рассчитанные значения. Это означает, что двойным щелчком вы получаете на другом листе строки источника данных, которые использовались для этого расчета.

Pandas, пакет аналитики для Python, способен выполнять очень сложные вычисления, некоторые из которых аналогичны вычислениям, выполняемым сводными таблицами.

Но я не хочу вдаваться в такие данные в этом посте.

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

Вход представляет собой список данных в простом текстовом формате.

Он преобразуется в список списков (dataTable), что является наиболее простым способом обработки таблиц в Python: внешний список содержит строки таблицы, а сами строки представляют собой списки, содержащие в качестве элементов содержимое ячеек в что ряды.

Словарь categories содержит уникальные элементы столбцов Area и Product. (Функция zip транспонирует таблицу, а использование типа данных set обеспечивает включение уникальных значений.)

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

«pivotSumma» — это словарь, который выполняет итерацию по всем значениям двух столбцов категорий и хранит соответствующие суммарные данные о продажах. Последующий оператор «print» распечатывает содержимое словаря в порядке убывания суммированных значений.

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

Словарь «pivotIndex» и последующий оператор «print» работают так же, как и в случае простого суммирования значений выше.

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