Python et C++ -...

24
Python et C++ Pierre GAIGNON Cervin GUYOMAR Projet R – 3/10/2014

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

𝑭𝟑 = 𝑭𝟐 𝑭𝟏 = 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

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

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

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

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

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

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

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