Exemple #1
0
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
Exemple #3
0
                           "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)
Exemple #4
0
#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')
Exemple #6
0
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')