Aller au contenu

Discussion:Liste des pays par IDH ajusté selon les inégalités

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Ajouter un sujet
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

Où est Cuba?

[modifier le code]

Cuba est 70eme sur la source fournie, et pas sur le tableau de l'article 2001:861:5E51:EB50:864:64E7:24DB:B38A (discuter) 7 juin 2022 à 11:54 (CEST)Répondre

code python pour mettre à jour

[modifier le code]

J'ai fait un petit script pour analyser le fichier excel et donner le tableau mis à jour. Le fichier excel est trouvable ici [1] (table 3) Le code ci dessous compulse le fihier excel, et enregistre dans un ficchier texte (Sortie.txt) le tableau mis à jour. il reste deux trois opérations à faire à la main, notamment l'en tête du tableau, la ligne "monde", et corriger les noms de pays qui n'ont pas été traduit automatiquement. il faut deux modules python openpyxl, et country_list.

from openpyxl import load_workbook
from country_list import countries_for_language


def litpays(ws, iligne):
    nom_anglais = ws['B'+str(iligne)].value
    IDH = ws['C'+str(iligne)].value
    IDHI = ws['E'+str(iligne)].value
    loss = ws['G'+str(iligne)].value
    return nom_anglais, IDH, IDHI, loss    
    

def formatte_pays(rang, p):
    # nom du pays
    try:
        francais = traduirenom(p[0])
    except: # pays quer countrylist ne peut pas traduire
        francais = p[0]
    strpays = """
        |-
        |{0}
        | style="text-align: left;" |{1}
        |{2}
        |{3}
        |{4:1.1f}%""".format(rang+1, '{{'+francais+'}}', p[1], p[2], p[3])
    # rang+1 car ça commence à zéro 
    return strpays

wb = load_workbook('2020_Statistical_Annex_Table_3.xlsx', read_only=True)
ws = wb['Table 3']

strsortie = """<!-- début du texte généré par le code python -->  """ 

noms_fr = dict(countries_for_language('fr'))
noms_en = dict(countries_for_language('en'))
# fonction pour traduire le nom de pays en français : 
traduirenom = lambda nom_en : noms_fr[list(noms_en.keys())[list(noms_en.values()).index(nom_en)]]

liste_pays = []
for iligne in range(5, 200):
    
    cell_name = 'A'+str(iligne)
    value = ws[cell_name].value
    if value is not None: # cellule non vide
        nom_anglais, IDH, IDHI, loss =  litpays(ws, iligne)
        if IDHI != '..': #données dispo
            liste_pays.append((nom_anglais, IDH, IDHI, loss))
            
        
# maintenant on classe par IDH
liste_par_IDHI= sorted(liste_pays, key=lambda x:-x[2])
       
for rang, p in enumerate(liste_par_IDHI):
    strsortie= strsortie+formatte_pays(rang,p)
     
strsortie = strsortie + '\n<!-- fin du texte généré par le code python -->'
fout = open('Sortie.txt', 'w')
fout.write(strsortie)

Raminagrobis (discuter) 6 août 2022 à 19:09 (CEST)Répondre

carte idh

[modifier le code]

La carte des IDH a l'air sacrement erronée, le Brésil doit être en vert par exemple, la carte qui prétend montrer les mêmes données est complètement différente ici : Liste des pays par IDH 2A01:CB0C:8805:3000:9AC9:1899:D505:DAF2 (discuter) 12 janvier 2025 à 01:28 (CET)Répondre

