def affaire_avec_adresse(affaire): """ Elle prend la table <affaire ravalement> contenant adresse_id et la relie à l'adresse de la Base d'Adresse Nationale correspondante """ assert 'adresse_id' in affaire.columns affaire_with_adresse = affaire[affaire.adresse_id.notnull()] adresse = adresses()[[ 'adresse_id', 'typeadresse', 'libelle', 'codepostal', 'codeinsee', 'code_cadastre' ]] sarah = affaire_with_adresse.merge(adresse, on='adresse_id', how='left') # match ban match_possible = sarah['codepostal'].notnull() & sarah['libelle'].notnull() sarah_adresse = sarah[match_possible] sarah_adresse = merge_df_to_ban(sarah_adresse, os.path.join(path_output, 'temp.csv'), ['libelle', 'codepostal'], name_postcode='codepostal') sarah = sarah_adresse.append(sarah[~match_possible]) sarah = sarah.append(affaire[affaire.adresse_id.isnull()]) return sarah
def affaire_avec_adresse(affaire, _cols_from_bien_id=None): affaire_with_adresse = add_adresse_id(affaire, _cols_from_bien_id) affaire_with_adresse.drop(['adresse_id_sign', 'adresse_id_bien', 'localhabite_id'], axis=1, inplace=True ) affaire_with_adresse = affaire_with_adresse[ affaire_with_adresse.adresse_id.notnull()] adresse = adresses()[['adresse_id', 'typeadresse', 'libelle', 'codepostal', 'codeinsee', 'code_cadastre']] sarah = affaire_with_adresse.merge(adresse, on = 'adresse_id', how = 'left') # on prend le code cadastre de l'adresse_id ou l'ancien (celui de bien_id) # quand on n'a pas d'adresse sarah['code_cadastre'] = sarah['code_cadastre_y'] # quelques incohérence (516 sur 34122) pb = sarah.loc[sarah['code_cadastre'].notnull(), 'code_cadastre'] != \ sarah.loc[sarah['code_cadastre'].notnull(), 'code_cadastre_x'] sarah.loc[sarah['code_cadastre'].isnull(), 'code_cadastre'] = \ sarah.loc[sarah['code_cadastre'].isnull(), 'code_cadastre_x'] sarah.drop(['code_cadastre_x', 'code_cadastre_y'], axis=1, inplace=True) # match ban match_possible = sarah['codepostal'].notnull() & sarah['libelle'].notnull() sarah_adresse = sarah[match_possible] sarah_adresse = merge_df_to_ban(sarah_adresse, os.path.join(path_output, 'temp.csv'), ['libelle', 'codepostal'], name_postcode = 'codepostal') sarah = sarah_adresse.append(sarah[~match_possible]) return sarah
"VP_STH_Observatoire 2013-2014 actualisé au 11072014.xlsx") tab14 = pd.read_excel(path_2014, sheetname = "base2013") path_2015 = os.path.join(path_result, "VP_STH_observatoire 2014-2015 fichier final.xlsx") tab15 = pd.read_excel(path_2015, sheetname = "bilan général") tab15.loc[:, 'code_postal'] = (75000 + tab15['Arron.']).astype(str) tab15.loc[:, 'Adresse'] = \ tab15['num'].astype(str) + \ tab15['let'].fillna('').replace('b', ' bis') + \ ', ' + \ tab15['typv'] + ' ' + \ tab15['libv'] + ', Paris' tab_ban = merge_df_to_ban( tab15, os.path.join(path_output, 'result_apur_15.csv'), ['Adresse', 'code_postal'], name_postcode = 'code_postal' ) #TODO: regarder les erreurs de match if __name__ == '__main__': from insalubrite.analyse.data import get_data sarah = get_data('batiment') test = tab_ban.merge(sarah)
#TODO: exploiter ces 1000 cas qui ont une ville la plupart du temps pd.options.display.max_colwidth = 150 pb_trop_code_postal = adresse[adresse.str.count(pattern_code_postal) > 1] pb_trop_code_postal # => on a l'adresse dans une seconde partie de l liste # c'est toujours des grands établissements => a priori pas insalubre pd.options.display.max_colwidth = 50 tab_bonne_adresse = tab[adresse.str.count(pattern_code_postal) == 1] tab = tab_bonne_adresse adresse = tab['Libelle_Adresse'] tab['code_postal'] = adresse.str.findall(pattern_code_postal).str[0] tab['voie'] = adresse.str.split(pattern_code_postal).str[0] tab['voie'] = tab['voie'].str.strip() tab['ville'] = adresse.str.split(pattern_code_postal).str[1] tab.loc[tab['ville'].str.contains('ARRONDISS'), 'ville'] = 'PARIS' tab['ville'] = tab['ville'].str.strip() tab['ville'].value_counts() # pour bspp tab_paris = merge_df_to_ban( tab[tab['ville'] == 'PARIS'], os.path.join(path_bspp, 'temp.csv'), ['voie', 'code_postal'], name_postcode='code_postal', ) path_csv_paris = os.path.join(path_bspp, 'paris_ban.csv') tab_paris.to_csv(path_csv_paris, index=False, encoding='utf8')
path_sat_2014 = os.path.join(path_apur + '2014', '22 Sat_diag positifs APUR 2013.xls') sat_2014 = pd.read_excel(path_sat_2014) sat_2014['Adresse'] = \ sat_2014['Numero voie'].astype(str) + ', ' + \ sat_2014['Nom\nVoie'] + ', Paris' sat_2014['sat_annee_source'] = 2014 sat_2014.drop(['Numero voie', 'Nom\nVoie'], axis=1, inplace=True) sat_2014.columns = [x.split('\n')[0] for x in sat_2014.columns] path_sat_2015 = os.path.join(path_apur + '2015', '21 diag positifs du 31 déc 2013 au 4 février 2015.xls') sat_2015 = pd.read_excel(path_sat_2015) sat_2015.columns = [x.split('\n')[0] for x in sat_2015.columns] sat_2015['Adresse'] = sat_2015['Adresse sans zone'] + ', Paris' sat_2015['sat_annee_source'] = 2015 sat = sat_2014.append(sat_2015) sat.reset_index(inplace=True) sat_ban = merge_df_to_ban( sat, os.path.join(path_output, 'sat_temp.csv'), ['Adresse', 'Code postal'], name_postcode = 'Code postal' ) #TODO: regarder les erreurs de match path_sat = os.path.join(path_output, 'sat.csv') sat_ban.to_csv(path_sat, index=False, encoding='utf8')
eau_2015 = pd.read_excel(path_eau_2015) eau_2015['eau_annee_source'] = 2015 eau = eau_2014.append(eau_2015) eau.reset_index(inplace=True) # on a que 38 adresses commune # eau[['Nom rue', 'N° dans la rue', 'Complément du N° dans la rue']].duplicated().sum() eau['libelle'] = eau['N° dans la rue'].astype(str) + ' ' + \ eau['Complément du N° dans la rue'].fillna('') + ' ' + \ eau['Type de voie'] + ' ' + \ eau['Nom rue'] + ', Paris' eau['libelle'] = eau['libelle'].str.replace(' ', ' ') eau['codepostal'] = eau['Nom commune'].str.split('PARIS ').str[1] eau['codepostal'] = eau['codepostal'].str.split('EME ARRONDISSEMENT').str[0] eau['codepostal'] = eau['codepostal'].str.split('ER ARRONDISSEMENT').str[0] eau['codepostal'] = 75000 + eau['codepostal'].astype(int) eau_ban = merge_df_to_ban(eau, os.path.join(path_output, 'eau_temp.csv'), ['libelle', 'codepostal'], name_postcode='codepostal') #TODO: regarder les erreurs de match path_eau = os.path.join(path_output, 'eau.csv') eau_ban.to_csv(path_eau, index=False, encoding='utf8')
## étape 3.3 : rassemble adrbad et adrsimple adresse = adrbad.append(adrsimple) cadastre = parcelles() adresse = pd.merge(adresse, cadastre, on='parcelle_id', how='left') # adresse.rename(columns = {'codepostal_adresse':'codepostal'}, inplace = True) adresse.loc[adresse['codepostal'].isnull(), 'codepostal'] = \ adresse.loc[adresse['codepostal'].isnull(), 'codepostal_adresse'] del adresse['codepostal_adresse'] table_adresse = read_table('adresse') adresse = table_adresse.merge(adresse, how='outer', indicator='test') adresse = adresse[adresse['adresse_id'].notnull()] assert all(adresse['test'] == 'both') del adresse['test'] return adresse if __name__ == "__main__": import os from insalubrite.match_to_ban import merge_df_to_ban from insalubrite.config_insal import path_bspp, path_output tab = adresses() tab_ban = merge_df_to_ban(tab[tab.codepostal.notnull()], os.path.join(path_output, 'temp.csv'), ['libelle', 'codepostal'], name_postcode = 'codepostal')
assert table_signalement.affaire_id.value_counts().max() == 1 if 'signalement_id' in table.columns: table.rename(columns = {'signalement_id':'signalement_id_orig'}, inplace = True) if 'libelle' in table_signalement.columns: table_signalement.rename(columns = {'libelle':'libelle_table'}, inplace = True) table_avec_signalement = pd.merge(table, table_signalement, on='affaire_id', how='left', indicator='merge_signalement') # len(table.affaire_id) # => 37322 # len(lien_signalement_affaire.affaire_id) ## => 30871 # len(result1.affaire_id) ## => 30692 return table_avec_signalement if __name__ == '__main__': ### éude des adresses #adresse = read_table('adresse') # les adresses sont ou bien dans adrbad ou bien dans adrsimple # Merge tables compterenduinsalubre = affaires_insalubres() adresses_affaires = adresses_via_signalement(compterenduinsalubre) adresses_final = merge_df_to_ban(adresses_affaires, os.path.join(path_output, 'temp.csv'), ['libelle', 'codepostal'], name_postcode = 'codepostal')