Skip to main content

Data

🗃️ Data

The CSharpNumerics.Statistics.Data namespace provides core data structures for working with indexed and time-indexed data.


📌 Serie & TimeSerie

Simple data-point classes for single-value series:

// Numeric index
var point = new Serie { Index = 1.0, Value = 42.0 };

// DateTime index
var tp = new TimeSerie { TimeStamp = DateTime.Now, Value = 99.5 };

📊 Series

Columnar data structure for multi-column numeric data with optional grouping.

// Create from a list of Serie
var series = Series.FromSerie(serieList);

// Load from CSV (auto-indexes rows, supports target and group columns)
var csv = Series.FromCsv("data.csv", sep: ',', targetColumn: "Price", groupColumn: "Region");

// Access
int[] index = csv.Index;
double[][] data = csv.Data; // data[col][row]
string[] cols = csv.Cols;
int[] groups = csv.Groups;

// Convert to Matrix (optionally exclude a column)
Matrix m = csv.ToMatrix(excludeCol: 0);

📈 TimeSeries

Columnar data structure indexed by DateTime, designed for time-based analysis.

// Create from a list of TimeSerie
var ts = TimeSeries.FromTimeSerie(timeSerieList, columnName: "Temperature");

// Load from CSV (first column = DateTime, remaining = features)
var csv = TimeSeries.FromCsv("timeseries.csv");

// Access
DateTime[] time = csv.Time;
double[][] data = csv.Data; // data[col][row]
string[] cols = csv.Cols;
int rows = csv.RowCount;
int columns = csv.ColumnCount;

// Convert to Matrix
Matrix m = csv.ToMatrix();

🔧 DataExtensions

Utility methods for generating and resampling series data.

// Generate Serie from a function
Func<double, double> f = x => Math.Sin(x);
List<Serie> serie = f.GetSeries(minValue: 0, maxValue: 10, stepSize: 100);

// Generate TimeSerie from a function
Func<DateTime, double> g = t => t.Hour * 1.5;
List<TimeSerie> ts = g.GetTimeSeries(startTime, endTime, stepSize: 50);

// Resample a TimeSerie to equidistant steps (interpolation)
List<TimeSerie> resampled = timeSeries.GenerateTimeSerieWithEquivalentSteps(
minutes: 15, startDate: start, endDate: end);

// Resample with grouping operator (Average, Max, Min, Sum, Median)
List<TimeSerie> grouped = timeSeries.GenerateTimeSerieWithEquivalentSteps(
minutes: 60, startDate: start, endDate: end,
groupOperator: GroupOperator.Average, multiplier: 1, shouldInterpolate: true);