Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sian:2022:tpm1sql [2022/10/21 11:41] – [En python] fabien.rico | sian:2022:tpm1sql [2022/11/24 22:17] (Version actuelle) – [En python] fabien.rico | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== TP introduction SQL ====== | ====== TP introduction SQL ====== | ||
- | Vous pouvez utiliser le serveur [[https:// | + | Vous pouvez utiliser le serveur [[http:// |
Ligne 14: | Ligne 14: | ||
+ | < | ||
+ | < | ||
+ | # Listez le titre de toutes les catégories | ||
+ | SELECT categories.title FROM categories WHERE 1; | ||
+ | # Listez les catégories qui sont des sujets ? Combien y en a-t-il ? | ||
+ | SELECT categories.title AS titre FROM categories WHERE genre=' | ||
+ | # Listez les sujets qui contiennent le mot science (On ne tiens plus compte de la casse). | ||
+ | SELECT categories.title AS titre FROM categories WHERE genre=' | ||
+ | </ | ||
+ | </ | ||
===== Requêtes avec jointure ===== | ===== Requêtes avec jointure ===== | ||
Ligne 21: | Ligne 31: | ||
* Trouvez les cours qui ont lieu après octobre 2022 | * Trouvez les cours qui ont lieu après octobre 2022 | ||
* Trouvez les cours qui ont lieu après octobre 2022 et parlent de données ou de mathématiques | * Trouvez les cours qui ont lieu après octobre 2022 et parlent de données ou de mathématiques | ||
+ | |||
+ | < | ||
+ | < | ||
+ | ############################################### | ||
+ | # Trouvez la date de début de tous les cours. | ||
+ | ############################################### | ||
+ | SELECT courses.title, | ||
+ | FROM courses, courses_runs | ||
+ | WHERE courses.id=courses_runs.id_course; | ||
+ | # meme chose avec un join | ||
+ | SELECT courses.title, | ||
+ | FROM courses JOIN courses_runs ON courses.id=courses_runs.id_course | ||
+ | WHERE 1; | ||
+ | |||
+ | ######################################################## | ||
+ | # Trouvez les cours qui ont lieu après octobre 2022 | ||
+ | ######################################################## | ||
+ | |||
+ | ######################################################## | ||
+ | # Trouvez les cours qui ont lieu après octobre 2022 et parlent de données | ||
+ | ######################################################## | ||
+ | </ | ||
+ | </ | ||
===== Requête plus complexes ===== | ===== Requête plus complexes ===== | ||
* Trouvez tous les mots clefs utilisés par chacun des cours de science en n' | * Trouvez tous les mots clefs utilisés par chacun des cours de science en n' | ||
+ | * On cherche à obtenir une liste avec chaque mots clef utilisé par toutes les organisations avec l' | ||
- | + | Pour vous aider: | |
- | On cherche à obtenir une liste avec chaque mots clef utilisé par toutes les organisations avec l' | + | - Un mot clef est une catégorie de genre '' |
- | * Faites la requête | + | |
- | Rappel: | + | |
- | - Un mot clef est une catégorie de genre '' | + | |
- Les catégories sont liées aux cours qui sont liées au organisations. | - Les catégories sont liées aux cours qui sont liées au organisations. | ||
+ | - On peut considérer qu'un cours est un cours de science si son titre ou son introduction contiennent le mot '' | ||
+ | < | ||
+ | < | ||
+ | ################################################## | ||
+ | # * Trouvez tous les mots clefs utilisés par chacun des cours de science en # | ||
+ | ################################################## | ||
+ | SELECT categories.title AS motClef, courses.title AS titrecours | ||
+ | FROM courses JOIN courses_categories | ||
+ | ON courses_categories.id_course=courses.id | ||
+ | JOIN categories | ||
+ | ON courses_categories.id_categorie=categories.id | ||
+ | WHERE courses.title LIKE ' | ||
+ | OR courses.introduction LIKE ' | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * Faites une requète pour voirs les cours d'une école des mines (école avec mines dans le nom) | ||
+ | |||
+ | < | ||
+ | < | ||
+ | SELECT courses.title AS NomCours, organizations.title AS NomOrga FROM courses | ||
+ | JOIN courses_organizations ON courses.id=courses_organizations.id_course | ||
+ | JOIN organizations ON courses_organizations.id_organization=organizations.id | ||
+ | WHERE organizations.title REGEXP " | ||
+ | </ | ||
+ | </ | ||
===== En python ===== | ===== En python ===== | ||
- | Faire un programme | + | Pour python, vous pouvez utiliser le notebook https:// |
- | ^ Nom organisation ^ liste mot clef ^ | + | * Faire un programme python qui affiche pour chaque |
- | | INSA | ... | | + | |
- | | UCBL | ... | | + | |
+ | < | ||
+ | < | ||
+ | # | ||
+ | # coding: utf-8 | ||
+ | |||
+ | # ## Connexion à la base et curseur | ||
+ | # | ||
+ | |||
+ | # In[1]: | ||
+ | |||
+ | |||
+ | import mysql.connector | ||
+ | import json | ||
+ | |||
+ | conn = mysql.connector.connect( | ||
+ | host=" | ||
+ | user=" | ||
+ | password=" | ||
+ | database=" | ||
+ | cursor = conn.cursor() | ||
+ | |||
+ | |||
+ | # ## Éxécution de la requète | ||
+ | |||
+ | # In[2]: | ||
+ | |||
+ | |||
+ | cursor.execute(""" | ||
+ | SELECT categories.title AS motClef, courses.title AS titrecours | ||
+ | FROM courses JOIN courses_categories | ||
+ | ON courses_categories.id_course=courses.id | ||
+ | JOIN categories | ||
+ | ON courses_categories.id_categorie=categories.id | ||
+ | WHERE categories.genre=" | ||
+ | ORDER BY courses.id | ||
+ | """ | ||
+ | |||
+ | |||
+ | # ## Comptage des mots clef | ||
+ | # | ||
+ | # Pour chaque mot clef trouvé, j' | ||
+ | # Si le mot n'a jamais été vu, j' | ||
+ | # | ||
+ | # Au passage j' | ||
+ | # | ||
+ | |||
+ | # In[3]: | ||
+ | |||
+ | |||
+ | tab = {} | ||
+ | while True: | ||
+ | res = cursor.fetchone() | ||
+ | if res is None: | ||
+ | break | ||
+ | # Le mot clef est la première colonne demandée dans le SELECT alors il sera | ||
+ | # dans la première case du résultat | ||
+ | mot = res[0] | ||
+ | # On récupère le nmbre de fois où il a été vu ou 0 s'il n'a jamais été vu | ||
+ | nbdeja = tab.get(mot, | ||
+ | # on affiche | ||
+ | print(f" | ||
+ | # on ajoute un et on change la valeur du tableau | ||
+ | tab[mot] = nbdeja+1 | ||
+ | |||
+ | # Affichage | ||
+ | print(tab) | ||
+ | # Affichage plus joli | ||
+ | print(json.dumps(tab, | ||
+ | |||
+ | |||
+ | # ## on fait un nuage de mot | ||
+ | # | ||
+ | # Ce n'est pas demander mais à partir d'un dictionnaire qui compte le nombre d' | ||
+ | |||
+ | # In[5]: | ||
+ | |||
+ | |||
+ | # génération du nuage | ||
+ | import wordcloud | ||
+ | import matplotlib.pyplot as plt | ||
+ | wordcloud = wordcloud.WordCloud().generate_from_frequencies(tab) | ||
+ | # affichage | ||
+ | plt.imshow(wordcloud, | ||
+ | plt.axis(" | ||
+ | plt.show() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * Faire un programme python qui obtient la liste des mots clef de chaque cours de chaque organisation et affiche le tableau suivant: | ||
+ | |||
+ | ^ Nom organisation ^ liste mot clef ^ | ||
+ | | MINES ParisTech | ||
+ | | Inria | Informatique et programmation, | ||
+ | | ... | ... | | ||