|
3 | 3 |
|
4 | 4 | import polars as pl |
5 | 5 | import polars.selectors as cs |
6 | | -from prefect import task |
7 | 6 |
|
8 | | -from src.config import DATA_DIR, DIST_DIR, SIRENE_UNITES_LEGALES_URL, DecpFormat |
| 7 | +from src.config import DATA_DIR, DIST_DIR, DecpFormat |
9 | 8 | from src.tasks.output import save_to_files |
10 | 9 | from src.tasks.utils import check_parquet_file |
11 | 10 |
|
@@ -205,33 +204,82 @@ def extract_unique_titulaires_siret(lf: pl.LazyFrame): |
205 | 204 | return lf |
206 | 205 |
|
207 | 206 |
|
208 | | -@task |
209 | | -def get_prepare_unites_legales(processed_parquet_path): |
210 | | - print("Téléchargement des données unité légales et sélection des colonnes...") |
211 | | - ( |
212 | | - pl.scan_parquet(SIRENE_UNITES_LEGALES_URL) |
213 | | - .select(["siren", "denominationUniteLegale"]) |
214 | | - .filter(pl.col("siren").is_not_null()) |
215 | | - .filter(pl.col("denominationUniteLegale").is_not_null()) |
216 | | - .unique() |
217 | | - .sink_parquet(processed_parquet_path, engine="streaming") |
| 207 | +def prepare_unites_legales(lf: pl.LazyFrame) -> pl.LazyFrame: |
| 208 | + return ( |
| 209 | + lf.select( |
| 210 | + [ |
| 211 | + "siren", |
| 212 | + "denominationUniteLegale", |
| 213 | + "prenomUsuelUniteLegale", |
| 214 | + "nomUniteLegale", # toujours rempli pour personnes physique |
| 215 | + "nomUsageUniteLegale", # parfois rempli, a la priorité sur nomUniteLegale |
| 216 | + "statutDiffusionUniteLegale", # P = non-diffusible |
| 217 | + ] |
| 218 | + ) |
| 219 | + .filter( |
| 220 | + pl.col("siren").is_not_null() |
| 221 | + ) # utilisation du fichier Stock, normalement pas de siren null |
| 222 | + .unique() # utilisation du fichier Stock, normalement pas de doublons |
| 223 | + .with_columns( |
| 224 | + pl.when(pl.col("nomUsageUniteLegale").is_not_null()) |
| 225 | + .then(pl.col("nomUsageUniteLegale")) |
| 226 | + .otherwise(pl.col("nomUniteLegale")) |
| 227 | + .alias("nomUniteLegale") |
| 228 | + ) |
| 229 | + .with_columns( |
| 230 | + pl.when(pl.col("nomUniteLegale").is_not_null()) |
| 231 | + .then( |
| 232 | + pl.concat_str( |
| 233 | + pl.col("prenomUsuelUniteLegale"), |
| 234 | + pl.col("nomUniteLegale"), |
| 235 | + separator=" ", |
| 236 | + ) |
| 237 | + ) |
| 238 | + .otherwise(pl.col("denominationUniteLegale")) |
| 239 | + .alias("denominationUniteLegale") |
| 240 | + ) |
| 241 | + .with_columns( |
| 242 | + pl.when(pl.col("statutDiffusionUniteLegale") == "P") |
| 243 | + .then(pl.lit("[Données personnelles non-diffusibles]")) |
| 244 | + .otherwise(pl.col("denominationUniteLegale")) |
| 245 | + .alias("denominationUniteLegale") |
| 246 | + ) |
| 247 | + .drop( |
| 248 | + [ |
| 249 | + "prenomUsuelUniteLegale", |
| 250 | + "statutDiffusionUniteLegale", |
| 251 | + "nomUniteLegale", |
| 252 | + "nomUsageUniteLegale", |
| 253 | + ] |
| 254 | + ) |
218 | 255 | ) |
219 | 256 |
|
220 | 257 |
|
221 | | -def prepare_etablissements(lf: pl.LazyFrame, processed_parquet_path: Path) -> None: |
222 | | - lf = lf.rename( |
| 258 | +def prepare_etablissements(lff: pl.LazyFrame) -> pl.LazyFrame: |
| 259 | + lff = lff.with_columns( |
| 260 | + [ |
| 261 | + pl.col("codeCommuneEtablissement").str.pad_start(5, "0"), |
| 262 | + pl.col("siret").str.pad_start(14, "0"), |
| 263 | + # Si enseigne1Etablissement est null, on utilise denominationUsuelleEtablissement |
| 264 | + pl.coalesce( |
| 265 | + "enseigne1Etablissement", "denominationUsuelleEtablissement" |
| 266 | + ).alias("etablissement_nom"), |
| 267 | + ] |
| 268 | + ) |
| 269 | + lff = lff.drop("denominationUsuelleEtablissement", "enseigne1Etablissement") |
| 270 | + lff = lff.rename( |
223 | 271 | { |
224 | 272 | "codeCommuneEtablissement": "commune_code", |
225 | 273 | "activitePrincipaleEtablissement": "activite_code", |
226 | 274 | "nomenclatureActivitePrincipaleEtablissement": "activite_nomenclature", |
227 | 275 | } |
228 | 276 | ) |
229 | 277 |
|
230 | | - # Ajout des noms de départements, noms régions, |
| 278 | + # Ajout des noms de commune, départements, régions |
231 | 279 | lf_cog = pl.scan_parquet(DATA_DIR / "code_officiel_geographique.parquet") |
232 | | - lf = lf.join(lf_cog, on="commune_code", how="left") |
| 280 | + lff = lff.join(lf_cog, on="commune_code", how="left") |
233 | 281 |
|
234 | | - lf.sink_parquet(processed_parquet_path, engine="streaming") |
| 282 | + return lff |
235 | 283 |
|
236 | 284 |
|
237 | 285 | def sort_columns(lf: pl.LazyFrame, config_columns): |
|
0 commit comments