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アプリの完成です。

それでは。