Module bloc1Pack.PY_functions

Contient toutes les méthodes demandées et quelques unes écrites pour l’occasion.

Bibliothèques utiles

* csv
* operator, uniquement sa méthode itemgetter

Fonctions demandées

* Extraire la sous-liste des établissements d’une commune
donnée (colonne K). K est la 11eme lettre de l’alphabet
c’est à l’index 10 d’un tableau.
* Renvoyer la liste du nombre d’établissements privés et publics
(colonne E) de chaque département (colonne W), sous la forme
d’une liste de tuples:
(département, nb d’établissements publics, nb d’établissements privés)
* Renvoyer la sous-liste des établissements d’un département
donné (colonne W).
* Renvoyer la sous-liste des établissements ouverts avant une date donnée
(colonne AI) sous la forme « JJ/MM/AAAA ».

Repérer les colonnes du fichier csv

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
Expand source code
#!/usr/bin/python3
#-*- coding: utf8 -*-

# @author : Sébastien LOZANO

"""Contient toutes les méthodes demandées et quelques unes écrites pour l’occasion.
  
  `Bibliothèques utiles`

      * csv
      * operator, uniquement sa méthode itemgetter
  
  `Fonctions demandées`

      * Extraire la sous-liste des établissements d’une commune
      donnée (colonne K). K est la 11eme lettre de l’alphabet
      c’est à l’index 10 d’un tableau.
      * Renvoyer la liste du nombre d’établissements privés et publics
      (colonne E) de chaque département (colonne W), sous la forme
      d’une liste de tuples:
      (département, nb d’établissements publics, nb d’établissements privés)
      * Renvoyer la sous-liste des établissements d’un département
      donné (colonne W).
      * Renvoyer la sous-liste des établissements ouverts avant une date donnée
      (colonne AI) sous la forme « JJ/MM/AAAA ».

    `Repérer les colonnes du fichier csv` 

      * 0  numero_uai
      * 1  appelation_officielle
      * 4  secteur_public_prive_libe
      * ...
      * 10 libelle_commune 
      * ...

"""

############################################################################################################
# Importation des bibliotheques
############################################################################################################
import csv # Pour la gestion des fichiers csv
from operator import itemgetter # Pour la gestion du tri des listes de tuples


############################################################################################################
# Extraction des données et découpage en sous-listes
# On extrait le tableau global dans une liste de tuples
# On découpe ce gros tableaux de 60 096 lignes en 20 sous-tableaux pour les tests
############################################################################################################

def cut_list(mylist: list, nb_sub_list: int) -> list:
  """Divise une liste en **nb_sub_list** sous-listes.        

    `Paramètres`

        * mylist : Une liste.
        * nb_sub_list : Le nombre de sous-listes souhaité.

    `Sorties`

        * out_list : Une liste de listes.
    
    `Notes`
    
        * Cette fonction est utile pour diviser les grandes listes de listes.

        * Si 'nb_sub_list' est supérieur au nombre d’éléments de la list,
        les dernières sous listes sont vides et chaque sous liste ne contient
        qu’un seul élément.

        * Si le nombre d’éléments de la list n’est pas un multiple
        de 'nb_sub_list' la dernière liste n’a pas le même nombre
        d’éléments que les autres.
        Elle contient le reste de la division euclidienne du nombre d’éléments
        de la liste à diviser par (nombre de sous-liste -1).

    `Exemples`
    
    >>> my_list_to_cut = [1,2,3,4,5,6,7,8,9,10,11]
    >>> cut_list(my_list_to_cut,4)
    [[1,2,3],[4,5,6],[7,8,9],[10,11]]
    >>> cut_list(my_list_to_cut,5)
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10,11]]
    >>> cut_list(my_list_to_cut,6)
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11]]
    >>> cut_list(my_list_to_cut,7)
    [[1], [2], [3], [4], [5], [6], [7, 8, 9, 10, 11]]
    >>> cut_list(my_list_to_cut,13)
    [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [], []]    
  """
  pass

  nb_elt_sub_list = len(mylist)//(nb_sub_list-1)
  out_list = []

  if (nb_sub_list>len(mylist)):
    for i in range(nb_sub_list):
      out_list.append(mylist[i:i+1])
  else:
    for i in range(nb_sub_list-1):
      out_list.append(mylist[i*nb_elt_sub_list:(i+1)*nb_elt_sub_list])
    out_list.append(mylist[(nb_sub_list-1)*nb_elt_sub_list:])
  
  return out_list

#############  TESTS #########################
#print(cut_list([1,2,3,4,5,6,7,8,9],5))
##############################################

def extract_donnees_csv(path:str) -> list:
  """Une fonction pour extraire les données d’un fichier csv sous forme d'une liste de tuples.

    `Paramètres`    

        * path : Chemin vers le fichier csv.

    `Sorties`    

        * local_list_of_tuples_tab : Une liste de tuples.
          
    `Exemples`    

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs) 
    >>> print(global_list_of_tuples_tab[1:3])
    >>> print(len(global_list_of_tuples_tab))
    [('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
    66096
  """
  pass

  local_list_of_tuples_tab = []
  # On ouvre le fichier *.csv en lecture
  with open(path, newline='') as read_tab:
      # On passe l'objet à la méthode reader() pour récupérer l'objet reader 
      csv_reader = csv.reader(read_tab, delimiter=';')
      # On recupère toutes les lignes du fichier *.csv à partir de l'objet csv_reader sous forme d'une liste de tuples
      for row in csv_reader:      
          local_list_of_tuples_tab.append(tuple(row))
  return local_list_of_tuples_tab

# On extrait les données du fichier csv
path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)

# Pour les tests, on découpe en 20 morceaux
# Pour les tests on n'utilisera que la première sous liste
# Cette sous-liste n'est utilisée que dans les tests de ce sous module PY_functions.py
# Ces tests sont commentés, il suffit de décommenter en cas de besoin
list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]

#############  TESTS #########################
# Tableau global 60 096 lignes
#print(global_list_of_tuples_tab[1:3])
#print(len(global_list_of_tuples_tab))

# Tableau partiel, le 1er des 20
#print(list_of_tuples_tab[1:3])
#print(len(list_of_tuples_tab))
##############################################

