N.S.I. WorkSpace P-Ev-EP,Première C – Traitement de donnes en table

C – Traitement de donnes en table

Categories:

Sujet 1

"""                Spécialité NSI - Première - Epreuve Pratique
                       TRAITEMENT DE DONNEES EN TABLE                       """

# NOM de famille :
# Prénom :
# Classe :

""" ===========================================================================
Des données concernant les tsunamis ont été enregistrées dans
un fichier de type 'csv'.

Les trois fonctions qui suivent permettent de récupérer les données de ce
fichier et convertir le type de certaines d'entre elles.

Ces fonctions ne sont pas à compléter ni à modifier : elles sont 'prêtes à
l'emploi'.

Le travail de programmation à réaliser commence dans la partie intitulée
'Exploiter les données d'une table'.
=========================================================================== """

def loadDataFromCsv(csvFileName, separator=";"):
    """Fonction de création d'une liste des intitulés de colonnes et d'une
    table de données."""
    openFlow = open(csvFileName, mode="r", encoding="UTF-8")

    colLib = ""  # Libellés des colonnes
    colLib = openFlow.readline()
    colLib = colLib.split(separator)
    colLib[-1] = colLib[-1].replace("\n", "")
    colLib = tuple(colLib)

    table = ""  # Données concernant les tsunamis
    table = openFlow.readlines()
    for index in range(len(table)):
        table[index] = table[index].split(separator)
        table[index][-1] = table[index][-1].replace("\n", "")
        table[index] = tuple(table[index])

    openFlow.close()
    return colLib, table

def str2float(table, indexCol):
    """Fonction de conversion de données de type 'str' en 'float'."""
    for index in range(len(table)):
        table[index] = list(table[index])
        for indice in indexCol:
            if table[index][indice] != "":
                table[index][indice] = float(table[index][indice])
            else:
                table[index][indice] = None
        table[index] = tuple(table[index])
    return table

def str2int(table, indexCol):
    """Fonction de conversion de données de type 'str' en 'int'."""
    for index in range(len(table)):
        table[index] = list(table[index])
        for indice in indexCol:
            if table[index][indice] != "":
                table[index][indice] = int(table[index][indice])
            else:
                table[index][indice] = None
        table[index] = tuple(table[index])
    return table

# =============================================================================
#                            PROGRAMME PRINCIPAL
# =============================================================================

descripteurs, tsunamis = loadDataFromCsv("tsunami.csv")
tsunamis = str2float(tsunamis, [2, 5, 6, 7, 8, 9, 10, 14])
tsunamis = str2int(tsunamis, [11, 12, 13, 15, 16])

# =============================================================================
#                     EXPLOITER LES DONNEES D'UNE TABLE
# =============================================================================

# Ecrire l'instruction qui permet d'afficher dans la console toutes les données
# du 236e tsunami de la table 'tsunamis'


# =============================================================================
# Ecrire l'instruction qui permet d'afficher dans la console le 'Total des dom-
# mages  (millions de $)' du 199e tsunami de la table 'tsunamis'


# =============================================================================
# Ecrire l'assertion qui permet de vérifier que le nombre 'Total des maisons
# détruites' par le 272e tsunami de la table 'tsunamis' est égal à 3513


# =============================================================================
# Ecrire les instructions qui permettent de connaître le nombre de tsunamis dus
# à un séisme de magnitude égale à 6


# =============================================================================
# Ecrire les instructions qui permettent de connaître le nombre de tsunamis qui
# se sont produits entre le 1er janvier 2015 et le 31 décembre 2015


# =============================================================================
# Ecrire les instructions qui permettent de lister les localisations et l'in-
# tensité des tsunamis qui se sont produits en 'ITALY'.


