XD blog

blog page

python


2016-06-10 Lectures et algorithmes un vendredi

Je commencerai par le plus facile : Dans la vallée de la Bièvre, la crue et les inondations ont été contenues. En bref, 18 km de rivière sont régulées par des vannes commandées par un algorithme. Et cela a fonctionné.

Côté programmation, TensorFlow commence à faire des petits. En voici un : tflearn qui propose une API Python différente pour les fonctionnalités de TensorFlow. De fil en aiguille, on remonte jusqu'au compte GitHub de l'auteur pour tomber sur des exemples avec TensorFlow et un autre site Machine Learning & Deep Learning Tutorials. C'est sans doute un peu moins poli que celui-ci Free Kaggle Machine Learning Tutorial for Python. Ensuite, CVXPY est un module qui permet de faire de l'optimisation convexe avec ou sans contrainte. Pour fermer cette parenthèse, je vous suggère de retourner sur Kaggle avec le script de la semaine May 2016: Scripts of the Week, February 2016: Scripts of the Week.

Pour finir, quelques articles très récents. Le premier pour comprendre comment fonctionnent les enchères sur internet Learning Algorithms for Second-Price Auctions with Reserve. Le second pour avoir envie de faire autre chose que de la sélection de variables : Structure-Leveraged Methods in Breast Cancer Risk Prediction. Le troisième parce que j'ai toujours eu envie d'étudier les sessions des utilisateurs d'un moteur de recherche d'une façon différente : A Gibbs Sampler for Learning DAGs. DAG veut dire directed acyclic graph. Le quatrième parce que je suis curieux : Consistent Distribution-Free K -Sample and Independence Tests for Univariate Random Variables. Le cinquième pour le titre : Learning Using Anti-Training with Sacrificial Data". Enfin, dans les sujets en vogue, l'apprentissage par renforcement : Thompson sampling et An Information-Theoretic Analysis of Thompson Sampling.

2016-06-09 Old R or Young Python?

Python was conceived in 1990 (source Wikidepia). Not so young maybe compare to R which is in fact younger but inspired from a much older language S born around 1975. Why bringing back this question when every data scientist knows both, when universities teach both? Difficult to say which one is best according to R and python usages. According to Top Data Scientists to Follow & Best Data Science Tutorials on GitHub, Python seems to be more popular among the top data scientist on GitHub. But is there any competition? Choosing R or Python for data analysis? An infographic

So...

Every data scientist is using both language but all of them are using mostly one. Then a former student told me that little story. His company was using R as a preferred language but as new hires joined, Python became more and more popular. I was thinking maybe we should compare the average age of people mostly using one or the other.

2016-05-29 Longitude, latitude et les carreaux de l'INSEE

Les données carroyées à 200 mètres, produites par l'INSEE, contiennent 18 variables sur la structure par âge des individus, les caractéristiques des ménages (locataire/propriétaire, etc.) et les revenus au 31 décembre 2010 pour chaque zone ou carreau de 200 mètres de côté d'un quadrillage qui recouvre le territoire français, territoire d'outre mer compris.

Un des inconvénients relève du système de coordonnées utilisé pour la métropole, LAEA (Lambert Azimutal Equal Area code EPSG 3035) d'après la documentation générale (voir également Documentation complète sur les données carroyées à 200 mètres). Il faut le plus souvent les convetir en longitude/latitude pour tracer des cartes avec les librairies existantes en Python (basemap par exemple).

Comment trouver un code python qui permettent d'effectuer cette conversion ?


more...

2016-05-22 GEOFLA, Lambert 93 projection

I was trying to use the files GEOFLAî Départements to draw a map and my first try left the map empty. I then discovered that the coordinates were expressed with Lambert 93 projection. A couple of searches later, I found a couple of versions of the same function in Javascript, PHP or Python. Here is the one I finally chose and modified: lambert93_to_WGPS. After conversion, the file can be used more easliy with module basemap.

2016-04-20 Build xgboost on Windows (not the python module)

Here are the steps I followed:

If you want to build the wheel for Python, I suggest reading Build xgboost 0.4a30 for Python 3.4 and 3.5.

2016-04-14 Retour sur le hackathon ENSAE / Microsoft / Croix-Rouge

Le hackathon ENSAE / Microsoft / Croix-Rouge s'est terminé depuis quelques temps déjà (novembre 2015). Je ne sais pas si une seconde édition aura lieu même si la question m'est régulièrement posée. En attendant, les photos sont disponibles, la vidéo tirée de l'événement ENSAE ParisTech - DSSC l'est aussi depuis peu. Un retour sur l'événement, plus complet, a récemment été publié dans la revue des anciens de l'ENSAE : Le premier hackathon organisé par l’ENSAE et Microsoft sur les données de la Croix-Rouge. Enfin, Microsoft sponsorise la seconde édition du Data Science Game (2016).

Les résultats des deux groups vainqueurs du hackathon ont été présentés lors du meet up de DataForGood en janvier 2016.

