如何創建特定信息的直方圖?我有一組數據,例如:在Ruby中創建直方圖
data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]
我想基於有多少項有用於0
,1
,2
等創建直方圖。在Ruby中有一種簡單的方法嗎?
輸出應該是以數組形式存在的倉和頻率。
如何創建特定信息的直方圖?我有一組數據,例如:在Ruby中創建直方圖
data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]
我想基於有多少項有用於0
,1
,2
等創建直方圖。在Ruby中有一種簡單的方法嗎?
輸出應該是以數組形式存在的倉和頻率。
使用此寶石 - http://rubygems.org/gems/histogram
data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10]
(bins, freqs) = data.histogram
這將創建包含直方圖的區間和包含頻率的陣列freqs
陣列bins
。 該寶石還支持不同的裝箱行爲和權重/分數。
希望這會有所幫助。
Ruby的數組繼承group_by
from Enumerable,此很好的作用:
Hash[*data.group_by{ |v| v }.flat_map{ |k, v| [k, v.size] }]
將返回:
{
0 => 1,
1 => 1,
2 => 5,
3 => 6,
4 => 4,
5 => 2,
6 => 3,
7 => 5,
8 => 1,
9 => 2,
10 => 1
}
這只是一個很好的「東經乾淨的哈希值。如果你希望每個bin和頻率對數組可以縮短其與用途:
data = [0,1,2,2,3,3,3,4]
data.group_by{ |v| v }.map{ |k, v| [k, v.size] }
# => [[0, 1], [1, 1], [2, 2], [3, 3], [4, 1]]
這裏是代碼和group_by
與更小的數據集這樣做的:
data.group_by{ |v| v }
# => {0=>[0], 1=>[1], 2=>[2, 2], 3=>[3, 3, 3], 4=>[4]}
data.group_by{ |v| v }.flat_map{ |k, v| [k, v.size] }
# => [0, 1, 1, 1, 2, 2, 3, 3, 4, 1]
的輸出是什麼格式,你想? – sawa
當你問一個問題,詢問代碼時,你需要展示你的研究和你爲解決問題所做的任何嘗試,以及你的解釋爲什麼他們不工作。 –