目次
経緯
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”をインストールすることを忘れずに行ってください。
何かの参考になれば、幸いです。
ここまで読んでいただきありがとうございました。