""" On attend la liste suivante :
    [('TYRRHENIAN CALABRIA', 4.0),
     ('IONIAN CALABRIA', 3.0),
     ('STROMBOLI ISLAND', 4.0),
     ('CENTRAL ADRIATIC', 2.0),
     ('CENTRAL ADRIATIC', 4.0),
     ('EASTERN SICILY', None)]
"""
# =============================================================================
# Compléter les instructions qui permettent de lister la date, le pays et le nom-
# bre total de victimes des tsunamis qui sont responsables d'un nombre de vic-
# times (décès + disparus + blessés) supérieur ou égal à 10000.
lTsuVict10000 = []
for tsu in ???:
    nVictimes = 0
    for index in (11, 12, 13):
        if tsu[???] != None:
            nVictimes += tsu[???]
    if ??? >= 10000 :
        lTsuVict10000.???((tsu[???], tsu[???], nVictimes))

""" On attend la liste suivante:
    [('1923-09-01', 'JAPAN', 233283),
     ('1939-12-26', 'TURKEY', 132700),
     ('1952-11-04', 'RUSSIA', 10000),
     ('1970-05-31', 'PERU', 116794),
     ('1976-02-04', 'GUATEMALA', 99000),
     ('1976-08-16', 'PHILIPPINES', 18000),
     ('1979-12-12', 'COLOMBIA', 20600),
     ('1985-09-19', 'MEXICO', 39500),
     ('1995-01-16', 'JAPAN', 50226),
     ('1999-08-17', 'TURKEY', 67118),
     ('2003-05-21', 'ALGERIA', 14087),
     ('2004-12-26', 'INDONESIA', 227899),
     ('2010-02-27', 'CHILE', 12558),
     ('2011-03-11', 'JAPAN', 24595),
     ('2021-08-14', 'HAITI', 15340)]
"""

# =============================================================================
# Compléter l'instruction qui suit et qui permet de trier la table 'tsunamis'
# par ordre décroissant d' 'Intensité du tsunami'
tsunamis.sort(key=lambda x:x[???], ???)

Fichier csv à télécharger

Corrigé

"""                Spécialité NSI - Première - Epreuve Pratique
                       TRAITEMENT DE DONNEES EN TABLE                       """

# NOM de famille :
# Prénom :
# Classe :

""" ===========================================================================
Des données concernant les tsunamis ont été enregistrées dans
un fichier de type 'csv'.

Les trois fonctions qui suivent permettent de récupérer les données de ce
fichier et convertir le type de certaines d'entre elles.

Ces fonctions ne sont pas à compléter ni à modifier : elles sont 'prêtes à
l'emploi'.

Le travail de programmation à réaliser commence dans la partie intitulée
'Exploiter les données d'une table'.
=========================================================================== """

def loadDataFromCsv(csvFileName, separator=";"):
    """Fonction de création d'une liste des intitulés de colonnes et d'une
    table de données."""
    openFlow = open(csvFileName, mode="r", encoding="UTF-8")

    colLib = ""  # Libellés des colonnes
    colLib = openFlow.readline()
    colLib = colLib.split(separator)
    colLib[-1] = colLib[-1].replace("\n", "")
    colLib = tuple(colLib)

    table = ""  # Données concernant les tsunamis
    table = openFlow.readlines()
    for index in range(len(table)):
        table[index] = table[index].split(separator)
        table[index][-1] = table[index][-1].replace("\n", "")
        table[index] = tuple(table[index])

    openFlow.close()
    return colLib, table

def str2float(table, indexCol):
    """Fonction de conversion de données de type 'str' en 'float'."""
    for index in range(len(table)):
        table[index] = list(table[index])
        for indice in indexCol:
            if table[index][indice] != "":
                table[index][indice] = float(table[index][indice])
            else:
                table[index][indice] = None
        table[index] = tuple(table[index])
    return table

def str2int(table, indexCol):
    """Fonction de conversion de données de type 'str' en 'int'."""
    for index in range(len(table)):
        table[index] = list(table[index])
        for indice in indexCol:
            if table[index][indice] != "":
                table[index][indice] = int(table[index][indice])
            else:
                table[index][indice] = None
        table[index] = tuple(table[index])
    return table

# =============================================================================
#                            PROGRAMME PRINCIPAL
# =============================================================================

