Tôi cần tính trung bình, độ lệch chuẩn, trung vị vv cho một loạt dữ liệu số. Có một thư viện .NET nguồn mở tốt mà tôi có thể sử dụng không? Tôi đã tìm thấy NMath nhưng nó không phải là miễn phí và có thể là quá mức cần thiết cho nhu cầu của tôi.Đề nghị một Thư viện Thống kê Nguồn Mở .NET
Trả lời
Tôi tìm thấy điều này trên trang web CodeProject. Nó trông giống như một lớp C# tốt để xử lý hầu hết các hàm thống kê cơ bản.
Yuck! Tại sao một số người vẫn tồn tại bằng cách viết tên phương thức/lớp trong chữ thường chứ không phải PascalCase; nó chỉ làm cho mã trông sai. –
Có một cái nhìn tại MathNet nó không phải là đặc biệt cho thống kê, nhưng có thể có chức năng hữu ích cho những gì bạn muốn
Làm thế nào về http://ilnumerics.net/ hoặc http://numerics.mathdotnet.com/ (hợp nhất từ http://www.codeplex.com/dnAnalytics)
Tôi quyết định viết nhanh hơn, chỉ cần làm những gì tôi cần. Đây là mã ...
/// <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];
}
}
}
Thuật toán đó hoạt động theo lý thuyết và thường hoạt động trong thực tế. Nhưng hãy xem bài đăng này để biết ví dụ về nơi thuật toán đó có thể thất bại. http://www.johndcook.com/blog/2008/09/26/comparing-three-methods-of-computing-standard-deviation/ –
@ JohnD.Cook cảm ơn thông tin hữu ích. Đối với dữ liệu tôi đang sử dụng, phương thức trên hoạt động tốt. Làm thế nào về việc gửi cho chúng tôi một mẫu C# ngắn với thuật toán được đề xuất của bạn? –
Bạn phải cẩn thận. Có một số cách để tính toán độ lệch chuẩn sẽ cho cùng một câu trả lời nếu số học dấu chấm động là hoàn hảo. Tất cả chúng đều chính xác đối với một số bộ dữ liệu, nhưng một số lại tốt hơn nhiều so với các bộ dữ liệu khác trong một số trường hợp.
Phương pháp tôi đã thấy được đề xuất ở đây là phương pháp có nhiều khả năng đưa ra câu trả lời tồi nhất. Tôi đã sử dụng nó cho đến khi nó rơi vào tôi.
Xem Comparing three methods of computing standard deviation.
Thông tin tốt đáng để bỏ phiếu. – mistrmark
Apache Maths.Common và chạy qua IKVM.
Apache Maths.Common được viết nhiều hơn nhiều so với bất kỳ API thống kê nào khác mà tôi đã tìm thấy. Biên dịch nó thành một DLL .NET thông qua IKVM là một snap. Cảm ơn rất nhiều vì gợi ý! –
AForge.NET có không gian tên AForge.Math, cung cấp một số hàm thống kê cơ bản: Biểu đồ, trung bình, trung bình, stddev, entropy.
Nếu bạn chỉ cần thực hiện một số thao tác rút gọn một lần, bảng tính sẽ là công cụ tốt nhất của bạn. Đó là tầm thường để nhổ ra một tập tin đơn giản CSV từ C#, sau đó bạn có thể tải lên trong Excel (hoặc bất kỳ):
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()));
}
}
Sau đó, bạn có thể chỉ cần 'bắt đầu nổi trội output.csv' và chức năng sử dụng như "= MEDIAN (B: B) "," = AVERAGE (B: B) "," = STDEV (B: B) ". Bạn nhận được biểu đồ, biểu đồ (nếu bạn cài đặt gói phân tích), v.v.
Ở trên không xử lý mọi thứ; tệp CSV tổng quát phức tạp hơn bạn nghĩ. Nhưng đó là "đủ tốt" cho phần lớn phân tích tôi làm.
- 1. Thư viện zip nguồn mở cho .NET?
- 2. Thư viện mạng nơron .NET nguồn mở?
- 3. đề nghị thư viện Scala io
- 4. Đề xuất thư viện thống kê javascript tốt?
- 5. Đề nghị cho bộ nhớ cache nguồn mở trong C++
- 6. khác biệt trong .NET Nghị định thư Buffer thư viện
- 7. Thư viện thống kê tốt nhất trong C++?
- 8. phân lớp thư viện mã nguồn mở
- 9. Thư viện từ điển nguồn mở
- 10. Thư viện số .NET
- 11. văn bản nguồn mở cho thư viện lời thoại
- 12. Đề xuất cho thư viện nén .NET
- 13. Thư viện nhận dạng video mã nguồn mở trong C#
- 14. Thư viện PDF nguồn mở cho ứng dụng C/C++?
- 15. Thư viện bố cục biểu đồ nguồn mở
- 16. Hệ thống quản lý tài liệu nguồn mở trong .net?
- 17. Các thuật toán C# và thư viện cấu trúc dữ liệu nguồn mở được đề xuất
- 18. Thư viện SASL cho .net
- 19. NET Geometry thư viện
- 20. thư viện .NET nguồn mở có sẵn để ghi các tệp ANSI 837 trong EDI?
- 21. Thư viện Tối ưu hóa Hình ảnh Nguồn Mở Java
- 22. Thư viện OCR nguồn mở cho tiếng Ả Rập
- 23. Thư viện Hình học .NET
- 24. Gói toán học thống kê tốt cho .Net là gì?
- 25. Khuyến nghị cho Thư viện ma trận C#
- 26. CORBA từ .NET - (dis) thư viện được đề xuất?
- 27. thư viện bộ lọc hình ảnh nguồn mở như Instagram?
- 28. Thư viện java nguồn mở để đọc dữ liệu ECG?
- 29. Thư viện Java nguồn mở để xác thực HTML5?
- 30. Java Swing: Thư viện biểu đồ Gantt mã nguồn mở
Tôi sẽ không bao giờ hiểu tại sao một số người coi đây là "không mang tính xây dựng" vì sự quan tâm và số lượng câu trả lời của nó! – Calanus
@Calanus yes, kỳ quái. Rất nhiều thông tin tốt trong các câu trả lời là tốt. Có lẽ đó là vì từ "giới thiệu" trong tiêu đề. –