12/09/2018

Comment regrouper ses données avec Python?

Aujourd'hui, je vous propose une astuce que j'ai utilisé pour regrouper mes données en utilisant la fonction group_by du module itertools. Le but est de regrouper les éléments de la liste ci-dessous

from itertools import groupby

liste = [
    {'objet': 'AAA', 'montant': 1000, 'imputation': 'YYY'},
    {'objet': 'AAA', 'montant': 2000, 'imputation': 'YYY'},
    {'objet': 'BBB', 'montant': 7000, 'imputation': 'ZZZ'},
]

Afin d'obtenir ce résultat

result = [
    {
        'items': [{'objet': 'AAA', 'montant': 1000}, {'objet': 'AAA', 'montant': 2000}],
        'type': 'YYY'
    },
    {
        'items': [{'objet': 'BBB', 'montant': 7000}],
        'type': 'ZZZ'
    }
]

Comment je fais?

Je crée un liste vide

new_list = []

Puis un tuple dont le premier élément est la valeur de l'imputation

for dico in liste:
    imput = dico['imputation']
    new_dico = {}
    for k, v in dico.items():
        if k != 'imputation':
            new_dico[k] = v
            doublon = (imput, new_dico)
    new_list.append(doublon)

J'obtiens ceci

new_list = [
    ('YYY', {'objet': 'AAA', 'montant': 1000}),
    ('YYY', {'objet': 'AAA', 'montant': 2000}),
    ('ZZZ', {'objet': 'BBB', 'montant': 7000})
]

Ensuite, je regroupe mes éléments et obtiens mon résultat dans la variable result ci-dessus

sortkey = lambda s:s[0]
result = []
for key, values in groupby(new_list, key=sortkey):
    result.append(dict(type=key, items=list(v[1] for v in values)))

Le code complet est présent sur ce lien

Commentaires


28/08/2018

Algorithme de calcul de l'IRPP au Cameroun

IRPP, Impot sur le Revenu des Personnes Physiques, est une retenue fiscale supportée par le salarié. Pour en savoir plus sur l'IRPP, veuillez lire cet article du ministère des finances. Il est calculé par revenu catégoriel suivant le barème suivant:

Tranches de salaires nets taxables à
L'IRPP/RS
Tranches Taux Impôts annuels
Impôts Cumul
De o à 2.000.000
De 2.000.001 à 3.000.000
De 3.000.001 à 5.000.000
Plus de 5.000.000
2.000.000
1.000.000
2.000.000
*
10 %
15 %
25 %
35 %
200.000
150.000
500.000
*
200.000
350.000
850.000
*

Ce barème est applicable à chaque salaire et sa mise en oeuvre peut s'avérer fastidieuse lorsqu'on a un grand nombre de salariés. C'est la raison pour laquelle j'ai mis sur pied un algorithme - un programme écrit en Python - pour vous faciliter la tâche. Il permet de déterminer directement l'impôt dû après enregistrement du salaire brut mensuel dans le programme informatique.

Je vous présente ici l'algorithme proprement dit, écris en Python

# -*- coding: utf-8 -*-

def calcul_irrp(salaire_brut_taxable_mensuel, salaire_cotisable_cnps, taux_pension=0.42):
  '''
  Cette fonction prend en parametre le salaire_brut_taxable_mensuel,
  le salaire_cotisable_cnps et le taux de la pesion qui s'eleve actuellement a 4.2%
  Nous partirons du salaire_brut_taxable_annuel
  Le taux d'abatement des frais professionnels est 70%
  Les frais d'abatement s'elevent a 500000 FCFA
  '''

  salaire_brut_taxable_annuel = salaire_brut_taxable_mensuel * 12
  abatement_frais_prof = 0.7 * salaire_brut_taxable_annuel
  pension_vieillesse_annuelle = salaire_cotisable_cnps * 12 * taux_pension
  abatement_pension = abatement_frais_prof - pension_vieillesse_annuelle
  _irpp = abatement_pension - 500000
  valeur_irpp = 0

  # valeurs initiales et finales des tranches de l'IRPP
  valeur_initiale = [0, 2000001, 3000001]
  valeur_finale = [2000000, 3000000, 5000000]

  # Application du bareme
  # entre 0 et 2000000 on applique 15%
  if _irpp >= valeur_finale[0]:
      irpp1 = (valeur_finale[0] - valeur_initiale[0]) * 0.1

      # entre 2000001 et 3000000 on applique 15%
      if _irpp >= valeur_finale[1]:
          irpp2 = (valeur_finale[1] - valeur_initiale[1]) * 0.15

          # entre 3000001 et 5000000 on applique 25%
          if _irpp >= valeur_finale[2]:
              irpp3 = (valeur_finale[2] - valeur_initiale[2]) * 0.25

              # au dela de 5000000 on applique 35%
              if _irpp >= valeur_finale[2]:
                  irpp4 = (_irpp - valeur_finale[2]) * 0.35
                  valeur_irpp = (irpp1 + irpp2 + irpp3 + irpp4)/12

              else:
                  irpp3 = (_irpp - valeur_initiale[2]) * 0.25
                  valeur_irpp = (irpp1 + irpp2 + irpp3)/12

          else:
              irpp2 = (_irpp - valeur_initiale[1]) * 0.15
              valeur_irpp = (irpp1 + irpp2)/12

  else:
      valeur_irpp = _irpp * 0.1 / 12

Vous pouvez trouver ce code ici pour le télécharger!

Commentaires


17/08/2018

Apprendre la data science et le machine learning

Bonjour et bienvenue!

Vous savez? J'aime la science des données et tous ce qui tourne autour du big data et de l'intelligence artificielle. J'ai fais une formation de bio-informatique et biostatistique: bien sûr cette formation n'est pas complète, je me suis arrêté au niveau BAC+2 à l'université de Douala.

Je suis très intéressé par l'application de l'informatique aux biosciences notamment à tous ce qui touche à l'agro-alimentaire, la santé et l'environnement. Je vais ici vous présenter la méthode que j'applique pour apprendre le machine learning et la data science (bio-informatique et biostatistique) et si tout se passe bien, d'ici l'année prochaine j'aurais acquis des connaissances assez solides. En effet, je participe au #100DaysOfML dont le principe est de consacrer un peu de son temps tous les jours pour apprendre. J'ai débuté ce challenge le 6 juillet 2018.

Pour ne pas être trop long, voici comment je fais

  1. Participation au cours d'Initiation au machine learning offert par Google
  2. Lecture du Python Data Science Handbook, un livre assez super à mon goût.

Commentaires