четверг, 12 января 2012 г.

Построение гистограмм в Debian

Пришлось мне как-то по-работе построить гистограммки для некоторых целочисленных выборок (не суть важно каких, просто лень описывать). Коллега подсказал удобную утилиту -- 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

Комментариев нет:

Отправить комментарий