Пришлось мне как-то по-работе построить гистограммки для некоторых целочисленных выборок (не суть важно каких, просто лень описывать). Коллега подсказал удобную утилиту -- gsl-histogram (из пакета gsl-bin). Однако в построенных с помощью этой утилиты гистограмм обнаружились странные пробелы, как будто бы некоторые числа не присутствовали в выборке. Хотя достоверно (и это легко проверить) известно, что эти числа присутствуют в выборке:
Из гистограммы видно, что числа 14, 18 и 21 не присутствуют в выборке.
Попробовал другой способ (с помощью sort и uniq) и, о чудо, недостающие числа появились:
Итак, теперь по-порядку:
- имеется целочисленная выборка со следующими характеристиками:
min = 5, max = 28, avg = 12.3076
- строим гистограмму с помощью gsl:
$ cat input.csv | gsl-histogram 4 29 25 > hist_gsl.csv
- строим гистограмму с помощью sort и uniq:
$ sort input.csv | uniq -c > hist.csv
- ???
- PROFIT!!!
Отчего так получается? Думаю, от некорректного выбора интервалов для gsl-histogram. Что означают входные параметры: 25 интервалов от 4 до 29. Т.е. границы интервалов совпадают с числами в выборке, что иногда срабатывает, а иногда приводит к тому, что показано на первой картинке -- объединению значений из соседних интервалов. Вот так-то, думал, что нашел баг в программе, а на самом деле...
З.Ы.: Пока писал пост:
- нашел причину ошибки (как обычно, прослойка между стулом и экраном),
- построил хорошую гистограмму с помощью gsl, чуть-чуть сдвинув границы:
$ cat input.csv | gsl-histogram 4.01 29.01 25 > hist_gsl.csv
Комментариев нет:
Отправить комментарий