Formation Python : Algorithmes et Projets
Formation Python : Algorithmes et Projets
Happy CodersAcademy
PYTHON & Algorithme
1. Développement d’algorithme ‘Greedy approach’
2. Développement d’algorithme ‘Divide-and-Conquer’
3. La programmation dynamique 'Dynamic Programming'
4. Backtracking
5. Modules classiques sur Python et modules personnalisés
6. Les interfaces graphique Sur Python
7. Base de données et Python ‘MySQL’
8. Traitement et visualisation de données
9. Projets
Python & traitement de données - 2ème session
J1 J2 J3 J4 J5
Formation Code/Pédagogie Formation Code Formation Code Atelier projet 'Partie I' Atelier projet
* Développement d'algorithme * Découverte et manipulation des * Traitement et visualisation de * Projets encadré : * Projets fin de formation
glouton 'Greedy Approach' différents Modules et librairies sur données avec le module Pandas : - Analyse des données financières :
* Développement d'algorithme Python : 1. Séries. développer les compétences 1. Méthodologie de travail
'Divide-and-Conquer' 1. Module Standards (Math, time, 2. DataFrame. d'analyse de données financières afin 2. Choix des projets
* Résolution d'un problème Random et Turtle, numpy...) * Oraganisation des données par la de résoudre les divers problèmes 3. Elaboration et présentation du cahier
d'opimisation par la méthode 2. Module pesonnalisés. technqiue 'Tidy Data' sociaux du monde réel. des charges
algorithmique Programmation * Time Series Data 4. Développement du projet
dynamique 'Dynamic Programming'. Unit 34 Unit 39 5. Test, vérification et Validation
* Développement de la technique From unit 35 to unit 38 6. Présentation des projets.
algorithmique Le retour sur trace * Découverte Interface graphique (IHM) Atelier projet 'Partie II'
'Backtracking'. sur Python (Tkinter) Formation Créativité * Projets encadré :
* Manipulation et opérations sur les * Développement d'un mini-projet - Etude, Analyse et visualisation des Quiz Global et feedbacks
matrices. (III). données relatives à la pandémie
From unit 30 to unit 33 * Manipulation et administration des mondiale de Corona
base de données 'MySql'
Formation Créativité Unit 40
* Exercices et Challenge avancés
(Situations réelles) Formation Créativité
* Développement d'un mini-projet (II)
1. Développement d’algorithme ‘Greedy approach’ :
Dans cette partie, nous allons aborder la notion d'optimisation d'un problème.
Un problème d'optimisation est un problème pour lequel on cherche la meilleure solution (selon un critère défini)
dans un ensemble de solutions possibles.
Note :
On parle de solution optimale toute une solution qui fait partie des solutions possibles et qui est la meilleure des
solutions selon le critère défini.
1. Développement d’algorithme ‘Greedy approach’ :
Les algorithmes gloutons ‘Greedy approach’ sont souvent utilisés pour résoudre ces problèmes d'optimisation . On cherche une
solution optimale en effectuant le meilleur choix possible à chaque étape de l'algorithme. Dans ce type de résolution, il n'y a pas de retour en
arrière. Lorsqu'un choix est fait, il n'est pas modifié par la suite. On se retrouve donc à chaque étape, avec un problème de plus en plus petit à
résoudre.
Attention toutefois, cette méthode ne fournit pas systématiquement la solution optimale au problème proposé.
• Pour un rendu de monnaie, le critère pour la solution optimale sera le nombre de pièces et/ou billets.
• Pour un parcours de lieux, le critère peut être le nombre de lieux ou la distance parcourue (minimale, maximale).
• Pour un système de réservation, le critère peut être le nombre de réservations ou la durée de réservation.
• Etc.
1. Développement d’algorithme ‘Greedy approach’ :
Bilan
Un algorithme glouton consiste à effectuer des choix "locaux" (dans le cas du rendu de monnaie : rendre la plus grande valeur possible),
choix qui ne seront plus jamais remis en cause mais qui permettent de réduire le problème à un problème plus "simple" (dans le cas du rendu de
monnaie : rendre la somme diminuée de la valeur maximale)
Les algorithmes gloutons constituent une méthode algorithmique, parmi d'autres, pour résoudre des problèmes, en particulier
d'optimisation.
Lorsqu'un algorithme glouton permet d'obtenir une solution, celle-ci n'est pas forcément la solution optimale au problème.
Un algorithme glouton peut ne trouver aucune solution bien que des solutions existent.
2. Développement d’algorithme ‘Divide-and-Conquer’ :
Le diviser pour régner est une méthode algorithmique basée sur le principe suivant :
On prend un problème (généralement complexe à résoudre), on divise ce problème en une multitude de petits problèmes, l'idée
étant que les "petits problèmes" seront plus simples à résoudre que le problème original. Une fois les petits problèmes résolus, on
recombine les "petits problèmes résolus" afin d'obtenir la solution du problème de départ.
Le paradigme "diviser pour régner" repose donc sur 3 étapes :
• DIVISER : le problème d'origine est divisé en un certain nombre de sous-problèmes
• RÉGNER : on résout les sous-problèmes (les sous-problèmes sont plus faciles à résoudre que le problème d'origine)
• COMBINER : les solutions des sous-problèmes sont combinées afin d'obtenir la solution du problème d'origine.
Les algorithmes basés sur le paradigme "diviser pour régner" sont très souvent des algorithmes récursifs.
Nous avons étudié un de ces algorithmes basés sur le principe diviser pour régner : le tri-fusion
2. Développement d’algorithme ‘Divide-and-Conquer’ :
Nous allons étudier un problème d'optimisation classique : le problème du rendu de monnaie de manière optimale. On cherche à rendre la
monnaie avec un nombre minimal de pièces et billets.
Étant donné une structure triangulaire de nombres, trouvez la somme minimale du chemin de haut en bas.
À chaque étape, vous pouvez vous déplacer vers des numéros adjacents sur la ligne ci-dessous.
2. Développement d’algorithme ‘Divide-and-Conquer’ :
Traverser l’approche naïve en parcourant tous les chemins possibles. Mais, cela coûte cher. Il y a deux manières d’atteindre la solution :
1 - La Mémorisation.
2 - De bas en haut : Commencez à partir des nœuds de la rangée du bas ; la somme de chemin min pour ces nœuds sont les valeurs des
nœuds eux-mêmes. Et après cela, la somme de chemin minimale au ième nœud de la kème ligne serait le minimum de la somme de chemin de ses
deux enfants + la valeur du nœud, c’est-à-dire :
2. Développement d’algorithme ‘Divide-and-Conquer’ :
triangle = [
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
minimum = find_minimum(0, 0, triangle)
print("The minimum cost is : ", minimum)
3. La programmation dynamique 'Dynamic Programming' :
Le triangle de Pascal :
Principe
En mathématiques, le triangle de Pascal est une présentation des coefficients binomiaux dans un triangle. Il fut nommé ainsi en
l’honneur du mathématicien français Blaise Pascal. Il est connu sous l’appellation « triangle de Pascal » en Occident, bien qu’il fût étudié par
d’autres mathématiciens, parfois plusieurs siècles avant lui.
3. La programmation dynamique 'Dynamic Programming' :
def pascal_recur(n,p):
if p==0:return 1
if p>n:
return 0
else:
return pascal_recur(n-1,p) + pascal_recur(n-1,p-1)
def pascal(n):
T = [[0] * (n+1) for p in range(n+1)]
for n in range(n+1):
for k in range(n+1):
T[n][k] = pascal_recur(n,k)
return T
3. La programmation dynamique 'Dynamic Programming' :
def trianglePascal(n):
T = [[0] * (n+1) for p in range(n+1)]
for n in range(n+1):
if n == 0:
T[n][0] = 1
else:
for k in range(n+1):
if k == 0:
T[n][0] = 1
else:
T[n][k] = T[n-1][k-1] + T[n-1][k]
return T
4. Backtracking :
Le retour sur trace (appelé aussi backtracking en anglais) est un algorithme qui consiste à revenir légèrement en
arrière sur des décisions prises afin de sortir d'un blocage. La méthode des essais et erreurs constitue un exemple simple de
backtracking. Le terme est surtout utilisé en programmation, où il désigne une stratégie pour trouver des solutions à des
problèmes de satisfaction de contraintes.
La résolution d’un problème par la méthode de backtracking repose sur la construction d’une solution partielle que
l’on va améliorer afin de s’approcher de plus en plus de la solution finale. Si une solution partielle ne peut pas être
améliorée, elle est abandonnée et l’on revient en arrière pour examiner d’autres solutions possibles.
4. Backtracking :
PRINCIPE
Dans l’utilisation du backtracking pour résoudre un problème particulier, nous avons besoin de deux choses :
✓ Une procédure pour examiner une solution partielle (notée SP par la suite) afin de déterminer si :
• Il s’agit d’une solution actuelle ACCEPTABLE.
• Il s’agit d’une solution actuelle à ABANDONNER (elle ne respecte pas la règle du jeu).
• Il faut poursuivre L’EXTENSION de la solution actuelle.
✓ Une procédure pour ETENDRE la SP, générant une ou plusieurs solutions qui se rapprochent de la solution finale.
Dans un algorithme de backtraking, on explore toutes les solutions possibles, quand une solution possible se termine
en impasse, on revient en arrière et on teste d’autres solutions.
4. Backtracking :
Dans ce problème, il est assez facile d’examiner une SP : Si deux reines s’attaquent, il faut la rejeter. Si les huit quatre
ne s’attaquent pas, on l’accepte. Autrement, on continue la procédure.
4. Backtracking :
On suit la même méthode, et on place les reines dans les bonnes cases jusqu’on trouve la bonne
solution. La figure ci-contre présente une solution particulière.
L'arbre de l'espace de recherche du problème des N-Queens peut être dessiné comme suit :
4. Backtracking :
Comme nous ne placerons les reines que dans des rangées différentes,
nous pouvons alors éviter le chevauchement des reines.
Afin de vérifier si les deux reines existent dans la même colonne, il
faut vérifier la situation suivante.
Afin de déterminer si les deux reines peuvent exister en diagonale, il
faut vérifier la valeur absolue de la différence entre les rangées et les
colonnes comme suit.
4. Backtracking :
L'implémentation de la solution :
Étant donné une liste de colonnes et l'indice i comme paramètres d'entrée, vérifiez si la i-ième colonne est
prometteuse.
La ligne sur laquelle la reine est déjà placée est la branche 0 à i - 1, elle parcourt donc la boucle for de 0 à I – 1
Pour chaque indice k, on vérifie s'il y a déjà différentes reines dans la même colonne, ou s'il y a différentes reines sur la
diagonale.
S'il y a une reine dans la même colonne ou dans sa diagonale, on retourne False. Sinon, on retourne Vrai.
4. Backtracking :
L'implémentation de la solution :
Après avoir reçu la valeur de N comme entrée de l'utilisateur, la liste col initialise la i-ème ligne à -1, et les éléments de
la liste à -1 est donnée comme valeur de paramètre, puis on exécute la fonction n_queens().
4. Backtracking :
5. Modules classiques sur Python et modules personnalisés :
On appelle “module” tout fichier constitué de code Python (c’est-à-dire tout fichier avec l’extension .py) importé
dans un autre fichier ou script.
Les modules permettent la séparation et donc une meilleure organisation du code. En effet, il est courant dans un
projet de découper son code en différents fichiers qui vont contenir des parties cohérentes du programme final pour
faciliter la compréhension générale du code, la maintenance et le travail d’équipe si on travaille à plusieurs sur le projet.
En Python, on peut distinguer trois grandes catégories de module en les classant selon leur éditeur :
• Les modules standards qui ne font pas partie du langage mais sont intégrés automatiquement par Python ;
• Les modules développés par des développeurs externes qu’on va pouvoir utiliser ;
• Les modules qu’on va développer nous mêmes.
5. Modules classiques sur Python et modules personnalisés :
Pour installer les modules qui ne sont pas intégrés de base à Python, il faut commencer pour ouvrir
votre console. Attention, nous ne parlons pas ici de la console Python mais bien de celle de votre système lui-
même.
Pour installer un module, il suffit maintenant d'utiliser : pip install nom_du_module
Un programme Python va généralement être composé d’un script principal qui va importer différents
modules (c’est-à-dire différents fichiers Python) pour pouvoir les utiliser.
Pour importer un module, on utilise la syntaxe import nom-de-mon-module. Pour utiliser les éléments
du module dans notre script, il faudra préfixer le nom de ces éléments par le nom du module et un point.
Cela permet d’éviter les conflits dans le cas où on aurait défini des éléments avec le même nom que ceux
disponibles dans le module.
Parfois, nous n’aurons besoin que de certains éléments précis dans un module. On va alors pouvoir se
contenter d’importer ces éléments en particulier. Pou cela, on va utiliser l’instruction : from nom-du-module
import un-element.
5. Modules classiques sur Python et modules personnalisés :
Remarque :
La première fois qu'un module est importé, Python crée un répertoire nommé __pycache__ contenant un fichier avec
une extension .pyc qui contient le bytecode, c'est-à-dire le code précompilé du module.
6. Les interfaces graphique Sur Python :
Tkinter est un module de base intégré dans Python. L'un des avantages de Tkinter est sa portabilité sur les OS les plus
utilisés par le grand public. Tkinter est installé par défaut.
Pour créer un logiciel graphique vous devez ajouter dans une fenêtre des éléments graphiques que l'on nomme
widget. Ce widget peut être tout aussi bien une liste déroulante que du texte.
l'utilisateur. Dans l'exemple ci-dessous, on lui propose de texte. Les labels servent souvent à décrire un widget
[Link]()
Voici les alertes possibles:
showinfo(), showwarning(), showerror()
askquestion(), askokcancel(), askyesno()
askretrycancel()
6. Les interfaces graphique Sur Python :
Projet : Jeu de Morpion (Tik Tak Toe)
Réaliser le projet suivant (cf image ci-dessous) :
6. Les interfaces graphique Sur Python :
Projet : Solution du Jeu de Morpion (Tik Tak Toe)
6. Les interfaces graphique Sur Python :
Projet : Solution du Jeu de Morpion (Tik Tak Toe)
6. Les interfaces graphique Sur Python :
Projet : Solution du Jeu de Morpion (Tik Tak Toe)
7. Base de données et Python ‘MySQL’ :
PostgreSQL PostgreSQL est la base de données à utiliser pour les gros projets. Stable et très puissant, il permet de gérer des Gigabytes de données sans problème.
Mysql est l'un des SGBDR les plus utilisés au monde. Il est gratuit et très puissant. Il possède la double licence GPL et propriétaire depuis son rachat par Sun
MySQL Microsystem eux-mêmes rachetés par Oracle (concurrent direct de MySQL). Le logiciel reste cependant entièrement gratuit et libre. Il répond à une logique
client/serveur , c'est à dire que plusieurs clients (ordinateurs distants) peuvent se connecter sur un seul serveur qui héberge les données.
MariaDB Le créateur de MySQL a crée MariaDB suite au rachat de MySQL pour continuer le projet en open source.
SQLite est une bibliothèque écrite en C . SQLite est parfait pour les petits projets. Sa particularité est d'être intégré directement à un programme et ne répond donc
pas à la logique client-serveur. Il est le moteur de base de données le plus distribué au monde puiqu'il est intégré à de nombreux logiciels grand public comme
SQLite
FireFox, Skype, Adobe, etc. Le logiciel pèse moins de 300 ko et peut donc être intégré à des projets tournant sur de petites supports comme les smartphones. Souvent
aucune installation n'est nécessaire pour l'utiliser.
Oracle Oracle Database est sous licence propriétaire, c'est à dire payant. Il est souvent utilisé pour les projets à gros budget nécessitant de réaliser des actions complexes.
Microsoft SQL Server Produit Microsoft ne tourne que sur un OS Windows, payant n'apporte rien de plus que les logiciels concurrents libre de droit. Si vous avez trop d'argent à la limite...
7. Base de données et Python ‘MySQL’ :
SQLite :
Notre premier exemple concernera SQLite.
SQLite a été conçu pour être intégré dans le programme même. Pour des projets plus ambitieux / projets
web le choix de MySQL serait plus judicieux.
SQLite :
fonction fetchone.
[Link]("""SELECT name, age FROM users""")
user1 = [Link]()
print(user1)
7. Base de données et Python ‘MySQL’ :
MySQL:
MySQL est le logiciel idéal pour vos projets.
MySQL:
MySQL:
Python est un langage scientifique très mature. On y trouve des librairies pour de nombreuse applications,
notamment le Machine Learning et l’analyse de data. La visualisation de données est une partie importante pour explorer
nos données et pour communiquer les résultats.
Par exemple, on pourra récupérer des données stockées dans une base et appliquer des méthodes de machine
Learning avant d’exporter les résultats sous forme de fichiers csv pour être utilisés dans une application.
8. Traitement et visualisation de données :
import pandas as pd
On va donc récupérer les données et les stocker dans un DataFrame afin de les transformer. Pour cela, on fait une
requête directement dans la base de données et on remplit un DataFrame avec le résultat.
Pandas fait partie des librairies de base pour la data science en Python. Pandas fournit des structures de données puissantes et simples
à utiliser, ainsi que les moyens d'opérer rapidement des opérations sur ces structures.
Dans ce chapitre, nous verrons l'intérêt de la librairie Pandas, ainsi que les opérations basiques sur l'objet phare de cette librairie, le
dataframe.
DataFrame est très similaire à certains concepts que l'on trouve en dehors du cadre du langage Python. Il est similaire aux tables des
bases des données relationnelles.
Pour installer la bibliothèque, on utilise : pip install pandas
Bibliothèque « Pandas »:
Pandas nous facilite la manipulation des tableaux de tableaux sous forme d’un DataFrame:
class_center.to_csv("[Link]")
Bibliothèque « Matplotlib »:
La variable Fig correspond à un conteneur qui contient tous les objets (axes, labels, données, etc). Les axes correspondent au carré
que l'on voit au-dessus, et qui contiendra par la suite les données du graphe.
Bibliothèque « Matplotlib »:
Dans la vie réelle, les données que nous sommes amenés à analyser sont souvent bruitées, c'est-à-dire qu'il existe une part
d'incertitude sur leur valeur réelle. Il est extrêmement important d'en tenir compte non seulement lors de l'analyse des données, mais aussi
quand on veut les présenter..
Bibliothèque « Matplotlib »:
Données discrètes
Dans le cas de données discrètes (des points), nous utilisons souvent les barres d'erreur pour représenter, pour chaque point,
l'incertitude quant à sa valeur exacte. Souvent la longueur des barres correspond à l'écart type des observations empiriques. C'est chose
aisée avec Matplotlib.
Bibliothèque « Matplotlib »:
Données continues
Parfois, comme quand on essaie
d'appliquer la régression par processus
gaussien, nous avons besoin de représenter
une incertitude sur une fonction continue.
On peut le faire en utilisant la
fonction plot conjointement avec la
fonction fill_between.
Mais nous allons voir plus tard dans
ce chapitre comment le faire plus
simplement avec la librairie Seaborn.
9. Projets :
Nous avons choisi les données financières du marché des états unis, à cause de son grand impact sur l’économie mondiale.
• SPY, il suit l’indice S&P 500.
• IYW, il suit l’indice de bourse des entreprises technologiques américaines.
• VT, il investit dans des entreprises de monde entier.
• DBA, il suit l’offre, la demande et les prix de produits agricoles.
• Taux obligatoire américain TLT.
• PDBC, il suit l’offre et la demande et les prix de matières premières.
• L’or IAU.
9. Projets :
2. Création de dataframe:
• Créez un dataframe pour chaque ticker (SPY, IYW, VT, DBA, TLT, PDBC, IAU).
• Affichez les informations des dataframe créés.
9. Projets :
2. Création de dataframe:
• Pivotez les dataframes sur le closing price « Close ».
• Concaténez les dataframes.
9. Projets :
# Separate the information of the created group by key and print them.
9. Projets :
# Separate the information of the created group by key and print them.
9. Projets :