Outils pour du calcul scientifique

Partageons nos méthodes/langages/librairies pour faire du calcul scientifique ! N’hésitez pas à modifier directement ce message.

Python

Python est un langage de référence tant dans la communauté scientifique que dans l’industrie. C’est un language de haut niveau, donc ça permet d’aller très vite notamment sur les étapes peu intéressantes : lire un csv, envoyer une requête sur le réseau, exporter des résultats…

Toutes les structures de données courantes sont disponibles nativement (list pour les tableaux, dict pour les hash tables, set pour les ensembles, counter, dequeue, …).

Par contre, python est assez lent et gourmand en mémoire. D’expérience, un même algorithme recodé en C sera un ordre de grandeur plus rapide.

Autre défaut, étant un langage interprété, la plupart des erreur ne se signalent qu’à l’exécution. C’est donc rarement une bonne idée de lancer de longs calculs sans avoir précédemment testé le code sur un exemple. Pour se prémunir de ce problème il est possible de prototyper avec jupyter ou d’utiliser un linter (j’ai une préférence pour la 1ère option).

L’implémentation de python la plus courante, cpython, ne gère pas le multithreading, il faut faire du multiprocessing à la place.

Python2 ou python3 ? La plupart des librairies sont maintenant compatibles python3. Personnellement je ne vois plus trop d’avantages à rester sur python2 (au moins pour du calcul scientifique).

Comme pour toute utilisation de python, il est vraiment préférable d’utiliser des virtualenv. virtualenvwrapper permet de les utiliser sans peine.

Beaucoup de librairies existent pour le calcul scientifique :

  • scikit-learn : beaucoup d’algorithmes de machine learning standards
  • matplotlib : pour faire des graphiques
  • numpy : calcul matriciel
  • pandas : (basé sur numpy) très utile pour traiter les données en entrée
  • theano : (basé sur numpy) calcul symbolique sur des tenseurs, gère la dérivation symbolique, intègre beaucoup d’optimisations, permet de faire tourner des algos sur GPU…
  • keras : (basé sur theano) deep learning (jamais utilisé mais conseillé par un copain)
  • caffe : deep learning aussi. modelzoo permet d’utiliser des modèles déjà entrainés.

R

C’est un incontournable qui mérite une place de premier plan! C’est l’équivalent Open Source de Matlab (qui est propriétaire; R apporte une comptabilité partielle avec les fichiers Matlab), il est extrêmement bien outillé (R Studio par exemple est phénoménal, Shiny est très intéressant aussi).

C

Le C est plus rapide que python à exécuter mais plus lent à coder. La librairie Cython permet d’avoir le meilleur des deux mondes en interfaçant du code C et du code python. Par exemple, sur un algorithme de descente de gradient, généralement >99% du temps de calcul est passé sur le calcul du gradient. Il est avantageux de coder la fonction de calcul du gradient en C, éventuellement avec du multithreading, et le reste en python.

Matlab / Scilab

Excellent pour prototyper rapidement. Très utilisé par le monde académique, Matlab dispose d’un bon choix de librairies de machine learning (vlfeat par exemple).

Matlab est payant et il est possible de rajouter des « toolbox » (librairies éditées par matworks, payantes aussi). Je crois que c’est raisonnable à l’exception de la toolbox pour faire du calcul distribué.

Matlab peut être remplacé par Scilab.

Sagemath

il y a également une bibliothèque dédiée aux mathématiques qui permet d’unifier plusieurs librairies pour Python existantes:

CodeTyphon
Open source, multi-plateformes, cross-compilation.

http://www.pilotlogic.com/

Bases de données

Je stocke des tables avec postgresql et des listes avec mongodb. pgadmin3 et robomongo permettent de s’en tirer sur des choses simples sans rien connaître au langage. psycopg2 et pymongo permettent d’interfacer avec python.

NB : robomongo est un outil extraordinaire mais qui n’arrive pas toujours à suivre les évolutions de mongodb. Il faut parfois utiliser une version de mongodb vieille de quelques mois.

Editeurs

  • Jupyter : très utilisé (à juste raison) par le monde scientifique. Permet de prototyper du code julia, python ou R. Seul défaut : je n’ai pas trouvé de manière efficace de traquer un notebook avec git.
  • Atom : un éditeur multilangage agréable et très facile à customiser. En particulier, il est possible d’ajouter un linter ou un REPL.

Conclusion

Les outils suivants se complètent bien à mon avis :

  • Jupyter pour le prototypage + Atom pour le code définitif
  • python3 + numpy + pandas pour le tout venant
  • C avec cython pour les parties critiques
  • scikit-learn pour les algos classiques
3 J'aime

Bonjour,
il y a également une bibliothèque dédiée aux mathématiques qui permet d’unifier plusieurs librairies pour Python existantes:

