Tips para el lenguaje de programación Julia

Código Julia para tareas menores que hago a cada rato y que no quiero tener que andar buscando en la web. Si a alguien le sirve, bienvenido.

Escribir un dataframe en un archivo excel

using DataFrames
using XLSX

XLSX.writetable("new_file.xlsx", "sheet1" => df)

Extraido de: https://stackoverflow.com/questions/76090037/how-to-save-changes-of-dataframe-from-julia-to-excel-as-new-excel

Leer un dataframe desde un archivo excel

using DataFrames
using XLSX

df = DataFrame(XLSX.readtable("new_file.xlsx", "sheet1"))

Escribir un dataframe en un archivo CSV

using DataFrames
using CSV

CSV.write("new_file.csv", df)

Leer un dataframe desde un archivo CSV

using DataFrames
using CSV

df = CSV.read("new_file.csv", DataFrame)

Escribir un dataframe en un archivo CSV usando un pipe

using DataFrames
using CSV

df |> CSV.write("new_file.csv")

Modificar los valores de una columna de un dataframe cuando la fila cumpla alguna condición

Tip extraído de este post de Stack Overflow.

using DataFrames

function filter_transform!(df, pred, args...)
    fdf = filter(pred, df; view=true)
    fdf .= DataFrames.transform(copy(fdf), (col => f => col for (col,f) in args)...)
end

# Ejemplo de uso
# Cambia el valor de 'column2' a 200 en aquellos casos que 'column1' sea mayor a 100
filter_transform!(df, :column1 => >(100), :column2 => column2->200)

Cambiar el tipo de dato de una columna de un dataframe

using DataFrames

df.columna = Int64.(df.columna)

Ahora bien, si a los datos del dataframe los queresmo utilizar con algún modelo de Machine Learning, con la biblioteca MLJ, la transformación debe hacerse mediante la función coerce, que no solo cambia el tipo en memoria, sinó que le asocia una interpretación en el contexto del aprendizaje automático. Por ejemplo, si queremos convertir una columna a un tipo de data (para aprendizaje automático) del tipo categórico:

using DataFrames
using ScientificTypes

coerce!(df, :columna => ScientificTypes.Multiclass)

Y si queremos convetir todas las columnas del tipo Count (el tipo de dato con el cual se asocian los enteros) a Continuous (el tipo de datos asociados a reales), podemos hacer:

using DataFrames
using ScientificTypes

coerce!(df, ScientificTypes.Count => ScientificTypes.Continuous)

coerce! es muy potente porque cambia las dos cosas, la forma de almacenar el dato en memoria, como la interpretación del dato.

Averiguar que modelos de aprendizaje automático puedo usar con mis datos (usando MLJ)

Dado un conjunto de predictores Xtrain y una variable a predecir ytrain, el siguiente código nos lista (en un dataframe) todos los modelos que permiten el tipo de datos asociado a las features y al target:

using MLJ

DataFrame(models(matching(Xtrain,ytrain)))

Ahora bien, si queremos averiguar si, para un modelo particular, los predictores o la variable dependiente son compatibles. Por ejemplo, con un DecisionTreeClassifier del paquete DecisionTreeInterface:

using MLJ
using DecisionTreeInterface

println("¿Es el formato del target compatible?: ", 
	scitype(ytrain) <: target_scitype(DecisionTreeClassifier()))

println("¿Es el formato de las features compatible?: ", 
	scitype(Xtrain) <: input_scitype(DecisionTreeClassifier()))
CC BY-NC-SA 4.0 Enrique Gabriel Baquela. Last modified: March 14, 2025. Website built with Franklin.jl and the Julia programming language.