Collection d’examples

Automatisation

  1. Clone many folders in one row
  2. Collect email addresses from mails in an inbox folder)

Clone many folders in one row

eleves = "project1;project2;..."
root = r"destination"

for el in eleves.split(";"):
    cl = el.lower().replace(".","-")
    fold = os.path.join(root, el)
    if not os.path.exists(fold):
        print("clone", el)
        url = "https://<gitlab>/<group>/{0}.git".format(cl)
        git_clone(  fold, url,user=user,password=password, init=False,fLOG=print)

(entrée originale : git_helper.py:docstring of ensae_teaching_cs.automation_students.git_helper.git_clone, line 32)

Collect email addresses from mails in an inbox folder)

from ensae_teaching_cs.automation_students import grab_addresses
from pymmails import MailBoxImap

user = "xavier.dupre"
pwd = "***"
server = "imap.gmail.com"
mailfolder = ["ensae/ENSAE_2016", "ensae/ensae_interro_2015"]
date = "1-Dec-2015"

box = MailBoxImap(user, pwd, server, ssl=True, fLOG=fLOG)
box.login()
emails = grab_addresses(box, mailfolder, date, fLOG=fLOG)
box.logout()

(entrée originale : mail_helper.py:docstring of ensae_teaching_cs.automation_students.mail_helper.grab_addresses, line 13)

Computer Science, Machine Learning

  1. DictVectorizer or CategoriesToIntegers

DictVectorizer or CategoriesToIntegers

Example which transforms text into integers:

>>>

import pandas
from ensae_teaching_cs.ml import CategoriesToIntegers
df = pandas.DataFrame([{"cat": "a"}, {"cat": "b"}])
trans = CategoriesToIntegers()
trans.fit(df)
newdf = trans.transform(df)
print(newdf)

Sortie

       cat=a  cat=b
    0    1.0    NaN
    1    NaN    1.0

(entrée originale : categories_to_integers.py:docstring of ensae_teaching_cs.ml.categories_to_integers.CategoriesToIntegers, line 9)

  1. algorithme de Arrow-Hurwicz
  2. opérations avec numpy.matrix
  3. solver.cp de cvxopt

algorithme de Arrow-Hurwicz

On résoud le problème suivant avec l’algorithme de Arrow-Hurwicz.