############################################################################################################
# Avant les fonctions demandées, 
# Des fonctions utiles pour les fonctions demandées !
############################################################################################################

def extract_col(tab: list,col: int)->tuple:
  """Fonction pour extraire les éléments d’une colonne donnée.

    `Paramètres`

        * tab : Une liste.
        * col : L’index de la colonne dans laquelle se trouvent
        les données à extraire.

    `Sorties`

        * sortie : Les données contenues dans la colonnes.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
    
    `Exemples` : 
    
    Extraire l’entête et les 4 premiers numéros uai des établissements

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_col(global_list_of_tuples_tab[0:5],0))
    ('numero_uai', '0490005P', '0490048L', '0491025Y', '0491966W')

    Extraire l’entête et les 4 premiers libellés des communes des établissements

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_col(global_list_of_tuples_tab[0:5],10))
    ('libelle_commune', 'Angers', 'Trélazé', 'Cholet', 'Angers')
  """
  pass

  # un tuple pour récupérer les élement en sortie
  sortie = ()
  # On parcourt le tableau et on récupère l'index col de chaque élément
  for elt in tab:
    #print(elt)
    sortie = sortie + (elt[col],)
  return sortie

#############  TESTS ####################################
# Des tests avec le tableau global
# On extrait les numéros_uai
#print(extract_col(global_list_of_tuples_tab[0:5],0))
# On extrait les libellés des communes
#print(extract_col(global_list_of_tuples_tab[0:5],10))
#########################################################

def extract_col_critere(tab: list,col: int,critere: str,col_crit: int)->list:
  """Fonction pour extraire les éléments d’une colonne donnée via un critère donné.

    `Paramètres`

        * tab : Une liste.
        * col : L’index de la colonne à extraire.
        * critere : Une chaine de caractères avec le critère de séléction.
        Les valeurs possibles pour le critère doivent être récupérées 
        au préalable dans des tuples par exemple.
        * col_crit : L’index de la colonne contenant les éléments à extraire.

    `Sorties`

        * sortie : Une liste avec les éléments souhaités.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
    
    `Exemples`

    Exemple 1, on extrait les noms des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
    >>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
    >>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet']
    125

    Exemple 2, on extrait le secteur public/privé des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
    >>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
    >>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
    ['Public', 'Public', 'Public', 'Privé', 'Public']
    125
  """
  pass

  # une liste pour récupérer les élement en sortie
  sortie = []  
  #compteur pour recuperer les index
  i=0
  # On parcourt le tableau et on récupère les index des éléments qui correspondent au critère
  tab_col = extract_col(tab,col)
  for elt in tab_col:   
    if (elt == critere):      
      sortie.append(tuple(tab[i])[col_crit])
    i+=1     
  return sortie

################################  TESTS ####################################
# Des tests avec le fichier global_list_of_tuples_tab

# exemple 1, on extrait les noms des établissements situés à Angers,
# on n'affiche que les 4 premiers et le nombre total
#print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
#print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))

# exemple 2, on extrait le secteur public/privé des établissements 
# situés à Angers, on n'affiche que les 4 premiers et le nombre total
#print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',4)[0:5])
#print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',4)))
############################################################################

############################################################################################################
# Extraire la sous-liste des établissements d’une commune donnée (colonne K) 
# K est la 11eme lettre de l'alphabet c'est à l'index 10 d'un tableau
############################################################################################################
def extract_etabs_commune(tab: list,commune: str)->list:
  """Fonction pour extraire la sous liste des établissements d’une commune donnée.

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * commune : Une chaîne de caractères avec le nom de la commune.

    `Sorties`

        * extract_col_critere(tab,10,commune,1) : Une liste avec les noms des établissements de la commune.
    
    `Notes`
      
      On gère la casse car dans le fichier csv le nom des communes est formatté.
      La première lettre est en majuscule, les autres sont en minuscules.
      On a besoin de ce format pour passer l'argument à la fonction extract_col()

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
    
    `Exemples`

    On teste sur une partie du tableau global pour gagner du temps car le fichier csv global compte 
    60 096 lignes. On coupe le fichier global en 20 sous-tableaux.
    On ne traite donc que les 3 478 premières lignes pour l'exemple.
    Quelle que soit la casse entrée pour Angers, le tableau de sortie est le même !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)  
    >>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
    >>> print(len(list_of_tuples_tab))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'aNGERS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'angerS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'ANGERS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'angers'))
    3478
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
  """
  pass

  # On gère la casse
  # Dans le tableau le nom des communes est formatté
  # 1ere lettre en majuscule, les autres en minuscules
  # On a besoin de ce format pour passer l'argument à la fonction extract_col()
  commune = commune[0].upper()+commune[1:].lower()    
  return extract_col_critere(tab,10,commune,1)

################################  TESTS ####################################
# Un test avec des casses différentes
# print(len(list_of_tuples_tab))
# print(extract_etabs_commune(list_of_tuples_tab,'aNGERS'))
# print(extract_etabs_commune(list_of_tuples_tab,'angerS'))
# print(extract_etabs_commune(list_of_tuples_tab,'ANGERS'))
# print(extract_etabs_commune(list_of_tuples_tab,'angers'))
############################################################################


############################################################################################################
# Renvoyer la liste du nombre d’établissements privés et publics (colonne E)
# de chaque département (colonne W),
# sous la forme d’une liste de tuples
# (numéro département, nombre d’établissements publics, nombre d’établissements privés)
#
# On traite d'abord un département puis on généralise pour la fonction demandée
############################################################################################################

def extract_etabs_prive_public_dep(tab: list,dep: str)->tuple:
  """Une fonction qui renvoie le nombre d’établissements privés et publics (colonne E) d'un département (colonne W),
  sous la forme d’une liste de tuples.
  
  (numéro département, nombre d’établissements publics, nombre d’établissements privés)

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * dep : La chaîne de caractère contenant le numéro du département souhaité.

    `Sorties`

        * (dep,publics,prives) : Un tuple avec (numéro département, nombre d’établissements publics, nombre d’établissements privés)
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Pour le Maine-et-Loire (49), il y a 520 établissements publics et 346 privés.
    
      >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
      >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
      >>> print(extract_etabs_prive_public_dep(global_list_of_tuples_tab,'49')) 
      ('49', 520, 346)    
  """
  pass

  # nombre d'établissements publics  
  publics=0
  # nombre d'établissements privés  
  prives=0
  for elt in extract_col_critere(tab,22,dep,4):
    if (elt=='Public'):
      publics+=1
    if (elt=='Privé'):
      prives+=1
  return (dep,publics,prives)

