En una pregunta anterior (Working with heterogenous data in a statically typed language), pregunté cómo F # maneja las tareas estándar en el análisis de datos, como la manipulación de un archivo CSV sin tipo. langauges dinámicas sobresalen en tareas básicas comoF # Tipo de proveedores y procesamiento de datos
data = load('income.csv')
data.log_income = log(income)
En F #, el enfoque más elegante parece ser el signo de interrogación (?) del operador. Desafortunadamente, en el proceso, perdemos tipeo estático y aún necesitamos anotaciones de tipo aquí y allá.
Una de las características futuras más interesantes de F # es Type Providers. Con una mínima pérdida de seguridad de tipo, un proveedor de tipo CSV podría proporcionar tipos mediante el examen dinámico del archivo.
Pero el análisis de datos generalmente no se detiene allí. A menudo transformamos los datos y creamos nuevos conjuntos de datos, a través de una cartera de operaciones. Mi pregunta es, ¿pueden los proveedores de tipo ayudar si la mayoría manipulamos datos? Por ejemplo:
open CSV // Type provider
let data = CSV(file='income.csv') // Type provider magic (syntax?)
let log_income = log(data.income) // works!
Esto funciona pero contamina el espacio de nombres global. A menudo es más natural pensar en agregar una columna, en lugar de crear una nueva variable. ¿Hay alguna manera de hacerlo?
let data.logIncome = log(data.income) // won't work, sadly.
Do tipo proveedores proporcionan un escape de usar el (?) Del operador cuando el objetivo es la creación de nuevos conjuntos de datos derivado o limpiados en marcha?
Tal vez algo como:
let newdata = colBind data {logIncome = log(data.income)} // ugly, does it work?
Otras ideas?