【C#】最大値・最小値・平均値・中央値・1σ・2σを求める方法|MathNet.Numericsを使った統計処理

目次

経緯

CSVファイルからデータを読み込む処理ができたので、次のステップとして、統計情報(最大値・最小値・平均値・中央値・1σ・2σ)を自動的に計算したいと思い、今回学習しました。

C#では、ライブラリ「MathNet.Numerics」を使うと、統計解析の実装が非常に簡単に行えます。


使用ライブラリ:MathNet.Numerics

このライブラリを使えば、中央値(Median)や標準偏差(StandardDeviation)なども1行で取得できます。

使用前に、Visual Studio の「NuGet パッケージの管理」から MathNet.Numerics をインストールしておきましょう。


実装コード:ボタンを押すと統計情報を計算

以下は、フォーム上のボタン btnStatisticalAnalysis をクリックすると、CSVから読み込んだデータ dtT50_CO 列に対して統計処理を行うコード例です。

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();

    // 中央値(Median)
    double medianT50_CO = Statistics.Median(values);

    // 標準偏差(1σ)
    double standardDeviationT50_CO = Statistics.StandardDeviation(values);

    // 2σ
    double twoSigmaT50_CO = 2 * standardDeviationT50_CO;

    // 結果表示(任意)
    MessageBox.Show($"最大値: {maxT50_CO}\n最小値: {minT50_CO}\n平均値: {averageT50_CO}\n中央値: {medianT50_CO}\n1σ: {standardDeviationT50_CO}\n2σ: {twoSigmaT50_CO}");
}

統計用語の補足説明

  • 最大値・最小値:対象データの中で一番大きい値/小さい値
  • 平均値:データの合計を個数で割った値
  • 中央値(Median):値を並べたときに中央に位置する値
  • 標準偏差(1σ):データの散らばり具合を表す指標
  • :標準偏差の2倍。約95%のデータがこの範囲に収まるとされます

注意点と補足

  • データは double.TryParse() で数値として正しく扱えるかチェックしています
  • MedianStandardDeviation を使うには、配列データに変換する必要があります(LINQで簡単に実装可能)
  • 計算対象となる列名(例:T50_CO)や型は、読み込むCSVファイルに応じて変更してください

まとめ

CSVファイルを読み込んで得られたデータから、最大値・最小値・平均値・中央値・1σ・2σ を求める処理は、
MathNet.Numerics を使えばシンプルな構文で実装できます。

データ分析やレポート出力に活用できるので、フォームアプリケーションでの統計処理の第一歩として非常に便利です。

最後までお読みいただきありがとうございました。

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

この記事を書いた人

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

目次