数学とプログラミングの質問です。

商品の価格が入った商品データベースがあるのですが、ここから価格を取り出して価格帯ごとのヒストグラムを自動で作りたいと考えています。

1.商品の最安値(例えば600円)と最高値(例えば1,200円)を取得する
2.最安値と最高値の差を計算する(1,200円-600円=600円)
3.5個のヒストグラムに分けたいので、600円/5=120円をヒストグラムの幅にする
4.5個のレンジに商品を振り分けていく

例えばこんな方法を考えたのですが、他にもっと良い方法があれば教えてください。
なお、商品の価格はある程度一定のレンジに収まっていて、100円(最小値)と10,000円(最大値)というような大きな差が出ることはありません。また、「エクセルでやれ」という回答は必要ありません。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/08/06 22:28:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント35pt

その方法でいいと思います。

こちらの説明でもそのようにしてヒストグラムを作っています。

http://case.f7.ems.okayama-u.ac.jp/statedu/graph/hist.html


  • 階級数 m の決定
  • 階級の幅 w の決定
  • 階級の端点 a0 の決定
  • 度数の数え上げ

について考察しています。


面白いのは境界の値をどちらとするのかについては、

日本では、「以上・未満」。欧米では「より大きい・以下」ルールを使っているものが多いそうです。

id:southgate_01

コメントありがとうございます。

適当に考えたのですが、このやり方で良いのですね。

紹介いただいたページを見てからやります。

2009/08/06 16:19:05

その他の回答1件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント35pt

その方法でいいと思います。

こちらの説明でもそのようにしてヒストグラムを作っています。

http://case.f7.ems.okayama-u.ac.jp/statedu/graph/hist.html


  • 階級数 m の決定
  • 階級の幅 w の決定
  • 階級の端点 a0 の決定
  • 度数の数え上げ

について考察しています。


面白いのは境界の値をどちらとするのかについては、

日本では、「以上・未満」。欧米では「より大きい・以下」ルールを使っているものが多いそうです。

id:southgate_01

コメントありがとうございます。

適当に考えたのですが、このやり方で良いのですね。

紹介いただいたページを見てからやります。

2009/08/06 16:19:05
id:Hyperion64 No.2

回答回数791ベストアンサー獲得回数84

ポイント35pt

度数分布を作成する時、データの個数に応じて、

価格帯を分ける(上記の場合ですと5)のに

よく使うのがスタージェスの式です。

  n = 1 + log2N  (n:階級の個数,N:データの総数)

       ※2を底とする対数

これは半経験的な目安です。

この分割法をつかえば、データの個数がいくら増えても自動的に分割を増やしてくれるはずです。

http://www.geisya.or.jp/~mwm48961/statistics/dosuu1.htm

id:southgate_01

コメントありがとうございます。

これはデータのバラツキが大きいときに有効な方法でしょうか?


今回やろうとしているのは、「商品の価格帯が偏っていないか?」ということを知りたいのですが、Nがあまり大きくなると判断が難しくなりそうな気がするのですが。

とりあえずリンク先をよく読んでみます。

2009/08/06 16:24:16
  • id:tdoi
    提示している方法で何か不満があるのでしょうか?
    アルゴリズムは目的によって、適する、適さないが変わりますので、そのあたりを明確にしないと回答がつけにくいかと思います。
    southgate_01さんで、この部分の処理が時間がかかる。この部分が最適でない気がする。といった感覚があるのでしょうか?
  • id:southgate_01
    southgate_01 2009/08/06 15:31:47
    コメントありがとうございます。

    価格の配列が引数になると思うのですが、この価格の配列からヒストグラムのレンジを決めるプロセスを教えて欲しいというのが希望です。上の方法は「こうすればいいかなぁ」的に適当に考えたのですが、このやり方でいいのでしょうか?
  • id:tdoi
    「きっちり最小値から最大値までを含む範囲で、かつ、等間隔で、5つのレンジに分割したい」

    というのが目的でいいのでしょうか?

    例えばですが、最小値が599で、最大値が1201であった場合に、500~1300で5分割なのか、599~1201までで5分割なのかによっても、多少、方法は変わるかもしれません。


    で、問題がなければ、上記の方法でよいとは思います。
    パフォーマンス的に問題などの特別な理由がなく、小難しいアルゴリズムを適用することは決していいことだとはいえません。


    余談ですが、引数が配列という表現をされていらっしゃるようですが、データがDBに格納されているのであれば、DBに集計させてしまうという方法もありますよ。
    アルゴリズムではなく、このあたりの実装の話は、処理系、プログラミング言語、などによっても変わってくると思います。


    何かの参考になれば。
  • id:southgate_01
    southgate_01 2009/08/06 16:31:48
    コメントありがとうございます。
    最初に書いたやり方で良さそうなので、この方法でやってみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません