2008-09-26 10 views
23

मुझे संख्यात्मक डेटा के समूह के लिए औसत, मानक विचलन, औसत आदि की गणना करने की आवश्यकता है। क्या कोई अच्छा ओपन सोर्स .NET लाइब्रेरी है जिसका मैं उपयोग कर सकता हूं? मुझे एनएमथ मिला है लेकिन यह मुफ़्त नहीं है और मेरी जरूरतों के लिए अधिक हो सकता है।ओपन सोर्स की सिफारिश करें .NET सांख्यिकी लाइब्रेरी

+12

मैं कभी नहीं समझूंगा कि क्यों कुछ लोग इसे "रचनात्मक नहीं" मानते हैं क्योंकि इसकी रुचि और उत्तर की संख्या दी जाती है! – Calanus

+1

@ कोलानस हां, विचित्र। उत्तर में बहुत अच्छी जानकारी भी है। शायद यह शीर्षक में "अनुशंसा" शब्द की वजह से है। –

उत्तर

7

मुझे यह कोडप्रोजेक्ट वेबसाइट पर मिला। यह अधिकांश बुनियादी सांख्यिकीय कार्यों को संभालने के लिए एक अच्छी सी # कक्षा की तरह दिखता है।

+8

यक! कुछ लोग लोअरकेस में विधि/वर्ग नाम लिखने में क्यों रहते हैं और पास्कलकेस नहीं; यह सिर्फ कोड गलत दिखता है। –

7

एक नज़र MathNet में यह विशेष रूप से आंकड़ों के लिए नहीं है है, लेकिन वहाँ आप क्या चाहते हैं

3

मैंने फैसला किया कि यह खुद को लिखने में तेज़ी से था, जो मैंने जरूरी किया था। यहां कोड है ...

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

वह एल्गोरिदम सिद्धांत में काम करता है, और अक्सर अभ्यास में काम करता है। लेकिन इस पोस्ट को उदाहरण के लिए देखें कि एल्गोरिदम असफल हो सकता है। http://www.johndcook.com/blog/2008/09/26/comparing-three-methods-of-computing- मानक-deviation/ –

+0

@ जॉनडी.कूक उपयोगी जानकारी के लिए धन्यवाद। मैं जिस डेटा का उपयोग कर रहा था, उसके लिए उपर्युक्त विधि ठीक काम करती है। आपके अनुशंसित एल्गोरिदम के साथ हमें एक छोटा सी # नमूना पोस्ट करने के बारे में कैसे? –

17

आपको सावधान रहना होगा। मानक विचलन की गणना करने के कई तरीके हैं जो फ़्लोटिंग पॉइंट अंकगणित सही होने पर एक ही जवाब देंगे। वे कुछ डेटा सेट के लिए बिल्कुल सटीक हैं, लेकिन कुछ परिस्थितियों में कुछ दूसरों की तुलना में कहीं बेहतर हैं।

जिस विधि को मैंने यहां प्रस्तावित किया है वह वह है जो बुरे उत्तरों देने की सबसे अधिक संभावना है। मैंने इसे तब तक इस्तेमाल किया जब तक कि यह मुझ पर दुर्घटनाग्रस्त न हो जाए।

Comparing three methods of computing standard deviation देखें।

+1

अप-वोट के लायक अच्छी जानकारी। – mistrmark

5

Apache Maths.Common और इसे IKVM के माध्यम से चलाएं।

+0

अपाचे गणित। कॉमोन मुझे मिले किसी भी अन्य आंकड़े एपीआई की तुलना में बहुत अधिक अच्छी तरह से प्रलेखित है। IKVM के माध्यम से इसे .NET DLL में संकलित करना एक स्नैप था। सुझाव के लिए बहुत बहुत धन्यवाद! –

1

AForge.NET में AForge.Math नेमस्पेस है, कुछ बुनियादी आंकड़े कार्य प्रदान करते हैं: हिस्टोग्राम, माध्य, औसत, stddev, एन्ट्रॉपी।

0

यदि आपको केवल एक-ऑफ-नंबर क्रंचिंग करने की आवश्यकता है, तो स्प्रेडशीट आपके सर्वोत्तम टूल को दूर और दूर कर देती है। यह जो आप तो Excel में लोड (या जो भी) कर सकते हैं सी #, से एक सरल CSV फ़ाइल थूक से बाहर करने के लिए तुच्छ है:

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

तो फिर तुम सिर्फ 'शुरू output.csv उत्कृष्टता' कर सकते हैं और इस तरह के "= मध्यिका उपयोग कार्यों (बी: बी) "," = औसत (बी: बी) "," = एसटीडीईवी (बी: बी) "। आपको चार्ट, हिस्टोग्राम (यदि आप विश्लेषण पैक स्थापित करते हैं) प्राप्त करते हैं, आदि

उपरोक्त सब कुछ संभाल नहीं करता है; सामान्यीकृत सीएसवी फाइलें आपके विचार से कहीं अधिक जटिल हैं। लेकिन मेरे द्वारा किए गए अधिकांश विश्लेषणों के लिए यह "काफी अच्छा" है।

संबंधित मुद्दे