В таблице три показанных значения складываются так: 28,6% + 28,6% + 42,9% = 100,1%. Такое расхождение может возникнуть, если округлить долю каждой категории отдельно. Но одной этой суммы недостаточно, чтобы подтвердить правильность расчёта: сначала проверьте частоты, знаменатель и состав категорий. Разберём учебный пример и составим пояснение для отчёта.

Все данные в примере вымышлены. По условию опроса ответили семь человек, и каждый выбрал ровно один вариант. Пропусков нет, а варианты А, Б и В охватывают все ответы и не пересекаются. Это условия нашего примера, а не любого опроса.

Начните с исходных частот

Сначала зафиксируем исходные частоты. Значения 2, 2 и 3 показывают число ответов по каждой категории, а не проценты.

Вариант   Количество ответов
А   2
Б   2
В   3
Всего   7
Учебный пример: частоты 2, 2, 3 из семи дают округлённые проценты 28,6, 28,6 и 42,9 с суммой 100,1; итог по исходным частотам равен 100 процентам.
Учебная схема, данные вымышлены. По условию категории исчерпывающие и не пересекаются, пропусков нет. Частоты сохраняются; расхождение показанной суммы объясняется округлением до одного знака.

Проверяем сумму частот: 2 + 2 + 3 = 7. Для каждой категории берём один знаменатель: все семь ответов. Если в ваших данных есть пропуски, можно выбрать несколько вариантов или доли считают от разных оснований, сначала опишите эти условия. Небольшое расхождение с 100% эту проверку не заменяет.

Если нужно разобраться, от какой группы считать долю в более сложной таблице, посмотрите разбор процентов по строкам и столбцам таблицы сопряжённости. Здесь вопрос уже определён: какая часть всех семи ответов приходится на каждый вариант.

Рассчитайте доли и округлите для показа

Процент для каждой категории рассчитываем по формуле: 100 × число ответов в категории / 7. Точные доли для А и Б равны 2/7, для В — 3/7. В процентах это бесконечные десятичные дроби: примерно 28,571428…%, 28,571428…% и 42,857142…%. В учебном отчёте показываем один знак после запятой.

Вариант   Расчёт и показанное значение
А   2/7 × 100%; после округления — 28,6%.
Б   2/7 × 100%; после округления — 28,6%.
В   3/7 × 100%; после округления — 42,9%.

После округления получаем 28,6 + 28,6 + 42,9 = 100,1%. Разница с 100,0% составляет 0,1 процентного пункта. Здесь мы сравниваем суммы долей, а не описываем изменение числа ответов во времени.

Точные доли складываются в единицу: 2/7 + 2/7 + 3/7 = 7/7 = 1. Значит, по исходным частотам итог равен 100%. Расхождение возникло, когда каждую ячейку округлили отдельно, а не из-за лишнего ответа в исходных данных.

Как показать итог и объяснить расхождение

В этом учебном примере оставляем исходные частоты 2, 2 и 3, показываем проценты с одинаковым числом знаков, а итог считаем по исходному количеству: 7/7 × 100% = 100,0%. Суммировать уже округлённые значения для получения итога этого примера не нужно. Для реального отчёта заранее согласуйте число знаков, вид итоговой строки и способ описания округления.

Для этого учебного примера пояснение может звучать так: «Из семи ответов два относятся к варианту А (28,6%), два — к варианту Б (28,6%), три — к варианту В (42,9%). Всего получено семь ответов, или 100,0%. Сумма показанных процентов равна 100,1% из-за округления каждой доли до одного знака после запятой».

Не стоит отнимать 0,1 у произвольно выбранной категории или делить уже округлённые доли на 100,1, чтобы получить сумму 100%. Это изменит способ представления результатов. Если в другом отчёте нужно специально согласовать округлённые ячейки с итогом, правило такого согласования следует выбрать и описать отдельно. В нашем примере мы этого не делаем.

Контрольный расчёт в Python

Проверить те же частоты можно полным кодом на Python. Пример выполнен в CPython 3.12.14 на Linux, без внешних пакетов. Это проверка конкретного учебного расчёта; интерфейс Excel и других программ здесь не проверяли.

from decimal import Decimal, ROUND_HALF_UP, localcontext
counts = [2, 2, 3]
with localcontext() as ctx:
    ctx.prec = 28
    shown = [(Decimal(n) * 100 / Decimal(sum(counts))).quantize(
        Decimal("0.1"), rounding=ROUND_HALF_UP) for n in counts]
print(shown)
print(sum(shown))

Результат:

[Decimal('28.6'), Decimal('28.6'), Decimal('42.9')]
100.1

Точки в выводе Python соответствуют десятичным запятым в русской таблице. Метод quantize задаёт округление к выбранному десятичному разряду; Decimal("0.1") здесь означает один знак после запятой. Явно выбран режим ROUND_HALF_UP: округление к ближайшему, а при равноудалённых значениях — от нуля. Например, положительное 2,25 при округлении до одного знака этим способом даёт 2,3. Это правило нашего расчёта, а не утверждение о настройке любой программы по умолчанию.

Параметр ctx.prec = 28 задаёт точность промежуточной десятичной арифметики в значащих цифрах, а не количество знаков после запятой в отчёте. Для показанного округления этих дробей такой точности достаточно. При этом использование Decimal само по себе не превращает 2/7 в конечную точную десятичную дробь. Точный итог в нашем объяснении установлен отдельно через исходные дроби и частоты.

Что проверить, прежде чем сослаться на округление

  • Убедитесь, что частоты относятся к одной совокупности и в сумме дают её фактическую численность.
  • Проверьте, что для долей выбран один понятный знаменатель и что учёт пропусков описан отдельно.
  • Если ожидается итог 100%, проверьте, что категории не пересекаются и охватывают все ответы.
  • Применяйте одинаковое число знаков и одно правило округления. Округление для отображения не меняет исходные записи.
  • Для условий этого примера итог рассчитывается по исходным значениям; сумму показанных округлённых ячеек проверяют отдельно.
  • В сноске объясните конкретное расхождение. Она не заменяет проверку, если причина неизвестна.

Если исходных частот и сведений о знаменателе нет, сумма 100,1% сама по себе не позволяет восстановить правильные доли или доказать причину расхождения. Найдите исходный файл и описание вопроса. В нашем примере условия известны: семь ответов, три непересекающиеся категории, пропусков нет. Точный итог равен 100%, а сумма показанных округлённых долей — 100,1%.

При подготовке собственного набора данных можно обсудить помощь со статистическим анализом. Заранее согласуйте исследовательский вопрос, состав исходных файлов и объём консультации; совпадение суммы процентов само по себе не доказывает корректность исследования.

Источник о работе Decimal

Официальная документация Python 3.12: decimal описывает десятичную арифметику, контекст точности, quantize и режимы округления. Частоты, таблицы и пример отчётной формулировки выше составлены автором для обучения.