NSI : table de données

1. Exploitation d’une table de données à l’aide d’un tableur.

Télécharger la table de données ci-dessous et l’ouvrir à l’aide d’un tableur et d’un éditeur de texte ou un éditeur 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

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.

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

a. Mise en place

  • Créer un dossier TP_Table_de_donnees_csv,
  • télécharger le fichier concernant notre table de données au format csv et la placer dans votre dossier.

Copier le code ci-dessous dans un éditeur python et enregistrer votre fichier dans votre dossier.

# 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 1 :

Après avoir exécuté 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,)

b. 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,
  'Février 2016': 44097,
  'Mars 2016': 49935,
  'Avril 2016': 43599,
  'Mai 2016': 46245,
  'Juin 2016': 48359,
  'Juillet 2016': 36673,
  'Août 2016': 28727,
  'Septembre 2016': 51538,
  'Octobre 2016': 51060,
  'Novembre 2016': 54861,
  'Décembre 2016': 52560,
  'Janvier 2017': 55870,
  'Février 2017': 46728,
  'Mars 2017': 58850,
  'Avril 2017': 45437,
  'Mai 2017': 47103,
  'Juin 2017': 49763,
  'Juillet 2017': 38098,
  'Août 2017': 31161})

Exercice 2 :
– é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 stations ayant eu le plus de validations pour un mois donné.

Proposition de correction : 1ere fonction exercice 2

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 tuple qui contiendra les stations sous forme de dictionnaires
    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)