-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'gh-pages' of https://github.com/AlexisEidelman/Annuaire…
…ServicePublic into gh-pages
- Loading branch information
Showing
7 changed files
with
355 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
Ce dossier rassemble les informations sur les | ||
service public telles que contenu dans la base Sirene. | ||
|
||
# Projet | ||
|
||
La base Sirene est une donnée de référence. Ce n'est pas pour autant qu'elle se suffit à elle-même. En effet, elle a des liens avec au moins deux autres données de référence : la **base adresses nationale** et l'**annuaire des services publics**. | ||
|
||
Dans ce repo nous nous intéresserons essentiellement au lien entre la base SIRENE et l'annuaire des services publics. | ||
|
||
Relier les entrées de la base Sirene avec les données de l'annuaire de l'administration publiées. Sont-elles cohérentes entre elles ? Lesquelles font référence ? Comment une modification de l'une des deux bases doit se propager à l'autre ? | ||
|
||
|
||
## Faisabilité | ||
|
||
Les données existent. En effet sur [cette page](http://www.insee.fr/fr/methodes/default.asp?page=definitions/sirene-secteur-public.htm) du site de l'Insee, on trouve le passage suivant : | ||
|
||
>C'est en 1983 que la mission d'immatriculation au répertoire a été étendue au secteur public. L'unité SIREN est appelée organisme lorsqu'elle relève du secteur non marchand. Elle couvre donc normalement les personnes morales que constituent l'État, les collectivités territoriales et les établissements publics. | ||
> | ||
>Toutefois, certaines institutions et certains services de l'État, bien que non dotés de la personnalité juridique, sont identifiés comme organismes lorsqu'ils jouissent d'une « quasi-personnalité juridique ». C'est le cas des autorités constitutionnelles, des autorités administratives indépendantes, des ministères, des directions d'administration centrale ainsi que des services extérieurs, territorialisés ou non. | ||
> | ||
>L'unité SIRET de type établissement correspond soit à une implantation géographique distincte où s'exerce une activité, soit à une implantation géographique pour laquelle il existe un budget annexe. Ceci signifie que, contrairement au secteur privé, à une même adresse il peut exister plusieurs numéros SIRET pour un même numéro SIREN. | ||
|
||
|
||
## Méthode | ||
|
||
### Comment repérer les administrations publiques dans la base Sirene ? | ||
|
||
Plusieurs idées : | ||
|
||
* utiliser le code [naf](http://www.insee.fr/fr/methodes/default.asp?page=nomenclatures/agregatnaf2008/agregatnaf2008.htm) et en particulier [celles commençant par 84](http://www.insee.fr/fr/methodes/default.asp?page=nomenclatures/naf2008/n1_o.htm) | ||
* utiliser [la nomenclature des catégories juridiques](http://www.insee.fr/fr/methodes/default.asp?page=nomenclatures/cj/cj-arbre.htm) | ||
|
||
### Comment faire le lien entre SIRENE et Annuaire ? | ||
|
||
La meilleure idée semble d'utiliser les noms des entités. On remarquera tout de suite que les formats sont différents (majuscules non accentuées dans un cas, simili Camel Case accentué dans l'autre). | ||
|
||
Est-ce que les adresses peuvent aider ? | ||
|
||
D'autres idées ? | ||
|
||
### Quel est le meilleure agencement des données de SIRENE et de l'annuaire ? | ||
|
||
Des questions sont ouvertes : | ||
* Comment gère-t-on les changements de noms ? | ||
* Que faire des incohérences actuelles (s'il y en a). | ||
* Quelle(s) adresse(s) doit-être conservée(s) ? Celle de l'annuaire ? Celle de SIRENE ? | ||
* ... | ||
|
||
|
||
### Autres choses | ||
|
||
* Regarder les SIREN disparu des entités publiques (mais on a seulement les établissements actifs). | ||
* Lorsqu'on a plusieurs établissements, est-ce que cela correspond à une arborescence de l'annuaire ? | ||
|
||
|
||
## Notes: | ||
|
||
### Mise à jour des données de l'administration dans SIRENE. | ||
|
||
Il y a trois fonctions publiques : | ||
* Hospitalière : on essaie d'être cohérent avec FINESS (on ne rentre pas d'unité dans SIRENE qui n'a pas de numéro Finess). Il y a parfois plusieurs lignes quand il y a plusieurs lignes dans FINESS quand il y a plusieurs services mais pas dans SIRENE. | ||
* Les collectivités territoriales : il y a des obligations fortes pour qu'elles utilisent SIREN, SIRET parce qu'elles emploient et passent des contrats. Les prefectures envoient les infos. Pas de gestions automatiques. | ||
* La Dila (a priori) devrait transmettre automatiquement mais ça se fait mal. Rermarque: tout le monde doit avoir un SIREN/SIRET pour utiliser chorus. | ||
Les services déconcentrés, c'est soit les prefectures, soit les administrations elle-même. | ||
|
||
Dans la fonction publique d'Etat, la personnalité juridique c'est l'Etat donc dans SIRENE, c'est par convention qu'on attribue à des SIREN qui va à des ordonnateurs. | ||
|
||
Les infos récupérées par l'Insee pour la base SIRENE, c'est le Nom, l'adresse, le ministère de tutelle. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# -*- coding: utf-8 -*- | ||
""" | ||
@author: aeidelman | ||
""" | ||
|
||
import os | ||
import pandas as pd | ||
|
||
path = '/home/sgmap/data/SIRENE' | ||
|
||
# avantage | ||
path_file = os.path.join(path, | ||
'sirc-266_266_13705_201606_L_P_20161010_121909418-secondtry.csv') | ||
|
||
tab = pd.read_csv(path_file, sep=';', nrows=100000, | ||
encoding='cp1252', #iso-8859-15 | ||
# usecols = categorical_vars + ['avant_montant_ttc'] | ||
) | ||
|
||
assert all(tab.APET700.str.len() == 5) | ||
|
||
# public = tab[tab['NJ'].astype(str).str[0] == '7'] | ||
# print(len(public)) | ||
|
||
|
||
#av['year'] = av['avant_date_signature'].str[6:] | ||
iter_csv = pd.read_csv(path_file, sep=';', | ||
encoding='cp1252', | ||
iterator=True, | ||
chunksize=100000) | ||
|
||
df = pd.concat([tab[tab['NJ'].astype(str).str[0].isin(['4','7'])] | ||
for tab in iter_csv]) | ||
|
||
path_output = os.path.join(path, 'sirene_NJ_4_et_7.csv') | ||
df.to_csv(path_output, sep=';', | ||
encoding='cp1252', | ||
iterator=True, | ||
index=False) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# -*- coding: utf-8 -*- | ||
""" | ||
Created on Sat Sep 10 14:31:31 2016 | ||
@author: aeidelman | ||
""" | ||
|
||
import os | ||
import json | ||
|
||
files = os.listdir('json') | ||
files.sort() | ||
names = [file[:-4] for file in files] | ||
|
||
for k in range(1,len(files) - 1): | ||
file1 = files[k] | ||
f = open('json/' + file1) | ||
v1 = json.load(f) | ||
|
||
file2 = files[k+1] | ||
f = open('json/' + file2) | ||
v2 = json.load(f) | ||
|
||
|
||
|
||
|
||
# difference de keys... | ||
set1 = set(v1) | ||
set2 = set(v2) | ||
dans2_pas_dans1 = set2 - set1 | ||
dans1_pas_dans2 = set1 - set2 | ||
|
||
# la différence entre tous les éléments | ||
differences = list() | ||
for entite in v1.keys(): | ||
if entite in v2.keys(): | ||
dict1 = v1[entite] | ||
dict2 = v2[entite] | ||
|
||
keys1 = set(dict1.keys()) | ||
keys2 = set(dict2.keys()) | ||
|
||
for champs in keys1 & keys2: | ||
value1 = dict1[champs] | ||
value2 = dict2[champs] | ||
if value2 != value1: | ||
differences += [(entite, champs, | ||
value1, value2)] | ||
|
||
for champs in keys2 - keys1: | ||
differences += [(entite, champs, | ||
'', dict2[champs])] | ||
|
||
for champs in keys1 - keys2: | ||
differences += [(entite, champs, | ||
dict1[champs], '')] | ||
|
||
#import pdb | ||
#pdb.set_trace() | ||
|
||
# analyse des différences | ||
import pandas as pd | ||
diff_df = pd.DataFrame(differences) | ||
changes = diff_df[2] + '\n devient \n ' + diff_df[3] | ||
|
||
print(diff_df[0].value_counts().head()) | ||
print(diff_df[1].value_counts()) | ||
|
||
for row in changes.value_counts().head(10).items(): | ||
print('On a {0} changements où \n {1} \n'.format(row[1], row[0])) | ||
|
||
un_pb = 'df/Ministeres_Ministere_de_l_economie_de_l_industrie_et_de_l_emploi' | ||
diff_df[diff_df[3] == un_pb] | ||
|
||
# inversions | ||
inversion = (diff_df[2] + diff_df[3]).isin(diff_df[3] + diff_df[2]) | ||
|
||
|
Oops, something went wrong.