################################  TESTS ####################################
# Un test avec le departement 49
#print(extract_etabs_prive_public_dep(global_list_of_tuples_tab,'49')) 
############################################################################

def extract_etabs_prive_public(tab: list) -> list:
  """Une fonction qui renvoie la liste du nombre d’établissements privés et publics (colonne E) de chaque département
  (colonne W), sous la forme d’une liste de tuples.

  (numéro département, nombre d’établissements publics, nombre d’établissements privés)

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        

    `Sorties`

        * sortie : Une liste de tuples.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : On ne lance la fonction que sur les 3 478 premières lignes. La liste ainsi récupérée compte déjà 100 éléments.
    Les six premiers des 100 tuples.

      >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
      >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
      >>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
      >>> print(len(list_of_tuples_tab))
      >>> print(extract_etabs_prive_public(list_of_tuples_tab)[0:6]) 
      >>> print(len(extract_etabs_prive_public(list_of_tuples_tab))) 
      3478
      [('49', 11, 35), ('50', 14, 5), ('53', 10, 7), ('54', 16, 1), ('55', 11, 1), ('56', 22, 6)]
      100
  """
  pass

  sortie = []
  # On récupère la liste des départements
  departements=extract_col(tab,22)
  # On supprime les doublons
  departements_sans_doublons = []
  for dep in departements :
    if (dep not in departements_sans_doublons) and (dep != 'code_departement') :
      departements_sans_doublons.append(dep)
  # On renvoit la liste de tuples (numéro département, nombre d’établissements publics, nombre d’établissements privés)
  # pour chaque département
  for dep in departements_sans_doublons :
    sortie.append(extract_etabs_prive_public_dep(tab,dep))
  return sortie

################################  TESTS ####################################
# print(len(list_of_tuples_tab))
# print(extract_etabs_prive_public(list_of_tuples_tab)[0:6]) 
# print(len(extract_etabs_prive_public(list_of_tuples_tab))) 
############################################################################

############################################################################################################
#  Renvoyer la sous-liste des établissements d’un département donné (colonne W).
############################################################################################################
def extract_etabs_dep(tab: list,dep:str)->list:
  """Une fonction qui renvoie la sous-liste des établissements d’un département donné (colonne W).

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * param : La chaîne de caractère contenant le numéro du département souhaité.

    `Sorties`

        * extract_col_critere(tab,22,dep,1) : Une liste avec les noms des établissements du département.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Les noms des quatre premiers établissements de Maine-et-Loire (49), il y en a  866 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_dep(global_list_of_tuples_tab,'49')[0:4])
    >>> print(len(extract_etabs_dep(global_list_of_tuples_tab,'49')))
    ['Lycée professionnel Simone Veil', 'Collège Jean Rostand', 'Collège Colbert', 'Lycée général et technologique Henri Bergson']
    866
  """
  pass

  return extract_col_critere(tab,22,dep,1)

################################  TESTS ####################################
# Un test avec le departement 49
# print(extract_etabs_dep(global_list_of_tuples_tab,'49')[0:4])
# print(len(extract_etabs_dep(global_list_of_tuples_tab,'49')))
############################################################################

############################################################################################################
# Renvoyer la sous-liste des établissements ouverts avant une date donnée (colonne AI) sous la
# forme « JJ/MM/AAAA »
# Attention dans le fichier csv la date est au format aaaa-mm-jj
#
# On crée d'abord trois fonctions pour extraire l'année, le mois et le jour d'ouverture d'un établissement
# On utilise ensuite ces fonctions pour créer la fonction demandée
############################################################################################################
def extract_date_annee(tuple: tuple)->int:
  """Une fonction pour extraire l’année d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[0] : L’année d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert en 1965.
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_annee(global_list_of_tuples_tab[1]))
    1965    
  """
  pass

  return tuple[34].split('-')[0]

def extract_date_mois(tuple: tuple)->int:
  """Une fonction pour extraire le mois d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[1] : Le mois d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert en 05 --> mai.
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_mois(list_of_tuples_tab[1]))
    05    
  """
  pass

  return tuple[34].split('-')[1]

def extract_date_jour(tuple: tuple)->int:
  """Une fonction pour extraire le jour d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[2] : Le jour d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert le 01 du mois .
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_jour(list_of_tuples_tab[1]))
    01    
  """
  pass

  return tuple[34].split('-')[2]

################################  TESTS ####################################
# Un test avec la 1ere ligne du fichier csv
#print(extract_date_annee(global_list_of_tuples_tab[1]))
#print(extract_date_mois(global_list_of_tuples_tab[1]))
#print(extract_date_jour(global_list_of_tuples_tab[1]))
############################################################################

