Frage

Ich brauche Mittelwert, Standardabweichungen zu berechnen, Mediane etc. für eine Reihe von numerischen Daten. Gibt es eine gute Open-Source-.NET-Bibliothek, die ich verwenden kann? Ich habe NMath gefunden, aber es ist nicht frei und kann viel des Guten für meine Bedürfnisse sein.

War es hilfreich?

Lösung

Ich fand dies auf der Codeproject-Website. Es sieht aus wie eine gute C # Klasse für die meisten der grundlegenden statistischen Funktionen Handhabung.

Andere Tipps

Sie müssen vorsichtig sein. Es gibt mehrere Möglichkeiten, die Standardabweichung zu berechnen, die die gleiche Antwort geben würde, wenn Gleitkomma-Arithmetik perfekt waren. Sie sind alle genau für einige Datensätze, aber einige sind weit besser als andere unter bestimmten Umständen.

Die Methode, die ich hier gesehen habe vorgeschlagen, ist derjenige, der am ehesten schlechte Antworten geben. Ich habe es mir, bis es mir abgestürzt.

Siehe drei Vergleich Methoden zur Berechnung der Standardabweichung .

Hier finden Sie aktuelle MathNet es nicht speziell für die Statistik, aber es könnte nützlich sein, Funktionalität für das, was Sie wollen

Apache Maths.Common und führen Sie es durch IKVM .

Ich beschloss, es schneller war meine eigenen zu schreiben, das nur tat, was ich brauchte. Hier ist der Code ...

/// <summary>
/// Very basic statistical analysis routines
/// </summary>
public class Statistics
{
    List<double> numbers;
    public double Sum { get; private set; }
    public double Min { get; private set; }
    public double Max { get; private set; }
    double sumOfSquares;

    public Statistics()
    {
        numbers = new List<double>();
    }

    public int Count
    {
        get { return numbers.Count; }
    }

    public void Add(double number)
    {
        if(Count == 0)
        {
            Min = Max = number;
        }
        numbers.Add(number);
        Sum += number;
        sumOfSquares += number * number;
        Min = Math.Min(Min,number);
        Max = Math.Max(Max,number);            
    }

    public double Average
    {
        get { return Sum / Count; }
    }

    public double StandardDeviation
    {
        get { return Math.Sqrt(sumOfSquares / Count - (Average * Average)); }
    }

    /// <summary>
    /// A simplistic implementation of Median
    /// Returns the middle number if there is an odd number of elements (correct)
    /// Returns the number after the midpoint if there is an even number of elements
    /// Sorts the list on every call, so should be optimised for performance if planning
    /// to call lots of times
    /// </summary>
    public double Median
    {
        get
        {
            if (numbers.Count == 0)
                throw new InvalidOperationException("Can't calculate the median with no data");
            numbers.Sort();
            int middleIndex = (Count) / 2;
            return numbers[middleIndex];
        }
    }
}

AForge.NET AForge.Math Namespace hat, einige grundlegende Statistikfunktionen bereitstellt: Histogramm, Mittelwert, Median, stddev, Entropie.

Wenn Sie nur einige einmalige Zahlknirschens tun müssen, ist eine Tabelle mit Abstand die beste Werkzeug. Es ist trivial, eine einfache CSV-Datei aus C # auszuspucken, die Sie dann in Excel laden kann (oder was auch immer):

class Program
{
    static void Main(string[] args)
    {
        using (StreamWriter sw = new StreamWriter("output.csv", false, Encoding.ASCII))
        {
            WriteCsvLine(sw, new List<string>() { "Name", "Length", "LastWrite" });

            DirectoryInfo di = new DirectoryInfo(".");
            foreach (FileInfo fi in di.GetFiles("*.mp3", SearchOption.AllDirectories))
            {
                List<string> columns = new List<string>();
                columns.Add(fi.Name.Replace(",", "<comma>"));
                columns.Add(fi.Length.ToString());
                columns.Add(fi.LastWriteTime.Ticks.ToString());

                WriteCsvLine(sw, columns);
            }
        }
    }

    static void WriteCsvLine(StreamWriter sw, List<string> columns)
    {
        sw.WriteLine(string.Join(",", columns.ToArray()));
    }
}

Dann können Sie einfach auf 'Start Excel output.csv' und die Verwendung Funktionen wie "= MEDIAN (B: B)", "= MITTELWERT (B: B)", "= STDEV (B: B)". Sie erhalten Diagramme, Histogramme (wenn Sie das Analysepaket installieren), etc.

Das oben behandelt nicht alles; CSV generali Dateien sind komplexer, als Sie vielleicht denken. Aber es ist „gut genug“ für einen Großteil der Analyse, die ich tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top