Bonjour. Il s'agit de la carte représentant l'IDHI (et non pas l'IDH). J'ai corrigé la légende. — Antimuonium discuter 16 janvier 2025 à 19:54 (CET)Répondre

Données 2025

[modifier le code]

Le code Python pour intégrer les données 2025 (merci à Raminagrobis)

#!/bin/env python3

from openpyxl import load_workbook
from country_list import countries_for_language


def litpays(ws, iligne):
    nom_anglais = ws['B'+str(iligne)].value
    IDH = ws['C'+str(iligne)].value
    IDHI = ws['E'+str(iligne)].value
    loss = ws['G'+str(iligne)].value
    ine_life = ws['O'+str(iligne)].value
    ine_educ = ws['S'+str(iligne)].value
    ine_income = ws['W'+str(iligne)].value
    poor40 = ws['Y'+str(iligne)].value
    rich10 = ws['AA'+str(iligne)].value
    rich1 = ws['AC'+str(iligne)].value
    gini = ws['AE'+str(iligne)].value
    return nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini
    

def formatte_pays(rang, p):
    # nom du pays
    missing_countries = {
        "Antigua and Barbuda" : "Antigua-et-Barbuda", 
        "Bolivia (Plurinational State of)" : "Bolivie", 
        "Bosnia and Herzegovina" : "Bosnie-Herzégovine", 
        "Brunei Darussalam" : "Brunei", 
        "Cabo Verde" : "Cap-Vert", 
        "Congo (Democratic Republic of the)" : "République démocratique du Congo", 
        "Congo" : "République du Congo", 
        "Eswatini (Kingdom of)" : "Eswatini", 
        "Hong Kong, China (SAR)" : "Hong Kong", 
        "Iran (Islamic Republic of)" : "Iran", 
        "Korea (Republic of)" : "Corée du Sud", 
        "Lao People's Democratic Republic" : "Laos", 
        "Micronesia (Federated States of)" : "États fédérés de Micronésie", 
        "Moldova (Republic of)" : "Moldavie", 
        "Palestine, State of" : "Palestine", 
        "Russian Federation" : "Russie", 
        "Saint Kitts and Nevis" : "Saint-Christophe-et-Niévès", 
        "Saint Lucia" : "Sainte-Lucie", 
        "Saint Vincent and the Grenadines" : "Saint-Vincent-et-les-Grenadines", 
        "Sao Tome and Principe" : "Sao Tomé-et-Principe", 
        "Syrian Arab Republic" : "Syrie", 
        "Tanzania (United Republic of)" : "Tanzanie", 
        "Trinidad and Tobago" : "Trinité-et-Tobago", 
        "Türkiye" : "Turquie", 
        "Venezuela (Bolivarian Republic of)" : "Vénézuela", 
        "Viet Nam" : "Vietnam", 
        "Myanmar" : "Birmanie",
    }
    if p[0] in missing_countries:
        francais = missing_countries[p[0]]
    else:
        try:
            francais = traduirenom(p[0])
        except: # pays quer countrylist ne peut pas traduire
            print("Country not found {}".format(p[0]))
            francais = p[0]
    p_l = []
    for i in range(len(p)):
        if p[i] == "..":
            p_l.append("NC")
        elif i in [ 3,7,8,9 ]:
            p_l.append("unité|{:1.1f}|%".format(p[i]))
        elif i == 10 :
            p_l.append("formatnum:{:1.1f}".format(p[i]))
        elif i != 0 :
            p_l.append("formatnum:{:1.3f}".format(p[i]))
        else:
            p_l.append(p[i])

    strpays = """
        |-
        <!-- {0} -->
        ! style="text-align: left;" scope="row" |{1}
        |{{{{{2}}}}}
        |{{{{{3}}}}}
        |{{{{{4}}}}}
        |{{{{{5}}}}}
        |{{{{{6}}}}}
        |{{{{{7}}}}}
        |{{{{{8}}}}}
        |{{{{{9}}}}}
        |{{{{{10}}}}}
        |{{{{{11}}}}}
        """.format(rang+1, '{{'+francais+'}}', p_l[1], p_l[2], p_l[3], p_l[4], p_l[5], p_l[6], p_l[7], p_l[8], p_l[9], p_l[10])
    # rang+1 car ça commence à zéro 
    return strpays

print("Load")
wb = load_workbook('HDR25_Statistical_Annex_IHDI_Table.xlsx', read_only=True)
ws = wb['Table 3. IHDI']
print("Load OK")

strsortie = """<!-- début du texte généré par le code python -->  """ 

noms_fr = dict(countries_for_language('fr'))
noms_en = dict(countries_for_language('en'))
# fonction pour traduire le nom de pays en français : 
traduirenom = lambda nom_en : noms_fr[list(noms_en.keys())[list(noms_en.values()).index(nom_en)]]

liste_pays = []
liste_paysNc = []
for iligne in range(6, 202):
    
    cell_name = 'A'+str(iligne)
    value = ws[cell_name].value
    if value is not None: # cellule non vide
        nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini =  litpays(ws, iligne)
        if IDHI != '..': #données dispo
            liste_pays.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        else:
            liste_paysNc.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
            
        
# maintenant on classe par IDH
liste_par_IDHI= sorted(liste_pays, key=lambda x:-x[2])
liste_par_IDHI += liste_paysNc
       
for rang, p in enumerate(liste_par_IDHI):
    strsortie= strsortie+formatte_pays(rang,p)
     
strsortie = strsortie + '\n<!-- fin du texte généré par le code python -->'
fout = open('Sortie.txt', 'w')
fout.write(strsortie)

Lobartas (discuter) 3 janvier 2026 à 12:46 (CET)Répondre

Mise à jour du code Python pour générer les différents tableaux

[modifier le code]
#!/bin/env python3

from openpyxl import load_workbook
from country_list import countries_for_language


def litpays(ws, iligne):
    nom_anglais = ws['B'+str(iligne)].value
    IDH = ws['C'+str(iligne)].value
    IDHI = ws['E'+str(iligne)].value
    loss = ws['G'+str(iligne)].value
    ine_life = ws['O'+str(iligne)].value
    ine_educ = ws['S'+str(iligne)].value
    ine_income = ws['W'+str(iligne)].value
    poor40 = ws['Y'+str(iligne)].value
    rich10 = ws['AA'+str(iligne)].value
    rich1 = ws['AC'+str(iligne)].value
    gini = ws['AE'+str(iligne)].value
    return nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini
    

def formatte_pays(rang, p, col):
    # nom du pays
    missing_countries = {
        "Antigua and Barbuda" : "Antigua-et-Barbuda", 
        "Bolivia (Plurinational State of)" : "Bolivie", 
        "Bosnia and Herzegovina" : "Bosnie-Herzégovine", 
        "Brunei Darussalam" : "Brunei", 
        "Cabo Verde" : "Cap-Vert", 
        "Congo (Democratic Republic of the)" : "République démocratique du Congo", 
        "Congo" : "République du Congo", 
        "Eswatini (Kingdom of)" : "Eswatini", 
        "Hong Kong, China (SAR)" : "Hong Kong", 
        "Iran (Islamic Republic of)" : "Iran", 
        "Korea (Republic of)" : "Corée du Sud", 
        "Lao People's Democratic Republic" : "Laos", 
        "Micronesia (Federated States of)" : "États fédérés de Micronésie", 
        "Moldova (Republic of)" : "Moldavie", 
        "Palestine, State of" : "Palestine", 
        "Russian Federation" : "Russie", 
        "Saint Kitts and Nevis" : "Saint-Christophe-et-Niévès", 
        "Saint Lucia" : "Sainte-Lucie", 
        "Saint Vincent and the Grenadines" : "Saint-Vincent-et-les-Grenadines", 
        "Sao Tome and Principe" : "Sao Tomé-et-Principe", 
        "Syrian Arab Republic" : "Syrie", 
        "Tanzania (United Republic of)" : "Tanzanie", 
        "Trinidad and Tobago" : "Trinité-et-Tobago", 
        "Türkiye" : "Turquie", 
        "Venezuela (Bolivarian Republic of)" : "Vénézuela", 
        "Viet Nam" : "Vietnam", 
        "Myanmar" : "Birmanie",
    }
    if p[0] in missing_countries:
        francais = missing_countries[p[0]]
    else:
        try:
            francais = traduirenom(p[0])
        except: # pays quer countrylist ne peut pas traduire
            print("Country not found {}".format(p[0]))
            francais = p[0]
    p_l = []
    for i in range(len(p)):
        if p[i] == "..":
            p_l.append("NC")
        elif i in [ 3,7,8,9,10 ]:
            p_l.append("unité|{:1.1f}|%".format(p[i]))
        elif i != 0 :
            p_l.append("formatnum:{:1.3f}".format(p[i]))
        else:
            p_l.append(p[i])

    strpays = """
        |-
        <!-- {0} -->
        ! style="text-align: left;" scope="row" |{1}""".format(rang+1, '{{'+francais+'}}')
    # rang+1 car ça commence à zéro 
    for i in col:
        strpays += "\n|{{{{{0}}}}}".format(p_l[i])
    return strpays

print("Load")
wb = load_workbook('HDR25_Statistical_Annex_IHDI_Table.xlsx', read_only=True)
ws = wb['Table 3. IHDI']
print("Load OK")


noms_fr = dict(countries_for_language('fr'))
noms_en = dict(countries_for_language('en'))
# fonction pour traduire le nom de pays en français : 
traduirenom = lambda nom_en : noms_fr[list(noms_en.keys())[list(noms_en.values()).index(nom_en)]]

liste_pays_ihdi = []
liste_pays_ine_life = []
liste_pays_ine_educ = []
liste_pays_ine_income = []
liste_pays_income = []
liste_pays_gini = []
liste_paysNc = []
for iligne in range(6, 202):
    
    cell_name = 'A'+str(iligne)
    value = ws[cell_name].value
    if value is not None: # cellule non vide
        nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini =  litpays(ws, iligne)
        if IDHI != '..': #données dispo
            liste_pays_ihdi.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        if ine_life != '..':
            liste_pays_ine_life.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        if ine_educ != '..':
            liste_pays_ine_educ.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        if ine_income != '..':
            liste_pays_ine_income.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        if rich1 != '..' :
            liste_pays_income.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
        if gini != '..':
            liste_pays_gini.append((nom_anglais, IDH, IDHI, loss, ine_life, ine_educ, ine_income, poor40, rich10, rich1, gini))
            
        
# maintenant on classe par IDH
for item_l in zip([liste_pays_ihdi,liste_pays_ine_life,  liste_pays_ine_educ, liste_pays_ine_income, liste_pays_income, liste_pays_gini],
                  ["IHDI", "INE_LIFE", "INE_EDUC", "INE_INCOME", "INCOME", "GINI"],
                  [2,4,5,6,-9,-10],
                  [ [1,2,3], [4], [5], [6], [7,8,9], [10]]):

    print(f"Generate {item_l[1]}")
    liste_pays = item_l[0]
    if item_l[2] > 0:
        # Ordre décroissant
        liste_par_item= sorted(liste_pays, key=lambda x:-x[item_l[2]])
    else:
        # Ordre croissant
        liste_par_item= sorted(liste_pays, key=lambda x:x[-item_l[2]])
       
    strsortie = """<!-- début du texte généré par le code python -->  """ 
    for rang, p in enumerate(liste_par_item):
        strsortie= strsortie+formatte_pays(rang,p,item_l[3])
     
    strsortie = strsortie + '\n<!-- fin du texte généré par le code python -->'
    fout = open('Sortie' + item_l[1] + '.txt', 'w')
    fout.write(strsortie)

Lobartas (discuter) 4 janvier 2026 à 11:21 (CET)Répondre