質問: Python3(Django) で DB のレコードを数十件取得し、そのレコードのフィールド「num」の値の統計?を取ってグラフ(Chart.js)に出力したいのですが、どうやるのが王道でしょうか?何か numpy などのライブラリを使ったほうが楽でしょうか? サンプルコードなどを教えていただけると嬉しいです(コードでは Django や Chart.js などは無視していただいて、プレインなPython3のコードでかまいません)。 例えば num の値が以下のように各レコードにセットされている時、 ``` 1 2 3 4 5 6 7 8 9 10 20 30 ``` 以下のような出力にして円形グラフ(Chart.jsを使用)を作りたいです。 ``` 1 ~ 5 の範囲: 5 件 6 ~ 10 の範囲: 5 件 11 ~ 15 の範囲: 0 件 16 ~ 20 の範囲: 1 件 21 ~ 25 の範囲: 0 件 26 ~ 30 の範囲: 1 件 ``` num の値の範囲は上限を設定しないものとします。 このような処理の分野が統計になるのか、それとも他の分野になるのかもわからないレベルなのですが、教えていただけると助かります。 よろしくお願いいたします。 参考: https://www.ipentec.com/document/office-excel-summarize-counting-number-for-each-range-of-data-using-pivot-table
回答: 私は専門家ではありませんが、おそらく "プレイン" な Python で書くか NumPy/SciPy あたりのパッケージを使う、というのがよく使われるパターンではないかと思います。 * https://realpython.com/python-histograms/ * https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.histogram.html * https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_histogram.html あくまでも個人的な意見ですが、私なら、例にあげられたヒストグラムのようなシンプルな集計だけであれば特に追加のパッケージなしに実装し、もうちょっと複雑になるような場合は NumPy 等を使うと思います。「 python stats histogram 」等のキーワードでググられると参考になるページがたくさん出てくるので一度検索されてみてください。 ちなみに、 Django と Chart.js で実装されるのであれば全体の流れは次のようになるかと思います。 view: 1. DB からデータを取得する 2. データを集計する 3. 集計結果を template に渡す template: 1. view から渡された集計結果を JS に渡す 2. JS: 渡された集計結果を Chart.js で描画する あとはこの各部を実装していけば OK 、という感じでしょうか。 質問へのお答えになっていますでしょうか?・・・そういうことではなくて、「 `for` ループ等を使って一連の値からヒストグラムの集計をするコードの書き方がわからなくて・・・」というご質問でしょうか?