J'ai besoin de calculer des moyennes, des écarts-types, des médianes etc. pour un tas de données numériques. Y at-il une bonne bibliothèque .NET que je peux utiliser? J'ai trouvé NMath mais ce n'est pas gratuit et peut être exagéré pour mes besoins.Recommander une bibliothèque de statistiques Open Source .NET
Répondre
J'ai trouvé ceci sur le site Web CodeProject. Il ressemble à une bonne classe C# pour gérer la plupart des fonctions statistiques de base.
Beurk! Pourquoi certaines personnes persistent-elles à écrire le nom de la méthode/classe en minuscules et pas PascalCase; ça donne juste l'impression que le code ne va pas. –
Jetez un oeil à MathNet il n'est pas spécifiquement pour les statistiques, mais il pourrait y avoir des fonctionnalités utiles pour ce que vous voulez
Que diriez-vous http://ilnumerics.net/ ou http://numerics.mathdotnet.com/ (fusion de http://www.codeplex.com/dnAnalytics)
J'ai décidé qu'il était plus rapide d'écrire le mien, cela faisait juste ce dont j'avais besoin. Voici le 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];
}
}
}
Cet algorithme fonctionne en théorie et fonctionne souvent dans la pratique. Mais voyez ce post pour un exemple où cet algorithme peut échouer. http://www.johndcook.com/blog/2008/09/26/comparing-three-methods-of-computing-standard-deviation/ –
@ JohnD.Cook Merci pour les informations utiles. Pour les données que j'utilisais, la méthode ci-dessus fonctionne bien. Pourquoi ne pas nous envoyer un petit échantillon C# avec votre algorithme recommandé? –
Vous devez faire attention. Il existe plusieurs façons de calculer l'écart-type qui donnerait la même réponse si l'arithmétique en virgule flottante était parfaite. Ils sont tous précis pour certains ensembles de données, mais certains sont bien meilleurs que d'autres dans certaines circonstances.
La méthode que j'ai vu proposée ici est celle qui est la plus susceptible de donner de mauvaises réponses. Je l'ai utilisé moi-même jusqu'à ce qu'il s'écrase sur moi.
Voir Comparing three methods of computing standard deviation.
Une bonne information vaut un vote. – mistrmark
Apache Maths.Common et de le faire passer par IKVM.
Apache Maths.Common est tellement mieux documenté que toutes les API de statistiques que j'ai trouvées. Compiler vers une DLL .NET via IKVM était un jeu d'enfant. Merci beaucoup pour la suggestion! –
AForge.NET a l'espace de noms AForge.Math, fournissant quelques fonctions statistiques de base: Histogramme, moyenne, médiane, stddev, entropie.
Si vous avez juste besoin de faire quelques calculs ponctuels, une feuille de calcul est de loin votre meilleur outil. Il est trivial de cracher un simple fichier CSV à partir de C#, que vous pouvez ensuite charger dans Excel (ou autre):
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()));
}
}
Ensuite, vous pouvez simplement « démarrer Excel output.csv » et les fonctions d'utilisation comme « = MEDIAN (B: B) "," = MOYENNE (B: B) "," = STDEV (B: B) ". Vous obtenez des graphiques, des histogrammes (si vous installez le pack d'analyse), etc.
Ce qui précède ne gère pas tout; Les fichiers CSV généralisés sont plus complexes que vous ne le pensez. Mais c'est "assez bon" pour une grande partie de l'analyse que je fais.
- 1. Bibliothèque de réseau de neurones .NET open-source?
- 2. Open-source pdf bibliothèque en c
- 3. Bibliothèque Open Source Windows Mobile OCR
- 4. Quelqu'un peut-il recommander une alternative open source .Net à Windows Workflow?
- 5. Recommander une bibliothèque RSS python
- 6. Essayer SVN Checkout Bibliothèque BitSharp Open Source
- 7. Frameworks de l'interface utilisateur Open Source .NET
- 8. Bibliothèque de visualisation de données C++ Open Source
- 9. .NET Open Source CODE pour SFTP?
- 10. Recommander une source pour les modèles ASP.NET?
- 11. Meilleure bibliothèque pour les statistiques en C++?
- 12. Quelle est la meilleure bibliothèque de conversion d'images Free/Open-Source dans .NET?
- 13. Bibliothèque de statistiques vectorielles - Bibliothèque de noyaux mathématiques
- 14. Vérification de l'orthographe open source
- 15. Petite bibliothèque Unicode open source pour C/C++
- 16. asp.net projets open source
- 17. S'il vous plaît recommander un projet open source avec des commentaires de qualité en bon anglais
- 18. Bibliothèque Open Source Cocoa/Cocoa-Touch POP3/SMTP?
- 19. Open source (libre) Logiciel de mappage d'objets pour .Net
- 20. . Moteur de recherche open source basé sur .Net?
- 21. . Produits de mise en cluster open source .Net? ... comme Terracotta
- 22. Framework de conception d'objet métier Open Source pour .NET
- 23. Existe-t-il une classe de diagramme radial open source pour .net ou php?
- 24. Bibliothèque Open Source pour convertir des fichiers DOC et d'autres fichiers MS-Office en images
- 25. Démon Syslog Open Source pour Windows
- 26. Applications GPS open source?
- 27. NHibernate open source POC
- 28. Meilleure bibliothèque Java open source pour intégrer les fonctionnalités de Facebook dans une application web Java?
- 29. Open Source Clearcase Alternatives
- 30. Modélisateur de données open source
Je ne comprendrai jamais pourquoi certaines personnes considèrent que ce n'est pas "constructif" étant donné son intérêt et son nombre de réponses! – Calanus
@Calanus oui, bizarre. Beaucoup de bonnes infos dans les réponses aussi. Probablement c'est à cause du mot "recommander" dans le titre. –