def calage_viellissement_depenses(year_data, year_calage, depenses, masses): depenses_calees = pandas.DataFrame() coicop_list = set(depenses.columns) # print coicop_list coicop_list.remove('pondmen') for column in coicop_list: coicop = normalize_coicop(column) grosposte = int(coicop[0:2]) # print column, coicop, grosposte # RAPPEL : 12 postes CN et COICOP # 01 Produits alimentaires et boissons non alcoolisées # 02 Boissons alcoolisées et tabac # 03 Articles d'habillement et chaussures # 04 Logement, eau, gaz, électricité et autres combustibles # 05 Meubles, articles de ménage et entretien courant de l'habitation # 06 Santé # 07 Transports # 08 Communication # 09 Loisir et culture # 10 Education # 11 Hotels, cafés, restaurants # 12 Biens et services divers if grosposte != 99: # print 'grosposte: ', grosposte # print masses ratio_bdf_cn = masses.at[grosposte, 'ratio_bdf{}_cn{}'.format(year_data, year_data)] ratio_cn_cn = masses.at[grosposte, 'ratio_cn{}_cn{}'.format(year_data, year_calage)] depenses_calees[column] = depenses[column] * ratio_bdf_cn * ratio_cn_cn # print 'Pour le grosposte {}, le ratio de calage de la base bdf {} sur la cn est {}, le ratio de calage sur la cn pour l\'annee {} est {}'.format(grosposte, year_data, ratio_bdf_cn, year_calage,ratio_cn_cn) return depenses_calees
def select_gros_postes(coicop): try: coicop = unicode(coicop) except: coicop = coicop normalized_coicop = normalize_coicop(coicop) grosposte = normalized_coicop[0:2] return int(grosposte)
def build_menage_consumption_by_categorie_fiscale(temporary_store=None, year_calage=None, year_data=None): """Build menage consumption by categorie fiscale dataframe """ assert temporary_store is not None assert year_calage is not None assert year_data is not None # Load matrices de passage matrice_passage_data_frame, selected_parametres_fiscalite_data_frame = get_transfert_data_frames(year=year_data) # Load data coicop_data_frame = temporary_store["depenses_calees_{}".format(year_calage)] # Grouping by categorie_fiscale selected_parametres_fiscalite_data_frame = selected_parametres_fiscalite_data_frame[ ["posteCOICOP", "categoriefiscale"] ] # print selected_parametres_fiscalite_data_frame selected_parametres_fiscalite_data_frame.set_index("posteCOICOP", inplace=True) # Normalisation des coicop de la feuille excel pour être cohérent avec depenses_calees normalized_coicop = [normalize_coicop(coicop) for coicop in selected_parametres_fiscalite_data_frame.index] selected_parametres_fiscalite_data_frame.index = normalized_coicop categorie_fiscale_by_coicop = selected_parametres_fiscalite_data_frame.to_dict()["categoriefiscale"] for key in categorie_fiscale_by_coicop.keys(): import math if not math.isnan(categorie_fiscale_by_coicop[key]): categorie_fiscale_by_coicop[key] = int(categorie_fiscale_by_coicop[key]) if math.isnan(categorie_fiscale_by_coicop[key]): categorie_fiscale_by_coicop[key] = 0 assert type(categorie_fiscale_by_coicop[key]) == int # print categorie_fiscale_by_coicop categorie_fiscale_labels = [categorie_fiscale_by_coicop.get(coicop) for coicop in coicop_data_frame.columns] # TODO: gérer les catégorie fiscales "None" = dépenses énergétiques (4) & tabac (2) # print categorie_fiscale_labels tuples = zip(categorie_fiscale_labels, coicop_data_frame.columns) coicop_data_frame.columns = pandas.MultiIndex.from_tuples(tuples, names=["categoriefiscale", "coicop"]) # print coicop_data_frame.columns categorie_fiscale_data_frame = coicop_data_frame.groupby(level=0, axis=1).sum() rename_columns = dict( [(number, "categorie_fiscale_{}".format(number)) for number in categorie_fiscale_data_frame.columns] ) categorie_fiscale_data_frame.rename(columns=rename_columns, inplace=True) categorie_fiscale_data_frame["role_menage"] = 0 # categorie_fiscale_data_frame.reset_index(inplace = True) categorie_fiscale_data_frame.index = categorie_fiscale_data_frame.index.astype(ident_men_dtype) temporary_store["menage_consumption_by_categorie_fiscale_{}".format(year_calage)] = categorie_fiscale_data_frame