2016-04-02 Apprendre la programmation

C'est l'histoire de trois français qui montent une école de programmation dans la Silicon Valley. Holberton School, 40% de femmes parmi la première promotion, petite promotion de 32 étudiants, le cursus est gratuit, l'école se rémunère en prenant 17% du salaire sur les trois premières années de chaque étudiant une fois le premier job trouvé. Pas d'examen, apprentissage et évaluation par projet uniquement. Ces Français qui veulent apprendre aux Américains à coder. Dernier point : les mentors. Nombreux, de tous horizons professionnels, et pour la plupart, français.

2016-03-30 Create a video in Python from images

I was looking into making a short video based on images produced with matplotlib or pygame. Here is the results with a simple simulation used once in while in my teachings. Unfortunately, I was not able to directly produce a video I could see through the brower. I needed to convert it with MovieMaker.

And the code...


more...

2016-03-25 Les classes en programmation

Monsieur, c'est vraiment utile les classes ? On est obligé de les utiliser ? C'est le genre de questions que les étudiants posent alors qu'ils commencent leur projet. La réponse courte consiste à répondre que c'est plus pratique. Mais concrètement, ça veut dire quoi plus pratique ? D'une manière générale, on s'embarrasse rarement d'un concept s'il n'apporte rien. On peut écrire les mêmes programmes sans classes mais...


more...

2016-03-22 Accélérer Python

Python est très lent, c'est pratiquement son seul défaut avec le fait qu'il n'est pas vraiment un langage multi-thread à cause du GIL. Bref, pour accélérer le langage, on passe le plus souvent par du C et donc un langage compilé. Le plus simple est d'écrire ses calculs en C puis de s'interfacer avec le langage Python. C'est comme cela que fonctionne la librairie numpy. Une autre option consiste à écrire en pseudo langage C avec Cython. C'est l'option choisie par scikit-learn. Mais on ne réécrit pas tout, on utilise un profileur qui nous indique où le programme perd le plus de temps et on travaille spécifiquement sur cette partie. Et si on ne veut pas réécrire du code, on peut penser à changer d'interpréteur afin que le même code python soit exécuté plus rapidement. Sur ce point, il faut lire Les interpréteurs alternatifs de python. Une caractéristique des langages compilés (et non interprétés) et que les variables sont déclarées avec un type précis.

def addition(x, y):
    return x + y

La fonction précédente fonctionnera si l'addition de x et y au moment de l'exécution si cette addition à un sens ce qui ne requiert pas que ces deux variables soient du même type.

double addition(double x, double y) {
    return x + y;
}

En C, on est obligé de spécifier le type car on ne peut donner un sens au symbol + que si le type des variables est connu. Compiler le langage Python implique alors de faire de l'inférence de type... ce qu'il est parfois impossible d'accomplir à moins d'exécuter le programme. On se tourne alors vers les JIT qui propose de compiler certaines parties d'un programme en partant du code interprété lors de l'exécution.

2016-03-19 A few interesting links about Python

A few links about regular expressions, machine learning, automation:

The last page gives a list of python modules about machine learning. Among mlxtend has a really nice and detailed documentation. It includes formulas.

2016-03-13 Ranking python modules

I was puzzled was a new badge on matplotlib about Depsy. A link to dill on depsy, a link on the same module on pypi-ranking: dill. I checked pythonnet. The number of contributors is actually wrong and it is difficult to see when the last contribution was made which is one the first thing I look at before using a new module.

2016-03-03 Puzzle, Rubik's, Gaming

Here are a few link on the Rubik's cube. It started with an article on French MOOCs: French MOOC: Résoudre un Rubik’s cube grâce aux mathématiques. And I followed some links:

Lectures about how to program in Python, how to create a game: Program Arcade Games With Python And Pygame.

2016-02-28 Python 2.7 and Python 3, difference with multiple inheritance

There is a little difference in the way Python 3 and Python 2.7 handles multiple inheritance. Class Cl inherits from ClA and ClB. ClA defines method1, ClB defines suffix. The question is: Does method method1 from class ClA know about method suffix from class ClB? In Python 3, it does:

class C0:
    def suffix(self):
        raise NotImplementedError()

class ClA(C0):
    def method1(self):
        return "A.method1" + self.suffix()
        
class ClB(C0):
    def suffix(self):
        return "--B"
        
class Cl(ClA, ClB):
    pass

cl = Cl()
print(cl.method1())

[1]

A.method1--B

In Python 2.7?


more...

2016-02-26 Don't mix return and yield

When a function uses the keyword yield, it becomes a generator. A second function can accept this generator and produce another one as follows.

def generator(seq):
    for v in range(0,3):
        yield v+1
        
def generator2(gen):
    for r in gen:
        yield r

for v in generator2(generator(3)):
    print(v)

[1]

1
2
3

This is not the only way to write this function. Python 3.5 has introduction keyword yield from.


more...
<-- -->

Xavier Dupré