# SUMMER WORK ## Python basique ## sous tritre ### Exercice : listes, chaines de caractères, exceptions #### Sujet :::info Dans cet exercice vous devez créer une fonction `mySplit` qui coupe une chaine de charactères suivant plusieurs délimiteur: - ";" -> point-virgule - " " -> espace ::: #### Valeur de retour :::success La fonction renvoit une liste où chaque élément de celle-ci contient les segments de la phrase ::: #### Gestion d'erreur :::danger Vous devez rise une exeption si l'input n'est pas une STRING ::: #### Exemples ```p input = "Ceci est un test;coucou" output = [] output = mySplit(input) print(output) ``` ```python= ['Ceci', 'est', 'un', 'test', 'coucou'] ``` ### Exercice #### Sujet :::info Le but de l'exercice est dans le premier temps de télécharger un jeu de donnée open-source sur les resultats européennes et réaliser quelques fonctions simples associés ::: :::info URL: https://www.data.gouv.fr/fr/datasets/r/9fd021e0-57df-4e1a-a965-47668ef2b941 ::: #### Valeur de retour :::success Vous devez créer une class `EuropeanElection` qui contiendra plusieurs méthodes. - EuropeanElection(URL) - Contructeur de la class. Prend en paramètre une URL qui serra stocker dans une variable de class - getDataset() - récupére le dataset des resultats européennes en effectuant une requète GET sur l'URL. Renvoie 0 si OK et -1 si PAS OK - getCounties() - renvoie une liste des régions disponible - getPoliticalCompetitors() - renvoie une liste des differents partis politiques - getResults(County) - renvoie un dictionnaire où chaque clef correspond à un parti politique et chaque valeur au resultat de ce parti politique ::: #### Gestion d'erreur :::danger Vous devez gérer deux cas: - si vous n'avez pas internet (la requete ne fonctionne donc pas) - si l'URL est fausse ::: #### Exemples ```p URL = "https://www.data.gouv.fr/fr/datasets/r/9fd021e0-57df-4e1a-a965-47668ef2b941" election2019 = EuropeanElection(URL) if election2019.getDataset() == -1 : print("Can't get dataset") sys.exit(1) election2019.getCounties() election2019.getPoliticalCompetitors() election2019.getResults("Auvergne-Rhône-Alpes")["PARTI PIRATE"] ``` ```python= # election2019.getCounties() ["Grand Est", "Nouvelle-Aquitaine", "Auvergne-Rhône-Alpes", "Bourgogne-Franche-Comté", "Bretagne", "Centre-Val de Loire", "Île-de-France", "Occitanie", "Hauts-de-France", "Normandie", "Pays de la Loire", "Provence-Alpes-Côte d'Azur", "Corse", "Guadeloupe", "Martinique", "Guyane", "La Réunion", "Mayotte"] # 2019_election.getPoliticalCompetitors() ["LA FRANCE INSOUMISE", "UNE FRANCE ROYALE", "LA LIGNE CLAIRE", "PARTI PIRATE", "RENAISSANCE", "DÉMOCRATIE REPRÉSENTATIVE", "ENSEMBLE PATRIOTES", "PACE", "URGENCE ÉCOLOGIE", "LISTE DE LA RECONQUÊTE", "LES EUROPÉENS", "ENVIE D'EUROPE", "PARTI FED. EUROPÉEN", "INITIATIVE CITOYENNE", "DEBOUT LA FRANCE", "ALLONS ENFANTS", "DÉCROISSANCE 2019", "LUTTE OUVRIÈRE", "POUR L'EUROPE DES GENS", "ENSEMBLE POUR LE FREXIT", "LISTE CITOYENNE", "À VOIX ÉGALES", "PRENEZ LE POUVOIR", "NEUTRE ET ACTIF", "RÉVOLUTIONNAIRE", "ESPERANTO", "ÉVOLUTION CITOYENNE", "ALLIANCE JAUNE", "UNION DROITE-CENTRE", "EUROPE ÉCOLOGIE", "PARTI ANIMALISTE", "LES OUBLIES DE L'EUROPE", "UDLEF", "EUROPE AU SERVICE PEUPLES"] # 2019_election.getResults("Auvergne-Rhône-Alpes")["PARTI PIRATE"] 0,07 # % Voix/Ins ``` ### Exercice : classe, API, requests, Pandas, Matplotlib, CSV, mock #### Sujet :::info Créer une classe Python pour interroger l'API de RTE pour récupérer les données de production électrique de la région Auvergne/Rhône-Alpes. Intégrer les données dans un dataframe Pandas et afficher la courbe de production d'électricité hydraulique pour l'année 2018 URL : https://opendata.reseaux-energies.fr/explore/dataset/eco2mix-regional-cons-def/information/ ::: #### Valeur de retour :::success Fichier CSV de la production d'électricité hydraulique pour l'année 2018 en région Auvergne/Rhône-Alpes (Noms des colonnes : date, puissance) Fichier PNG pour le graphique issu de matplotlib ::: #### Gestion d'erreur :::danger Gérer le cas où la connexion à l'API ne fonctionne pas. Faire un mock pour simuler le comportement de l'API ::: #### Exemples |date|puissance(MW)| |---|---| |01/01/18 12:00|2931| ### Exercice : Azure, serverless, scraping, Flask, API, base de données #### Sujet :::info Créer une fonction Azure (Function App) qui renvoie l'horoscope d'une personne dont la date de naissance a été fournie en input. Créer une API avec Flask qui renvoie l'horoscope d'un apprenant (réutiliser les données du début de la formation). La donnée d'entrée de l'API est le prénom de l'apprenant. L'API doit s'appuyer sur une base de données SQL et doit être déployée sur Heroku. ::: #### Valeur de retour :::success URL de la fonction Azure qui prend en entrée une date de naissance URL du site scrapé pour récupérer l'horoscope Fichier SQL pour créer la base de données URL de l'API sur Heroku ::: #### Gestion d'erreur :::danger Vérifier que le format de la date de naissance est correct Autoriser des erreurs de frappes sur le prénom des apprenants ::: ### Exercice : API SNCF #### Sujet :::info Le but du projet est simple à comprendre et utile: - Vous devez vous inscrire pour avoir accès à l'API de la SNCF (c'est rapide): https://www.digital.sncf.com/startup/api - Vous devez réaliser une fonction qui prend en argument une gare et récupère les trains qui sont entrain d'arriver (H + 15 min) et une autre pour ceux qui partent - Une fois que ces deux fonctions sont fonctionnelles sur votre en local, créer un serveur `Flask` qui permet de selectionner la gare et de visualiser les résultats depuis un navigateur internet - Déployer le serveur sur Heroku afin de permettre à tous d'y accéder facilement ::: #### Gestion d'erreur :::danger Vous devez gérer si l'utilisateur demande une gare qui n'existe pas. ::: #### Exemple ```python= getArrivalTrains("Perrache") ``` ``` Macon - Valence - (Pierrelatte) Arrivé : 15h38 Valence-Ville vers Macon-Ville (Train TER) Arrivé : 16h45 ``` ### Exercice : Docker #### Sujet :::info Mettre en place un Dockerfile (voir un Docker Compose si necessaire) pour l'ensemble des exercices précédents. Dans le cas où l'exercice est de réaliser une class, ajouter un `main` de test à l'instar des exemples donnés :::
{"metaMigratedAt":"2023-06-14T23:09:40.284Z","metaMigratedFrom":"Content","title":"SUMMER WORK","breaks":true,"contributors":"[{\"id\":\"20c8263a-7945-469c-8fe7-e578a980558b\",\"add\":6321,\"del\":1547},{\"id\":null,\"add\":1584,\"del\":47}]"}
    263 views