rapport.tex 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. \documentclass[a4paper, 8pt]{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage[T1]{fontenc}
  4. \usepackage[francais]{babel}
  5. \usepackage[a4paper]{geometry}
  6. \geometry{hmargin=2.5cm,vmargin=1.5cm}
  7. \usepackage{amssymb, amsmath,amsfonts,amsthm,mathrsfs}
  8. \usepackage{hyperref}
  9. \sloppy
  10. \title{\vspace{-2cm}Rapport du projet de \emph{Web Data Management}}
  11. \author{Shendan Jin \& Olivier Marty}
  12. \date\today
  13. \begin{document}
  14. \maketitle
  15. \section{Présentation du projet}
  16. Le but de ce projet est d'utiliser différentes sources d'informations sur
  17. internet qui concernent l'état d'un moyen de transport (lignes de
  18. métro, de train, stations vélo vide ou pleine, ou encore un bouchon sur
  19. l'autoroute (non implémenté)) afin de prévenir l'utilisateur lorsque celui-ci va
  20. les utiliser.
  21. Pour cela on se connecte à son agenda (Google Calendar), et on analyse ses emails
  22. (Gmail) pour prévoir ses déplacements, mais d'autres sources pourrait être
  23. ajoutées, de façon modulaire.
  24. Pour chaque événement, on géolocalise l'adresse avec l'API d'OpenStreetMap,
  25. puis on cherche les moyens de transport utiles pour se rendre à ces coordonnées.
  26. En cas de problème sur l'un de ces moyens de transport, l'utilisateur est
  27. notifié par le medium de son choix (email, ou sms via l'API de free mobile).
  28. \section{Description globale}
  29. Le projet est divisé en trois principales composantes~:
  30. \subsection{Les événements}
  31. Les événements auquel l'utilisateur va se rendre sont représentés par un objet
  32. contenant un identifiant unique, la date, l'addresse, et une description.
  33. Ces événements sont récupérés à partir de deux sources~: Google Calendar et
  34. Gmail.
  35. Cependant les seuls mails aboutissant à la détection d'un événement sont ceux de la forme~:\\
  36. "Rendez-vous\\
  37. le 22/02/2016 08h45\\
  38. à Université Paris Diderot\\
  39. pour le cours de WDM"
  40. \subsection{Les sources d'état du trafic}
  41. Une information concernant l'état d'un moyen de transport est représenté par un
  42. objet contenant un identifiant unique, un message, et un attribut booléen qui
  43. détermine si le moyen de transport présente un problème.
  44. Les données proviennent de différentes sources~:
  45. \begin{itemize}
  46. \item \textbf{État des lignes de la RATP} Les données sont récupérées en scrapant l'url
  47. \url{http://ratp.fr/meteo/}.
  48. En effet la ratp ne fournit aucune API publique dynamique.
  49. L'API statique
  50. \url{http://data.ratp.fr/explore/dataset/offre-transport-de-la-ratp-format-gtfs/}
  51. a cependant été utilisée pour obtenir la localisation des stations et les lignes
  52. les traversant.
  53. \item \textbf{État des lignes Transilien} Les données sont récupérées en scrapant l'url \url{http://www.transilien.com/info-trafic/temps-reel}.
  54. L'API SNCF (\url{https://ressources.data.sncf.com/explore/dataset/osm-mapping-idf/})
  55. est par contre utilisée pour déterminer la postition des stations et les
  56. lignes les traversant.
  57. \item \textbf{Vélos en libre service JCDecaux} Les données sont récupérées via
  58. l'API vls de JCDecaux (voir \url{https://developer.jcdecaux.com/#/opendata/vls}).
  59. \end{itemize}
  60. \subsection{La boucle principale}
  61. Cette boucle articule les différents modules entre eux.
  62. Elle consomme les événements depuis les sources, qu'elle rafraichit toutes les
  63. $30$ secondes.
  64. Une demi-heure avant qu'un un événement arrive à échéance, on cherche la
  65. localisation de l'événement, puis on cherche les sources qui peuvent être utiles
  66. pour ce rendre à cet événement (stations proches).
  67. Le module source récolte alors l'état de ces sources, et une notification est
  68. envoyée pour chaque problème soulevé.
  69. \section{Programmes python}
  70. Afin d'éxecuter un programme, il faut lancer la commande
  71. \texttt{python3 fichier.py}.
  72. Il faudra peut-être installer les dépendances python~:
  73. \texttt{pip3 install -r requirements.txt}
  74. \paragraph{main.py} C'est le programme principal. Lors du premier lancement,
  75. il demandera l'autorisation de se connecter aux API Google Calendar et Gmail.
  76. \paragraph{demo.py} Lance une démonstration qui ignore les événements mais lance
  77. les notifications à partir d'une adresse.
  78. \paragraph{find.py} Fournit une aide pour trouver les identifiants utilisés en
  79. interne pour désigner une source.
  80. Il propose une recherche interactive dans les listes téléchargées depuis les
  81. différentes API.
  82. \paragraph{ratp\_preprocessing.py} Les données statiques fournies par la ratp
  83. n'était pas dans un format qui nous convenait (pour utiliser des termes de SGBDR,
  84. il faut faire plusieurs jointures pour trouver les lignes qui passent par un
  85. arrêt !), en plus de peser plus de 500Mo~!
  86. Ce fichier extrait de ces données la liste des stations, leurs localisations et
  87. les lignes les traversant, et le fichier final (\texttt{ratp.csv}) ne pèse alors
  88. plus que que 500Ko.
  89. Les données brutes sont disponibles à l'adresse
  90. \url{http://data.ratp.fr/explore/dataset/offre-transport-de-la-ratp-format-gtfs/}.
  91. \paragraph{map.py} Génère un fichier cvs contenant la liste des identifiants
  92. associés à des coordonnées d'intérêt, pour visualisation.
  93. Une carte présentant ces données est disponible à l'adresse
  94. \url{https://www.google.com/maps/d/edit?mid=z6ibLBE5MDrk.kudB9LIy9Cws&usp=sharing}
  95. \end{document}