Найти частоту для не связанных, взвешенных данных - PullRequest
3 голосов
/ 12 января 2012

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

Один пример:

Angle  | Weight    
90   ....  3/10     
93   ....  2/10   
180  ....  2/10    
180  ....  1/10    
95   ....  2/10    

Я хочу создать гистограмму с размером ячейки 10. Значения y должны быть суммой взвешенных частот для углов в пределах диапазона.Как мне это сделать?Предпочтительно Mathematica или псевдокод ...

Ответы [ 3 ]

1 голос
/ 12 января 2012

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

dat = {{90, 3/10}, {93, 1/5}, {180, 1/5}, {180, 1/10}, {95, 1/5}};

bars =
 Reap[
   Sow[#2, Floor[#, 10]] & @@@ dat,
   _,
   {#, Tr@#2} &
 ][[2]]

Graphics[
  Rectangle[{#, 0}, {# + 10, #2}] & @@@ bars,
  AspectRatio -> 1/GoldenRatio,
  Axes -> True,
  AxesOrigin -> {Min@bars[[All, 1]], 0}
]

Mathematica graphics

1 голос
/ 13 марта 2013

В Mathematica 9 вы можете сделать это с помощью функции WeightedData следующим образом:

Histogram[WeightedData[{90, 93, 180, 180, 95}, {3/10, 2/10, 2/10, 1/10, 2/10}], {10}]

Затем вы должны получить такой рисунок:

Weighted Histogram

0 голосов
/ 12 января 2012

Недавно я сделал что-то похожее для вопроса другого типа (взвешивание по размеру баланса).

Предполагая, что ваши данные находятся в списке матрицы N * 2, я бы сделал что-то вроде:

{numbers,weights} = {data[[All,1]], data[[All,2]]*10};

weightednumbers =       Flatten@ MapThread[
    Table[#1, {#2}] &, {numbers, Ceiling[weights]}];

А затем используйте Histogram, чтобы нарисовать гистограмму на этих преобразованных данных.

Могут быть и другие способы, но это работает.

Важным моментом является то, чтобы веса были целыми числами, поэтому Table как правильный итератор. Это может потребовать определения weights как data[[All,2]]*Min[data[[All,2]].

...