.. blogpost:: :title: Année 2022, séance 1 :keywords: python :date: 2022-01-10 :categories: plan Séance découpée en trois parties. **Partie I : installation et premier pas** Installation * Choix d'une version : 3.8 ou 3.9, (3.10 est sortie trop récemment) * Solution simple : `Anaconda `_ * `Python `_ Système de Package * `Anaconda repo `_ * `PyPI `_ Les packages à avoir pour faire de la datascience * :epkg:`numpy`, :epkg:`scipy` : calcul matriciel * :epkg:`pandas` : tables de données * :epkg:`matplotlib` : calcul matriciel * :epkg:`jupyter` : notebooks ou `spyder `_ * :epkg:`scikit-learn` : machine learning Installer un package * avec `conda `_ * avec `pip `_ Package pure python ? (`Unofficial Windows Binaries for Python Extension Packages `_) Un peu plus sur les notebooks * `Notebook Jupyter `_ `Les premiers pas `_ * fonction ``print`` * variables : int, float, str, tuple, list, set, dict * boucle : for, while * tests : if, else (voir aussi `PEP 636 -- Structural Pattern Matching: Tutorial `_) Que fait le programme suivant ? .. runpython:: :showcode: :toggle: out res = [[1]] for i in range(1, 10): row = [1] for j in range(1, i): n = sum(res[-1][j-1: j+1]) row.append(n) row.append(1) res.append(row) import pprint pprint.pprint(res) **Partie II : fonction, notion de coût** Les fonctions * fonctions : def .. runpython:: :showcode: :toggle: out import cProfile nombres = [9, 7, 5, 4, 6, 7, 3, 1, 7, 8] def moyenne(ens): return sum(ens) / len(ens) def ecarttype(ens): var = [(n - moyenne(ens)) ** 2 for n in ens] return (sum(var) / len(var)) ** 0.5 print(moyenne(nombres)) print(ecarttype(nombres)) with cProfile.Profile() as pr: for n in range(100000): ecarttype(nombres) pr.print_stats() * coût d'un algorithme * notation ``with`` **Exercice :** calculer le nombre de caractères différents entre deux chaînes de caractères. **Partie III : dictionnaires** Tout d'abord une source d'erreur fréquente .. runpython:: :showcode: :toggle: out def bizarre(ensemble): # premier zero ensemble.append(0) for i in range(len(ensemble)): if ensemble[i] == 0: return i res = [1, 4, 5] print("bizarre=", bizarre(res)) print("res=", res) Dictionnaires * on ne peut plus s'en passer * dictionnaires : compter les éléments * `Python, constructions classiques `_ **Exercice :** compter les paires de lettres consécutives dans un texte. **Digressions de fin de session** * fichiers * expressions régulières * :epkg:`git` **Exercice pour la prochaine fois** * installer un package * mettre à jour un package * réfléchir au problème suivant Un base de données contient une variable catégorielle. Malheureusement, elle est renseignée de façon imparfaite car elle contient des erreurs de syntaxe. Exemple : ``['comptabilité', 'datascience', 'data science', 'pilote', 'pilotage', 'auteur', 'autrice', ...]``. Que peut-on faire pour nettoyer cette variable ?