NSI : table de données

Proposition correction fin TP 10 : affichage des nombres de vélos disponibles aux stations VLille en temps réel :

import requests
import folium

stations = requests.get('https://opendata.lillemetropole.fr/explore/dataset/vlille-realtime/download/?format=json&timezone=Europe/Paris&lang=fr').json()
latitude_lille=50.6333
longitude_lille=3.0667
# on crée une carte centrée sur Lille
carte = folium.Map(location=(latitude_lille,longitude_lille), tiles='OpenStreetMap', zoom_start=15)

def stations_avec_velos_dispo():
    '''
    affiche sur une carte les stations de V'Lille avec des vélos disponibles
    return : carte avec marqueurs des stations
    '''
    global carte
    for station in stations:
        if station['fields']['nbvelosdispo']>0:
            latitude=station['fields']['localisation'][0]
            longitude=station['fields']['localisation'][1]
            localisation=(latitude,longitude)
            nbre_velo=station['fields']['nbvelosdispo']
            adresse=str(nbre_velo)+' vélo(s)<br>station : '+station['fields']['nom']+"<br>adresse :<br>"+station['fields']['adresse']
            folium.Marker(location=localisation, popup = adresse).add_to(carte)
    return
            
    
    
stations_avec_velos_dispo()  
carte.save(outfile='carte_V_LIlle.html')

1. Exploitation en ligne d’une table de données.

Ouvrir la page suivante dans votre navigateur :
open data : Nombre de validations par arrêts de métro et de tramway

Cette table de données en ligne présente des données sur des objets :
– chaque ligne représente un objet,
– chaque colonne représente les valeurs de différents descripteurs ( ou champs ou attributs ou propriétés ).
Pour exploiter une table de données, on peut utiliser des outils de tris ou des filtres.

Exercice 1:

Déterminer à l’aide des outils en ligne proposés sur cette page :
1. La station qui a eu le plus de validations au mois de Janvier 2016.
2. La station qui a eu le moins de validations au mois de Janvier 2016.
3. La station n’appartenant qu’à la ligne 1 qui a eu le plus de validations au mois de Janvier 2016.
4. La station n’appartenant qu’à la ligne 2 qui a eu le moins de validations au mois de Janvier 2016.

2 Exploitation d’une table de données à l’aide d’un tableau.

Télécharger cette table de données à partir de l’onglet ‘export’ au format tableur ( Excel ).
Ouvrir ce fichier à l’aide d’un tableur.

Exercice 2

VisiCalc, le premier tableur
En 1978, Daniel Bricklin, étudiant à Harvard, devait établir des tableaux comptables pour une étude de cas sur Pepsi-Cola. Plutôt que de calculer à la main il préféra programmer « un tableau noir et une craie électroniques », selon sa propre expression. Son premier prototype, en Basic, pouvait manipuler un tableau de vingt lignes et cinq colonnes.
Bricklin se fit aider ensuite par Bob Frankston, du MIT. Celui-ci réécrivit le programme en assembleur et le condensa en 20 koctets pour qu’il puisse fonctionner sur un micro-ordinateur.
A l’automne 1978, Daniel Fylstra, ancien du MIT et rédacteur à Byte Magazine, perçut le potentiel commercial de ce produit. Il suggéra de l’adapter à l’Apple-II ainsi qu’aux systèmes HP85 et HP87.
En janvier 1979 Bricklin et Frankston créèrent Software Arts Corporation ; en mai 1979, la société Personal Software de Fylstra, nommée plus tard VisiCorp, lança la commercialisation de VisiCalc (cette appellation condense l’expression « Visible Calculator »).
VisiCalc était vendu 100 $. Il avait déjà l’allure des tableurs d’aujourd’hui
[2] : les évolutions ultérieures les plus visibles porteront sur l’adjonction de possibilités graphiques ainsi que sur l’utilisation de la souris.

http://www.volle.com/travaux/tableur.htm

A l’aide des outils proposés par votre tableur :
1. Déterminer le nombre total de validations sur l’ensemble des stations pour le mois de Janvier 2016.
2. Trier le nom des stations par ordre alphabétique.
3. Déterminer la station sur l’ensemble du réseau qui a le plus de validations en Mars 2016.
4. Déterminer le nombre total de validations à la gare Lille Flandres tous réseaux confondus.
5. Déterminer à l’aide d’un filtre les stations ayant eu entre 10 000 et 15 000 validations au mois de Janvier 2016.
6. Déterminer à l’aide d’un filtre les stations de Tram ayant eu plus de 10 000 validations. Les classer par ordre décroissant.

3. Utilisation des données d’une table en Python.

1. Mise en place

  • Créer un dossier TP11_Table_de_donnees,
  • télécharger le fichier concernant notre table de données au format csv et la placer dans votre dossier.
  • ouvrir ce fichier avec le logiciel par défaut et un simple éditeur de texte ( ou de code ).

