Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

平均・標準偏差を簡単に求められるクラス

タグの編集...

投稿者 B.B.Gs   (社会人)   投稿日時 2021/11/5 16:56:10
VB2019(.net frameworkは4.8)を使用しています。
例えば複数の数値を取得し、この数値データを指定コレクションに追加すると、
コレクション分の平均・標準偏差を自動的に計算してくれるようなクラスはないでしょうか?
自分で計算してもいいのですが、こういった統計用のクラスは
.netに標準で備わっているんじゃないかと思い、質問しました。

投稿者 魔界の仮面弁士   (社会人)   投稿日時 2021/11/5 19:15:57
この手の統計処理としての有名どころとなると、Math.NET Numerics あたりだと思います。

標準で備わっている標準偏差という話になると、
System.Data.Objects.EntityFunctions.StandardDeviation メソッドぐらいかな…?
こちらは Entity Framework 前提です。
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.objects.entityfunctions.standarddeviation?view=netframework-4.8

Imports MathNet.Numerics.Statistics
Module Module1

    Sub Main()
        '実際には Double の一覧だけあれば良い 
        Dim テスト結果 As (Name As String, Score As Double)() = {
            ("鈴木", 60),
            ("田中", 83),
            ("佐藤", 72),
            ("石井", 68),
            ("小林", 93),
            ("杉山", 45),
            ("森田", 78),
            ("酒井", 65),
            ("服部", 54),
            ("須藤", 42)
        }

        Dim avg As Double = Aggregate p In テスト結果 Into Average(p.Score)
        Console.WriteLine(" 平均点 {0:N2}", avg)

        Dim stat As New DescriptiveStatistics(テスト結果.Select(Function(x) x.Score))
        Console.WriteLine("標準偏差 {0:N2}", stat.StandardDeviation)

        Console.WriteLine()
        For Each p In テスト結果
            Console.WriteLine($"{p.Name}  点数:{p.Score,3:N0}  偏差:{avg - p.Score,5:N1}")
        Next
        Console.ReadLine()
    End Sub

End Module