TabularDataの使用感を確かめるために、練習用のコードを書いたので上げておきます。
ここは辺を参考にしてます。正直公式ドキュメントを読んでも何も分からなかったですね。
// TabularDataをインポート
import TabularData
// リストからカラムを定義
let intColumn: Column<Int> = Column(name: "Integers", contents: [1, 2, 3, 4, 5])
print(type(of: intColumn))
// リストからDataFrameを定義
var df = DataFrame(dictionaryLiteral: ("A", [2, 4, 6, 8, 10]), ("B", [3.0, 6.0, 9.0, 12.0, 15.0]), ("C", [5, 10, 15, 20, 25]), ("G", ["a", "b", "c", "a", "b"]))
print(df)
// はじめの2行を取得
print(df.prefix(2))
// データフレームのコピー
var df2 = df
print(df2)
// データフレームを縦に結合
df2.append(df)
print(df2)
print(df)
//列を取得
print(df["A"])
//行を取得
print(df.rows[0])
print(df.rows[2...5])
// あるカラムの値をリストで取得
print(df["A"].map { $0 as! Int })
// 行数を取得
print(df.rows.count)
// カラム名をリストで取得
print(df.columns.map { $0.name })
// カラム名を変更
df2.append(column: Column(name:"K", contents: df["A"].map { $0 as! Int}))
df2.removeColumn("A")
print(df2)
// 行をフィルタリング
print(df.filter(on: "G", String.self, { $0 == "a" }))
// あるカラムの値を更新
df["A"] = df["A"].map{ $0! - 2 }
// からのカラムを定義
var df6 = DataFrame()
// Gropu Byで平均を集計
print(df.grouped(by: "G").sums("B", Double.self, order: .descending))
// Gropu Byで合計を集計
print(df.grouped(by: "G").means("B", Double.self, order: .descending))
var df3 = DataFrame(dictionaryLiteral: ("B", [2.0, 4.0, 6.0, 8.0, 10.0]), ("L", [3.0, 6.0, 9.0, 12.0, 15.0]))
print(df3)
print(df)
// 外部結合
print(df3.joined(df, on: ("B")))
なれるまでかなり時間がかかりますが、一通り一般的な特徴量計算はTabularDataでできます。Pandasでの実装の3倍位のコード量になることは覚悟していてください。
後はCoreMLを使用してAIモデルに推論させれば、AI iOSアプリの完成です。
それでは。