Comma-separated values, connu sous le sigle CSV, est un format texte ouvert représentant des données tabulaires sous forme de valeurs séparées par des virgules. Ce format n’a jamais vraiment fait l’objet d’une spécification formelle. Toutefois, la RFC 41801 décrit la forme la plus courante et établit son type MIME « text/csv », enregistré auprès de l’IANA.
Un fichier CSV est un fichier texte, par opposition aux formats dits « binaires ». Chaque ligne du texte correspond à une ligne du tableau et les virgules correspondent aux séparations entre les colonnes. Les portions de texte séparées par une virgule correspondent ainsi aux contenus des cellules du tableau. Une ligne est une suite ordonnée de caractères terminée par un caractère de fin de ligne (line break – LF ou CRLF), la dernière ligne pouvant en être exemptée.

https://fr.wikipedia.org/wiki/Comma-separated_values

Copier le code ci-dessous dans un éditeur python et enregistrer votre fichier dans votre dossier.
( Spécifier bien votre dossier comme répertoire courant de votre shell avec Pyzo )

# on ouvre et on lit le fichier de données
with open('nombre-de-validations-par-arrets-de-metro-et-tramway.csv',encoding="utf8", errors='ignore') as fichier:
    lignes=fichier.readlines()

Exercice 3 :

Après avoir exécuter le programme :
– examiner le contenu de la variable lignes,
– déterminer le type de cette variable,
– afficher le contenu du premier et du deuxième élément de cette variable.

Avant de traiter, en python, les données issues d’un fichier csv, il est nécessaire de leur faire subir un traitement.
Modifier votre programme en celui ci-dessous :

# on ouvre et on lit le fichier de données
with open('nombre-de-validations-par-arrets-de-metro-et-tramway.csv', errors='ignore') as fichier:
    lignes=fichier.readlines()
    # on parcourt ligne par ligne notre table
    donnees=()
    for ligne in lignes:
        # on supprime les caractères spéciaux de retour de ligne
        # et on 'éclate' les données séparées par un ;
        # sous la forme d'un tuple
        ligne_nettoyee=ligne.rstrip('\n').split(";")
        donnees+=(ligne_nettoyee,)

2. Convertir ses données pour un accès plus facile.

Pour travailler plus facilement sur les données, on va les mettre sous la forme d’un tuple que l’on nommera stations qui contiendra les données pour chaque station sous la forme d’un dictionnaire.
On aura, par exemple, comme fin de notre tuple stations :

{'Mode': 'TRAM',
  'Station': 'SAINT MAUR',
  'Janvier 2016': '48823.0',
  'Février 2016': '44097.0',
  'Mars 2016': '49935.0',
  'Avril 2016': '43599.0',
  'Mai 2016': '46245.0',
  'Juin 2016': '48359.0',
  'Juillet 2016': '36673.0',
  'Août 2016': '28727.0',
  'Septembre 2016': '51538.0',
  'Octobre 2016': '51060.0',
  'Novembre 2016': '54861.0',
  'Décembre 2016': '52560.0',
  'Janvier 2017': '55870.0',
  'Février 2017': '46728.0',
  'Mars 2017': '58850.0',
  'Avril 2017': '45437.0',
  'Mai 2017': '47103.0',
  'Juin 2017': '49763.0',
  'Juillet 2017': '38098.0',
  'Août 2017': '31161.0'})

Exercice 4 :
– écrire une fonction permettant de faire la conversion de nos données en un tuple stations contenant des dictionnaires décrivant les données de chaque station.
– écrire une fonction permettant de récupérer les données relatives à une station connaissant son nom,
– écrire une fonction permettant de calculer le nombre moyen mensuel de validations pour une station dont on connait le nom,
– écrire une fonction permettant de déterminer le nom de la fonction ayant eu le plus de validations pour un mois donné.

Proposition de correction : 1ere fonction exercice 4

def conversion_dict():
# on récupère nos données en variable globale
# pour ne pas être obligé de la passer en paramètre de
# la fonction
    global donnees
    
    # on crée un dico contenant les stations
    stations=()
    # on récupère les noms des descripteurs ou champs
# qui constituent toujours la ligne 0 d'un fichier csv
    descripteurs=donnees[0]
   # on parcourt les données à partir de la ligne 1
    for i in range(1,len(donnees)):
        # on définit une station
        ma_ligne=donnees[i]
        ma_station={}
        # on parcourt les descripteurs par indices
        for j in range(len(descripteurs)):
            ma_station[descripteurs[j]]=ma_ligne[j]
        stations+=(ma_station,)
    
    return stations

# on teste notre fonction
stations=conversion_dict()
print(stations)