descripteurs, tsunamis = loadDataFromCsv("tsunami.csv")
tsunamis = str2float(tsunamis, [2, 5, 6, 7, 8, 9, 10, 14])
tsunamis = str2int(tsunamis, [11, 12, 13, 15, 16])

# =============================================================================
#                     EXPLOITER LES DONNEES D'UNE TABLE
# =============================================================================

# Ecrire l'instruction qui permet d'afficher dans la console toutes les données
# du 236e tsunami de la table 'tsunamis'
print(tsunamis[235])

# =============================================================================
# Ecrire l'instruction qui permet d'afficher dans la console le 'Total des dom-
# mages  (millions de $)' du 199e tsunami de la table 'tsunamis'
print(tsunamis[198][14])

# =============================================================================
# Ecrire l'assertion qui permet de vérifier que le nombre 'Total des maisons
# détruites' par le 272e tsunami de la table 'tsunamis' est égal à 3513
assert tsunamis[271][15] == 3513

# =============================================================================
# Ecrire les instructions qui permettent de connaître le nombre de tsunamis dus
# à un séisme de magnitude égale à 6
nMag6 = 0
for tsu in tsunamis:
    if tsu[2] == 6.0:
        nMag6 += 1

# =============================================================================
# Ecrire les instructions qui permettent de connaître le nombre de tsunamis qui
# se sont produits entre le 1er janvier 2015 et le 31 décembre 2015
nTsu2015 = 0
for tsu in tsunamis:
    if tsu[0] >= "2015-01-01" and tsu[0] <= "2015-12-31":
        nTsu2015 += 1

# =============================================================================
# Ecrire les instructions qui permettent de lister les localisations et l'in-
# tensité des tsunamis qui se sont produits en 'ITALY'.
lTsuItaly = []
for tsu in tsunamis:
    if tsu[3] == "ITALY":
        lTsuItaly.append((tsu[4], tsu[10]))

""" On attend la liste suivante :
    [('TYRRHENIAN CALABRIA', 4.0),
     ('IONIAN CALABRIA', 3.0),
     ('STROMBOLI ISLAND', 4.0),
     ('CENTRAL ADRIATIC', 2.0),
     ('CENTRAL ADRIATIC', 4.0),
     ('EASTERN SICILY', None)]
"""
# =============================================================================
# Compléter les instructions qui permettent de lister la date, le pays et le nom-
# bre total de victimes des tsunamis qui sont responsables d'un nombre de vic-
# times (décès + disparus + blessés) supérieur ou égal à 10000.
lTsuVict10000 = []
for tsu in tsunamis:
    nVictimes = 0
    for index in (11, 12, 13):
        if tsu[index] != None:
            nVictimes += tsu[index]
    if nVictimes >= 10000 :
        lTsuVict10000.append((tsu[0], tsu[3], nVictimes))

""" On attend la liste suivante:
    [('1923-09-01', 'JAPAN', 233283),
     ('1939-12-26', 'TURKEY', 132700),
     ('1952-11-04', 'RUSSIA', 10000),
     ('1970-05-31', 'PERU', 116794),
     ('1976-02-04', 'GUATEMALA', 99000),
     ('1976-08-16', 'PHILIPPINES', 18000),
     ('1979-12-12', 'COLOMBIA', 20600),
     ('1985-09-19', 'MEXICO', 39500),
     ('1995-01-16', 'JAPAN', 50226),
     ('1999-08-17', 'TURKEY', 67118),
     ('2003-05-21', 'ALGERIA', 14087),
     ('2004-12-26', 'INDONESIA', 227899),
     ('2010-02-27', 'CHILE', 12558),
     ('2011-03-11', 'JAPAN', 24595),
     ('2021-08-14', 'HAITI', 15340)]
"""

# =============================================================================
# Compléter l'instruction qui suit et qui permet de trier la table 'tsunamis'
# par ordre décroissant d' 'Intensité du tsunami'
tsunamis.sort(key=lambda x:x[10] if x[10] != None else -100, reverse=True)