def extract_etabs_avant_date(tab: list,date: str)->list:
  """Renvoyer la sous-liste des établissements ouverts avant une date donnée (colonne AI) sous la forme « JJ/MM/AAAA »

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * date : Une date au formmat JJ/MM/AAAA.

    `Sorties`

        * sortie : Une liste de tuples des établissements concernés.
    
    `Notes`

    Attention dans le fichier csv la date est au format aaaa-mm-jj

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples`

    Exemple1 : Les deux premiers établissements ouverts avant le 01/06/1965, il y en a 6 349 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')[0:2])
    >>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')))
    [('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
    6349
      

    Exemple2 : Les deux premiers établissements ouverts avant le 01/06/1963, il y en a 588 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')[0:2])
    >>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')))
    [('0761349D', "Section d'enseignement professionnel Saint Vincent de Paul", 'SECTION ENSEIGT PROFES.PRIVEE', 'SAINT VINCENT DE PAUL', 'Privé', "25 rue Dumont d'Urville", '', '', '76600', 'LE HAVRE', 'Le Havre', '492370.9', '6935463.5', 'EPSG:2154', '49.4846407047151', '0.1350898831624335', 'Parfaite', 'Numéro de rue', '334', 'SECTION D ENSEIGNEMENT PROFESSIONNEL', '1', 'OUVERT', '76', '28', '21', '76351', 'Seine-Maritime', 'Normandie', 'Rouen', '49.4846407047,0.135089883162', '30', "CONTRAT D'ASSOCIATION TOUTES CLASSES", '6', "MINISTERE DE L'EDUCATION NATIONALE", '1952-05-27'), ('0711311P', 'Ecole primaire Le parc', 'ECOLE ELEMENTAIRE PUBLIQUE', 'LE PARC', 'Public', 'Rue Capitaine Repoux', '', '', '71400', 'AUTUN', 'Autun', '798299.6', '6650746.2', 'EPSG:2154', '46.949677986824724', '4.292499437238714', 'Parfaite', 'Rue', '151', 'ECOLE DE NIVEAU ELEMENTAIRE', '1', 'OUVERT', '71', '27', '7', '71014', 'Saône-et-Loire', 'Bourgogne-Franche-Comté', 'Dijon', '46.9496779868,4.29249943724', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1962-09-01')]
    588 

  """
  pass

  # On récupère les établissements dans une liste
  sortie = []
  # On découpe la chaine selon le caractère slash /
  date_split = date.split('/')
  # On récupère le jour
  JJ=date_split[0]
  # On récupère le mois  
  MM=date_split[1]
  # On récupère l'année 
  AAAA=date_split[2]
  # On forme la date telle que trouvée dans le fichier csv
  date_csv=AAAA+"-"+MM+"-"+JJ  
  # On récupère les lignes dont la date est antérieure à la date donnée
  for ligne in tab:
    if (extract_date_annee(ligne)<AAAA):
      sortie.append(ligne)
    if (extract_date_annee(ligne)==AAAA) and (extract_date_mois(ligne)<MM):
      sortie.append(ligne)
    if (extract_date_annee(ligne)==AAAA) and (extract_date_mois(ligne)==MM) and (extract_date_jour(ligne)<=JJ):
      sortie.append(ligne)
  return sortie

################################  TESTS ########################################
# Un test avec 01/06/1965
# print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')[0:2])
# print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')))

# Un test avec 01/06/1963
# print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')[0:2])
# print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')))
################################################################################

Functions

def cut_list(mylist: list, nb_sub_list: int) ‑> list

Divise une liste en nb_sub_list sous-listes.

Paramètres

* mylist : Une liste.
* nb_sub_list : Le nombre de sous-listes souhaité.

Sorties

* out_list : Une liste de listes.

Notes

* Cette fonction est utile pour diviser les grandes listes de listes.

* Si 'nb_sub_list' est supérieur au nombre d’éléments de la list,
les dernières sous listes sont vides et chaque sous liste ne contient
qu’un seul élément.

* Si le nombre d’éléments de la list n’est pas un multiple
de 'nb_sub_list' la dernière liste n’a pas le même nombre
d’éléments que les autres.
Elle contient le reste de la division euclidienne du nombre d’éléments
de la liste à diviser par (nombre de sous-liste -1).

Exemples

>>> my_list_to_cut = [1,2,3,4,5,6,7,8,9,10,11]
>>> cut_list(my_list_to_cut,4)
[[1,2,3],[4,5,6],[7,8,9],[10,11]]
>>> cut_list(my_list_to_cut,5)
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10,11]]
>>> cut_list(my_list_to_cut,6)
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11]]
>>> cut_list(my_list_to_cut,7)
[[1], [2], [3], [4], [5], [6], [7, 8, 9, 10, 11]]
>>> cut_list(my_list_to_cut,13)
[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [], []]
Expand source code
def cut_list(mylist: list, nb_sub_list: int) -> list:
  """Divise une liste en **nb_sub_list** sous-listes.        

    `Paramètres`

        * mylist : Une liste.
        * nb_sub_list : Le nombre de sous-listes souhaité.

    `Sorties`

        * out_list : Une liste de listes.
    
    `Notes`
    
        * Cette fonction est utile pour diviser les grandes listes de listes.

        * Si 'nb_sub_list' est supérieur au nombre d’éléments de la list,
        les dernières sous listes sont vides et chaque sous liste ne contient
        qu’un seul élément.

        * Si le nombre d’éléments de la list n’est pas un multiple
        de 'nb_sub_list' la dernière liste n’a pas le même nombre
        d’éléments que les autres.
        Elle contient le reste de la division euclidienne du nombre d’éléments
        de la liste à diviser par (nombre de sous-liste -1).

    `Exemples`
    
    >>> my_list_to_cut = [1,2,3,4,5,6,7,8,9,10,11]
    >>> cut_list(my_list_to_cut,4)
    [[1,2,3],[4,5,6],[7,8,9],[10,11]]
    >>> cut_list(my_list_to_cut,5)
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10,11]]
    >>> cut_list(my_list_to_cut,6)
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11]]
    >>> cut_list(my_list_to_cut,7)
    [[1], [2], [3], [4], [5], [6], [7, 8, 9, 10, 11]]
    >>> cut_list(my_list_to_cut,13)
    [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [], []]    
  """
  pass

  nb_elt_sub_list = len(mylist)//(nb_sub_list-1)
  out_list = []

  if (nb_sub_list>len(mylist)):
    for i in range(nb_sub_list):
      out_list.append(mylist[i:i+1])
  else:
    for i in range(nb_sub_list-1):
      out_list.append(mylist[i*nb_elt_sub_list:(i+1)*nb_elt_sub_list])
    out_list.append(mylist[(nb_sub_list-1)*nb_elt_sub_list:])
  
  return out_list
def extract_col(tab: list, col: int) ‑> tuple

Fonction pour extraire les éléments d’une colonne donnée.

Paramètres

* tab : Une liste.
* col : L’index de la colonne dans laquelle se trouvent
les données à extraire.

Sorties

* sortie : Les données contenues dans la colonnes.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...

Exemples :

Extraire l’entête et les 4 premiers numéros uai des établissements

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_col(global_list_of_tuples_tab[0:5],0))
('numero_uai', '0490005P', '0490048L', '0491025Y', '0491966W')