1 J'aime

Tu cites R en passant dans la section sur les éditeurs; c’est un incontournable qui mérite une place de premier plan! C’est l’équivalent Open Source de Matlab (qui est propriétaire; R apporte une comptabilité partielle avec les fichiers Matlab), il est extrêmement bien outillé (R Studio par exemple est phénoménal, Shiny est très intéressant aussi).

Sans doute quelqu’un d’autre le décrira mieux que moi… Je suis très novice dans son utilisation (je bricole des stats de loin en loin, je ne suis pas un « data scientist ») mais à chaque fois que j’ai un besoin de visualiser des données ou d’effectuer des traitements statistiques c’est vers R que je me tourne.

1 J'aime

Bonjour,
Pour ma part, j’utilise CodeTyphon.
Open source, multi-plateformes, cross-compilation.

http://www.pilotlogic.com/

Salutations.

1 J'aime

Merci pour vos contributions ! N’hésitez pas à modifier directement le message en tête de sujet et expliquer pourquoi ****** vous rend la vie plus belle.

Et Julia (que l’on voit souvent dans les notebooks iPython) qui est un langage de programmation de haut niveau, performant et dynamique pour le calcul scientifique : Julia kernel and magics for IPython Exemples en Julia

2 J'aime

Les personnes qui n’y entendent rien en langage informatique, pourront utiliser la distribution scientifc linux.

@michel Je profite de ton post, pour partager un JupyterHub, avec OpenFisca installé dans la session de chaque utilisateur.

2 J'aime

Super boulot ! Comment tu as géré pour la sécurité ? Tu spawn un container par utilisateur ?

On peut aussi mentionner Numba qui permet de compiler à la volée du code Python en langage machine, pour une vitesse jusqu’à 100x ou 1000x supérieure.

1 J'aime

Sur les édteurs tels que Jupyter (Ipython) deux solutions existent pour versionner son contenu:
pas encore essayé pour ma part mais ca mérite le coup d’oeil:


1 J'aime

Merci Constance ! Je m’empresse de regarder ça.

Plusieurs outils qui m’ont cloué le bec :

  • Docker + Jupyter = tmpnb.org, notebook temporaire, effacé après 10 minutes d’activité ;
  • GitHub + Jupyter = http://mybinder.org, fournit un badge à coller dans un repo GitHub pour parcourir ses notebooks ;
  • GDrive + Jupyter = colaboratory.jupyter.org/welcome/ (la contribution temps réel n’est pas encore possible, à Berkeley ils sont en train de travailler sur une intégration dans Google Drive) ;
  • Livebook, modifier un notebook comme un post de blog, directement dans le navigateur, collectivement : http://livebook.inkandswitch.com

(Je les ajouterai en haut, mais c’est pour pouvoir avoir des retours. Erf, les nouveaux utilisateurs ne peuvent ajouter que deux liens.)

3 J'aime

Je voudrai rajouter quelques infos à cet aperçu des outils pour le calcul scientifique déjà très complet :slight_smile:

  • avec Python, on peut utiliser Spyder, un éditeur de développement intégré open-source qui est inclus dans la pluspart des distributions de Python, il permet l’édition des scripts, propose des consoles de débug (python et iphyton), gestionnaire de projets, explorateur de classes …
  • je voudrais signaler également Octave un langage de programmation structuré utilisant la même syntaxe que Matlab qui permet une certaine interopérabilité entre les 2 logiciels
  • pour les outils de visualisation de données qui sont très utilisés par les scientifiques, je citerai Origin et Kaléidagraph qui sont des logiciels propriétaires et les logiciels libres GNU-Plot et QtIplot clone open-source d’Origin
2 J'aime

Calculer, c’est bien mais encore faut-il des données de qualité. Et ce point n’est pas simple, loin de là.
En Datascience par exemple, cela monopolise une grande partie de l’effort et influe directement sur le biais et la variance des résultats.
Pour ceux qui ne connaissent pas, en plus de traitements via Python par exemple, OpenRefine peut être très utile pour traiter les données avant voire après traitements.
Voici l’URL de référence : http://openrefine.org/

A signaler aussi, dans le registre de la Datascience et du traitement des données, Weka, logiciel sous licence GNU General Public License : http://www.cs.waikato.ac.nz/ml/index.html

1 J'aime

Clojure utilisé pour les calculs en parallèles (possibilité de faire des gigantesque wordcount)
Site web http://clojure.org

Outil de ml de google…
Site web https://www.tensorflow.org

Au passage si vous souhaitez build Rstudio sur OrangePI, j’ai écris un tuto ici :
https://ctrlfagency.com/install-rstudio-ubuntu-armhf-architecture/