XD blog

blog page

python


2018-12-01 Choose a web framework

I need to choose a framework to run a website. The first option which comes to many developpers is probably django. But it is slow and it is difficult to know where to start with it. I looked into aiohttp or sanic. I was looking into something more efficient and I found some interesting options such as japronto (uses C), vibora (use Cython), uvicorn, starlette. There was some interesting benchmark here: Web Framework Benchmarks (source code is on github/TechEmpower. The example for Starlette is quite simple and easier to read than any big documentation. japronto seems a bit risky even though it is very promising. One last bjoern. Another benchmark.

2018-08-30 Python 3.7

For those would want to install many packages on a :epkg:`Linux` machine, here are the instruction I followed for most of the content I write for my teachings : Install Python 3.7 and many packages on Linux Debian 9.

2018-07-28 Numériques, parcoursup

Une émission intéressante : Tout est numérique. Et à propos de parcourssup : Un clone en Python 3 de Parcoursup, écrit à but didactique.

2018-07-26 Interview de l'auteur de Python dans le monde

Suivez le lien : « Je n’imaginais pas que le langage informatique Python connaîtrait un tel succès ». Quand j'y repense, j'ai commencé à enseigner le langage Python en 2005 avec la version 2.5 sur les conseils d'un ancien élève autrefois mon étudiant qui me disait qu'un des objectifs du langage était sa simplicité, d'où une plus grande facilité d'apprentissage comparé à d'autres langages. Sa grammaire était l'une des plus courtes. Je suis parti avec un livre en vacances et que j'ai potassé tranquillement sur la plage pendant une semaine, trois semaines avant de préparer mes premiers cours. 13 ans plus tard, le langage est enseigné quasiment partout, il est présent sur nombre d'offre d'emplois et est un des langages les plus utilisés pour faire de la datascience.

2018-07-06 echarts, pyecharts

C'est une librairie de visualisation qu'on m'a fait découvrir et qui mérite le détour : pyecharts + echarts.

2018-03-31 Mettre un modèle de machine learning en production

J'écrivais un article il y a peu sur le sujet ONNX : apprendre et prédire sur différentes machines où j'évoquais deux pistes pour mettre en production un modèle de machine learning, essentiellement via une application web. Il n'y a pas d'ordre de préférence, certaines sont plus abouties que d'autres. La première tensorflow-serving propose tout clé en main mais elle repose sur l'utilisation de tensorflow. La seconde ONNX, onnxmltools, winmltools convertit un modèle dans un format commun. Il est ensuite exploité là où une librairie de prédiction (un runtime) existe (liste des runtime disponibles). Ce format commun n'est pas encore exploitable en C++ ou javascript mais ces options sont envisageables également. Tensorflow encore propose une façon d'exploiter les modèles en javascript directement avec tensorflow.js (voir https://js.tensorflow.org/tutorials/import-keras.html). ONNX réfléchit à une extension pour le langage C/C++ ONNX in C/C++ qu'il est possible de faire pour le moment pour un modèle de deep learning en convertissant un modèle appris pour la librairie caffe2 avec ONNX : ONNX: deploying a trained model in a C++ project. C'est une direction choisie par le module sklearn-porter qui propose des codes en Java, C++, Go, PhP, Ruby, Javascript pour certains des modèles implémenté par scikit-learn. Cela couvre nettement plus de modèles que ce que j'avais commencé à faire avec mlprodict. Il existe d'autres options comme Seldon, à moitié open source, à moitié tourné vers une proposition de services.

2018-01-17 Montage vidéo avec Python

La programmation peut aussi servir à faire du montage vidéo. C'est du moins ce que j'ai essayé de construire en imaginant l'atelier pour Lille - Devoxx4Kid - 13 janvier 2018. Pour un néophite, le module moviepy n'est pas si évident que ça à manipuler. J'ai donc commencé à imaginer une interface avec uniquement des fonctions : Vidéos et Sons. J'y ai fait mon premier trucage vidéo :

Si on ajoute des modules tels que fcn qui permet de séparer les personnages du fond d'une image, on peut commencer à fabriquer des vidéos assez trafiquées.

2018-01-03 Small change and potentially big impact (pandas)

pandas updated its interface in its version 0.22. More particularly v0.22.0 (December 29, 2017),

print(pd.Series([]).sum())
0.0  # It was nan in 0.21.

This is typically the kind of change which could have a huge impact on many functions if you don't have unit tests to capture that. According to the documentation of sum, the previous behaviour can be retrieved by adding min_count=1.

print(pd.Series([]).sum(min_count=1))
nan

And in 10 days, computers might slow down: Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign. See also KASLR is Dead: Long Live KASLR.

2017-11-05 streaming pandas dataframe

pandas is widely used by data scientists. It is one of the modules which contributed a lot to the Python ecosystem to manipulate data. It is not perfect, a dataset takes in memory three times the space it takes on disk in average and reading a couple of gigabytes is necessarily fast. However, a couple of gigabytes is not enough to think about stronger approaches such parallelization (dask, ...) but with a little bit of overhead for such size. All I wanted was the same functionalities as pandas but implemented in a streaming way. No need to load the whole datasets in memory, no need to wait for the data to be fully loaded in memory. That's why I started pandas_streaming.

import pandas
df = pandas.DataFrame([dict(cf=0, cint=0, cstr="0"),
                       dict(cf=1, cint=1, cstr="1"),
                       dict(cf=3, cint=3, cstr="3")])

from pandas_streaming.df import StreamingDataFrame
sdf = StreamingDataFrame.read_df(df)

for df in sdf:
    # process this chunk of data
    # df is a dataframe
    print(df)

The module will continue to grow probably not as fast as I would like it to.

2017-10-27 Entrepreneurs d'intérêt général : l'Etat comme source d'inspiration

J'ai assisté hier soir à la restitution des travaux menés par la première promotion des entrepreneurs d'intérêt général (EIG). La seconde promotion sera plus nombreuse et les candidatures sont encore ouvertes aujourd'hui jusque 17h. Il y a pas mal de sujets sur lesquels j'aimerais bien me pencher.

J'étais déjà enthousiaste sur le projet qui a découché sur la première promotion des EIG et ce qui m'avait incité à accepter la proposition de faire partie du jury qui a sélectionné les candidats. Je le suis tout autant en assistant la présentation des résultats. Cette promotion a tant que possible mis à disposition son travail sur github/eig-2017 et ce travail sera compléter durant les quelques semaines qui suivent. J'y ai découvert quelques outils développés par ces entrepreneurs addok-fr ou encore leaflet-geocoder-ban/demo (source) ou encore matchID, tous orientés vers le partage comme The Magical CSV Merge Machine, l'inventaire des orgues ou encore cette réflexion sur le parcours des données santés. Le rapport Des besoins d’information à la visualisation transcrit l'approche suivie sur un des challenges. Il illustre bien ce que peut être un projet datascience dans une institution qui n'a pas toujours l'habitude de ce type d'approche et porte sur un problème de données que tout le monde peut se représenter : les données de santé.


more...

2017-10-14 Python and javascript

I was doing some research on some other topic but I found this javascript library filbert which parses and converts a Python script into a javascript script. The output is quite verbose but follows the syntactic tree produced by the parser. Transcrypt is less verbose. I then became curious about pyjs which I saw in a conference. It did not get any update in two years so it seems to be discontinued but Brython is still alive and seems a better tool to run python from a javascript page. I also discovered pyduketape which wraps in Python a javascript engine. It is a different approach from the one followed by ghost.py which is relying on PySide.

2017-09-05 Retour sur la première séance

Les liens sont probablement une des informations les plus compliquées à prendre en note alors qu'ils sont si faciles à copier/coller. Tout d'abord les liens vers les contenus utilisés pour le cours :

Quelques sites qui proposent des exercices algorithmiques : Les objectifs du cours :

Devinette extraite de la séance... Deux joueurs jouent aux dés. Un joueur a six dés à six faces, l'autre à neuf dés de quatre faces. Le gagnant est celui dont la somme des points sur chaque face est la plus grande. Comment calculer la probabilité de gagner ?

N'hésitez pas à commencer à installer Python sur vos ordinateurs et à les amener en cours si jamais un problème survient : Installer Python.

2017-08-28 Continuous integration

Maintaining notebooks is a lot of work. I consider a notebook is ok if it runs with the latest versions of the packages it uses and if it can be converted into HTML to be included on a website. Easy when you have one notebook but what if you have more than 200 hundred of them to verify for your teachings? I had to automate. I started by running a virtual machine on Azure wich Jenkins and everything I needed. This machine is still up and running and tests everything once in a week for all my python package. But my teachings are also open source so I decided to use continuous integration to test my package on other distributions. I first used travis and appveyor but I could not include the compilation of the notebooks into documentation. It requires a couple of huge dependencies as latex. appveyor is quite slow and stops any job after one hour. travis was using Ubuntu 12.04 when I started and 14.04 now. I recently tried CircleCI 2.0. The design is really nice, it offers Ubuntu 16.04, the configuration file config.yml is much easier to read and to write. One interesting feature is artifacts. The user can easily copy in a specific folder whatever he wants to keep from the build and make it available to download. The other interesting feature is caching. CircleCI automatically caches a docker which contains the dependencies of the package to test. The first run is slow and the following are faster due to this option plus renewing the cache can be easily done by changing a file. So I decided it was worth spending some time enabling CircleCI anywhere. I described here all the steps to create a Python package, with unit tests and documentation and to build it on CircleCI : Tests unitaires, setup et ingéniérie logiciel (French).

2017-08-25 Read paper, read git issues too!

Sometimes I go for a walk at scikit-learn/issues on radio github and I listened to this short news Random Forest Imputation and I discovered this package fancyimpute which is about filling missing values with many fancy ways and then knnimpute and downhill which implements a couple of gradient descent algorithms with theano. A little bit later: Thompson sampling with the online bootstrap.

2017-08-24 Remove big files from git history

Git repositories always get bigger. I noticed than one of GitHub repository was above 500Mb. I was wondering how I could make that size smaller. First, let see the size.

git count-objects -v 
count: 0
size: 0
in-pack: 19644
packs: 1
size-pack: 222397
prune-packable: 0
garbage: 0
size-garbage: 0

The size is size-pack. To clean, the first option is to rebase the repository so basically to clean everything and to commit the current state of the content. One solution is to keep only the latest commits (see Reduce repository size).

git log -n N
git reset --hard HEAD~N
git push --force 

more...
<-- -->

Xavier Dupré