Python et C++ -...
Transcript of Python et C++ -...
![Page 1: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/1.jpg)
Python et C++
Pierre GAIGNON Cervin GUYOMAR Projet R – 3/10/2014
![Page 2: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/2.jpg)
Un environnement dédié à l’analyse statistique Libre et gratuit, des milliers de packages à disposition Des fonctions de visualisation très puissantes Facile à utiliser pour un non-informaticien
Ce n’est pas vraiment un langage de programmation
Pas très performant, gourmand en mémoire, interprété
Utilisé uniquement en statistique
MAIS :
On peut recourir à d’autres langages pour combler ces lacunes
![Page 3: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/3.jpg)
Un langage en progression :
2013 Data Science Survey
![Page 4: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/4.jpg)
Un langage en progression :
Progression du nombre de sujets sur StackOverflow pour R et Python
![Page 5: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/5.jpg)
Ses Atouts
Un langage généraliste
Plus performant que R (big data)
En plein développement : beaucoup de librairies
Principalement orienté objet
Plus performant pour manipuler des données (données textuelles, data mining…)
Plus puissant pour tout ce qui n’est pas des statistiques, et de plus en plus efficace pour l’analyse de données
![Page 6: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/6.jpg)
Comment l’utiliser avec R : R dans Python
Librairie rpy2
import rpy2.robjects as robjects objet robjects : interface R-
Python
robjects.r('print("hello World")') Appel de commande R
Robjects.StrVector([chaine1,chaine2])
Robjects.IntVector([chaine1,chaine2])
Robjects.FloatVector([chaine1,chaine2])
Création de vecteurs
![Page 7: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/7.jpg)
Comment l’utiliser avec R : R dans Python
rsum=robjects.r('sum')
rsum(robjects.IntVector([1,2,3]))[0] Import d’une fonction de R
>>> rsort = robjects.r['sort']
>>> res = rsort(robjects.IntVector([1,2,3]),
decreasing=True)
>>> print(res.r_repr())
c(3L, 2L, 1L)
Passage d’arguments
Pourquoi faire ? Accéder à des fonctions R très pratiques dans un programme Python
à visée plus large
![Page 8: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/8.jpg)
Comment l’utiliser avec R : R dans Python
Des exemples :
Une ACP dans Python
![Page 9: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/9.jpg)
Comment l’utiliser avec R : R dans Python
Des exemples :
Représentation graphique dans le projet « élections »
![Page 10: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/10.jpg)
Comment l’utiliser avec R : Python dans R
Avec le package Rpython
install.packages("rPython", repos = "http://www.datanalytics.com/R") ; library(rPython)
Uniquement sur UNIX-like
python.load("script.py")
Exécution d’un script Python
data <- python.get("objet_Python")
Récupération de données
Plot(data) # …..
Traitement dans R
![Page 11: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/11.jpg)
Comment l’utiliser avec R : Python dans R
Pourquoi faire?
Utiliser une librairie spécifique à Python (Data mining par exemple)
![Page 12: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/12.jpg)
Qu’est ce que C++ ?
Crée en 1980 par Bjarne Stroustrup chez Bell AT&T
Langage issu de C, dans le but de l’améliorer
D’où vient le nom C++ ?
![Page 13: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/13.jpg)
Qu’est ce que C++ ?
++ est l’opérateur d’incrémentation : augmente de 1 la valeur d’une variable
C++ est un cran au dessus de C
![Page 14: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/14.jpg)
C++ permet d'accélérer la vitesse d‘exécution des commandes dans R
Commande réalisée avec le package Rcpp (www.Rcpp.org)
Permet de travailler sur les objets de classe C++
On peut aussi construire des packages R plus rapides avec du C++
![Page 15: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/15.jpg)
Algorithme le plus simple pour déterminer les termes de la suite : fonction récursive
𝑭𝒏+𝟐 = 𝑭𝒏+𝟏 + 𝑭𝒏
𝑭𝟑 = 𝑭𝟐 𝑭𝟏 = 1
= 𝑭𝟏 = 1 𝑭𝟎 = 𝟎
+
+
![Page 16: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/16.jpg)
𝑭𝟑 = 𝑭𝟐 𝑭𝟏 = 1
= 𝑭𝟏 = 1 𝑭𝟎 = 𝟎
+
+
𝑭𝟒 = 𝑭𝟑 𝑭𝟐 +
𝑭𝟐 = 𝑭𝟏 = 1 + 𝑭𝟎 = 𝟎
𝑭𝟐
![Page 17: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/17.jpg)
Fonction récursive très gourmande en temps de calcul
Nombre d’appel de la fonction (Rn) au rang n : 𝑅𝑛=2*𝐹𝑛
𝑭𝒏+𝟐 = 𝑭𝒏+𝟏 + 𝑭𝒏
n 𝐹𝑛 𝑅𝑛
10 55 110
30 832040 1664080
50 12586269025 24172538050
![Page 18: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/18.jpg)
On écrit la fonction en C à l’aide de cppfunction :
fibRcpp <- cppFunction( '
int fibonacci(const int x) {
if (x == 0) return(0);
if (x == 1) return(1);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}
' )
fibRcpp(N)
Installation : Rtools (sous Windows), Rcpp, inline
![Page 19: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/19.jpg)
Appel récursif de fonctions : très lent en R
fibR <- function(seq) {
if (seq == 0) return(0);
if (seq == 1) return(1);
return (fibR(seq - 1) + fibR(seq - 2));
}
La fonction R :
![Page 20: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/20.jpg)
Pour n=40 : 257s en R 0,5s avec Rcpp 500 fois plus rapide
![Page 21: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/21.jpg)
Librairies à utiliser : Rinside ou Rcpp
Intérêt : Comme en Python, faire appel à des fonctions R dans des programmes plus généralistes
Un graphe R dans une interface graphique développée en C++
![Page 22: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/22.jpg)
R Python C++
Un environnement de traitement statistique
Un langage généraliste haut niveau
Un langage généraliste bas niveau, difficile à apprendre
Lent, gère mal la mémoire Peut gérer de grosses données
Algorithmes très rapides
De nombreuses fonction de statistique, visualisation
De plus en plus de librairires, adapté au Data mining
Des problèmes de performance, qui peuvent être résolus en intégrant du code d’autres langages. Des fonctions très pratiques, qui peuvent être utilisées dans des programmes plus généralistes
Une alternative à R, de plus en plus de librairies de statistique On peut malgré tout vouloir utiliser certaines fonctions R (par habitude?)
Un « vrai » langage de programmation, qui permet d’accélerer le code R Un manque de librairie de statistique, qui peut être comblé par R
![Page 23: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/23.jpg)
Possibilité d’interagir avec de nombreux langages
rJava pour Java
rFortran pour Fortran
R.matlab pour Matlab
![Page 24: Python et C++ - math.agrocampus-ouest.frmath.agrocampus-ouest.fr/.../digitalAssets/78883_diapo_R-python-C2.… · R Python C++ Un environnement de traitement statistique Un langage](https://reader030.fdocuments.net/reader030/viewer/2022021622/5b97838a09d3f27a7a8cfc2f/html5/thumbnails/24.jpg)