Подтвердить что ты не робот

Рекомендовать библиотеку статистики .NET с открытым исходным кодом

Мне нужно рассчитать средние значения, стандартные отклонения, медианы и т.д. для кучи числовых данных. Есть ли хорошая библиотека .NET с открытым исходным кодом, которую я могу использовать? Я нашел NMath, но он не является бесплатным и может быть излишним для моих нужд.

4b9b3361

Ответ 1

Я нашел это на веб-сайте CodeProject. Он выглядит как хороший класс С# для обработки большинства основных статистических функций.

Ответ 2

Вы должны быть осторожны. Существует несколько способов вычисления стандартного отклонения, которое дало бы тот же ответ, если бы арифметика с плавающей точкой была бы идеальной. Они все точны для некоторых наборов данных, но некоторые из них намного лучше других при некоторых обстоятельствах.

Метод, который я видел здесь, предлагает тот, который, скорее всего, даст плохие ответы. Я использовал его сам, пока он не рухнул на меня.

См. Сравнение трех методов вычисления стандартного отклонения.

Ответ 4

Посмотрите MathNet, это не специально для статистики, но может быть полезная функциональность для того, что вы хотите

Ответ 6

Я решил, что быстрее написать свои собственные, это просто то, что мне нужно. Здесь код...

/// <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];
        }
    }
}

Ответ 7

AForge.NET имеет пространство имен AForge.Math, предоставляющее некоторые основные функции статистики: гистограмма, средняя, ​​медианная, stddev, энтропия.

Ответ 8

Если вам просто нужно сделать одноразовое количество хрустов, электронная таблица - это далеко не лучший инструмент. Тривиально выплескивать простой CSV файл из С#, который вы можете загрузить в Excel (или что-то еще):

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

Затем вы можете просто запустить excel output.csv и использовать такие функции, как "= MEDIAN (B: B)", "= СРЕДНЕЕ (B: B)", "= STDEV (B: B)". Вы получаете диаграммы, гистограммы (если вы устанавливаете пакет анализа) и т.д.

Выше все не обрабатывается; обобщенные CSV файлы более сложны, чем вы думаете. Но это "достаточно хорошо" для большей части анализа, который я делаю.