Extraire l’entête et les 4 premiers libellés des communes des établissements

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_col(global_list_of_tuples_tab[0:5],10))
('libelle_commune', 'Angers', 'Trélazé', 'Cholet', 'Angers')
Expand source code
def extract_col(tab: list,col: int)->tuple:
  """Fonction pour extraire les éléments d’une colonne donnée.

    `Paramètres`

        * tab : Une liste.
        * col : L’index de la colonne dans laquelle se trouvent
        les données à extraire.

    `Sorties`

        * sortie : Les données contenues dans la colonnes.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
    
    `Exemples` : 
    
    Extraire l’entête et les 4 premiers numéros uai des établissements

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_col(global_list_of_tuples_tab[0:5],0))
    ('numero_uai', '0490005P', '0490048L', '0491025Y', '0491966W')

    Extraire l’entête et les 4 premiers libellés des communes des établissements

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_col(global_list_of_tuples_tab[0:5],10))
    ('libelle_commune', 'Angers', 'Trélazé', 'Cholet', 'Angers')
  """
  pass

  # un tuple pour récupérer les élement en sortie
  sortie = ()
  # On parcourt le tableau et on récupère l'index col de chaque élément
  for elt in tab:
    #print(elt)
    sortie = sortie + (elt[col],)
  return sortie
def extract_col_critere(tab: list, col: int, critere: str, col_crit: int) ‑> list

Fonction pour extraire les éléments d’une colonne donnée via un critère donné.

Paramètres

* tab : Une liste.
* col : L’index de la colonne à extraire.
* critere : Une chaine de caractères avec le critère de séléction.
Les valeurs possibles pour le critère doivent être récupérées 
au préalable dans des tuples par exemple.
* col_crit : L’index de la colonne contenant les éléments à extraire.

Sorties

* sortie : Une liste avec les éléments souhaités.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement

Exemples

Exemple 1, on extrait les noms des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
>>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
>>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet']
125

Exemple 2, on extrait le secteur public/privé des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
>>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
>>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
['Public', 'Public', 'Public', 'Privé', 'Public']
125
Expand source code
def extract_col_critere(tab: list,col: int,critere: str,col_crit: int)->list:
  """Fonction pour extraire les éléments d’une colonne donnée via un critère donné.

    `Paramètres`

        * tab : Une liste.
        * col : L’index de la colonne à extraire.
        * critere : Une chaine de caractères avec le critère de séléction.
        Les valeurs possibles pour le critère doivent être récupérées 
        au préalable dans des tuples par exemple.
        * col_crit : L’index de la colonne contenant les éléments à extraire.

    `Sorties`

        * sortie : Une liste avec les éléments souhaités.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
    
    `Exemples`

    Exemple 1, on extrait les noms des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
    >>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
    >>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet']
    125

    Exemple 2, on extrait le secteur public/privé des établissements situés à Angers, on n'affiche que les 4 premiers sur les 125 au total :
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)     
    >>> print(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)[0:5])
    >>> print(len(extract_col_critere(global_list_of_tuples_tab,10,'Angers',1)))
    ['Public', 'Public', 'Public', 'Privé', 'Public']
    125
  """
  pass

  # une liste pour récupérer les élement en sortie
  sortie = []  
  #compteur pour recuperer les index
  i=0
  # On parcourt le tableau et on récupère les index des éléments qui correspondent au critère
  tab_col = extract_col(tab,col)
  for elt in tab_col:   
    if (elt == critere):      
      sortie.append(tuple(tab[i])[col_crit])
    i+=1     
  return sortie
def extract_date_annee(tuple: tuple) ‑> int

Une fonction pour extraire l’année d’ouverture de l’établissement.

Paramètres

* tuple : Un tuple issu de l’extraction du fichier csv.

Sorties

* tuple[34].split('-')[0] : L’année d’ouverture de l’établissement.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement
* ...
* 34 date_ouverture

Exemples : Le premier établissement de la liste a été ouvert en 1965.

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_date_annee(global_list_of_tuples_tab[1]))
1965
Expand source code
def extract_date_annee(tuple: tuple)->int:
  """Une fonction pour extraire l’année d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[0] : L’année d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert en 1965.
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_annee(global_list_of_tuples_tab[1]))
    1965    
  """
  pass

  return tuple[34].split('-')[0]
def extract_date_jour(tuple: tuple) ‑> int

Une fonction pour extraire le jour d’ouverture de l’établissement.

Paramètres

* tuple : Un tuple issu de l’extraction du fichier csv.

Sorties

* tuple[34].split('-')[2] : Le jour d’ouverture de l’établissement.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement
* ...
* 34 date_ouverture

Exemples : Le premier établissement de la liste a été ouvert le 01 du mois .

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_date_jour(list_of_tuples_tab[1]))
01
Expand source code
def extract_date_jour(tuple: tuple)->int:
  """Une fonction pour extraire le jour d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[2] : Le jour d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert le 01 du mois .
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_jour(list_of_tuples_tab[1]))
    01    
  """
  pass

  return tuple[34].split('-')[2]
def extract_date_mois(tuple: tuple) ‑> int

Une fonction pour extraire le mois d’ouverture de l’établissement.

Paramètres

* tuple : Un tuple issu de l’extraction du fichier csv.

Sorties

* tuple[34].split('-')[1] : Le mois d’ouverture de l’établissement.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement
* ...
* 34 date_ouverture

Exemples : Le premier établissement de la liste a été ouvert en 05 –> mai.

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_date_mois(list_of_tuples_tab[1]))
05
Expand source code
def extract_date_mois(tuple: tuple)->int:
  """Une fonction pour extraire le mois d’ouverture de l’établissement. 

    `Paramètres`

        * tuple : Un tuple issu de l’extraction du fichier csv.

    `Sorties`

        * tuple[34].split('-')[1] : Le mois d’ouverture de l’établissement.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Le premier établissement de la liste a été ouvert en 05 --> mai.
    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_date_mois(list_of_tuples_tab[1]))
    05    
  """
  pass

  return tuple[34].split('-')[1]
def extract_donnees_csv(path: str) ‑> list

Une fonction pour extraire les données d’un fichier csv sous forme d'une liste de tuples.

Paramètres

* path : Chemin vers le fichier csv.

Sorties

* local_list_of_tuples_tab : Une liste de tuples.

