# activer l'environnement
using Pkg
Pkg.activate("env_julia_pythoncall") Activating project at `c:\Users\ricco\Desktop\demo\env_julia_pythoncall`
# activer l'environnement
using Pkg
Pkg.activate("env_julia_pythoncall") Activating project at `c:\Users\ricco\Desktop\demo\env_julia_pythoncall`
# liste des packages installés
Pkg.status()Status `C:\Users\ricco\Desktop\demo\env_julia_pythoncall\Project.toml` [a93c6f00] DataFrames v1.8.2 [da1fdf0e] FreqTables v1.0.0 [7073ff75] IJulia v1.34.4 [6099a3de] PythonCall v0.9.34 [fdbf4ff8] XLSX v0.11.10
# packages
import DataFrames as DFR
import XLSX
# lecture des données en TRAIN
dfTrain = DFR.DataFrame(XLSX.readtable("./breast_pythoncall.xlsx","TRAIN"))
# premières lignes
println(DFR.describe(dfTrain))10×7 DataFrame Row │ variable mean min median max nmissing eltype │ Symbol Union… Any Union… Any Int64 DataType ─────┼──────────────────────────────────────────────────────────────────── 1 │ clump 4.24812 1 4.0 10 0 Int64 2 │ ucellsize 2.94737 1 1.0 10 0 Int64 3 │ ucellshape 3.07519 1 1.0 10 0 Int64 4 │ mgadhesion 2.65915 1 1.0 10 0 Int64 5 │ sepics 3.1203 1 2.0 10 0 Int64 6 │ bnuclei 3.28571 1 1.0 10 0 Int64 7 │ bchromatin 3.3183 1 3.0 10 0 Int64 8 │ normnucl 2.77444 1 1.0 10 0 Int64 9 │ mitoses 1.49624 1 1.0 10 0 Int64 10 │ classe begnin malignant 0 String
# y et X
yTrain = dfTrain.classe
XTrain = dfTrain[:,DFR.Not(:classe)]
# vérif. dim
println(DFR.size(yTrain))
println(DFR.size(XTrain))(399,)
(399, 9)
# configurer variable d'environnement
# pour trouver l'interpréteur Python à utilser
# ici l'environnement "base" d'Anaconda
ENV["JULIA_PYTHONCALL_EXE"] = raw"C:\Users\ricco\anaconda3\python.exe"
# puis importer la librairie
using PythonCall# vérifier la version de Python dispo
sys = pyimport("sys")
println("Version de Python = $(pyconvert(String, sys.version))")Version de Python = 3.13.9 | packaged by Anaconda, Inc. | (main, Oct 21 2025, 19:09:58) [MSC v.1929 64 bit (AMD64)]
# vérifier la version de scikit-learn dispo
sklearn = pyimport("sklearn")
println("Version de scikit-learn = $(pyconvert(String, sklearn.__version__))")Version de scikit-learn = 1.7.2
# importer la classe de calcul
LinearSVC = sklearn.svm.LinearSVC
# instancier une régression Lasso
modele = LinearSVC(random_state = 42)LinearSVC(random_state=42)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
| penalty | 'l2' | |
| loss | 'squared_hinge' | |
| dual | 'auto' | |
| tol | 0.0001 | |
| C | 1.0 | |
| multi_class | 'ovr' | |
| fit_intercept | True | |
| intercept_scaling | 1 | |
| class_weight | None | |
| verbose | 0 | |
| random_state | 42 | |
| max_iter | 1000 |
# lancer l'entraînement du modèle
# attention, typer les X en Matrix
modele.fit(Matrix(XTrain), yTrain)LinearSVC(random_state=42)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
| penalty | 'l2' | |
| loss | 'squared_hinge' | |
| dual | 'auto' | |
| tol | 0.0001 | |
| C | 1.0 | |
| multi_class | 'ovr' | |
| fit_intercept | True | |
| intercept_scaling | 1 | |
| class_weight | None | |
| verbose | 0 | |
| random_state | 42 | |
| max_iter | 1000 |
# afficher les coefficients
# on a un objet Python
modele.coef_Python:
array([[0.07444318, 0.00447512, 0.08119902, 0.0383552 , 0.11598208,
0.10454157, 0.07715406, 0.04552873, 0.13817203]])
# conversion en objet Julia pour post-traitement
coef = pyconvert(Matrix{Float64},modele.coef_)
coef1×9 Matrix{Float64}:
0.0744432 0.00447512 0.081199 … 0.0771541 0.0455287 0.138172
# affichage sous forme de DataFrame Julia par ex.
DFR.DataFrame(var = names(XTrain), coef = coef[1,:])| Row | var | coef |
|---|---|---|
| String | Float64 | |
| 1 | clump | 0.0744432 |
| 2 | ucellsize | 0.00447512 |
| 3 | ucellshape | 0.081199 |
| 4 | mgadhesion | 0.0383552 |
| 5 | sepics | 0.115982 |
| 6 | bnuclei | 0.104542 |
| 7 | bchromatin | 0.0771541 |
| 8 | normnucl | 0.0455287 |
| 9 | mitoses | 0.138172 |
# l'intercept
modele.intercept_Python: array([-2.27970908])
# lecture des données en TEST
dfTest = DFR.DataFrame(XLSX.readtable("./breast_pythoncall.xlsx","TEST"))
# premières lignes
println(DFR.describe(dfTest))10×7 DataFrame Row │ variable mean min median max nmissing eltype │ Symbol Union… Any Union… Any Int64 DataType ─────┼──────────────────────────────────────────────────────────────────── 1 │ clump 4.64333 1 4.0 10 0 Int64 2 │ ucellsize 3.38333 1 1.0 10 0 Int64 3 │ ucellshape 3.38333 1 2.0 10 0 Int64 4 │ mgadhesion 3.00333 1 1.0 10 0 Int64 5 │ sepics 3.34333 1 2.0 10 0 Int64 6 │ bnuclei 3.91333 1 1.0 10 0 Int64 7 │ bchromatin 3.59667 1 3.0 10 0 Int64 8 │ normnucl 2.99 1 1.0 10 0 Int64 9 │ mitoses 1.71333 1 1.0 10 0 Int64 10 │ classe begnin malignant 0 String
# y et X
yTest = dfTest.classe
XTest = dfTest[:,DFR.Not(:classe)]
# vérif. dim
println(DFR.size(yTest))
println(DFR.size(XTest))(300,)
(300, 9)
# prediction en test (objet Python obtenu)
pred_python = modele.predict(Matrix(XTest))
pred_pythonPython:
array(['begnin', 'malignant', 'begnin', 'begnin', 'malignant',
'malignant', 'malignant', 'begnin', 'malignant', 'begnin',
'begnin', 'malignant', 'malignant', 'malignant', 'begnin',
'begnin', 'malignant', 'malignant', 'begnin', 'malignant',
'begnin', 'malignant', 'malignant', 'begnin', 'malignant',
'begnin', 'begnin', 'malignant', 'begnin', 'begnin', 'begnin',
'begnin', 'malignant', 'begnin', 'begnin', 'begnin', 'begnin',
'malignant', 'begnin', 'malignant', 'malignant', 'begnin',
'begnin', 'malignant', 'begnin', 'begnin', 'begnin', 'begnin',
'begnin', 'malignant', 'begnin', 'begnin', 'begnin', 'malignant',
... 36 more lines ...
'begnin', 'begnin', 'begnin', 'begnin', 'begnin', 'begnin',
'malignant', 'begnin', 'malignant', 'begnin', 'begnin',
'malignant', 'malignant', 'malignant', 'malignant', 'begnin',
'begnin', 'begnin', 'begnin', 'begnin', 'malignant', 'begnin',
'begnin', 'malignant', 'begnin', 'begnin', 'malignant', 'begnin',
'begnin', 'begnin', 'malignant', 'begnin', 'begnin', 'begnin',
'malignant', 'begnin', 'begnin', 'malignant', 'begnin',
'malignant', 'malignant', 'begnin', 'malignant', 'malignant',
'begnin', 'malignant'], dtype=object)
# transformer en Julia
pred_julia = pyconvert(Vector{String}, pred_python)
pred_julia300-element Vector{String}:
"begnin"
"malignant"
"begnin"
"begnin"
"malignant"
"malignant"
"malignant"
"begnin"
"malignant"
"begnin"
⋮
"malignant"
"begnin"
"malignant"
"malignant"
"begnin"
"malignant"
"malignant"
"begnin"
"malignant"
# matrice de confusion
import FreqTables as FT
FT.freqtable(yTest,pred_julia)2×2 Named Matrix{Int64}
Dim1 ╲ Dim2 │ begnin malignant
────────────┼─────────────────────
begnin │ 180 7
malignant │ 4 109