データベース接続して、データ取得して確率密度分布図作成してみた
C#でoracleDatabaseのデータを取得して、データの確率密度分布図を作図するソースコードを書いてみました。
色々調べたのですが、あまり情報が載ていなくて、なんとか試行錯誤して出来た感じです。
処理のフロー
- 事前にoracleDBにデータを入れておく。
- oracleDBに接続
- select文のクエリーでデータ取得
- LinQでList化する。
- 確率密度分布関数で計算し、データを取得する
-
グラフにデータプロットして描画させる。
OracleDBにデータを作成
Create table文でCHARTテーブルを作成、カラム(列)にNo,Value1,Value2を追加。
Create table CHART (NO NUMBER, Value1 VARCHAR2(100), Value1 VARCHAR2(100));

value1データは乱数で取得した数値を文字列として、2000個入れています。
Oracleデータベース接続し、データ取得
データベースに入れるデータは書きのcsvファイルで
ここで、ソースコードの全文を載せておきます。後述にて解説致します。
ビルドして、実行すると、下記のグラフのような確率密度分布図が描画される。value1のデータは、乱数で取得したので、均等にばらつきがある値が入っています。

Chartコントロールを画面上に配置
まずは、画面でchartコントロールを配置します。Formのデザイナーエディター画面を開いて、ツールボックスのデータ>ChartコントロールをForm画面上に配置。

Chartプロパティ画面で、seriesコレクション…を開いてChartTypeで、Column(棒グラフ)に設定する。

確率密度関数
- x:データ(データベースから取得したデータ)
- μ:xの平均値
- σ:xの標準偏差
double sigma = list_value1.PopulationStandardDeviation(); //標準偏差σ double average = list_value1.Average(); //平均
List化したデータからLinqを活用して、μ:平均値とσ:標準偏差を求めている。
//確率密度分布関数 double normDist = (double)(Math.Exp(-Math.Pow(list_value1[valuesCount] - average, 2) / 2) / Math.Sqrt((2 * Math.PI)) * sigma);
確率分布関数式をソースコードで表現し、各値を代入する。
グラフにデータプロット
//グラフプロット chart1.Series["Series1"].Points.AddXY(list_value1[valuesCount], normDist);
グラフにデータプロットする。
まとめ
oracleDBからデータを取得し、確率密度分布図を作成するソースコードを載せてみました。
仕事で確率密度分布図を使うので、C#でグラフ表示できないか。と、今回調べてなんとか実現できました。
誰かのお役に立てれば幸いです。