====== data/ — Lyx Data Library ====== Pandas-ähnliche Datenanalyse-Bibliothek für Lyx. Die ''data/''-Units sind eigenständig vom ''std/''-Namespace und werden separat importiert. Sie richten sich an Datenanalyse, ETL-Pipelines, maschinelles Lernen und statistische Auswertungen — mit native Lyx-Implementierungen ohne externe Abhängigkeiten. ^ Unit ^ Quelldatei ^ Beschreibung ^ | ''[[lyx_-_programmiersprache:data#data.core|data.core]]'' | ''data/core.lyx'' | Kern-Datenstrukturen: Series, DataFrame, Statistik, GroupBy, Joins | | ''[[lyx_-_programmiersprache:data#data.io|data.io]]'' | ''data/io.lyx'' | CSV-Import und -Export | | ''[[lyx_-_programmiersprache:data#data.stats_batch|data.stats_batch]]'' | ''data/stats_batch.lyx'' | SIMD-bereite Batch-Statistikfunktionen | ---- ===== data.core ===== import data.core; ==== Konstanten ==== === Spaltentypen === ^ Konstante ^ Wert ^ Beschreibung ^ | ''COL_INT64'' | ''1'' | Ganzzahl (int64) | | ''COL_FLOAT'' | ''2'' | Fließkomma (f64) | | ''COL_STRING'' | ''3'' | Zeichenkette (pchar) | | ''COL_BOOL'' | ''4'' | Boolean | === Vergleichsoperatoren (für DataFrameFilter / CompareInt) === ^ Konstante ^ Operator ^ | ''OP_EQ'' | ''=='' | | ''OP_NE'' | ''!='' | | ''OP_LT'' | ''<'' | | ''OP_LE'' | ''<='' | | ''OP_GT'' | ''>'' | | ''OP_GE'' | ''>='' | === Join-Typen === ^ Konstante ^ Bedeutung ^ | ''JOIN_INNER'' | Inner Join | | ''JOIN_LEFT'' | Left Join | | ''JOIN_RIGHT'' | Right Join | | ''JOIN_OUTER'' | Outer Join | === Aggregationstypen (für SeriesAgg / DataFrameAgg) === ^ Konstante ^ Bedeutung ^ | ''AGG_SUM'' | Summe | | ''AGG_MEAN'' | Mittelwert | | ''AGG_MIN'' | Minimum | | ''AGG_MAX'' | Maximum | | ''AGG_COUNT'' | Anzahl Nicht-Null-Werte | | ''AGG_STD'' | Standardabweichung | ---- ==== Typen ==== === Series === Eindimensionales typisiertes Array mit optionalen Labels. type Series = struct { data: int64; // Pointer auf Datenspeicher (int64*) labels: int64; // Pointer auf Labelarray (pchar*), 0 = kein Label length: int64; // Anzahl Elemente colType: int64; // COL_INT64 | COL_FLOAT | COL_STRING | COL_BOOL name: int64; // Spaltenname (pchar) }; === DataFrame === Zweidimensionale Tabelle mit benannten Spalten. type DataFrame = struct { columns: int64; // Pointer auf Column-Array (je 16 Byte) colCount: int64; rowCount: int64; colCapacity: int64; // max. 16 Spalten rowCapacity: int64; // max. 1024 Zeilen index: int64; // Pointer auf Index-Labels (pchar*), 0 = kein Index indexName: int64; // Indexname (pchar) hasIndex: int64; // 1 wenn Index gesetzt }; === DateTime === Aufgeschlüsselte Unix-Zeitangabe. type DateTime = struct { year: int64; month: int64; day: int64; hour: int64; minute: int64; second: int64; }; === BoolSeries === Ergebnis eines booleschen Vergleichs auf einer Series. type BoolSeries = struct { data: int64; // Pointer auf bool-Array (0/1 als int64) length: int64; name: int64; }; === AggResult === Mehrfach-Aggregationsergebnis für ''SeriesAggMulti''. type AggResult = struct { sum: int64; mean: int64; min: int64; max: int64; count: int64; }; === GroupByResult === Ergebnis von ''DataFrameGroupBy''. type GroupByResult = struct { df: DataFrame; keyCol: int64; // Pointer auf Schlüsselspaltenname groups: int64; // Pointer auf unique Schlüsselwerte groupRows: int64; // Pointer auf Zeilenindizes je Gruppe groupCount: int64; }; === MultiGroupByResult === Ergebnis von ''DataFrameGroupByMulti'' (mehrere Schlüsselspalten). type MultiGroupByResult = struct { df: DataFrame; keyCols: int64; // Pointer auf Array von Spaltennamen-Pointern keyColCount: int64; groups: int64; groupRows: int64; groupCount: int64; }; ---- ==== Funktionen ==== === Series erstellen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesNewInt64'' | ''(name, capacity: int64): Series'' | Neue int64-Series | | ''SeriesNewString'' | ''(name, capacity: int64): Series'' | Neue String-Series | | ''SeriesNewFloat64'' | ''(name, capacity: int64): Series'' | Neue float64-Series | === Series lesen/schreiben === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesGetInt'' | ''(s: Series, idx: int64): int64'' | Ganzzahlwert bei Index | | ''SeriesSetInt'' | ''(s: Series, idx, value: int64)'' | Ganzzahlwert setzen | | ''SeriesGetString'' | ''(s: Series, idx: int64): int64'' | String-Pointer bei Index | | ''SeriesSetString'' | ''(s: Series, idx, value: int64)'' | String-Pointer setzen | | ''SeriesGetLabel'' | ''(s: Series, idx: int64): int64'' | Label bei Index | | ''SeriesSetLabel'' | ''(s: Series, idx, label: int64)'' | Label setzen | | ''SeriesGetLabelString'' | ''(s: Series, idx: int64): int64'' | String-Label bei Index | | ''SeriesAppendInt'' | ''(s: Series, value: int64)'' | Wert anhängen | | ''SeriesAppendString'' | ''(s: Series, value: int64)'' | String-Pointer anhängen | === DataFrame erstellen und befüllen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameNew'' | ''(): DataFrame'' | Leeren DataFrame erstellen | | ''DataFrameAddColumn'' | ''(df: DataFrame, name: int64, colType: int64)'' | Spalte hinzufügen | | ''DataFrameAddColumnFloat64'' | ''(df: DataFrame, name: int64)'' | float64-Spalte hinzufügen | | ''DataFrameAppendRow'' | ''(df: DataFrame)'' | Zeile anhängen (alle Spalten auf 0/NULL) | === DataFrame lesen/schreiben === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameGetInt'' | ''(df: DataFrame, colName: int64, row: int64): int64'' | int64-Wert lesen | | ''DataFrameSetInt'' | ''(df: DataFrame, colName: int64, row, value: int64)'' | int64-Wert setzen | | ''DataFrameGetString'' | ''(df: DataFrame, colName: int64, row: int64): int64'' | String-Pointer lesen | | ''DataFrameSetString'' | ''(df: DataFrame, colName: int64, row, value: int64)'' | String-Pointer setzen | | ''DataFrameGetFloat64'' | ''(df: DataFrame, colName: int64, row: int64): f64'' | f64-Wert lesen | | ''DataFrameSetFloat64'' | ''(df: DataFrame, colName: int64, row: int64, value: f64)'' | f64-Wert setzen | | ''DataFrameGetFloat'' | ''(df: DataFrame, colName: int64, row: int64): int64'' | Float als Bitpattern lesen | | ''DataFrameSetFloat'' | ''(df: DataFrame, colName: int64, row, value: int64)'' | Float als Bitpattern setzen | | ''DataFrameGetColumnType'' | ''(df: DataFrame, colName: int64): int64'' | Spaltentyp abfragen | === Spalten und Index verwalten === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameColIndex'' | ''(df: DataFrame, name: int64): int64'' | Spalten-Index by Name (-1 wenn nicht gefunden) | | ''DataFrameGetSeries'' | ''(df: DataFrame, name: int64): Series'' | Series by Spaltenname | | ''DataFrameDropColumn'' | ''(df: DataFrame, name: int64)'' | Spalte löschen | | ''DataFrameRenameColumn'' | ''(df: DataFrame, oldName, newName: int64)'' | Spalte umbenennen | | ''DataFrameSetIndex'' | ''(df: DataFrame, labels, name: int64)'' | Index manuell setzen | | ''DataFrameSetIndexFromColumn'' | ''(df: DataFrame, colName: int64)'' | Spalte als Index verwenden | | ''DataFrameSetMultiIndex'' | ''(df: DataFrame, col1, col2: int64)'' | Zwei Spalten als kombinierten Index | | ''DataFrameResetIndex'' | ''(df: DataFrame)'' | Index auf numerisch zurücksetzen | | ''DataFrameGetIndexLabel'' | ''(df: DataFrame, row: int64): int64'' | Index-Label bei Zeile | | ''DataFrameSetIndexLabel'' | ''(df: DataFrame, row, label: int64)'' | Index-Label setzen | | ''DataFrameGetIndexName'' | ''(df: DataFrame): int64'' | Indexname | | ''DataFrameHasIndex'' | ''(df: DataFrame): int64'' | 1 wenn Index vorhanden | | ''DataFrameIndexLookup'' | ''(df: DataFrame, label: int64): int64'' | Zeilennummer per Index-Label suchen | | ''DataFrameGetIntByLabel'' | ''(df: DataFrame, colName, label: int64): int64'' | Wert per Index-Label lesen | | ''DataFrameSetIntByLabel'' | ''(df: DataFrame, colName, label, value: int64)'' | Wert per Index-Label setzen | === Filtern, Selektieren, Slicen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameFilter'' | ''(df: DataFrame, colName: int64, op, value: int64): DataFrame'' | Zeilen nach Spaltenvergleich filtern | | ''DataFrameQuery'' | ''(df: DataFrame, colName: int64, op, value: int64): DataFrame'' | Alias für DataFrameFilter | | ''DataFrameFilterByMask'' | ''(df: DataFrame, mask: BoolSeries): DataFrame'' | Zeilen per BoolSeries filtern | | ''DataFrameSlice'' | ''(df: DataFrame, start, endRow: int64): DataFrame'' | Zeilenbereich [start, end) | | ''DataFrameHead'' | ''(df: DataFrame, n: int64): DataFrame'' | Erste N Zeilen | | ''DataFrameTail'' | ''(df: DataFrame, n: int64): DataFrame'' | Letzte N Zeilen | | ''DataFrameSample'' | ''(df: DataFrame, fraction: int64): DataFrame'' | Jede N-te Zeile (fraction in %) | | ''CompareInt'' | ''(value, op, target: int64): int64'' | Einzelwert vergleichen (1 = wahr) | === Sortieren === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameSortBy'' | ''(df: DataFrame, colName: int64): DataFrame'' | Aufsteigend sortieren | | ''DataFrameSortByDesc'' | ''(df: DataFrame, colName: int64): DataFrame'' | Absteigend sortieren | | ''DataFrameReverse'' | ''(df: DataFrame): DataFrame'' | Zeilenreihenfolge umkehren | === Zusammenführen und Umformen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameConcat'' | ''(left, right: DataFrame): DataFrame'' | Zeilen anhängen (gleiche Spalten) | | ''DataFrameJoinInner'' | ''(left: DataFrame, leftKey: int64, right: DataFrame, rightKey: int64): DataFrame'' | Inner Join | | ''DataFrameJoinLeft'' | ''(left: DataFrame, leftKey: int64, right: DataFrame, rightKey: int64): DataFrame'' | Left Join | | ''DataFrameJoinRight'' | ''(left: DataFrame, leftKey: int64, right: DataFrame, rightKey: int64): DataFrame'' | Right Join | | ''DataFrameJoinOuter'' | ''(left: DataFrame, leftKey: int64, right: DataFrame, rightKey: int64): DataFrame'' | Outer Join | | ''DataFramePivot'' | ''(df: DataFrame, indexCol, pivotCol, valueCol: int64): DataFrame'' | Long → Wide | | ''DataFrameMelt'' | ''(df: DataFrame, idCol: int64, valueColStart, valueColEnd: int64): DataFrame'' | Wide → Long | | ''DataFrameExplode'' | ''(df: DataFrame, colName: int64): DataFrame'' | Zeilen expandieren | | ''DataFrameGetDummies'' | ''(df: DataFrame, colName: int64): DataFrame'' | One-Hot-Encoding einer Spalte | === Werte ersetzen und bereinigen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameReplace'' | ''(df: DataFrame, colName: int64, oldVal, newVal: int64)'' | Wert in einer Spalte ersetzen | | ''DataFrameReplaceAll'' | ''(df: DataFrame, oldVal, newVal: int64)'' | Wert in allen Spalten ersetzen | | ''DataFrameMapMul'' | ''(df: DataFrame, colName: int64, factor: int64)'' | Spalte mit Faktor multiplizieren | | ''DataFrameMapAdd'' | ''(df: DataFrame, colName: int64, offset: int64)'' | Konstante zur Spalte addieren | | ''DataFrameClip'' | ''(df: DataFrame, colName: int64, minValue, maxValue: int64)'' | Werte auf [min, max] begrenzen | | ''DataFrameFillNA'' | ''(df: DataFrame, colName: int64, defaultValue: int64)'' | Nullwerte auffüllen | | ''DataFrameDropNA'' | ''(df: DataFrame, colName: int64): DataFrame'' | Zeilen mit Nullwert entfernen | | ''DataFrameDropDuplicates'' | ''(df: DataFrame, colName: int64): DataFrame'' | Doppelte Zeilen entfernen | | ''IsNA'' | ''(value, colType: int64): bool'' | Prüfen ob Wert NA (= 0) ist | === Statistik auf Series (int64) === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesSum'' | ''(s: Series): int64'' | Summe | | ''SeriesMean'' | ''(s: Series): int64'' | Mittelwert | | ''SeriesMin'' | ''(s: Series): int64'' | Minimum | | ''SeriesMax'' | ''(s: Series): int64'' | Maximum | | ''SeriesCount'' | ''(s: Series): int64'' | Anzahl Nicht-Null-Werte | | ''SeriesMedian'' | ''(s: Series): int64'' | Median (intern sortiert) | | ''SeriesCorr'' | ''(s1, s2: Series): int64'' | Pearson-Korrelation × 1000 | | ''SeriesCov'' | ''(s1, s2: Series): int64'' | Kovarianz | | ''SeriesDescribe'' | ''(s: Series): DataFrame'' | Zusammenfassung: count, mean, std, min, max | | ''SeriesValueCounts'' | ''(s: Series): DataFrame'' | Häufigkeitstabelle (Spalten: value, count) | | ''SeriesAgg'' | ''(s: Series, aggType: int64): int64'' | Einzelne Aggregation (AGG_*) | | ''SeriesAggMulti'' | ''(s: Series): AggResult'' | Alle Aggregationen auf einmal | | ''SeriesRank'' | ''(s: Series): Series'' | Aufsteigender Rang je Element | | ''SeriesIsDuplicated'' | ''(s: Series, idx: int64): int64'' | 1 wenn Wert vorher schon vorkam | === Statistik auf Series (f64) === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesSumF64'' | ''(s: Series): f64'' | Summe | | ''SeriesMeanF64'' | ''(s: Series): f64'' | Mittelwert | | ''SeriesMinF64'' | ''(s: Series): f64'' | Minimum | | ''SeriesMaxF64'' | ''(s: Series): f64'' | Maximum | | ''SeriesVarianceF64'' | ''(s: Series): f64'' | Varianz | | ''SeriesStdDevF64'' | ''(s: Series): f64'' | Standardabweichung (Newton) | | ''SeriesSumFloat'' | ''(s: Series): int64'' | Summe als int64-Bitmuster | | ''SeriesMeanFloat'' | ''(s: Series): int64'' | Mittelwert als int64-Bitmuster | === DataFrame-Aggregation === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameAgg'' | ''(df: DataFrame, aggType: int64): DataFrame'' | Aggregation aller Spalten | | ''DataFrameCorrMatrix'' | ''(df: DataFrame): DataFrame'' | Korrelationsmatrix aller Spalten | === Rolling Window (int64) === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesRollingMean'' | ''(s: Series, window: int64): Series'' | Gleitender Mittelwert | | ''SeriesRollingSum'' | ''(s: Series, window: int64): Series'' | Gleitende Summe | | ''SeriesRollingMin'' | ''(s: Series, window: int64): Series'' | Gleitendes Minimum | | ''SeriesRollingMax'' | ''(s: Series, window: int64): Series'' | Gleitendes Maximum | === Kumulierte Werte === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesCumSum'' | ''(s: Series): Series'' | Kumulative Summe (int64) | | ''SeriesCumSumF64'' | ''(s: Series): Series'' | Kumulative Summe (f64) | | ''SeriesCumProd'' | ''(s: Series): Series'' | Kumulatives Produkt | | ''SeriesCumMax'' | ''(s: Series): Series'' | Kumulatives Maximum | | ''SeriesCumMin'' | ''(s: Series): Series'' | Kumulatives Minimum | === Verschieben und Differenz === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesShift'' | ''(s: Series, n: int64): Series'' | Werte um N Positionen verschieben | | ''SeriesDiff'' | ''(s: Series): Series'' | Differenz aufeinanderfolgender Elemente | === Normalisierung === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesNormalizeMinMax'' | ''(s: Series): Series'' | Min-Max auf Skala 0–1000 | | ''SeriesNormalizeZScore'' | ''(s: Series): Series'' | Z-Score (×100, integer) | === Apply / Transform === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesTransformMul'' | ''(s: Series, factor: int64): Series'' | Alle Werte multiplizieren | | ''SeriesTransformAdd'' | ''(s: Series, offset: int64): Series'' | Konstante addieren | | ''SeriesTransformNormalize'' | ''(s: Series): Series'' | Min-Max-Normalisierung | | ''SeriesApplyAbs'' | ''(s: Series): Series'' | Absolutwert | | ''SeriesApplySquare'' | ''(s: Series): Series'' | Quadrat | | ''SeriesApplySqrt'' | ''(s: Series): Series'' | Integer-Wurzel | | ''DataFrameApplyAdd'' | ''(df: DataFrame, colName: int64, offset: int64): Series'' | Spalte + Konstante | | ''DataFrameApplyMul'' | ''(df: DataFrame, colName: int64, factor: int64): Series'' | Spalte × Faktor | | ''DataFrameApplyNormalize'' | ''(df: DataFrame, colName: int64): Series'' | Spalte normalisieren | === Binning === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesCut'' | ''(s: Series, bins: int64): Series'' | Gleichmäßige Bins | | ''SeriesQCut'' | ''(s: Series, quantiles: int64): Series'' | Quantil-basierte Bins | === Resampling / Interpolation === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesResampleCount'' | ''(s: Series, windowSec: int64): Series'' | Häufigkeiten in Zeitfenstern | | ''SeriesInterpolate'' | ''(s: Series): Series'' | Lineare Interpolation fehlender Werte | === Filter auf f64 === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesFilterGtF64'' | ''(s: Series, threshold: f64): Series'' | Werte > threshold | | ''SeriesFilterLtF64'' | ''(s: Series, threshold: f64): Series'' | Werte < threshold | === Boolesche Indizierung === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''SeriesGreaterThan'' | ''(s: Series, value: int64): BoolSeries'' | s > value | | ''SeriesLessThan'' | ''(s: Series, value: int64): BoolSeries'' | s < value | | ''SeriesEqual'' | ''(s: Series, value: int64): BoolSeries'' | s == value | | ''SeriesNotEqual'' | ''(s: Series, value: int64): BoolSeries'' | s != value | | ''SeriesInRange'' | ''(s: Series, min, max: int64): BoolSeries'' | min ≤ s ≤ max | | ''BoolSeriesAnd'' | ''(bs1, bs2: BoolSeries): BoolSeries'' | Logisches AND | | ''BoolSeriesOr'' | ''(bs1, bs2: BoolSeries): BoolSeries'' | Logisches OR | | ''BoolSeriesNot'' | ''(bs: BoolSeries): BoolSeries'' | Logisches NOT | | ''BoolSeriesCount'' | ''(bs: BoolSeries): int64'' | Anzahl true-Einträge | | ''BoolSeriesAny'' | ''(bs: BoolSeries): int64'' | 1 wenn mindestens ein true | | ''BoolSeriesAll'' | ''(bs: BoolSeries): int64'' | 1 wenn alle true | === GroupBy === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFrameGroupBy'' | ''(df: DataFrame, keyCol: int64): GroupByResult'' | Gruppieren nach einer Spalte | | ''GroupBySum'' | ''(gb: GroupByResult, aggCol: int64): DataFrame'' | Summe je Gruppe | | ''GroupByCount'' | ''(gb: GroupByResult): DataFrame'' | Zeilenanzahl je Gruppe | | ''GroupByAgg'' | ''(gb: GroupByResult, aggCol: int64): DataFrame'' | count, sum, mean, min, max je Gruppe | | ''DataFrameGroupByMulti'' | ''(df: DataFrame, keyCols: int64, keyColCount: int64): MultiGroupByResult'' | Gruppieren nach mehreren Spalten | | ''GroupByMultiCount'' | ''(gb: MultiGroupByResult): DataFrame'' | Zeilenanzahl je Mehrfach-Gruppe | === Datum und Uhrzeit === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''UnixToDateTime'' | ''(unix: int64): DateTime'' | Unix-Timestamp → DateTime-Struct | | ''UnixGetYear'' | ''(ts: int64): int64'' | Jahr | | ''UnixGetMonth'' | ''(ts: int64): int64'' | Monat | | ''UnixGetDay'' | ''(ts: int64): int64'' | Tag | | ''UnixGetHour'' | ''(ts: int64): int64'' | Stunde | === String-Hilfsfunktionen === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''StrToUpper'' | ''(s: int64): int64'' | Großbuchstaben (neues pchar) | | ''StrToLower'' | ''(s: int64): int64'' | Kleinbuchstaben (neues pchar) | | ''StrTrimLeft'' | ''(s: int64): int64'' | Führende Leerzeichen entfernen | | ''StrTrimRight'' | ''(s: int64): int64'' | Nachfolgende Leerzeichen entfernen | | ''StrTrim'' | ''(s: int64): int64'' | Beide Seiten trimmen | | ''StrSplit'' | ''(s, delim: int64): int64'' | String splitten → Array von pchar | | ''StrJoin'' | ''(parts, count, delim: int64): int64'' | Array von pchar → String | | ''StrContains'' | ''(s, needle: int64): int64'' | Teilstring suchen (1 = gefunden) | | ''StrReplace'' | ''(s, old, newStr: int64): int64'' | Erstes Vorkommen ersetzen | === Ausgabe === ^ Funktion ^ Signatur ^ Beschreibung ^ | ''DataFramePrint'' | ''(df: DataFrame)'' | Tabellenausgabe auf stdout | | ''DataFrameShape'' | ''(df: DataFrame)'' | (rows, cols) auf stdout | | ''DataFrameInfo'' | ''(df: DataFrame)'' | Spaltenübersicht mit Typen auf stdout | ---- ===== data.io ===== import data.io; Abhängigkeit: ''data.core'' ''data.io'' liest CSV-Dateien in einen ''DataFrame'' ein und schreibt ''DataFrames'' als CSV zurück. Der Parser erkennt die erste Zeile als Header und interpretiert alle Zellwerte als ''int64''. String-Spaltenwerte werden beim Lesen nicht als solche erkannt — für gemischte Daten müssen Spaltentypen nach dem Import manuell gesetzt werden. ==== Funktionen ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''ReadCSV'' | ''(path: int64): DataFrame'' | CSV-Datei einlesen (max. 1 MB, 64 Spalten). Erste Zeile ist Header. | | ''WriteCSV'' | ''(df: DataFrame, path: int64): int64'' | DataFrame in CSV schreiben. Gibt 0 bei Erfolg, -1 bei Fehler. | **Hinweise:** * Anführungszeichen in Feldern werden beim Parsen überlesen. * Der Schreibpuffer fasst 64 KB; bei größeren DataFrames wird automatisch geflusht. ==== Beispiel ==== import data.core; import data.io; var df: DataFrame := ReadCSV("input.csv"); DataFrameMapMul(df, "price", 2); WriteCSV(df, "output.csv"); ---- ===== data.stats_batch ===== import data.stats_batch; SIMD-bereite Batch-Funktionen für direkt übergebene Werte — kein Series-Zugriff nötig. Ideal für kleine, feste Datenmengen (4, 8 oder 16 Werte), die in einer einzigen Operation ausgewertet werden sollen, ohne vorher eine Series aufzubauen. ==== Summe ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Sum4'' | ''(v0, v1, v2, v3: int64): int64'' | Summe von 4 Werten | | ''Sum8'' | ''(v0..v7: int64): int64'' | Summe von 8 Werten | | ''Sum16'' | ''(v0..v15: int64): int64'' | Summe von 16 Werten | ==== Minimum ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Min4'' | ''(v0, v1, v2, v3: int64): int64'' | Minimum von 4 Werten | | ''Min8'' | ''(v0..v7: int64): int64'' | Minimum von 8 Werten | ==== Maximum ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Max4'' | ''(v0, v1, v2, v3: int64): int64'' | Maximum von 4 Werten | | ''Max8'' | ''(v0..v7: int64): int64'' | Maximum von 8 Werten | ==== Durchschnitt ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Avg4'' | ''(v0, v1, v2, v3: int64): int64'' | Mittelwert von 4 Werten | | ''Avg8'' | ''(v0..v7: int64): int64'' | Mittelwert von 8 Werten | ==== Varianz und Standardabweichung ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Variance4'' | ''(v0, v1, v2, v3: int64): int64'' | Varianz von 4 Werten | | ''StdDev4'' | ''(v0, v1, v2, v3: int64): int64'' | Standardabweichung von 4 Werten (Newton-Sqrt) | ==== Spannweite ==== ^ Funktion ^ Signatur ^ Beschreibung ^ | ''Range4'' | ''(v0, v1, v2, v3: int64): int64'' | Max − Min von 4 Werten | ---- ===== Vollständiges Beispiel ===== import data.core; import data.io; // DataFrame aufbauen var df: DataFrame := DataFrameNew(); DataFrameAddColumn(df, "name", COL_STRING); DataFrameAddColumn(df, "age", COL_INT64); DataFrameAddColumn(df, "score", COL_INT64); DataFrameAppendRow(df); DataFrameSetString(df, "name", 0, "Alice"); DataFrameSetInt(df, "age", 0, 30); DataFrameSetInt(df, "score", 0, 85); DataFrameAppendRow(df); DataFrameSetString(df, "name", 1, "Bob"); DataFrameSetInt(df, "age", 1, 25); DataFrameSetInt(df, "score", 1, 92); DataFrameAppendRow(df); DataFrameSetString(df, "name", 2, "Carol"); DataFrameSetInt(df, "age", 2, 35); DataFrameSetInt(df, "score", 2, 78); // Filtern: score > 80 var filtered: DataFrame := DataFrameFilter(df, "score", OP_GT, 80); DataFramePrint(filtered); // Sortieren nach age var sorted: DataFrame := DataFrameSortBy(df, "age"); DataFramePrint(sorted); // Statistik var scoreS: Series := DataFrameGetSeries(df, "score"); PrintInt(SeriesMean(scoreS)); // 85 PrintInt(SeriesMin(scoreS)); // 78 PrintInt(SeriesMax(scoreS)); // 92 // CSV speichern WriteCSV(df, "output.csv");