Exemples

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs) 
>>> print(global_list_of_tuples_tab[1:3])
>>> print(len(global_list_of_tuples_tab))
[('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
66096
Expand source code
def extract_donnees_csv(path:str) -> list:
  """Une fonction pour extraire les données d’un fichier csv sous forme d'une liste de tuples.

    `Paramètres`    

        * path : Chemin vers le fichier csv.

    `Sorties`    

        * local_list_of_tuples_tab : Une liste de tuples.
          
    `Exemples`    

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs) 
    >>> print(global_list_of_tuples_tab[1:3])
    >>> print(len(global_list_of_tuples_tab))
    [('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
    66096
  """
  pass

  local_list_of_tuples_tab = []
  # On ouvre le fichier *.csv en lecture
  with open(path, newline='') as read_tab:
      # On passe l'objet à la méthode reader() pour récupérer l'objet reader 
      csv_reader = csv.reader(read_tab, delimiter=';')
      # On recupère toutes les lignes du fichier *.csv à partir de l'objet csv_reader sous forme d'une liste de tuples
      for row in csv_reader:      
          local_list_of_tuples_tab.append(tuple(row))
  return local_list_of_tuples_tab
def extract_etabs_avant_date(tab: list, date: str) ‑> list

Renvoyer la sous-liste des établissements ouverts avant une date donnée (colonne AI) sous la forme « JJ/MM/AAAA »

Paramètres

* tab : Une liste de tuples issue de l'extraction du fichier csv.
* date : Une date au formmat JJ/MM/AAAA.

Sorties

* sortie : Une liste de tuples des établissements concernés.

Notes

Attention dans le fichier csv la date est au format aaaa-mm-jj

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement
* ...
* 34 date_ouverture

Exemples

Exemple1 : Les deux premiers établissements ouverts avant le 01/06/1965, il y en a 6 349 !

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')[0:2])
>>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')))
[('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
6349

Exemple2 : Les deux premiers établissements ouverts avant le 01/06/1963, il y en a 588 !

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')[0:2])
>>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')))
[('0761349D', "Section d'enseignement professionnel Saint Vincent de Paul", 'SECTION ENSEIGT PROFES.PRIVEE', 'SAINT VINCENT DE PAUL', 'Privé', "25 rue Dumont d'Urville", '', '', '76600', 'LE HAVRE', 'Le Havre', '492370.9', '6935463.5', 'EPSG:2154', '49.4846407047151', '0.1350898831624335', 'Parfaite', 'Numéro de rue', '334', 'SECTION D ENSEIGNEMENT PROFESSIONNEL', '1', 'OUVERT', '76', '28', '21', '76351', 'Seine-Maritime', 'Normandie', 'Rouen', '49.4846407047,0.135089883162', '30', "CONTRAT D'ASSOCIATION TOUTES CLASSES", '6', "MINISTERE DE L'EDUCATION NATIONALE", '1952-05-27'), ('0711311P', 'Ecole primaire Le parc', 'ECOLE ELEMENTAIRE PUBLIQUE', 'LE PARC', 'Public', 'Rue Capitaine Repoux', '', '', '71400', 'AUTUN', 'Autun', '798299.6', '6650746.2', 'EPSG:2154', '46.949677986824724', '4.292499437238714', 'Parfaite', 'Rue', '151', 'ECOLE DE NIVEAU ELEMENTAIRE', '1', 'OUVERT', '71', '27', '7', '71014', 'Saône-et-Loire', 'Bourgogne-Franche-Comté', 'Dijon', '46.9496779868,4.29249943724', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1962-09-01')]
588
Expand source code
def extract_etabs_avant_date(tab: list,date: str)->list:
  """Renvoyer la sous-liste des établissements ouverts avant une date donnée (colonne AI) sous la forme « JJ/MM/AAAA »

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * date : Une date au formmat JJ/MM/AAAA.

    `Sorties`

        * sortie : Une liste de tuples des établissements concernés.
    
    `Notes`

    Attention dans le fichier csv la date est au format aaaa-mm-jj

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples`

    Exemple1 : Les deux premiers établissements ouverts avant le 01/06/1965, il y en a 6 349 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')[0:2])
    >>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1965')))
    [('0490005P', 'Lycée professionnel Simone Veil', 'LYCEE PROFESSIONNEL', 'SIMONE VEIL', 'Public', '77 rue DE SALPINTE', '', '61004', '49015', 'ANGERS CEDEX 01', 'Angers', '432487.8', '6711374.0', 'EPSG:2154', '47.44857212735416', '-0.5512003228265708', 'Correcte', 'Numéro de rue', '320', 'LYCEE PROFESSIONNEL', '1', 'OUVERT', '49', '52', '17', '49007', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4485721274,-0.551200322827', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01'), ('0490048L', 'Collège Jean Rostand', 'COLLEGE', 'JEAN ROSTAND', 'Public', '142 avenue de la République', '', '', '49800', 'TRELAZE', 'Trélazé', '436341.5', '6711287.7', 'EPSG:2154', '47.44934443235111', '-0.5000595269804583', 'Parfaite', 'Numéro de rue', '340', 'COLLEGE', '1', 'OUVERT', '49', '52', '17', '49353', 'Maine-et-Loire', 'Pays de la Loire', 'Nantes', '47.4493444324,-0.50005952698', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1965-05-01')]
    6349
      

    Exemple2 : Les deux premiers établissements ouverts avant le 01/06/1963, il y en a 588 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')[0:2])
    >>> print(len(extract_etabs_avant_date(global_list_of_tuples_tab,'01/06/1963')))
    [('0761349D', "Section d'enseignement professionnel Saint Vincent de Paul", 'SECTION ENSEIGT PROFES.PRIVEE', 'SAINT VINCENT DE PAUL', 'Privé', "25 rue Dumont d'Urville", '', '', '76600', 'LE HAVRE', 'Le Havre', '492370.9', '6935463.5', 'EPSG:2154', '49.4846407047151', '0.1350898831624335', 'Parfaite', 'Numéro de rue', '334', 'SECTION D ENSEIGNEMENT PROFESSIONNEL', '1', 'OUVERT', '76', '28', '21', '76351', 'Seine-Maritime', 'Normandie', 'Rouen', '49.4846407047,0.135089883162', '30', "CONTRAT D'ASSOCIATION TOUTES CLASSES", '6', "MINISTERE DE L'EDUCATION NATIONALE", '1952-05-27'), ('0711311P', 'Ecole primaire Le parc', 'ECOLE ELEMENTAIRE PUBLIQUE', 'LE PARC', 'Public', 'Rue Capitaine Repoux', '', '', '71400', 'AUTUN', 'Autun', '798299.6', '6650746.2', 'EPSG:2154', '46.949677986824724', '4.292499437238714', 'Parfaite', 'Rue', '151', 'ECOLE DE NIVEAU ELEMENTAIRE', '1', 'OUVERT', '71', '27', '7', '71014', 'Saône-et-Loire', 'Bourgogne-Franche-Comté', 'Dijon', '46.9496779868,4.29249943724', '99', 'SANS OBJET', '6', "MINISTERE DE L'EDUCATION NATIONALE", '1962-09-01')]
    588 

  """
  pass

  # On récupère les établissements dans une liste
  sortie = []
  # On découpe la chaine selon le caractère slash /
  date_split = date.split('/')
  # On récupère le jour
  JJ=date_split[0]
  # On récupère le mois  
  MM=date_split[1]
  # On récupère l'année 
  AAAA=date_split[2]
  # On forme la date telle que trouvée dans le fichier csv
  date_csv=AAAA+"-"+MM+"-"+JJ  
  # On récupère les lignes dont la date est antérieure à la date donnée
  for ligne in tab:
    if (extract_date_annee(ligne)<AAAA):
      sortie.append(ligne)
    if (extract_date_annee(ligne)==AAAA) and (extract_date_mois(ligne)<MM):
      sortie.append(ligne)
    if (extract_date_annee(ligne)==AAAA) and (extract_date_mois(ligne)==MM) and (extract_date_jour(ligne)<=JJ):
      sortie.append(ligne)
  return sortie
def extract_etabs_commune(tab: list, commune: str) ‑> list

Fonction pour extraire la sous liste des établissements d’une commune donnée.

Paramètres

* tab : Une liste de tuples issue de l'extraction du fichier csv.
* commune : Une chaîne de caractères avec le nom de la commune.

Sorties

* extract_col_critere(tab,10,commune,1) : Une liste avec les noms des établissements de la commune.

Notes

On gère la casse car dans le fichier csv le nom des communes est formatté. La première lettre est en majuscule, les autres sont en minuscules. On a besoin de ce format pour passer l'argument à la fonction extract_col()

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement

Exemples

On teste sur une partie du tableau global pour gagner du temps car le fichier csv global compte 60 096 lignes. On coupe le fichier global en 20 sous-tableaux. On ne traite donc que les 3 478 premières lignes pour l'exemple. Quelle que soit la casse entrée pour Angers, le tableau de sortie est le même !

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)  
>>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
>>> print(len(list_of_tuples_tab))
>>> print(extract_etabs_commune(list_of_tuples_tab,'aNGERS'))
>>> print(extract_etabs_commune(list_of_tuples_tab,'angerS'))
>>> print(extract_etabs_commune(list_of_tuples_tab,'ANGERS'))
>>> print(extract_etabs_commune(list_of_tuples_tab,'angers'))
3478
['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
Expand source code
def extract_etabs_commune(tab: list,commune: str)->list:
  """Fonction pour extraire la sous liste des établissements d’une commune donnée.

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * commune : Une chaîne de caractères avec le nom de la commune.

    `Sorties`

        * extract_col_critere(tab,10,commune,1) : Une liste avec les noms des établissements de la commune.
    
    `Notes`
      
      On gère la casse car dans le fichier csv le nom des communes est formatté.
      La première lettre est en majuscule, les autres sont en minuscules.
      On a besoin de ce format pour passer l'argument à la fonction extract_col()

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
    
    `Exemples`

    On teste sur une partie du tableau global pour gagner du temps car le fichier csv global compte 
    60 096 lignes. On coupe le fichier global en 20 sous-tableaux.
    On ne traite donc que les 3 478 premières lignes pour l'exemple.
    Quelle que soit la casse entrée pour Angers, le tableau de sortie est le même !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)  
    >>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
    >>> print(len(list_of_tuples_tab))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'aNGERS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'angerS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'ANGERS'))
    >>> print(extract_etabs_commune(list_of_tuples_tab,'angers'))
    3478
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
    ['Lycée professionnel Simone Veil', 'Lycée général et technologique Henri Bergson', 'Ecole maternelle Alfred de Musset', 'INSTITUTION MARIA MONTESSORI', 'Ecole primaire Condorcet', 'Ecole élémentaire privée Immaculée-Conception', 'Ecole primaire privée Saint Laud', 'Ecole primaire privée Sainte Bernadette']
  """
  pass

  # On gère la casse
  # Dans le tableau le nom des communes est formatté
  # 1ere lettre en majuscule, les autres en minuscules
  # On a besoin de ce format pour passer l'argument à la fonction extract_col()
  commune = commune[0].upper()+commune[1:].lower()    
  return extract_col_critere(tab,10,commune,1)
def extract_etabs_dep(tab: list, dep: str) ‑> list

Une fonction qui renvoie la sous-liste des établissements d’un département donné (colonne W).

Paramètres

* tab : Une liste de tuples issue de l'extraction du fichier csv.
* param : La chaîne de caractère contenant le numéro du département souhaité.

Sorties

* extract_col_critere(tab,22,dep,1) : Une liste avec les noms des établissements du département.

Notes

* 0  numero_uai
* 1  appelation_officielle
* 4  secteur_public_prive_libe
* ...
* 10 libelle_commune 
* ...
* 22 code_departement
* ...
* 34 date_ouverture

Exemples : Les noms des quatre premiers établissements de Maine-et-Loire (49), il y en a 866 !

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_etabs_dep(global_list_of_tuples_tab,'49')[0:4])
>>> print(len(extract_etabs_dep(global_list_of_tuples_tab,'49')))
['Lycée professionnel Simone Veil', 'Collège Jean Rostand', 'Collège Colbert', 'Lycée général et technologique Henri Bergson']
866
Expand source code
def extract_etabs_dep(tab: list,dep:str)->list:
  """Une fonction qui renvoie la sous-liste des établissements d’un département donné (colonne W).

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * param : La chaîne de caractère contenant le numéro du département souhaité.

    `Sorties`

        * extract_col_critere(tab,22,dep,1) : Une liste avec les noms des établissements du département.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Les noms des quatre premiers établissements de Maine-et-Loire (49), il y en a  866 !

    >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
    >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
    >>> print(extract_etabs_dep(global_list_of_tuples_tab,'49')[0:4])
    >>> print(len(extract_etabs_dep(global_list_of_tuples_tab,'49')))
    ['Lycée professionnel Simone Veil', 'Collège Jean Rostand', 'Collège Colbert', 'Lycée général et technologique Henri Bergson']
    866
  """
  pass

  return extract_col_critere(tab,22,dep,1)
def extract_etabs_prive_public(tab: list) ‑> list

Une fonction qui renvoie la liste du nombre d’établissements privés et publics (colonne E) de chaque département (colonne W), sous la forme d’une liste de tuples.

(numéro département, nombre d’établissements publics, nombre d’établissements privés)

Paramètres

  * tab : Une liste de tuples issue de l'extraction du fichier csv.

Sorties

  * sortie : Une liste de tuples.

Notes

  * 0  numero_uai
  * 1  appelation_officielle
  * 4  secteur_public_prive_libe
  * ...
  * 10 libelle_commune 
  * ...
  * 22 code_departement
  * ...
  * 34 date_ouverture

Exemples : On ne lance la fonction que sur les 3 478 premières lignes. La liste ainsi récupérée compte déjà 100 éléments. Les six premiers des 100 tuples.

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
>>> print(len(list_of_tuples_tab))
>>> print(extract_etabs_prive_public(list_of_tuples_tab)[0:6]) 
>>> print(len(extract_etabs_prive_public(list_of_tuples_tab))) 
3478
[('49', 11, 35), ('50', 14, 5), ('53', 10, 7), ('54', 16, 1), ('55', 11, 1), ('56', 22, 6)]
100
Expand source code
def extract_etabs_prive_public(tab: list) -> list:
  """Une fonction qui renvoie la liste du nombre d’établissements privés et publics (colonne E) de chaque département
  (colonne W), sous la forme d’une liste de tuples.

  (numéro département, nombre d’établissements publics, nombre d’établissements privés)

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        

    `Sorties`

        * sortie : Une liste de tuples.
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : On ne lance la fonction que sur les 3 478 premières lignes. La liste ainsi récupérée compte déjà 100 éléments.
    Les six premiers des 100 tuples.

      >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
      >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
      >>> list_of_tuples_tab = cut_list(global_list_of_tuples_tab,20)[0]
      >>> print(len(list_of_tuples_tab))
      >>> print(extract_etabs_prive_public(list_of_tuples_tab)[0:6]) 
      >>> print(len(extract_etabs_prive_public(list_of_tuples_tab))) 
      3478
      [('49', 11, 35), ('50', 14, 5), ('53', 10, 7), ('54', 16, 1), ('55', 11, 1), ('56', 22, 6)]
      100
  """
  pass

  sortie = []
  # On récupère la liste des départements
  departements=extract_col(tab,22)
  # On supprime les doublons
  departements_sans_doublons = []
  for dep in departements :
    if (dep not in departements_sans_doublons) and (dep != 'code_departement') :
      departements_sans_doublons.append(dep)
  # On renvoit la liste de tuples (numéro département, nombre d’établissements publics, nombre d’établissements privés)
  # pour chaque département
  for dep in departements_sans_doublons :
    sortie.append(extract_etabs_prive_public_dep(tab,dep))
  return sortie
def extract_etabs_prive_public_dep(tab: list, dep: str) ‑> tuple

Une fonction qui renvoie le nombre d’établissements privés et publics (colonne E) d'un département (colonne W), sous la forme d’une liste de tuples.

(numéro département, nombre d’établissements publics, nombre d’établissements privés)

Paramètres

  * tab : Une liste de tuples issue de l'extraction du fichier csv.
  * dep : La chaîne de caractère contenant le numéro du département souhaité.

Sorties

  * (dep,publics,prives) : Un tuple avec (numéro département, nombre d’établissements publics, nombre d’établissements privés)

Notes

  * 0  numero_uai
  * 1  appelation_officielle
  * 4  secteur_public_prive_libe
  * ...
  * 10 libelle_commune 
  * ...
  * 22 code_departement
  * ...
  * 34 date_ouverture

Exemples : Pour le Maine-et-Loire (49), il y a 520 établissements publics et 346 privés.

>>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
>>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
>>> print(extract_etabs_prive_public_dep(global_list_of_tuples_tab,'49')) 
('49', 520, 346)
Expand source code
def extract_etabs_prive_public_dep(tab: list,dep: str)->tuple:
  """Une fonction qui renvoie le nombre d’établissements privés et publics (colonne E) d'un département (colonne W),
  sous la forme d’une liste de tuples.
  
  (numéro département, nombre d’établissements publics, nombre d’établissements privés)

    `Paramètres`

        * tab : Une liste de tuples issue de l'extraction du fichier csv.
        * dep : La chaîne de caractère contenant le numéro du département souhaité.

    `Sorties`

        * (dep,publics,prives) : Un tuple avec (numéro département, nombre d’établissements publics, nombre d’établissements privés)
    
    `Notes`

        * 0  numero_uai
        * 1  appelation_officielle
        * 4  secteur_public_prive_libe
        * ...
        * 10 libelle_commune 
        * ...
        * 22 code_departement
        * ...
        * 34 date_ouverture
    
    `Exemples` : Pour le Maine-et-Loire (49), il y a 520 établissements publics et 346 privés.
    
      >>> path_to_tab_etabs = './data/etabs_1er_2e_deg_prod.csv'
      >>> global_list_of_tuples_tab = extract_donnees_csv(path_to_tab_etabs)
      >>> print(extract_etabs_prive_public_dep(global_list_of_tuples_tab,'49')) 
      ('49', 520, 346)    
  """
  pass

  # nombre d'établissements publics  
  publics=0
  # nombre d'établissements privés  
  prives=0
  for elt in extract_col_critere(tab,22,dep,4):
    if (elt=='Public'):
      publics+=1
    if (elt=='Privé'):
      prives+=1
  return (dep,publics,prives)