\left\{ \begin{array}{l} \min_{x,y} \left \{ x^2 + y^2 - xy + y \right \}  \\ sous \; contrainte \; x + 2y = 1 \end{array}\right.

Qui s’implémente à l’aide de la fonction suivante :

import random
from ensae_teaching_cs.td_1a.optimisation_contrainte import Arrow_Hurwicz

def f_df(X) :
    x,y = X
    f = x**2 + y**2 - x*y + y
    d = [ x*2 - y, y*2 - x + 1  ]
    return f, d

def contrainte(X) :
    x,y = X
    f = x+2*y-1
    d = [ 1,2]
    return f, d

X0  = [ random.random(),random.random() ]
p0  = random.random()
sol = Arrow_Hurwicz(f_df, contrainte, X0, p0, do_print=False)

(entrée originale : optimisation_contrainte.py:docstring of ensae_teaching_cs.td_1a.optimisation_contrainte.exercice_particulier2, line 1)

opérations avec numpy.matrix

Voici quelques écritures classiques avec le module numpy.

import numpy as np
mat = np.matrix ( [[1,2],[3,4]] ) # crée une matrice 2*2
s   = mat.shape           # égale à (nombre de lignes, nombre de colonnes)
l   = mat [0,:]           # retourne la première ligne
c   = mat [:,0]           # retourne la première colonne
iv  = mat.I               # inverse la matrice
mat [:,0] = mat [:,1]     # la première ligne est égale à la seconde
o   = np.ones ( (10,10) ) # crée un matrice de 1 10x10
d   = np.diag (mat)       # extrait la diagonale d'une matrice
dd  = np.matrix (d)       # transforme d en matrice
t   = mat.transpose ()    # obtient la transposée
e   = mat [0,0]           # obtient de première élément
k   = mat * mat           # produit matriciel
k   = mat @ mat           # produit matriciel à partir de Python 3.5
m   = mat * 4             # multiplie la matrice par 4
mx  = np.max (mat [0,:])  # obtient le maximum de la première ligne
s   = np.sum (mat [0,:])  # somme de la première ligne


mat = np.diagflat(np.ones((1,4)))
print(mat)  # matrice diagonale
t   =  mat == 0
print(t)    # matrice de booléens
mat [ mat == 0 ] = 4
print(mat)  # ...
print(iv)   # ...

(entrée originale : numpys.py:docstring of ensae_teaching_cs.td_1a.numpys.numpy_matrix2list, line 6)

solver.cp de cvxopt

On résoud le problème suivant avec cvxopt :

\left\{ \begin{array}{l} \min_{x,y} \left \{ x^2 + y^2 - xy + y \right \}  \\ sous \; contrainte \; x + 2y = 1 \end{array}\right.

Qui s’implémente à l’aide de la fonction suivante :

def f_df_H(x=None,z=None) :
    if x is None :
        # cas 1
        x0 = matrix ( [[ random.random(), random.random() ]])
        return 0,x0
    f = x[0]**2 + x[1]**2 - x[0]*x[1] + x[1]
    d = matrix ( [ x[0]*2 - x[1], x[1]*2 - x[0] + 1 ] ).T
    h = matrix ( [ [ 2.0, -1.0], [-1.0, 2.0] ])
    if z is None:
        # cas 2
        return  f, d
    else :
        # cas 3
        return f, d, h

solvers.options['show_progress'] = False
A = matrix([ [ 1.0, 2.0 ] ]).trans()
b = matrix ( [[ 1.0] ] )
sol = solvers.cp ( f_df_H, A = A, b = b)

(entrée originale : optimisation_contrainte.py:docstring of ensae_teaching_cs.td_1a.optimisation_contrainte.exercice_particulier1, line 1)

  1. Enregistrer plusieurs DataFrame dans un seul fichier Excel ?

Enregistrer plusieurs DataFrame dans un seul fichier Excel ?

Le code suivant enregistre deux DataFrame dans un seul fichier Excel.

import pandas
writer = pandas.ExcelWriter('example.xlsx')
df1.to_excel(writer, 'Data 0')
df2.to_excel(writer, 'Data 1')
write.save()

Ou en utilisant cette fonction :

dfs2excel( { 'Data 0':df1, 'Data 1':df2 }, "example.xlsx" )

(entrée originale : session_pandas.py:docstring of ensae_teaching_cs.td_2a.session_pandas.dfs2excel, line 7)

Geek

  1. Convertir le notebook en cours au format HTML
  2. Utiliser R depuis un notebook
  3. Utiliser une DLL implémentée en C#

Convertir le notebook en cours au format HTML

C’est l’objet du notebook 2A.soft - Convert a notebook into a document.

(entrée originale : faq_jupyter.py:docstring of ensae_teaching_cs.faq.faq_jupyter.jupyter_convert_notebooks, line 1)

Utiliser R depuis un notebook

C’est l’objet des deux notebooks td2acenoncesession2brst et la correction.

(entrée originale : faq_jupyter.py:docstring of ensae_teaching_cs.faq.faq_jupyter.r_and_notebook, line 4)

Utiliser une DLL implémentée en C#

Le code de la DLL est le suivant. Il a été compilé sous forme de DLL.

namespace ENSAE.Voice
{
    public static class Speech
    {
        public static void VocalSynthesis(string text, string culture, string filename, string voice)
        {
            SpeechSynthesizer synth = new SpeechSynthesizer();

            synth.SelectVoiceByHints(VoiceGender.Neutral, VoiceAge.NotSet, 1, new CultureInfo(culture));

            if (!string.IsNullOrEmpty(filename))
                synth.SetOutputToWaveFile(filename);
            if (!string.IsNullOrEmpty(voice))
                synth.SelectVoice(voice);

            synth.Speak(text);
        }
    }
}

Pour l’utiliser, il faut utiliser l’instruction :

from ensae_teaching_cs.pythonnet import clr
from clr import AddReference
AddReference("ENSAE.Voice")

Si le programme répond qu’il ne trouve pas le fichier, il suffit d’inclure de la répertoire où se trouve la DLL dans la liste sys.path. Ensuite on écrit simplement :

from ENSAE.Voice import Speech
Speech.VocalSynthesis(text, lang, voice, filename)

Il faut voir le notebook 2A.soft - Python et C Sharp.

(entrée originale : __init__.py:docstring of ensae_teaching_cs.pythonnet.vocal_synthesis, line 8)