Как определить / изменить MLDataValue.ValueType для столбца в MLDataTable - PullRequest
0 голосов
/ 16 октября 2018

Я загружаю MLDataTable из данного файла .csv.Тип данных для каждого столбца выводится автоматически в зависимости от содержимого входного файла.
Мне нужны предсказуемые, явные типы при дальнейшей обработке таблицы.

Как я могу применить определенный тип при загрузке файла или альтернативно изменить тип на втором шаге?

Упрощенный пример:

import Foundation
import CreateML

// file.csv:
//
// value1,value2
// 1.5,1

let table = try MLDataTable(contentsOf:URL(fileURLWithPath:"/path/to/file.csv"))
print(table.columnTypes)

// actual output:  
// ["value2": Int, "value1": Double]       <--- type for value2 is 'Int'
//
// wanted output:  
// ["value2": Double, "value1": Double]    <--- how can I make it 'Double'?

1 Ответ

0 голосов
/ 16 ноября 2018

Используйте метод MLDataColumn map(to:) для получения нового столбца из существующего с нужным базовым типом:

let squaresArrayInt = (1...5).map{$0 * $0}
var table = try! MLDataTable(dictionary: ["Ints" :  squaresArrayInt])
print(table)

let squaresColumnDouble = table["Ints"].map(to: Double.self)
table.addColumn(squaresColumnDouble, named: "Doubles")
print(table)

Создает следующий вывод:

Columns:
    Ints    integer
Rows: 5
Data:
+----------------+
| Ints           |
+----------------+
| 1              |
| 4              |
| 9              |
| 16             |
| 25             |
+----------------+
[5 rows x 1 columns]


Columns:
    Ints    integer
    Doubles float
Rows: 5
Data:
+----------------+----------------+
| Ints           | Doubles        |
+----------------+----------------+
| 1              | 1              |
| 4              | 4              |
| 9              | 9              |
| 16             | 16             |
| 25             | 25             |
+----------------+----------------+
[5 rows x 2 columns]
...