集めたデータから最大値、最小値、平均値、中央値、1σ、2σを取得する方法【C#】

目次

経緯

CSVファイルを読み込めて、データを集められたので、これの、最大値、最小値、平均値、中央値、1σ、2σを取得したいと思い、

今回勉強しました。

MathNet.Numerics.Statistics;を使って、取得する

まず、プログラムのコードを書きます。フォームで「btnStatisticalAnalysis」というボタンを作成して、ボタンを押すと、「最大値、最小値、平均値、中央値、1σ、2σを取得する」という想定です。

using MathNet.Numerics.Statistics;

private void btnStatisticalAnalysis_Click(object sender, EventArgs e)
{
    // 最大値を求める
  double maxT50_CO = dt.AsEnumerable().Max(row => double.TryParse(row["T50_CO"].ToString(), out var val) ? val : 0);

  // 最小値を求める
    double minT50_CO = dt.AsEnumerable().Min(row => double.TryParse(row["T50_CO"].ToString(), out var val) ? val : double.MaxValue);

    // 平均値を求める
    double averageT50_CO = dt.AsEnumerable().Where(row => double.TryParse(row["T50_CO"].ToString(), out _))
                                            .Average(row => double.Parse(row["T50_CO"].ToString()));
    averageT50_CO = Math.Round(averageT50_CO, 3);

    // 中央値を求める
    var rows = dt.AsEnumerable().Where(row => double.TryParse(row["T50_CO"].ToString(), out _));
    var values = rows.Select(row => double.Parse(row["T50_CO"].ToString())).ToArray();
    double medianT50_CO = MathNet.Numerics.Statistics.Statistics.Median(values);
    
    // 1σと2σを求める
    double standardDeviationT50_CO = MathNet.Numerics.Statistics.Statistics.StandardDeviation(values);
    double oneSigmaT50_CO = standardDeviationT50_CO; // 1σは標準偏差そのもの
    double twoSigmaT50_CO = 2 * standardDeviationT50_CO; // 2σは標準偏差の2倍
    

}

こんな感じです。最後にきちんとデータ取得しているか、最後にメッセージボックスで見てみてもいいと思います。

[NuGetパッケージの管理]で”MathNet.Numerics”をインストールすることを忘れずに行ってください。

何かの参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次