Python et C++ -...

Post on 11-Sep-2018

241 views 1 download

Transcript of Python et C++ -...

Python et C++

Pierre GAIGNON Cervin GUYOMAR Projet R – 3/10/2014

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

Un langage en progression :

2013 Data Science Survey

Un langage en progression :

Progression du nombre de sujets sur StackOverflow pour R et Python

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

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

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

Comment l’utiliser avec R : R dans Python

Des exemples :

Une ACP dans Python

Comment l’utiliser avec R : R dans Python

Des exemples :

Représentation graphique dans le projet « élections »

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

Comment l’utiliser avec R : Python dans R

Pourquoi faire?

Utiliser une librairie spécifique à Python (Data mining par exemple)

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++ ?

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

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++

Algorithme le plus simple pour déterminer les termes de la suite : fonction récursive

𝑭𝒏+𝟐 = 𝑭𝒏+𝟏 + 𝑭𝒏

𝑭𝟑 = 𝑭𝟐 𝑭𝟏 = 1

= 𝑭𝟏 = 1 𝑭𝟎 = 𝟎

+

+

𝑭𝟑 = 𝑭𝟐 𝑭𝟏 = 1

= 𝑭𝟏 = 1 𝑭𝟎 = 𝟎

+

+

𝑭𝟒 = 𝑭𝟑 𝑭𝟐 +

𝑭𝟐 = 𝑭𝟏 = 1 + 𝑭𝟎 = 𝟎

𝑭𝟐

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

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

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 :

Pour n=40 : 257s en R 0,5s avec Rcpp 500 fois plus rapide

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++

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

Possibilité d’interagir avec de nombreux langages

rJava pour Java

rFortran pour Fortran

R.matlab pour Matlab