Projet
Projet
Projet
M1 IREF
Laurent R. Bergé*
Projet 2023-2024
Instructions :
• Il faut rendre les projets avant les dates butoir définies. Il y a 0.5 point de pénalité par 12h de retard.
Premières 12h gratuites.
• le code doit être commenté afin d’être compréhensible par tous
• la qualité du code compte : formattage impeccable, clarté dans ce qui est fait et consistence des
noms de variable. Un code illisible donnera des points de pénalité. Un code très clair et facile à lire
donnera des points bonus.
• le rendu des projets se fait exclusivement sur le site Moodle du cours : M2 IREF – Data analysis II
1. Général
Ce projet se fait en deux parties :
1. webscraping
2. shiny
Dans la première partie vous collecterez les données et les formatterez correctement en une base de
données.
Dans la deuxième partie, vous créerez une application pour exploiter ces données.
Les attendus de ces deux parties et la façon dont elles sont notées sont très différentes. Prêtez bien
attention aux instructions.
1/5
2. Webscraping
L’objectif est de recueillir des données sur les offres d’emploi dans le domaine de la “science des don-
nées”² en provenance de différents sites webs les recensant.
²Vous êtes libre de faire les recherches que vous voulez du moment que cela reste dans le domaine.
³Vous pouvez séparer le main de sorte à représenter des étapes. Cela peut être un main par site web par exemple. Vous
pouvez également séparer le scraping du formattage. Dans le cas de plusieurs main, numérotez les dans leur noms pour
clarifier leur ordre. Par exemple : 01_main_linkedin_scrape.R, 02_main_linkedin_format.R.
2/5
• ne déposez pas les données intermédiaires, seulement les données finales
2.3. Objectifs
L’objectif est de créer une base de donnée avec les informations suivantes :
• recherche effectutée qui a amené à cette offre (quel mots clefs ?)
• intitulé du poste
• description du poste
• fourchette de salaire (si disponible)
• entreprise
• secteur de l’entreprise (si disponible)
• compétences demandées
• lieu d’exercice
• type d’emploi : CDI, CDD, stage
• durée de l’emploi (si stage ou CDD)
• site source de l’annonce (chaine de caractère)
• lien vers la page de l’annonce
Vous êtes libre d’ajouter plus d’informations à la liste ci-dessus.
Vous êtes également libre d’y apparier des données externes (comme des informations de la base
SIRENE par exemple).
2.4. Notation
Il faudra scraper au moins deux sites mentionnés en Section 2.2. L’objectif est d’avoir au moins 1000
offres d’emploi.
• 10 points par site scrapé (oui, si 3 sites : 30 points) si les données finales obtenues sont correctes
et toutes les variables demandées sont fournies (malus pour variables manquantes ou incorrectes)
• pour chaque site, extraire au moins 500 offres. Si en dessous de 500 : chaque offre vaut 0.02 point.
Au dessus, chaque offre vaut 0.004, max 2 points bonus pour un total de 1000 offres. Je me réserve
le droit de demander des preuves matérielles pour l’origine de chaque offre, donc conservez les
données intermédiaires (le HTML scrapé).
• pour chaque site, la qualité du code pour formatter les données, ainsi que celle pour scraper, sont
notées sous forme de bonus/malus (jusqu’à −3 en malus et +2 en bonus)
3/5
3. Shiny
Cette partie du projet porte sur l’exploitation des données obtenues dans le travail précédent.
Vous créerez une application qui permettra de rapidement accéder aux offres d’emploi en fonction de
mots clefs. Cette partie est très libre : essayez de faire une application la plus intéressante possible, qui
donne le plus possible de valeur ajoutée à l’aggrégation des offres d’emploi.
3.1. Instructions
dates
• vous devrez rendre le code de l’application shiny avant le Mardi 6 février 2024, 23h59
• vous ferez une démonstration de votre application devant l’ensemble de la classe le Jeudi 8 février
2024
code
• vous rendrez une seule archive .zip qui contiendra tous les fichers nécessaires à faire tourner votre
application, ceci incluant la base de données
• separate the application into a ui.R and a server.R file. Like we’ve done in class. Exception : if
you think there is value added to pass arguments to the app, you can write an app-function, but it
has to be justified.
• on the data : put it in the www/ folder and access it within the server with, e.g., fread("www/my-
data.csv)"
• l’application devra pouvoir tourner sur ma machine sans manipulation de ma part (à l’exception de
l’installation de packages)
• chaque fichier devra contenir, en commentaire de début de fichier, le nom de chaque participant et
le but du fichier (voir Section 2.2)
3.2. Notation
3.2.1. Contenu
Le contenu de l’application est libre. Néanmoins voici quelques éléments qu’elle se doit de contenir :
1. welcome page : page qui décrit somairement comment utiliser l’app (à noter qu’il y a des applica-
tions qui permettent de créer des “pas à pas” facilement en shiny)
2. page sur les données d’offre d’emploi avec des options pour facilement les filtrer/trier et offrir
différentes façons de les afficher.⁵
3. une page où l’utilisateur peut écrire librement ses compétences (ou quelque chose du genre), et
lorsqu’il valide apparaît les 3 offres qui lui correspondent le plus (par exemple sous la forme de
cartes descriptives – peut être aussi sous la forme d’une base de données)
Voici d’autres idées que vous pouvez inclure :
• une page avec la géolocalisation des offres d’emploi, possiblement filtrées.
Astuce
Utilisez le package leaflet pour tout ce qui est cartographie web.
• une page où l’utilisateur peut uploader son CV en PDF. L’application lui renverra alors les meilleures
offres correspondant à son CV (similaire au point 2 au dessus mais avec un input différent)
⁵A noter que pour chaque offre d’emploi, il faudra donner le nombre de sites dans lequel elle apparaît.
4/5
Astuce
Utilisez le package pdftools pour manipuler des documents PDF.
• dans l’affichage de la base de donnée, créer pour chaque ligne un bouton qui, une fois cliqué, af-
fiche la fiche de poste formattée en fenêtre pop-up. Une version plus difficile est de faire la même
chose mais sans bouton, juste quand l’utilisateur clique sur une ligne.
Astuce
Utilisez le package DT pour dataTableOutput/renderDataTable et utilisez l’argument escape
= FALSE dans renderDataTable.
• tout autre idée que vous pouvez avoir et qui est pertinente
3.2.2. Esthétique
A noter que dans le cadre de cette partie l’aspect esthétique et l’expérience utilisateur est primordiale.
Ne priviligiez pas la technique au détriment de l’UX et de l’esthétique.
Dans le contenu mentionné au dessus, sur les trois permiers points obligatoires, ça n’a l’air de rien mais
il y a mille façons de faire : des façons très léchées et des façons bof bof. Je peux tout à fait mettre 20 à
des personnes qui n’ont fait que ces trois points mais extrêmement bien. Faire les mêmes trois points
sans réfléchir ne donnera pas plus de 5/20.
L’objectif ici est que vous soyez créatifs. Profitez d’être en groupe pour être très critiques vis à vis de
votre travail.
La qualité du code sera inspectée. Il y aura des bonus/malus (-3/+2) de la même façon que pour la partie
webscrapping.
4. Mots de la fin
C’est un projet ambitieux, mais c’est vous qui avez choisi ! 😉
5/5