Spaces:
Running
Running
Commit ยท
46965d6
0
Parent(s):
feat: clean HF Space deployment
Browse files- Dockerfile +24 -0
- README.md +15 -0
- data/delinquance_benchmark.csv +411 -0
- data/delinquance_previsions_2030.csv +0 -0
- data/delinquance_region.csv +0 -0
- data/regions.geojson +0 -0
- files/Delinquance.py +703 -0
- requirements.txt +9 -0
Dockerfile
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# oasis/models/crime_predictor/Dockerfile
|
| 2 |
+
# Stage 1: Training
|
| 3 |
+
FROM python:3.11-slim AS trainer
|
| 4 |
+
|
| 5 |
+
WORKDIR /app
|
| 6 |
+
COPY requirements.txt .
|
| 7 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 8 |
+
|
| 9 |
+
COPY . .
|
| 10 |
+
ARG DATA_URL
|
| 11 |
+
RUN python train.py --data-url ${DATA_URL}
|
| 12 |
+
|
| 13 |
+
# Stage 2: Production (minimal)
|
| 14 |
+
FROM python:3.11-slim AS production
|
| 15 |
+
|
| 16 |
+
WORKDIR /app
|
| 17 |
+
COPY --from=trainer /app/models/crime_predictor.pkl ./models/
|
| 18 |
+
COPY requirements.txt .
|
| 19 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
| 20 |
+
|
| 21 |
+
COPY predict.py model.py config.yaml ./
|
| 22 |
+
EXPOSE 8000
|
| 23 |
+
|
| 24 |
+
CMD ["uvicorn", "predict:app", "--host", "0.0.0.0", "--port", "8000"]
|
README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Oasis Security
|
| 3 |
+
emoji: ๐จ
|
| 4 |
+
colorFrom: red
|
| 5 |
+
colorTo: blue
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: "1.41.0"
|
| 8 |
+
python_version: "3.10"
|
| 9 |
+
app_file: files/Delinquance.py
|
| 10 |
+
pinned: false
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
# Oasis Security โ Crime & Delinquency in France
|
| 14 |
+
|
| 15 |
+
Analysis of crime and delinquency data from Police Nationale and Gendarmerie Nationale (2012-2021), with predictions up to 2030 using Prophet, XGBoost, and LightGBM.
|
data/delinquance_benchmark.csv
ADDED
|
@@ -0,0 +1,411 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
modele,source,indicateur,region,region_nom,RMSE,MAE,MAPE
|
| 2 |
+
Prophet,A,Usage de stupรฉfiants,R01,Guadeloupe,238.05000378871927,181.69297831660015,9.033062173014507
|
| 3 |
+
Prophet,B,Usage de stupรฉfiants,R01,Guadeloupe,72.8593233738032,54.03708826376305,4.195471030604914
|
| 4 |
+
Prophet,A,Usage de stupรฉfiants,R02,Martinique,269.0937556704952,256.0891625330123,18.412253332187884
|
| 5 |
+
Prophet,B,Usage de stupรฉfiants,R02,Martinique,262.6303800052398,228.31918690866422,19.169590156614635
|
| 6 |
+
Prophet,A,Usage de stupรฉfiants,R03,Guyane,155.35872571533903,146.04753389069288,17.49182713153545
|
| 7 |
+
Prophet,B,Usage de stupรฉfiants,R03,Guyane,123.38036743896966,104.04898573124777,29.276561031774417
|
| 8 |
+
Prophet,A,Usage de stupรฉfiants,R04,La Rรฉunion,306.7317703800456,271.5859930521548,13.223153534570416
|
| 9 |
+
Prophet,B,Usage de stupรฉfiants,R04,La Rรฉunion,495.416449868307,489.3766170146064,33.63241141020226
|
| 10 |
+
Prophet,A,Usage de stupรฉfiants,R06,Mayotte,128.17401124203687,91.00077687814502,35.930172001995466
|
| 11 |
+
Prophet,B,Usage de stupรฉfiants,R06,Mayotte,15.935917996360892,14.622194862594085,11.078808966265717
|
| 12 |
+
Prophet,A,Cambriolages de logement,R01,Guadeloupe,832.9045184729803,795.1881093060623,83.11198562455888
|
| 13 |
+
Prophet,B,Cambriolages de logement,R01,Guadeloupe,793.4408127787975,758.4147850505763,79.21916434984612
|
| 14 |
+
Prophet,A,Cambriolages de logement,R02,Martinique,376.38161068924876,371.01559276179455,54.9194750842003
|
| 15 |
+
Prophet,B,Cambriolages de logement,R02,Martinique,388.47921052758744,382.35859763052895,56.443638189186515
|
| 16 |
+
Prophet,A,Cambriolages de logement,R03,Guyane,183.2480538651961,181.1848259264902,18.26714706554934
|
| 17 |
+
Prophet,B,Cambriolages de logement,R03,Guyane,181.59704310341286,181.13821649742704,18.57844919260254
|
| 18 |
+
Prophet,A,Cambriolages de logement,R04,La Rรฉunion,188.23678808195464,184.1931508970821,19.50438260377077
|
| 19 |
+
Prophet,B,Cambriolages de logement,R04,La Rรฉunion,212.7807493338645,211.21231789526803,22.8242498738419
|
| 20 |
+
Prophet,A,Cambriolages de logement,R06,Mayotte,290.27865648368504,262.6139837523835,112.7026779889272
|
| 21 |
+
Prophet,B,Cambriolages de logement,R06,Mayotte,259.57917612520487,252.76796420316006,55.08241939140932
|
| 22 |
+
Prophet,A,Vols sans violence contre des personnes,R01,Guadeloupe,71.87822169941951,56.456892852751565,11.61004037172772
|
| 23 |
+
Prophet,B,Vols sans violence contre des personnes,R01,Guadeloupe,219.74448318696483,212.40749423684292,8.842016392382783
|
| 24 |
+
Prophet,A,Vols sans violence contre des personnes,R02,Martinique,71.50551372288767,56.90755682746112,11.194565767356467
|
| 25 |
+
Prophet,B,Vols sans violence contre des personnes,R02,Martinique,548.6907395463606,548.49872599385,34.6446496228014
|
| 26 |
+
Prophet,A,Vols sans violence contre des personnes,R03,Guyane,771.091371700317,680.3754510262307,41.857613039896954
|
| 27 |
+
Prophet,B,Vols sans violence contre des personnes,R03,Guyane,313.41235482231076,313.3575985036441,16.167729079624994
|
| 28 |
+
Prophet,A,Vols sans violence contre des personnes,R04,La Rรฉunion,129.28022817074208,102.41311797615026,22.676290815085896
|
| 29 |
+
Prophet,B,Vols sans violence contre des personnes,R04,La Rรฉunion,647.2327666857201,643.5331790417381,21.993854049678006
|
| 30 |
+
Prophet,A,Vols sans violence contre des personnes,R06,Mayotte,651.1067893231213,606.45345808863,95.56883711885679
|
| 31 |
+
Prophet,B,Vols sans violence contre des personnes,R06,Mayotte,53.40990530257883,49.40889440032038,4.319157282225089
|
| 32 |
+
Prophet,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,22.964792541952182,22.887599710627192,20.794018579614413
|
| 33 |
+
Prophet,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,265.9631082496236,193.6444790991602,6.4949109782779635
|
| 34 |
+
Prophet,A,Destructions et dรฉgradations volontaires,R02,Martinique,38.39214394584219,33.8000721981822,39.31528286389051
|
| 35 |
+
Prophet,B,Destructions et dรฉgradations volontaires,R02,Martinique,94.76565482764492,85.5986715452591,3.7874715958035337
|
| 36 |
+
Prophet,A,Destructions et dรฉgradations volontaires,R03,Guyane,11.01212466821221,10.895639652168743,25.127170192219623
|
| 37 |
+
Prophet,B,Destructions et dรฉgradations volontaires,R03,Guyane,220.46846069890674,171.17687280785447,11.578299856703987
|
| 38 |
+
Prophet,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.211561064116715,19.847629917043463,6.424416626299612
|
| 39 |
+
Prophet,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,401.3292523490567,349.5423322814163,7.740517824915344
|
| 40 |
+
Prophet,A,Destructions et dรฉgradations volontaires,R06,Mayotte,29.066210047632737,21.280125772352108,43.6909532406686
|
| 41 |
+
Prophet,B,Destructions et dรฉgradations volontaires,R06,Mayotte,826.263033342285,826.2630328406864,47.78352139522944
|
| 42 |
+
Prophet,A,Violences sexuelles,R01,Guadeloupe,41.57611473165103,33.11583723105309,15.121393573006964
|
| 43 |
+
Prophet,B,Violences sexuelles,R01,Guadeloupe,73.02489453243314,57.47701663074082,9.614415323462211
|
| 44 |
+
Prophet,A,Violences sexuelles,R02,Martinique,31.062574234726195,25.583341852231996,10.534737631998311
|
| 45 |
+
Prophet,B,Violences sexuelles,R02,Martinique,82.14920948830938,62.4136982847956,8.677704523434324
|
| 46 |
+
Prophet,A,Violences sexuelles,R03,Guyane,23.125005171231606,17.574597002476594,5.487315072930684
|
| 47 |
+
Prophet,B,Violences sexuelles,R03,Guyane,74.28974161574968,68.05686666409429,11.790451074159053
|
| 48 |
+
Prophet,A,Violences sexuelles,R04,La Rรฉunion,76.04201581323434,61.41833131846266,11.237155040451537
|
| 49 |
+
Prophet,B,Violences sexuelles,R04,La Rรฉunion,85.86712007551073,85.64144667556343,6.009061963769394
|
| 50 |
+
Prophet,A,Violences sexuelles,R06,Mayotte,92.55976439738656,70.7266221806394,51.98531908177435
|
| 51 |
+
Prophet,B,Violences sexuelles,R06,Mayotte,38.25503443483432,38.07809461107183,10.05463475883363
|
| 52 |
+
XGBoost,A,Usage de stupรฉfiants,R01,Guadeloupe,438.61019587714304,360.039794921875,18.32262776054861
|
| 53 |
+
XGBoost,B,Usage de stupรฉfiants,R01,Guadeloupe,107.16817086111914,82.0,5.732329035233308
|
| 54 |
+
XGBoost,A,Usage de stupรฉfiants,R02,Martinique,368.69875862240144,347.7535400390625,24.93425675666532
|
| 55 |
+
XGBoost,B,Usage de stupรฉfiants,R02,Martinique,164.19702242528876,158.5,13.919262785651899
|
| 56 |
+
XGBoost,A,Usage de stupรฉfiants,R03,Guyane,156.45120344374422,142.3094482421875,16.912676365772615
|
| 57 |
+
XGBoost,B,Usage de stupรฉfiants,R03,Guyane,68.72260648106916,55.881988525390625,15.563050424978798
|
| 58 |
+
XGBoost,A,Usage de stupรฉfiants,R04,La Rรฉunion,339.66749879908605,292.168701171875,14.062800554642607
|
| 59 |
+
XGBoost,B,Usage de stupรฉfiants,R04,La Rรฉunion,263.3082723363192,240.12921142578125,16.550790323598065
|
| 60 |
+
XGBoost,A,Usage de stupรฉfiants,R06,Mayotte,118.33114622751397,87.1909408569336,36.56724313710373
|
| 61 |
+
XGBoost,B,Usage de stupรฉfiants,R06,Mayotte,10.543568358243,9.556007385253906,6.694527035667782
|
| 62 |
+
XGBoost,A,Usage de stupรฉfiants,R11,รle-de-France,3056.5285840887473,2814.0,4.8132482247689845
|
| 63 |
+
XGBoost,B,Usage de stupรฉfiants,R11,รle-de-France,1954.3592832520171,1208.1025695800781,25.8809549486821
|
| 64 |
+
XGBoost,A,Usage de stupรฉfiants,R24,Centre-Val de Loire,1825.8237524638118,1672.0078125,13.901838417087987
|
| 65 |
+
XGBoost,B,Usage de stupรฉfiants,R24,Centre-Val de Loire,240.25965517458292,193.91104634602866,23.49304662037279
|
| 66 |
+
XGBoost,A,Usage de stupรฉfiants,R27,Bourgogne-FC,2532.4404970235737,2477.6357421875,20.248690326453065
|
| 67 |
+
XGBoost,B,Usage de stupรฉfiants,R27,Bourgogne-FC,305.38932202691956,235.18816757202148,33.13580432441135
|
| 68 |
+
XGBoost,A,Usage de stupรฉfiants,R28,Normandie,2015.6961604595826,1907.1640625,14.392115891773097
|
| 69 |
+
XGBoost,B,Usage de stupรฉfiants,R28,Normandie,720.6395590076374,526.112744140625,48.58383535125015
|
| 70 |
+
XGBoost,A,Usage de stupรฉfiants,R32,Hauts-de-France,2230.6267942173936,1809.7734375,7.792236657315814
|
| 71 |
+
XGBoost,B,Usage de stupรฉfiants,R32,Hauts-de-France,2758.3550702843213,1607.223974609375,79.72095661730592
|
| 72 |
+
XGBoost,A,Usage de stupรฉfiants,R44,Grand Est,3765.4858347725476,3394.884765625,13.865793494131081
|
| 73 |
+
XGBoost,B,Usage de stupรฉfiants,R44,Grand Est,343.1619745015389,264.0139984130859,30.550013007426784
|
| 74 |
+
XGBoost,A,Usage de stupรฉfiants,R52,Pays de la Loire,2832.950580100568,2566.244140625,15.794109701832168
|
| 75 |
+
XGBoost,B,Usage de stupรฉfiants,R52,Pays de la Loire,657.0243752060032,403.084765625,24.481360424757632
|
| 76 |
+
XGBoost,A,Usage de stupรฉfiants,R53,Bretagne,2752.024215838609,2466.0849609375,18.091028364639143
|
| 77 |
+
XGBoost,B,Usage de stupรฉfiants,R53,Bretagne,496.4289414297019,343.6061706542969,15.091883379729943
|
| 78 |
+
XGBoost,A,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,4741.545442722036,4296.302734375,15.859691086320558
|
| 79 |
+
XGBoost,B,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,308.85048587718364,179.95559056599936,20.976820133805717
|
| 80 |
+
XGBoost,A,Usage de stupรฉfiants,R76,Occitanie,4753.597210348836,4231.189453125,14.746600952049963
|
| 81 |
+
XGBoost,B,Usage de stupรฉfiants,R76,Occitanie,825.3215024084767,507.22206233097955,135.48579991134073
|
| 82 |
+
XGBoost,A,Usage de stupรฉfiants,R84,Auvergne-RA,7440.749517469939,7024.08203125,18.74302846626279
|
| 83 |
+
XGBoost,B,Usage de stupรฉfiants,R84,Auvergne-RA,1098.4177450479986,623.0478553771973,36.83277800719439
|
| 84 |
+
XGBoost,A,Usage de stupรฉfiants,R93,PACA,3188.272040466303,2648.81640625,9.723401167452815
|
| 85 |
+
XGBoost,B,Usage de stupรฉfiants,R93,PACA,3287.182530434857,1667.885518391927,81.44268047893503
|
| 86 |
+
XGBoost,A,Usage de stupรฉfiants,R94,Corse,319.4415996682521,295.63818359375,18.019497418195797
|
| 87 |
+
XGBoost,B,Usage de stupรฉfiants,R94,Corse,29.908921997822013,19.64330291748047,5.78119353166155
|
| 88 |
+
XGBoost,A,Cambriolages de logement,R01,Guadeloupe,153.64552248579574,150.3818359375,15.665951878110082
|
| 89 |
+
XGBoost,B,Cambriolages de logement,R01,Guadeloupe,153.9555704133027,149.443359375,15.57469190412557
|
| 90 |
+
XGBoost,A,Cambriolages de logement,R02,Martinique,682.982980530421,676.8260498046875,99.73379519633606
|
| 91 |
+
XGBoost,B,Cambriolages de logement,R02,Martinique,681.0224617112955,674.7113037109375,99.05781475877018
|
| 92 |
+
XGBoost,A,Cambriolages de logement,R03,Guyane,151.73642309953559,128.0,14.247365703929452
|
| 93 |
+
XGBoost,B,Cambriolages de logement,R03,Guyane,156.01251491145865,130.0,14.641325606850828
|
| 94 |
+
XGBoost,A,Cambriolages de logement,R04,La Rรฉunion,552.065758267488,547.151123046875,59.53705714185524
|
| 95 |
+
XGBoost,B,Cambriolages de logement,R04,La Rรฉunion,557.1479141509976,551.44677734375,60.97294167295413
|
| 96 |
+
XGBoost,A,Cambriolages de logement,R06,Mayotte,61.51354908753025,61.5,30.58391698035384
|
| 97 |
+
XGBoost,B,Cambriolages de logement,R06,Mayotte,110.99661561708004,103.91943359375,22.906251462716163
|
| 98 |
+
XGBoost,A,Cambriolages de logement,R11,รle-de-France,9395.896156917019,9390.59765625,23.206461240584566
|
| 99 |
+
XGBoost,B,Cambriolages de logement,R11,รle-de-France,1685.3519990529128,1499.2959899902344,33.46126093869342
|
| 100 |
+
XGBoost,A,Cambriolages de logement,R24,Centre-Val de Loire,1448.0780379651171,1445.3095703125,24.35388525771246
|
| 101 |
+
XGBoost,B,Cambriolages de logement,R24,Centre-Val de Loire,686.4568092567947,525.4661153157552,73.31209297436354
|
| 102 |
+
XGBoost,A,Cambriolages de logement,R27,Bourgogne-FC,2258.305861539049,2253.251953125,40.85839756921825
|
| 103 |
+
XGBoost,B,Cambriolages de logement,R27,Bourgogne-FC,286.3489638420793,240.74220275878906,46.55797167938391
|
| 104 |
+
XGBoost,A,Cambriolages de logement,R28,Normandie,1573.5433032433089,1557.51806640625,25.916711347157605
|
| 105 |
+
XGBoost,B,Cambriolages de logement,R28,Normandie,1128.6018593810882,804.432470703125,127.51373931298218
|
| 106 |
+
XGBoost,A,Cambriolages de logement,R32,Hauts-de-France,4876.194132295757,4822.37109375,29.405420381423177
|
| 107 |
+
XGBoost,B,Cambriolages de logement,R32,Hauts-de-France,2364.0682900513457,2061.64970703125,104.7115477794386
|
| 108 |
+
XGBoost,A,Cambriolages de logement,R44,Grand Est,3988.7809690799227,3972.0458984375,38.3372260059912
|
| 109 |
+
XGBoost,B,Cambriolages de logement,R44,Grand Est,573.1105045749442,465.0311706542969,66.66522788115968
|
| 110 |
+
XGBoost,A,Cambriolages de logement,R52,Pays de la Loire,1433.5366577009186,1415.927734375,13.983411145235483
|
| 111 |
+
XGBoost,B,Cambriolages de logement,R52,Pays de la Loire,1291.994985562443,773.2472900390625,56.4615609461441
|
| 112 |
+
XGBoost,A,Cambriolages de logement,R53,Bretagne,1031.5191764602255,1031.470703125,17.58422686956682
|
| 113 |
+
XGBoost,B,Cambriolages de logement,R53,Bretagne,426.1944461082002,393.79803466796875,29.400394188574396
|
| 114 |
+
XGBoost,A,Cambriolages de logement,R75,Nouvelle-Aquitaine,1880.7650570361166,1880.2734375,10.472777510460972
|
| 115 |
+
XGBoost,B,Cambriolages de logement,R75,Nouvelle-Aquitaine,1357.8320297542614,663.1187133789062,97.46258178029903
|
| 116 |
+
XGBoost,A,Cambriolages de logement,R76,Occitanie,6230.723989022738,6221.92578125,33.198522178591524
|
| 117 |
+
XGBoost,B,Cambriolages de logement,R76,Occitanie,1749.8157770557173,1110.4751762977014,122.23589670270643
|
| 118 |
+
XGBoost,A,Cambriolages de logement,R84,Auvergne-RA,6954.447163514359,6879.68359375,26.239740224630577
|
| 119 |
+
XGBoost,B,Cambriolages de logement,R84,Auvergne-RA,2542.609081018565,1547.7744369506836,411.0902998938486
|
| 120 |
+
XGBoost,A,Cambriolages de logement,R93,PACA,4938.4793645839545,4684.447265625,22.61787153678297
|
| 121 |
+
XGBoost,B,Cambriolages de logement,R93,PACA,3308.566714956942,2497.657511393229,431.9758502587272
|
| 122 |
+
XGBoost,A,Cambriolages de logement,R94,Corse,57.67166901402182,55.94659423828125,15.58421082478631
|
| 123 |
+
XGBoost,B,Cambriolages de logement,R94,Corse,22.667735979802163,19.65587615966797,10.657672264138155
|
| 124 |
+
XGBoost,A,Vols sans violence contre des personnes,R01,Guadeloupe,404.07421422384766,398.5645751953125,76.2621078491211
|
| 125 |
+
XGBoost,B,Vols sans violence contre des personnes,R01,Guadeloupe,462.7842482040111,462.02490234375,19.301800882588743
|
| 126 |
+
XGBoost,A,Vols sans violence contre des personnes,R02,Martinique,72.58182549833683,71.11871337890625,14.39239207508648
|
| 127 |
+
XGBoost,B,Vols sans violence contre des personnes,R02,Martinique,737.1677325203136,736.515625,46.5827853884423
|
| 128 |
+
XGBoost,A,Vols sans violence contre des personnes,R03,Guyane,223.61067138076442,222.0,14.542833520315071
|
| 129 |
+
XGBoost,B,Vols sans violence contre des personnes,R03,Guyane,517.0147243024887,516.76708984375,26.673602645369716
|
| 130 |
+
XGBoost,A,Vols sans violence contre des personnes,R04,La Rรฉunion,283.2043597968773,282.95001220703125,61.486863279659
|
| 131 |
+
XGBoost,B,Vols sans violence contre des personnes,R04,La Rรฉunion,1034.819204782652,1034.17529296875,35.40778657008654
|
| 132 |
+
XGBoost,A,Vols sans violence contre des personnes,R06,Mayotte,330.15795833479353,289.0744323730469,43.42388502350647
|
| 133 |
+
XGBoost,B,Vols sans violence contre des personnes,R06,Mayotte,123.56124827344745,120.346923828125,10.475447151837779
|
| 134 |
+
XGBoost,A,Vols sans violence contre des personnes,R11,รle-de-France,8060.760580793176,7939.484375,24.665100153806126
|
| 135 |
+
XGBoost,B,Vols sans violence contre des personnes,R11,รle-de-France,33765.924805002236,16800.752685546875,65.58287684035878
|
| 136 |
+
XGBoost,A,Vols sans violence contre des personnes,R24,Centre-Val de Loire,386.84254747020947,386.3251953125,31.937323830941484
|
| 137 |
+
XGBoost,B,Vols sans violence contre des personnes,R24,Centre-Val de Loire,1201.7337448697895,1046.2992045084636,61.86100044957824
|
| 138 |
+
XGBoost,A,Vols sans violence contre des personnes,R27,Bourgogne-FC,128.60427616835065,128.556640625,13.641529019565873
|
| 139 |
+
XGBoost,B,Vols sans violence contre des personnes,R27,Bourgogne-FC,872.2813021221223,665.1668930053711,52.81896526335377
|
| 140 |
+
XGBoost,A,Vols sans violence contre des personnes,R28,Normandie,755.4414120807805,746.790283203125,44.84786974424014
|
| 141 |
+
XGBoost,B,Vols sans violence contre des personnes,R28,Normandie,3674.3373089302713,2349.8260986328123,174.4929192741538
|
| 142 |
+
XGBoost,A,Vols sans violence contre des personnes,R32,Hauts-de-France,1730.803051904818,1726.35546875,37.53940371400872
|
| 143 |
+
XGBoost,B,Vols sans violence contre des personnes,R32,Hauts-de-France,11317.084322940907,7689.331982421875,186.4792872338464
|
| 144 |
+
XGBoost,A,Vols sans violence contre des personnes,R44,Grand Est,720.0089580938911,711.6337890625,32.68319243905104
|
| 145 |
+
XGBoost,B,Vols sans violence contre des personnes,R44,Grand Est,1991.7409505664023,1731.2148559570312,118.27205955328341
|
| 146 |
+
XGBoost,A,Vols sans violence contre des personnes,R52,Pays de la Loire,981.676538104717,966.579833984375,42.282677671443984
|
| 147 |
+
XGBoost,B,Vols sans violence contre des personnes,R52,Pays de la Loire,4405.980769350254,3247.8452392578124,92.13746981110346
|
| 148 |
+
XGBoost,A,Vols sans violence contre des personnes,R53,Bretagne,432.85590410042397,426.2205810546875,33.326840623001885
|
| 149 |
+
XGBoost,B,Vols sans violence contre des personnes,R53,Bretagne,3330.7546295532225,2972.9627685546875,90.57549039732599
|
| 150 |
+
XGBoost,A,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,806.6557826612479,792.30126953125,25.628167255897992
|
| 151 |
+
XGBoost,B,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,5700.319755906671,2854.60471089681,191.01166323408043
|
| 152 |
+
XGBoost,A,Vols sans violence contre des personnes,R76,Occitanie,1458.9566107888434,1452.60400390625,33.19398853908075
|
| 153 |
+
XGBoost,B,Vols sans violence contre des personnes,R76,Occitanie,4997.844414436627,3270.0965599646934,264.7491244662048
|
| 154 |
+
XGBoost,A,Vols sans violence contre des personnes,R84,Auvergne-RA,591.3703587395673,449.30908203125,7.089344229011409
|
| 155 |
+
XGBoost,B,Vols sans violence contre des personnes,R84,Auvergne-RA,10455.705129385606,5525.588976542155,450.2209648935216
|
| 156 |
+
XGBoost,A,Vols sans violence contre des personnes,R93,PACA,1762.2672267642215,1745.2236328125,28.203843859221994
|
| 157 |
+
XGBoost,B,Vols sans violence contre des personnes,R93,PACA,5955.461300396379,3452.813680013021,242.8883115564632
|
| 158 |
+
XGBoost,A,Vols sans violence contre des personnes,R94,Corse,43.393447975999536,43.10442352294922,61.511444779294145
|
| 159 |
+
XGBoost,B,Vols sans violence contre des personnes,R94,Corse,163.2682722543141,150.85205078125,21.032776758632455
|
| 160 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,31.643378891634224,27.5,22.003075789725955
|
| 161 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,182.67447178588597,161.0,5.53154871091266
|
| 162 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R02,Martinique,40.133421258078094,32.98752021789551,36.795316040815024
|
| 163 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R02,Martinique,74.16744014322377,72.634765625,3.2284889773308914
|
| 164 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R03,Guyane,8.136104425695873,7.562816619873047,17.735543916679504
|
| 165 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R03,Guyane,100.27033816623732,96.5,7.047561326831427
|
| 166 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.37652600736201,20.0,6.474786719808151
|
| 167 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,523.7837784139815,467.85595703125,10.329572111676985
|
| 168 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R06,Mayotte,25.486304895394127,19.0,40.66045245284554
|
| 169 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R06,Mayotte,615.8683138396078,615.4197998046875,35.57178796363183
|
| 170 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R11,รle-de-France,1030.1469562609466,907.49462890625,21.663693479601758
|
| 171 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R11,รle-de-France,3814.156673195527,3313.7332763671875,26.953548463576993
|
| 172 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,199.4379335427664,195.88067626953125,24.31270216215207
|
| 173 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,1055.4540975253615,879.2366739908854,33.82014687388141
|
| 174 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,158.28231767711378,158.2625732421875,12.506371367930512
|
| 175 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,707.4336158346075,611.478759765625,33.457985525683206
|
| 176 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R28,Normandie,296.1434039829749,280.8289794921875,25.00800510725082
|
| 177 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R28,Normandie,4573.502328596117,2757.6026611328125,126.6527992461792
|
| 178 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,968.3779410089475,955.9736328125,28.101921846683886
|
| 179 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,13029.16393726768,8969.0658203125,141.26534910586736
|
| 180 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R44,Grand Est,994.6639510066071,942.122802734375,36.04835730910268
|
| 181 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R44,Grand Est,2011.9921337450203,1472.7529296875,53.393889929568104
|
| 182 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,211.1181653602223,208.112060546875,18.642001695840584
|
| 183 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,3462.028439421909,2796.872521972656,66.63634295760929
|
| 184 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R53,Bretagne,108.9966447490589,105.20465087890625,13.827962086613017
|
| 185 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R53,Bretagne,1275.0305829895933,1046.9434814453125,22.075556648180566
|
| 186 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,142.97536392927879,133.3780517578125,9.485973143597445
|
| 187 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,4078.483222720171,2026.074971516927,96.71182757872278
|
| 188 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R76,Occitanie,610.4401707495605,592.35205078125,33.66199062604719
|
| 189 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R76,Occitanie,3216.1839300070337,2168.2444739708535,148.46290076887274
|
| 190 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,1231.4376385071137,1213.31298828125,29.725958092257613
|
| 191 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,2402.9983073207686,1581.0343017578125,53.736355957394224
|
| 192 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R93,PACA,370.54041374898134,369.323974609375,24.076155519069243
|
| 193 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R93,PACA,4511.729136630464,2816.9266662597656,107.44093293908416
|
| 194 |
+
XGBoost,A,Destructions et dรฉgradations volontaires,R94,Corse,152.87163308503136,152.13394165039062,55.58052941436955
|
| 195 |
+
XGBoost,B,Destructions et dรฉgradations volontaires,R94,Corse,194.6268881312361,173.6826171875,11.971253914087969
|
| 196 |
+
XGBoost,A,Violences sexuelles,R01,Guadeloupe,48.92539015809712,39.40423583984375,18.06099827690636
|
| 197 |
+
XGBoost,B,Violences sexuelles,R01,Guadeloupe,120.3578778596256,95.30880737304688,15.972830517807607
|
| 198 |
+
XGBoost,A,Violences sexuelles,R02,Martinique,53.73262037699731,40.77001953125,16.284034906963317
|
| 199 |
+
XGBoost,B,Violences sexuelles,R02,Martinique,181.02731487740127,154.70904541015625,22.402126525526977
|
| 200 |
+
XGBoost,A,Violences sexuelles,R03,Guyane,54.67096926174727,47.25108337402344,15.157774705153246
|
| 201 |
+
XGBoost,B,Violences sexuelles,R03,Guyane,70.66368953180442,67.5,10.775099958655517
|
| 202 |
+
XGBoost,A,Violences sexuelles,R04,La Rรฉunion,115.99278915507468,99.86654663085938,18.595145736782914
|
| 203 |
+
XGBoost,B,Violences sexuelles,R04,La Rรฉunion,206.9508729223895,151.48486328125,9.598434736143869
|
| 204 |
+
XGBoost,A,Violences sexuelles,R06,Mayotte,77.07416015516058,56.5,38.073857131705275
|
| 205 |
+
XGBoost,B,Violences sexuelles,R06,Mayotte,62.9274783059839,53.0,12.92219621834761
|
| 206 |
+
XGBoost,A,Violences sexuelles,R11,รle-de-France,1328.8537768231085,1048.0283203125,17.05574551319768
|
| 207 |
+
XGBoost,B,Violences sexuelles,R11,รle-de-France,873.4731975909025,512.9810180664062,19.923281558089062
|
| 208 |
+
XGBoost,A,Violences sexuelles,R24,Centre-Val de Loire,383.07008115187955,343.2822265625,25.182046904212253
|
| 209 |
+
XGBoost,B,Violences sexuelles,R24,Centre-Val de Loire,180.89193355839674,111.651917775472,18.529550938451244
|
| 210 |
+
XGBoost,A,Violences sexuelles,R27,Bourgogne-FC,234.51529813017976,206.31329345703125,17.88885081173815
|
| 211 |
+
XGBoost,B,Violences sexuelles,R27,Bourgogne-FC,130.6685335654148,94.05907154083252,22.91638440372411
|
| 212 |
+
XGBoost,A,Violences sexuelles,R28,Normandie,454.11565993322466,422.095703125,23.75712325700419
|
| 213 |
+
XGBoost,B,Violences sexuelles,R28,Normandie,423.2894102485309,232.1943786621094,20.169748366056055
|
| 214 |
+
XGBoost,A,Violences sexuelles,R32,Hauts-de-France,654.1736552469157,521.07861328125,16.542505775217137
|
| 215 |
+
XGBoost,B,Violences sexuelles,R32,Hauts-de-France,720.0992239334611,401.3382995605469,14.016696556183367
|
| 216 |
+
XGBoost,A,Violences sexuelles,R44,Grand Est,595.5719703678363,507.61572265625,21.476587359341696
|
| 217 |
+
XGBoost,B,Violences sexuelles,R44,Grand Est,287.209198255357,210.17984313964843,36.304430384434184
|
| 218 |
+
XGBoost,A,Violences sexuelles,R52,Pays de la Loire,517.1203983638459,432.482666015625,22.15762286590792
|
| 219 |
+
XGBoost,B,Violences sexuelles,R52,Pays de la Loire,440.7772038121263,297.62604064941405,28.15042849427566
|
| 220 |
+
XGBoost,A,Violences sexuelles,R53,Bretagne,554.5697149588025,504.853759765625,30.439299505681166
|
| 221 |
+
XGBoost,B,Violences sexuelles,R53,Bretagne,310.2729407598057,271.42189025878906,24.281394251341943
|
| 222 |
+
XGBoost,A,Violences sexuelles,R75,Nouvelle-Aquitaine,874.6184905134285,775.1983642578125,26.221398324859592
|
| 223 |
+
XGBoost,B,Violences sexuelles,R75,Nouvelle-Aquitaine,541.0209388512477,302.1905097961426,38.849036980024785
|
| 224 |
+
XGBoost,A,Violences sexuelles,R76,Occitanie,730.5488691427469,605.6644287109375,21.834998945099176
|
| 225 |
+
XGBoost,B,Violences sexuelles,R76,Occitanie,417.34219449549516,226.25238154484674,61.967671189456816
|
| 226 |
+
XGBoost,A,Violences sexuelles,R84,Auvergne-RA,819.89787071711,718.475830078125,21.367679178515466
|
| 227 |
+
XGBoost,B,Violences sexuelles,R84,Auvergne-RA,488.30419833354335,286.7690836588542,41.070241561158646
|
| 228 |
+
XGBoost,A,Violences sexuelles,R93,PACA,490.7700881502442,402.01123046875,19.049101087306394
|
| 229 |
+
XGBoost,B,Violences sexuelles,R93,PACA,413.62648575496235,228.4298095703125,21.006417659126633
|
| 230 |
+
XGBoost,A,Violences sexuelles,R94,Corse,27.90415412083997,27.452537536621094,25.4938858229907
|
| 231 |
+
XGBoost,B,Violences sexuelles,R94,Corse,47.15053440387491,38.56616020202637,21.15563998247051
|
| 232 |
+
LightGBM,A,Usage de stupรฉfiants,R01,Guadeloupe,618.7271712960406,565.75,29.906447113051914
|
| 233 |
+
LightGBM,B,Usage de stupรฉfiants,R01,Guadeloupe,144.10499644356543,118.5,8.362384490922695
|
| 234 |
+
LightGBM,A,Usage de stupรฉfiants,R02,Martinique,509.6899179893595,494.75,35.81902820290252
|
| 235 |
+
LightGBM,B,Usage de stupรฉfiants,R02,Martinique,329.17244720662757,288.5,28.39957047734546
|
| 236 |
+
LightGBM,A,Usage de stupรฉfiants,R03,Guyane,227.48406537601704,218.0,26.247712093296716
|
| 237 |
+
LightGBM,B,Usage de stupรฉfiants,R03,Guyane,66.80007485025746,53.5,17.765282873848236
|
| 238 |
+
LightGBM,A,Usage de stupรฉfiants,R04,La Rรฉunion,425.8712393435368,303.75,13.651813899575812
|
| 239 |
+
LightGBM,B,Usage de stupรฉfiants,R04,La Rรฉunion,115.41447049655429,114.5,7.866593600289253
|
| 240 |
+
LightGBM,A,Usage de stupรฉfiants,R06,Mayotte,85.26576100639693,80.0,48.049535603715164
|
| 241 |
+
LightGBM,B,Usage de stupรฉfiants,R06,Mayotte,22.683970111071826,19.25,13.293650793650794
|
| 242 |
+
LightGBM,A,Usage de stupรฉfiants,R11,รle-de-France,7487.8780038138975,6939.0,11.879909025669523
|
| 243 |
+
LightGBM,B,Usage de stupรฉfiants,R11,รle-de-France,2579.4925130730658,2055.28125,37.74617835355878
|
| 244 |
+
LightGBM,A,Usage de stupรฉfiants,R24,Centre-Val de Loire,2691.1406155197465,2589.25,21.743066370186536
|
| 245 |
+
LightGBM,B,Usage de stupรฉfiants,R24,Centre-Val de Loire,478.23852138167763,365.0277777777778,46.72557300386532
|
| 246 |
+
LightGBM,A,Usage de stupรฉfiants,R27,Bourgogne-FC,3108.4838748174325,3064.0,25.084925290765337
|
| 247 |
+
LightGBM,B,Usage de stupรฉfiants,R27,Bourgogne-FC,520.7365426729721,466.375,64.48363984158814
|
| 248 |
+
LightGBM,A,Usage de stupรฉfiants,R28,Normandie,3398.7227748082073,3335.5,25.358316200938948
|
| 249 |
+
LightGBM,B,Usage de stupรฉfiants,R28,Normandie,1157.6795119980313,849.7,70.27886630562121
|
| 250 |
+
LightGBM,A,Usage de stupรฉfiants,R32,Hauts-de-France,4510.363739489311,4317.75,19.065140787502838
|
| 251 |
+
LightGBM,B,Usage de stupรฉfiants,R32,Hauts-de-France,2783.0387241287176,2221.38,91.92651423166849
|
| 252 |
+
LightGBM,A,Usage de stupรฉfiants,R44,Grand Est,4670.775180225531,4377.499261474618,18.015442529184927
|
| 253 |
+
LightGBM,B,Usage de stupรฉfiants,R44,Grand Est,562.1724392027256,503.5,62.7184696010214
|
| 254 |
+
LightGBM,A,Usage de stupรฉfiants,R52,Pays de la Loire,4360.374295860391,4192.0,26.169308834362333
|
| 255 |
+
LightGBM,B,Usage de stupรฉfiants,R52,Pays de la Loire,698.4819414272642,646.99,60.05789504240232
|
| 256 |
+
LightGBM,A,Usage de stupรฉfiants,R53,Bretagne,3607.58818326039,3394.5,25.23117462386949
|
| 257 |
+
LightGBM,B,Usage de stupรฉfiants,R53,Bretagne,712.1567731414551,603.421875,33.310670650489214
|
| 258 |
+
LightGBM,A,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,5471.850559598505,5090.885241937642,18.901287848962003
|
| 259 |
+
LightGBM,B,Usage de stupรฉfiants,R75,Nouvelle-Aquitaine,418.0696689877447,295.98533522630504,35.49470997871074
|
| 260 |
+
LightGBM,A,Usage de stupรฉfiants,R76,Occitanie,5631.885660155449,5198.501114654548,18.258461802348126
|
| 261 |
+
LightGBM,B,Usage de stupรฉfiants,R76,Occitanie,1110.0185660128232,814.6646248066389,150.61025833926865
|
| 262 |
+
LightGBM,A,Usage de stupรฉfiants,R84,Auvergne-RA,8403.95759533734,8037.3800621986375,21.511521669549282
|
| 263 |
+
LightGBM,B,Usage de stupรฉfiants,R84,Auvergne-RA,1326.8968200547013,1081.3693577348974,111.8278375300906
|
| 264 |
+
LightGBM,A,Usage de stupรฉfiants,R93,PACA,6083.313390949048,5818.75,21.91453521873473
|
| 265 |
+
LightGBM,B,Usage de stupรฉfiants,R93,PACA,4445.342859542882,2770.5,134.74782298703465
|
| 266 |
+
LightGBM,A,Usage de stupรฉfiants,R94,Corse,447.4221300964001,430.75,26.51793160147276
|
| 267 |
+
LightGBM,B,Usage de stupรฉfiants,R94,Corse,43.7978309965231,39.75,12.077939877639658
|
| 268 |
+
LightGBM,A,Cambriolages de logement,R01,Guadeloupe,877.8153635588751,877.25,90.87416743666743
|
| 269 |
+
LightGBM,B,Cambriolages de logement,R01,Guadeloupe,860.0462560234769,859.25,88.85725963273165
|
| 270 |
+
LightGBM,A,Cambriolages de logement,R02,Martinique,547.697224751048,540.0,79.92065078926646
|
| 271 |
+
LightGBM,B,Cambriolages de logement,R02,Martinique,533.3327408850876,525.25,77.50210047958394
|
| 272 |
+
LightGBM,A,Cambriolages de logement,R03,Guyane,318.1360754457124,291.25,31.654210038711206
|
| 273 |
+
LightGBM,B,Cambriolages de logement,R03,Guyane,320.7733818445664,293.25,32.14327846646633
|
| 274 |
+
LightGBM,A,Cambriolages de logement,R04,La Rรฉunion,863.1351284706236,860.0,93.22311749903214
|
| 275 |
+
LightGBM,B,Cambriolages de logement,R04,La Rรฉunion,847.9848539331348,844.25,92.95062011208898
|
| 276 |
+
LightGBM,A,Cambriolages de logement,R06,Mayotte,125.80664728065842,109.75,62.778447227352586
|
| 277 |
+
LightGBM,B,Cambriolages de logement,R06,Mayotte,336.76586822301334,334.5,72.19975490196079
|
| 278 |
+
LightGBM,A,Cambriolages de logement,R11,รle-de-France,9016.77141844574,9011.25,22.269245920816
|
| 279 |
+
LightGBM,B,Cambriolages de logement,R11,รle-de-France,2174.20511089865,1976.8828125,42.67825082497904
|
| 280 |
+
LightGBM,A,Cambriolages de logement,R24,Centre-Val de Loire,2128.882159726085,2127.0,35.82986181670392
|
| 281 |
+
LightGBM,B,Cambriolages de logement,R24,Centre-Val de Loire,556.5108252416219,505.27777777777777,72.0177998947705
|
| 282 |
+
LightGBM,A,Cambriolages de logement,R27,Bourgogne-FC,1980.7639940184697,1975.0,35.82205018882353
|
| 283 |
+
LightGBM,B,Cambriolages de logement,R27,Bourgogne-FC,408.65057205277776,338.3203125,80.46843831128281
|
| 284 |
+
LightGBM,A,Cambriolages de logement,R28,Normandie,1992.3820071713155,1979.75,32.9053318196676
|
| 285 |
+
LightGBM,B,Cambriolages de logement,R28,Normandie,896.8345443837453,825.8799999999999,110.87299138433882
|
| 286 |
+
LightGBM,A,Cambriolages de logement,R32,Hauts-de-France,4790.793488556984,4736.0,28.882179187444322
|
| 287 |
+
LightGBM,B,Cambriolages de logement,R32,Hauts-de-France,3012.7308558847403,2775.98,134.3611710357569
|
| 288 |
+
LightGBM,A,Cambriolages de logement,R44,Grand Est,4042.926044956969,4026.4160248279613,38.86030747576165
|
| 289 |
+
LightGBM,B,Cambriolages de logement,R44,Grand Est,658.1285276210741,574.1928302018159,92.37056651552116
|
| 290 |
+
LightGBM,A,Cambriolages de logement,R52,Pays de la Loire,1051.8773989871634,1027.75,10.163164351312686
|
| 291 |
+
LightGBM,B,Cambriolages de logement,R52,Pays de la Loire,2038.001003434493,1707.3400000000001,183.1054421796999
|
| 292 |
+
LightGBM,A,Cambriolages de logement,R53,Bretagne,1424.2851057635896,1424.25,24.28010887345765
|
| 293 |
+
LightGBM,B,Cambriolages de logement,R53,Bretagne,443.653462210372,373.8125,30.0991825560886
|
| 294 |
+
LightGBM,A,Cambriolages de logement,R75,Nouvelle-Aquitaine,1076.0842462489695,1073.2653408489539,5.978294112405041
|
| 295 |
+
LightGBM,B,Cambriolages de logement,R75,Nouvelle-Aquitaine,1703.590454691243,1149.4978486317711,118.20757804314388
|
| 296 |
+
LightGBM,A,Cambriolages de logement,R76,Occitanie,6417.205905990559,6408.663717178498,34.193971451467704
|
| 297 |
+
LightGBM,B,Cambriolages de logement,R76,Occitanie,1516.321977088081,1263.3329931704402,288.12577284840063
|
| 298 |
+
LightGBM,A,Cambriolages de logement,R84,Auvergne-RA,6657.797657064633,6579.6641739845145,25.10191664100836
|
| 299 |
+
LightGBM,B,Cambriolages de logement,R84,Auvergne-RA,2138.3402462501476,1882.261173189334,326.6273894269917
|
| 300 |
+
LightGBM,A,Cambriolages de logement,R93,PACA,5797.7945160207255,5583.0,26.852750541907177
|
| 301 |
+
LightGBM,B,Cambriolages de logement,R93,PACA,3712.1956826733062,3070.6666666666665,563.6775119748612
|
| 302 |
+
LightGBM,A,Cambriolages de logement,R94,Corse,201.2375772563365,200.75,55.534380153982966
|
| 303 |
+
LightGBM,B,Cambriolages de logement,R94,Corse,97.71906479802189,96.125,55.89260980423762
|
| 304 |
+
LightGBM,A,Vols sans violence contre des personnes,R01,Guadeloupe,613.3655618797,609.75,115.85937500000001
|
| 305 |
+
LightGBM,B,Vols sans violence contre des personnes,R01,Guadeloupe,708.7455908152092,708.25,29.581710446557324
|
| 306 |
+
LightGBM,A,Vols sans violence contre des personnes,R02,Martinique,210.99881516255013,210.5,42.43255046583851
|
| 307 |
+
LightGBM,B,Vols sans violence contre des personnes,R02,Martinique,821.5850534180864,821.0,51.921811724728215
|
| 308 |
+
LightGBM,A,Vols sans violence contre des personnes,R03,Guyane,275.56226610332556,222.0,16.378941916840027
|
| 309 |
+
LightGBM,B,Vols sans violence contre des personnes,R03,Guyane,444.7878707878622,444.5,22.944396456693333
|
| 310 |
+
LightGBM,A,Vols sans violence contre des personnes,R04,La Rรฉunion,606.3687512561972,606.25,131.66456348851335
|
| 311 |
+
LightGBM,B,Vols sans violence contre des personnes,R04,La Rรฉunion,1277.0217304337464,1276.5,43.70077241824454
|
| 312 |
+
LightGBM,A,Vols sans violence contre des personnes,R06,Mayotte,213.88431452539945,159.5,21.465485577861184
|
| 313 |
+
LightGBM,B,Vols sans violence contre des personnes,R06,Mayotte,151.11667677658875,148.5,12.912263992716118
|
| 314 |
+
LightGBM,A,Vols sans violence contre des personnes,R11,รle-de-France,10597.9472068887,10506.0,32.57880518066887
|
| 315 |
+
LightGBM,B,Vols sans violence contre des personnes,R11,รle-de-France,32566.466420569337,24898.3671875,153.29173082742105
|
| 316 |
+
LightGBM,A,Vols sans violence contre des personnes,R24,Centre-Val de Loire,502.3982484045899,502.0,41.49193688651893
|
| 317 |
+
LightGBM,B,Vols sans violence contre des personnes,R24,Centre-Val de Loire,1396.1859063425059,1334.763888888889,96.29341356627467
|
| 318 |
+
LightGBM,A,Vols sans violence contre des personnes,R27,Bourgogne-FC,238.5256799592027,238.5,25.306767804353065
|
| 319 |
+
LightGBM,B,Vols sans violence contre des personnes,R27,Bourgogne-FC,997.0077439048555,900.0859375,92.60252163133991
|
| 320 |
+
LightGBM,A,Vols sans violence contre des personnes,R28,Normandie,739.5887793226719,730.75,43.894402033833444
|
| 321 |
+
LightGBM,B,Vols sans violence contre des personnes,R28,Normandie,2525.698394998896,2280.9300000000003,116.80477847772967
|
| 322 |
+
LightGBM,A,Vols sans violence contre des personnes,R32,Hauts-de-France,2521.8004604845323,2518.75,54.73671446480729
|
| 323 |
+
LightGBM,B,Vols sans violence contre des personnes,R32,Hauts-de-France,6472.055022363453,6146.55,148.6757440572046
|
| 324 |
+
LightGBM,A,Vols sans violence contre des personnes,R44,Grand Est,750.0209352705517,741.9846045196042,34.066517074664546
|
| 325 |
+
LightGBM,B,Vols sans violence contre des personnes,R44,Grand Est,2263.326995327211,1881.5824240112302,149.89483091546373
|
| 326 |
+
LightGBM,A,Vols sans violence contre des personnes,R52,Pays de la Loire,469.44781392610616,437.0,19.41523875753361
|
| 327 |
+
LightGBM,B,Vols sans violence contre des personnes,R52,Pays de la Loire,4521.174282473527,4245.71,165.0837781378599
|
| 328 |
+
LightGBM,A,Vols sans violence contre des personnes,R53,Bretagne,541.0437251276462,535.75,41.803671714386
|
| 329 |
+
LightGBM,B,Vols sans violence contre des personnes,R53,Bretagne,2271.015591405363,2057.65625,65.14039532335167
|
| 330 |
+
LightGBM,A,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,663.6016716655581,646.076565615348,20.941720087445535
|
| 331 |
+
LightGBM,B,Vols sans violence contre des personnes,R75,Nouvelle-Aquitaine,3215.479396226591,2500.6610027977204,144.84402452872283
|
| 332 |
+
LightGBM,A,Vols sans violence contre des personnes,R76,Occitanie,1660.9557186893812,1655.378476194178,37.81427084350788
|
| 333 |
+
LightGBM,B,Vols sans violence contre des personnes,R76,Occitanie,4702.112448893014,3766.1290770173455,479.0074137090517
|
| 334 |
+
LightGBM,A,Vols sans violence contre des personnes,R84,Auvergne-RA,692.8155489232211,576.3272810042781,8.999293720284783
|
| 335 |
+
LightGBM,B,Vols sans violence contre des personnes,R84,Auvergne-RA,6666.29982936835,5109.533032380157,254.9120244199357
|
| 336 |
+
LightGBM,A,Vols sans violence contre des personnes,R93,PACA,2518.6456305919655,2506.75,40.44328099754533
|
| 337 |
+
LightGBM,B,Vols sans violence contre des personnes,R93,PACA,8251.036803537681,7219.5,437.81121110984964
|
| 338 |
+
LightGBM,A,Vols sans violence contre des personnes,R94,Corse,49.005739459781644,48.75,69.50259170653908
|
| 339 |
+
LightGBM,B,Vols sans violence contre des personnes,R94,Corse,291.27381876852576,284.5,39.063927604798934
|
| 340 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R01,Guadeloupe,40.329889660151565,29.5,21.21984782256759
|
| 341 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R01,Guadeloupe,174.0028735394907,161.0,5.572475415089427
|
| 342 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R02,Martinique,40.03123780249619,35.5,41.48544663767146
|
| 343 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R02,Martinique,69.87891312835367,68.25,3.033861369987375
|
| 344 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R03,Guyane,3.905124837953327,3.0,7.239231966787753
|
| 345 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R03,Guyane,127.284130982617,96.5,7.322428837193145
|
| 346 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,20.556325060671714,20.0,6.492117805205915
|
| 347 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R04,La Rรฉunion,910.9666569090222,880.0,19.20320936295459
|
| 348 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R06,Mayotte,25.16445906432324,19.0,41.82389937106918
|
| 349 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R06,Mayotte,685.6528367184081,685.25,39.61012824105252
|
| 350 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R11,รle-de-France,1141.124144210436,1031.75,24.466322777920055
|
| 351 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R11,รle-de-France,4792.246376900301,4506.265625,38.34452508129922
|
| 352 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,226.87069555145283,223.75,27.74161863070314
|
| 353 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R24,Centre-Val de Loire,1235.4583157678774,1120.5555555555554,55.30864309709068
|
| 354 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,29.605742686174924,29.5,2.3314937895102292
|
| 355 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R27,Bourgogne-FC,1174.9025075910554,1073.984375,65.54387762251588
|
| 356 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R28,Normandie,272.47763669703244,255.75,22.833632667082373
|
| 357 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R28,Normandie,2771.135679193641,2474.2100000000005,80.31458783717815
|
| 358 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,1155.6244253649193,1145.25,33.625742793147026
|
| 359 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R32,Hauts-de-France,8171.712389089572,7314.5599999999995,109.25114455583926
|
| 360 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R44,Grand Est,849.911513816767,787.7744482517243,30.365504207390153
|
| 361 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R44,Grand Est,2349.5648681771477,2070.0194220275876,91.39510044277218
|
| 362 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,269.8453260666191,267.5,23.933260480637465
|
| 363 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R52,Pays de la Loire,3193.899605497956,2765.08,82.0939281348329
|
| 364 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R53,Bretagne,36.46659430218292,28.5,3.818440331598226
|
| 365 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R53,Bretagne,1703.0772195132552,1466.5,32.46718965751824
|
| 366 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,54.0320455566108,44.2178367578166,3.0689874154865446
|
| 367 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R75,Nouvelle-Aquitaine,2859.7045351293386,1995.0076494366656,84.11444098535976
|
| 368 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R76,Occitanie,448.92241531225085,424.87297637080883,24.317568041513717
|
| 369 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R76,Occitanie,3146.4660898506113,2513.899050464984,198.2277589404635
|
| 370 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,1144.834199450831,1125.8197834987052,27.597571047325165
|
| 371 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R84,Auvergne-RA,3673.5565260506864,3132.5727047749715,124.34300570618073
|
| 372 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R93,PACA,405.1123301011708,404.0,26.333100286304838
|
| 373 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R93,PACA,7468.4708576380535,6014.597222222223,257.4764566147486
|
| 374 |
+
LightGBM,A,Destructions et dรฉgradations volontaires,R94,Corse,66.4647462945583,64.75,23.825887743413517
|
| 375 |
+
LightGBM,B,Destructions et dรฉgradations volontaires,R94,Corse,212.81814419828024,184.875,12.802733715855656
|
| 376 |
+
LightGBM,A,Violences sexuelles,R01,Guadeloupe,63.28556312461792,56.25,26.709881320949435
|
| 377 |
+
LightGBM,B,Violences sexuelles,R01,Guadeloupe,159.0070753142765,141.0,24.51997402758024
|
| 378 |
+
LightGBM,A,Violences sexuelles,R02,Martinique,81.85963596303125,74.0,31.63403316756487
|
| 379 |
+
LightGBM,B,Violences sexuelles,R02,Martinique,252.63857583512458,234.5,35.08228850778398
|
| 380 |
+
LightGBM,A,Violences sexuelles,R03,Guyane,96.2616876020777,92.25,30.413817663817667
|
| 381 |
+
LightGBM,B,Violences sexuelles,R03,Guyane,171.58470940034255,157.75,24.842316513761467
|
| 382 |
+
LightGBM,A,Violences sexuelles,R04,La Rรฉunion,157.7024492517475,146.25,27.86934865598183
|
| 383 |
+
LightGBM,B,Violences sexuelles,R04,La Rรฉunion,354.4976198791749,325.25,21.705145404189025
|
| 384 |
+
LightGBM,A,Violences sexuelles,R06,Mayotte,76.44932962426813,56.5,38.748706004140786
|
| 385 |
+
LightGBM,B,Violences sexuelles,R06,Mayotte,107.0420478129973,93.0,22.917837473305607
|
| 386 |
+
LightGBM,A,Violences sexuelles,R11,รle-de-France,2148.870691782081,1987.5,34.32236795487439
|
| 387 |
+
LightGBM,B,Violences sexuelles,R11,รle-de-France,931.6451175206147,519.375,19.626257932934475
|
| 388 |
+
LightGBM,A,Violences sexuelles,R24,Centre-Val de Loire,568.51231297132,542.5,40.81042926639849
|
| 389 |
+
LightGBM,B,Violences sexuelles,R24,Centre-Val de Loire,322.89073282957844,241.11805555555557,36.414059953011964
|
| 390 |
+
LightGBM,A,Violences sexuelles,R27,Bourgogne-FC,410.4354395029747,395.0,35.1961702765495
|
| 391 |
+
LightGBM,B,Violences sexuelles,R27,Bourgogne-FC,221.16313840480402,177.79296875,39.19424298550034
|
| 392 |
+
LightGBM,A,Violences sexuelles,R28,Normandie,717.0870327233648,697.25,39.86468309251949
|
| 393 |
+
LightGBM,B,Violences sexuelles,R28,Normandie,488.6684689029977,368.76,35.378098596018035
|
| 394 |
+
LightGBM,A,Violences sexuelles,R32,Hauts-de-France,1169.8808700034376,1101.0,37.09905782487352
|
| 395 |
+
LightGBM,B,Violences sexuelles,R32,Hauts-de-France,1305.9943654166354,954.3299999999999,50.438072259561004
|
| 396 |
+
LightGBM,A,Violences sexuelles,R44,Grand Est,713.0633059518099,641.425777697564,27.6759617401964
|
| 397 |
+
LightGBM,B,Violences sexuelles,R44,Grand Est,378.41757028279574,309.8939378699064,49.80467628355162
|
| 398 |
+
LightGBM,A,Violences sexuelles,R52,Pays de la Loire,789.8796189926665,737.25,39.57576664295009
|
| 399 |
+
LightGBM,B,Violences sexuelles,R52,Pays de la Loire,613.196145209671,441.59,40.71689993263023
|
| 400 |
+
LightGBM,A,Violences sexuelles,R53,Bretagne,814.9811347509831,782.0,48.32873844241152
|
| 401 |
+
LightGBM,B,Violences sexuelles,R53,Bretagne,448.67438429778895,390.90625,34.015804618779505
|
| 402 |
+
LightGBM,A,Violences sexuelles,R75,Nouvelle-Aquitaine,995.0194020996539,908.8666626930229,31.113675408072783
|
| 403 |
+
LightGBM,B,Violences sexuelles,R75,Nouvelle-Aquitaine,472.451549758798,257.3772209490404,41.58350851967345
|
| 404 |
+
LightGBM,A,Violences sexuelles,R76,Occitanie,871.3430337234544,769.6534495592108,28.466810868473814
|
| 405 |
+
LightGBM,B,Violences sexuelles,R76,Occitanie,466.5024702538944,322.8847264084275,81.7740570113717
|
| 406 |
+
LightGBM,A,Violences sexuelles,R84,Auvergne-RA,1002.4248719054767,921.3200441837307,27.842188954013107
|
| 407 |
+
LightGBM,B,Violences sexuelles,R84,Auvergne-RA,450.9543095376268,310.18656433056543,46.44418250232703
|
| 408 |
+
LightGBM,A,Violences sexuelles,R93,PACA,762.3742519261783,708.5,35.217705180628684
|
| 409 |
+
LightGBM,B,Violences sexuelles,R93,PACA,763.7657936173889,608.0833333333334,118.55257219525718
|
| 410 |
+
LightGBM,A,Violences sexuelles,R94,Corse,41.551925346486655,41.25,38.41692927170868
|
| 411 |
+
LightGBM,B,Violences sexuelles,R94,Corse,59.64059020499378,49.5,27.223054661324834
|
data/delinquance_previsions_2030.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/delinquance_region.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/regions.geojson
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
files/Delinquance.py
ADDED
|
@@ -0,0 +1,703 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import numpy as np
|
| 4 |
+
import plotly.express as px
|
| 5 |
+
import plotly.graph_objects as go
|
| 6 |
+
import os
|
| 7 |
+
import json
|
| 8 |
+
import requests
|
| 9 |
+
|
| 10 |
+
st.set_page_config(
|
| 11 |
+
page_title="Oasis - Crime & Delinquency",
|
| 12 |
+
page_icon=":rotating_light:",
|
| 13 |
+
layout="wide",
|
| 14 |
+
initial_sidebar_state="expanded",
|
| 15 |
+
)
|
| 16 |
+
|
| 17 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 18 |
+
# CONSTANTES
|
| 19 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 20 |
+
DATA_DIR = os.path.join(os.path.dirname(__file__), '..', 'data')
|
| 21 |
+
|
| 22 |
+
REG_NAMES = {
|
| 23 |
+
'R11': 'รle-de-France', 'R24': 'Centre-Val de Loire',
|
| 24 |
+
'R27': 'Bourgogne-FC', 'R28': 'Normandie',
|
| 25 |
+
'R32': 'Hauts-de-France', 'R44': 'Grand Est',
|
| 26 |
+
'R52': 'Pays de la Loire', 'R53': 'Bretagne',
|
| 27 |
+
'R75': 'Nouvelle-Aquitaine', 'R76': 'Occitanie',
|
| 28 |
+
'R84': 'Auvergne-RA', 'R93': 'PACA',
|
| 29 |
+
'R94': 'Corse',
|
| 30 |
+
'R01': 'Guadeloupe', 'R02': 'Martinique', 'R03': 'Guyane',
|
| 31 |
+
'R04': 'La Rรฉunion', 'R06': 'Mayotte',
|
| 32 |
+
}
|
| 33 |
+
METRO_REGIONS = [
|
| 34 |
+
'R11','R24','R27','R28','R32','R44',
|
| 35 |
+
'R52','R53','R75','R76','R84','R93','R94',
|
| 36 |
+
]
|
| 37 |
+
MODELE_COLORS = {
|
| 38 |
+
'Prophet': '#EF553B', 'XGBoost': '#636EFA', 'LightGBM': '#00CC96',
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 42 |
+
# CHARGEMENT
|
| 43 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 44 |
+
@st.cache_data
|
| 45 |
+
def load_data():
|
| 46 |
+
hist = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_region.csv'))
|
| 47 |
+
prev = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_previsions_2030.csv'))
|
| 48 |
+
bench = pd.read_csv(os.path.join(DATA_DIR, 'delinquance_benchmark.csv'))
|
| 49 |
+
return hist, prev, bench
|
| 50 |
+
|
| 51 |
+
@st.cache_data
|
| 52 |
+
def load_geojson():
|
| 53 |
+
local = os.path.join(DATA_DIR, 'regions.geojson')
|
| 54 |
+
if os.path.exists(local):
|
| 55 |
+
with open(local) as f:
|
| 56 |
+
return json.load(f)
|
| 57 |
+
url = (
|
| 58 |
+
"https://raw.githubusercontent.com/gregoiredavid/"
|
| 59 |
+
"france-geojson/master/regions-version-simplifiee.geojson"
|
| 60 |
+
)
|
| 61 |
+
return requests.get(url, timeout=10).json()
|
| 62 |
+
|
| 63 |
+
with st.spinner("Loading data and preparing maps..."):
|
| 64 |
+
df_hist, df_prev, df_bench = load_data()
|
| 65 |
+
geojson_regions = load_geojson()
|
| 66 |
+
|
| 67 |
+
ALL_CRIMES = sorted(df_hist['indicateur'].dropna().unique())
|
| 68 |
+
ALL_REGIONS = sorted(
|
| 69 |
+
[r for r in df_hist['region'].dropna().unique() if r in METRO_REGIONS],
|
| 70 |
+
key=lambda r: REG_NAMES.get(r, r)
|
| 71 |
+
)
|
| 72 |
+
YEARS_HIST = sorted(df_hist['annee'].dropna().unique().astype(int))
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 76 |
+
# HELPERS
|
| 77 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 78 |
+
def make_choropleth(df_map, color_col, title, colorscale='Reds',
|
| 79 |
+
label='Nb of facts', opacity=0.7, range_color=None):
|
| 80 |
+
"""Carte choroplรจthe statique (une seule annรฉe)."""
|
| 81 |
+
df_plot = df_map.copy()
|
| 82 |
+
df_plot['code_insee'] = df_plot['region'].str.replace('R', '', regex=False)
|
| 83 |
+
kwargs = dict(
|
| 84 |
+
geojson=geojson_regions,
|
| 85 |
+
locations='code_insee',
|
| 86 |
+
featureidkey='properties.code',
|
| 87 |
+
color=color_col,
|
| 88 |
+
color_continuous_scale=colorscale,
|
| 89 |
+
hover_name='region_label',
|
| 90 |
+
hover_data={color_col: ':,.1f', 'code_insee': False},
|
| 91 |
+
mapbox_style='carto-positron',
|
| 92 |
+
zoom=4.5,
|
| 93 |
+
center={'lat': 46.5, 'lon': 2.5},
|
| 94 |
+
opacity=opacity,
|
| 95 |
+
title=title,
|
| 96 |
+
labels={color_col: label},
|
| 97 |
+
)
|
| 98 |
+
if range_color:
|
| 99 |
+
kwargs['range_color'] = range_color
|
| 100 |
+
fig = px.choropleth_mapbox(df_plot, **kwargs)
|
| 101 |
+
fig.update_layout(
|
| 102 |
+
height=520,
|
| 103 |
+
margin=dict(l=0, r=0, t=40, b=0),
|
| 104 |
+
coloraxis_colorbar=dict(title=label),
|
| 105 |
+
)
|
| 106 |
+
return fig
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
def make_animated_choropleth(df_all_years, color_col, title,
|
| 110 |
+
colorscale='Reds', label='Nb of facts',
|
| 111 |
+
opacity=0.7, range_color=None):
|
| 112 |
+
"""
|
| 113 |
+
Carte choroplรจthe ANIMรE.
|
| 114 |
+
|
| 115 |
+
Clรฉ du fonctionnement : chaque rรฉgion doit รชtre prรฉsente dans CHAQUE
|
| 116 |
+
frame. On force cela avec un reindex complet (produit cartรฉsien
|
| 117 |
+
annรฉes ร rรฉgions) avant de passer ร Plotly.
|
| 118 |
+
"""
|
| 119 |
+
df = df_all_years.copy()
|
| 120 |
+
df['code_insee'] = df['region'].str.replace('R', '', regex=False)
|
| 121 |
+
df['region_label'] = df['region'].map(REG_NAMES)
|
| 122 |
+
|
| 123 |
+
# โโ Garantir que toutes les rรฉgions sont prรฉsentes dans chaque frame โโ
|
| 124 |
+
all_years = sorted(df['annee'].unique())
|
| 125 |
+
all_regions = df['region'].unique()
|
| 126 |
+
index_full = pd.MultiIndex.from_product(
|
| 127 |
+
[all_years, all_regions], names=['annee', 'region']
|
| 128 |
+
)
|
| 129 |
+
df_full = (
|
| 130 |
+
df.set_index(['annee', 'region'])
|
| 131 |
+
.reindex(index_full, fill_value=0)
|
| 132 |
+
.reset_index()
|
| 133 |
+
)
|
| 134 |
+
# Re-remplir les colonnes dรฉrivรฉes aprรจs reindex
|
| 135 |
+
df_full['code_insee'] = df_full['region'].str.replace('R', '', regex=False)
|
| 136 |
+
df_full['region_label'] = df_full['region'].map(REG_NAMES)
|
| 137 |
+
df_full['annee_str'] = df_full['annee'].astype(str)
|
| 138 |
+
|
| 139 |
+
if range_color is None:
|
| 140 |
+
range_color = [0, df_full[color_col].max()]
|
| 141 |
+
|
| 142 |
+
fig = px.choropleth_mapbox(
|
| 143 |
+
df_full.sort_values('annee'),
|
| 144 |
+
geojson=geojson_regions,
|
| 145 |
+
locations='code_insee',
|
| 146 |
+
featureidkey='properties.code',
|
| 147 |
+
color=color_col,
|
| 148 |
+
color_continuous_scale=colorscale,
|
| 149 |
+
range_color=range_color,
|
| 150 |
+
hover_name='region_label',
|
| 151 |
+
hover_data={color_col: ':,.0f', 'code_insee': False, 'annee_str': False},
|
| 152 |
+
animation_frame='annee_str',
|
| 153 |
+
animation_group='code_insee',
|
| 154 |
+
category_orders={'annee_str': [str(y) for y in all_years]},
|
| 155 |
+
mapbox_style='carto-positron',
|
| 156 |
+
zoom=4.5,
|
| 157 |
+
center={'lat': 46.5, 'lon': 2.5},
|
| 158 |
+
opacity=opacity,
|
| 159 |
+
title=title,
|
| 160 |
+
labels={color_col: label},
|
| 161 |
+
)
|
| 162 |
+
fig.update_layout(
|
| 163 |
+
height=580,
|
| 164 |
+
margin=dict(l=0, r=0, t=40, b=0),
|
| 165 |
+
coloraxis_colorbar=dict(title=label),
|
| 166 |
+
)
|
| 167 |
+
# Vitesse de l'animation : 800 ms par frame
|
| 168 |
+
fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 800
|
| 169 |
+
fig.layout.updatemenus[0].buttons[0].args[1]['transition']['duration'] = 300
|
| 170 |
+
return fig
|
| 171 |
+
|
| 172 |
+
|
| 173 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 174 |
+
# SIDEBAR
|
| 175 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 176 |
+
with st.sidebar:
|
| 177 |
+
st.image(
|
| 178 |
+
"https://raw.githubusercontent.com/nclsprsnw/oasis/refs/heads/main/docs/images/oasis_logo.png",
|
| 179 |
+
width=120,
|
| 180 |
+
)
|
| 181 |
+
st.markdown("## ๐จ Crime & Delinquency")
|
| 182 |
+
st.markdown("---")
|
| 183 |
+
section = st.radio(
|
| 184 |
+
"Navigate to",
|
| 185 |
+
options=[
|
| 186 |
+
"๐บ๏ธ An overview of crime in France",
|
| 187 |
+
"๐ Top 7 Regions with Highest Variation",
|
| 188 |
+
"๐ Top & Bottom 5 Regions",
|
| 189 |
+
"๐ Historical by Region",
|
| 190 |
+
"โ ๏ธ Crime Risk Scores by Region",
|
| 191 |
+
"๐ฎ Predictions 2022-2030",
|
| 192 |
+
"๐ Model Performance",
|
| 193 |
+
],
|
| 194 |
+
label_visibility="collapsed",
|
| 195 |
+
key="nav_section",
|
| 196 |
+
)
|
| 197 |
+
st.markdown("---")
|
| 198 |
+
st.caption("Data: Police Nationale + Gendarmerie Nationale ยท 2012-2021")
|
| 199 |
+
|
| 200 |
+
st.header("Crime & Delinquency in France (2012-2030)")
|
| 201 |
+
|
| 202 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 203 |
+
# SECTION 1 โ AN OVERVIEW (animรฉe)
|
| 204 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 205 |
+
if section == "๐บ๏ธ An overview of crime in France":
|
| 206 |
+
st.subheader("An overview of crime in France", divider=True)
|
| 207 |
+
st.write(
|
| 208 |
+
"This map shows the total number of recorded crimes per region. "
|
| 209 |
+
"Press **Play** or drag the slider below the map to animate 2012โ2021."
|
| 210 |
+
)
|
| 211 |
+
|
| 212 |
+
crime_mode = st.radio(
|
| 213 |
+
"Crime selection",
|
| 214 |
+
["All crimes", "Select specific crimes"],
|
| 215 |
+
horizontal=True,
|
| 216 |
+
key="overview_mode",
|
| 217 |
+
)
|
| 218 |
+
if crime_mode == "Select specific crimes":
|
| 219 |
+
crimes_sel = st.multiselect(
|
| 220 |
+
"Select crimes / offences", ALL_CRIMES,
|
| 221 |
+
default=ALL_CRIMES[:3], key="crimes_overview",
|
| 222 |
+
)
|
| 223 |
+
else:
|
| 224 |
+
crimes_sel = ALL_CRIMES
|
| 225 |
+
|
| 226 |
+
# Agrรฉger toutes les annรฉes
|
| 227 |
+
df_anim = (
|
| 228 |
+
df_hist[
|
| 229 |
+
(df_hist['indicateur'].isin(crimes_sel)) &
|
| 230 |
+
(df_hist['region'].isin(METRO_REGIONS))
|
| 231 |
+
]
|
| 232 |
+
.groupby(['annee', 'region'])['nb_faits_A'].sum()
|
| 233 |
+
.reset_index()
|
| 234 |
+
)
|
| 235 |
+
|
| 236 |
+
fig_overview = make_animated_choropleth(
|
| 237 |
+
df_anim, 'nb_faits_A',
|
| 238 |
+
title="Total recorded crimes by region",
|
| 239 |
+
colorscale='Reds',
|
| 240 |
+
label='Nb of facts',
|
| 241 |
+
)
|
| 242 |
+
st.plotly_chart(fig_overview, use_container_width=True)
|
| 243 |
+
st.write(
|
| 244 |
+
"Colour intensity reflects the total number of recorded facts. "
|
| 245 |
+
"Regions with no data appear in light grey."
|
| 246 |
+
)
|
| 247 |
+
|
| 248 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 249 |
+
# SECTION 2 โ TOP 7 VARIATION
|
| 250 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 251 |
+
elif section == "๐ Top 7 Regions with Highest Variation":
|
| 252 |
+
st.subheader("Top 7 Regions with Highest Variation", divider=True)
|
| 253 |
+
st.write("Select the period and the crimes to view the top 7 regions with the highest variation.")
|
| 254 |
+
|
| 255 |
+
left_co, right_co = st.columns(2)
|
| 256 |
+
with left_co:
|
| 257 |
+
selected_year_1 = st.selectbox(
|
| 258 |
+
"Select Year 1", options=YEARS_HIST, index=0, key="year_select_1"
|
| 259 |
+
)
|
| 260 |
+
with right_co:
|
| 261 |
+
selected_year_2 = st.selectbox(
|
| 262 |
+
"Select Year 2", options=YEARS_HIST,
|
| 263 |
+
index=len(YEARS_HIST)-1, key="year_select_2"
|
| 264 |
+
)
|
| 265 |
+
|
| 266 |
+
crime_mode_var = st.radio(
|
| 267 |
+
"Crime selection", ["All crimes", "Select specific crimes"],
|
| 268 |
+
horizontal=True, key="var_mode",
|
| 269 |
+
)
|
| 270 |
+
if crime_mode_var == "Select specific crimes":
|
| 271 |
+
crimes_var = st.multiselect(
|
| 272 |
+
"Select crimes / offences", ALL_CRIMES,
|
| 273 |
+
default=ALL_CRIMES[:3], key="crimes_var",
|
| 274 |
+
)
|
| 275 |
+
else:
|
| 276 |
+
crimes_var = ALL_CRIMES
|
| 277 |
+
|
| 278 |
+
def get_region_total(year, crimes):
|
| 279 |
+
return (
|
| 280 |
+
df_hist[
|
| 281 |
+
(df_hist['annee'] == year) &
|
| 282 |
+
(df_hist['indicateur'].isin(crimes)) &
|
| 283 |
+
(df_hist['region'].isin(METRO_REGIONS))
|
| 284 |
+
]
|
| 285 |
+
.groupby('region')['nb_faits_A'].sum()
|
| 286 |
+
.reset_index()
|
| 287 |
+
.rename(columns={'nb_faits_A': f'total_{year}'})
|
| 288 |
+
)
|
| 289 |
+
|
| 290 |
+
df_y1 = get_region_total(selected_year_1, crimes_var)
|
| 291 |
+
df_y2 = get_region_total(selected_year_2, crimes_var)
|
| 292 |
+
variation_data = pd.merge(df_y1, df_y2, on='region', how='outer').fillna(0)
|
| 293 |
+
variation_data['difference'] = (
|
| 294 |
+
variation_data[f'total_{selected_year_2}'] - variation_data[f'total_{selected_year_1}']
|
| 295 |
+
)
|
| 296 |
+
variation_data['variation_%'] = np.where(
|
| 297 |
+
variation_data[f'total_{selected_year_1}'] > 0,
|
| 298 |
+
variation_data['difference'] / variation_data[f'total_{selected_year_1}'] * 100,
|
| 299 |
+
0,
|
| 300 |
+
)
|
| 301 |
+
variation_data['region_label'] = variation_data['region'].map(REG_NAMES)
|
| 302 |
+
top7 = variation_data.sort_values('difference', ascending=False).head(7)
|
| 303 |
+
|
| 304 |
+
fig_var = px.bar(
|
| 305 |
+
top7.sort_values('variation_%', ascending=True),
|
| 306 |
+
x='region_label', y='variation_%',
|
| 307 |
+
title=f"Top 7 Regions by Crime Variation ({selected_year_1} to {selected_year_2})",
|
| 308 |
+
labels={'region_label': 'Region', 'variation_%': 'Variation (%)'},
|
| 309 |
+
color='variation_%',
|
| 310 |
+
color_continuous_scale=px.colors.sequential.Reds,
|
| 311 |
+
)
|
| 312 |
+
st.plotly_chart(fig_var, use_container_width=True)
|
| 313 |
+
|
| 314 |
+
display_top7 = top7[[
|
| 315 |
+
'region_label', 'region',
|
| 316 |
+
f'total_{selected_year_1}', f'total_{selected_year_2}',
|
| 317 |
+
'difference', 'variation_%',
|
| 318 |
+
]].copy()
|
| 319 |
+
display_top7.columns = [
|
| 320 |
+
'Region', 'Code',
|
| 321 |
+
f'Total {selected_year_1}', f'Total {selected_year_2}',
|
| 322 |
+
'Abs. Change', 'Change (%)',
|
| 323 |
+
]
|
| 324 |
+
display_top7['Change (%)'] = display_top7['Change (%)'].map('{:,.2f}%'.format)
|
| 325 |
+
st.dataframe(display_top7, hide_index=True, use_container_width=True)
|
| 326 |
+
|
| 327 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 328 |
+
# SECTION 3 โ TOP & BOTTOM 5
|
| 329 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 330 |
+
elif section == "๐ Top & Bottom 5 Regions":
|
| 331 |
+
st.subheader("Top & Bottom 5 Regions", divider=True)
|
| 332 |
+
st.write("Select a year and the crimes to compare the most and least affected regions.")
|
| 333 |
+
|
| 334 |
+
col1, col2 = st.columns(2)
|
| 335 |
+
with col1:
|
| 336 |
+
year_tb = st.selectbox(
|
| 337 |
+
"Select Year", options=YEARS_HIST,
|
| 338 |
+
index=len(YEARS_HIST)-1, key="year_topbottom"
|
| 339 |
+
)
|
| 340 |
+
with col2:
|
| 341 |
+
crime_mode_tb = st.radio(
|
| 342 |
+
"Crime selection", ["All crimes", "Select specific crimes"],
|
| 343 |
+
horizontal=True, key="tb_mode",
|
| 344 |
+
)
|
| 345 |
+
|
| 346 |
+
if crime_mode_tb == "Select specific crimes":
|
| 347 |
+
crimes_tb = st.multiselect(
|
| 348 |
+
"Select crimes / offences", ALL_CRIMES,
|
| 349 |
+
default=ALL_CRIMES[:3], key="crimes_tb",
|
| 350 |
+
)
|
| 351 |
+
else:
|
| 352 |
+
crimes_tb = ALL_CRIMES
|
| 353 |
+
|
| 354 |
+
df_tb = (
|
| 355 |
+
df_hist[
|
| 356 |
+
(df_hist['annee'] == year_tb) &
|
| 357 |
+
(df_hist['indicateur'].isin(crimes_tb)) &
|
| 358 |
+
(df_hist['region'].isin(METRO_REGIONS))
|
| 359 |
+
]
|
| 360 |
+
.groupby('region')['nb_faits_A'].sum()
|
| 361 |
+
.reset_index()
|
| 362 |
+
.sort_values('nb_faits_A', ascending=False)
|
| 363 |
+
)
|
| 364 |
+
df_tb['region_label'] = df_tb['region'].map(REG_NAMES)
|
| 365 |
+
|
| 366 |
+
combined = pd.concat([
|
| 367 |
+
df_tb.head(5).assign(category='Top 5'),
|
| 368 |
+
df_tb.tail(5).assign(category='Bottom 5'),
|
| 369 |
+
])
|
| 370 |
+
|
| 371 |
+
fig_tb = px.bar(
|
| 372 |
+
combined.sort_values('nb_faits_A', ascending=True),
|
| 373 |
+
x='nb_faits_A', y='region_label',
|
| 374 |
+
color='category', orientation='h',
|
| 375 |
+
title=f"Top & Bottom 5 Regions โ {year_tb}",
|
| 376 |
+
labels={'nb_faits_A': 'Nb of facts', 'region_label': 'Region', 'category': ''},
|
| 377 |
+
color_discrete_map={'Top 5': '#EF553B', 'Bottom 5': '#00CC96'},
|
| 378 |
+
text='nb_faits_A',
|
| 379 |
+
)
|
| 380 |
+
fig_tb.update_traces(texttemplate='%{text:,.0f}', textposition='outside')
|
| 381 |
+
fig_tb.update_layout(height=400, plot_bgcolor='#fafafa')
|
| 382 |
+
st.plotly_chart(fig_tb, use_container_width=True)
|
| 383 |
+
|
| 384 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 385 |
+
# SECTION 4 โ HISTORICAL BY REGION
|
| 386 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 387 |
+
elif section == "๐ Historical by Region":
|
| 388 |
+
st.subheader("Select Region(s) to View Historical Crimes", divider=True)
|
| 389 |
+
st.write(
|
| 390 |
+
"Select one or more regions and the crimes to explore the historical "
|
| 391 |
+
"evolution from 2012 to 2021."
|
| 392 |
+
)
|
| 393 |
+
|
| 394 |
+
col_r, col_c = st.columns(2)
|
| 395 |
+
with col_r:
|
| 396 |
+
regions_sel = st.multiselect(
|
| 397 |
+
"Select Region(s)", ALL_REGIONS,
|
| 398 |
+
default=ALL_REGIONS[:2],
|
| 399 |
+
format_func=lambda r: REG_NAMES.get(r, r),
|
| 400 |
+
key="regions_hist",
|
| 401 |
+
)
|
| 402 |
+
with col_c:
|
| 403 |
+
crime_mode_hist = st.radio(
|
| 404 |
+
"Crime selection", ["All crimes", "Select specific crimes"],
|
| 405 |
+
horizontal=True, key="hist_mode",
|
| 406 |
+
)
|
| 407 |
+
|
| 408 |
+
if crime_mode_hist == "Select specific crimes":
|
| 409 |
+
crimes_hist = st.multiselect(
|
| 410 |
+
"Select crimes / offences", ALL_CRIMES,
|
| 411 |
+
default=ALL_CRIMES[:3], key="crimes_hist",
|
| 412 |
+
)
|
| 413 |
+
else:
|
| 414 |
+
crimes_hist = ALL_CRIMES
|
| 415 |
+
|
| 416 |
+
if regions_sel:
|
| 417 |
+
df_hist_sel = (
|
| 418 |
+
df_hist[
|
| 419 |
+
(df_hist['region'].isin(regions_sel)) &
|
| 420 |
+
(df_hist['indicateur'].isin(crimes_hist))
|
| 421 |
+
]
|
| 422 |
+
.groupby(['annee', 'region'])['nb_faits_A'].sum()
|
| 423 |
+
.reset_index()
|
| 424 |
+
)
|
| 425 |
+
df_hist_sel['region_label'] = df_hist_sel['region'].map(REG_NAMES)
|
| 426 |
+
|
| 427 |
+
fig_line = px.line(
|
| 428 |
+
df_hist_sel.sort_values('annee'),
|
| 429 |
+
x='annee', y='nb_faits_A', color='region_label',
|
| 430 |
+
markers=True,
|
| 431 |
+
title="Historical evolution of recorded crimes by region",
|
| 432 |
+
labels={
|
| 433 |
+
'annee': 'Year', 'nb_faits_A': 'Nb of facts',
|
| 434 |
+
'region_label': 'Region'
|
| 435 |
+
},
|
| 436 |
+
)
|
| 437 |
+
fig_line.update_layout(height=420, hovermode='x unified')
|
| 438 |
+
st.plotly_chart(fig_line, use_container_width=True)
|
| 439 |
+
else:
|
| 440 |
+
st.info("Select at least one region to display the chart.")
|
| 441 |
+
|
| 442 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 443 |
+
# SECTION 5 โ CRIME RISK SCORES (animรฉe)
|
| 444 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 445 |
+
elif section == "โ ๏ธ Crime Risk Scores by Region":
|
| 446 |
+
st.subheader("Crime Risk Scores by Region", divider=True)
|
| 447 |
+
st.write(
|
| 448 |
+
"Crime intensity score normalised 0โ100 per year. "
|
| 449 |
+
"Press **Play** or drag the slider to animate 2012โ2021."
|
| 450 |
+
)
|
| 451 |
+
|
| 452 |
+
crime_mode_risk = st.radio(
|
| 453 |
+
"Crime selection", ["All crimes", "Select specific crimes"],
|
| 454 |
+
horizontal=True, key="risk_mode",
|
| 455 |
+
)
|
| 456 |
+
if crime_mode_risk == "Select specific crimes":
|
| 457 |
+
crimes_risk = st.multiselect(
|
| 458 |
+
"Select crimes / offences", ALL_CRIMES,
|
| 459 |
+
default=ALL_CRIMES[:5], key="crimes_risk",
|
| 460 |
+
)
|
| 461 |
+
else:
|
| 462 |
+
crimes_risk = ALL_CRIMES
|
| 463 |
+
|
| 464 |
+
# Agrรฉger toutes les annรฉes
|
| 465 |
+
df_risk_all = (
|
| 466 |
+
df_hist[
|
| 467 |
+
(df_hist['indicateur'].isin(crimes_risk)) &
|
| 468 |
+
(df_hist['region'].isin(METRO_REGIONS))
|
| 469 |
+
]
|
| 470 |
+
.groupby(['annee', 'region'])['nb_faits_A'].sum()
|
| 471 |
+
.reset_index()
|
| 472 |
+
)
|
| 473 |
+
|
| 474 |
+
# Score 0-100 normalisรฉ ANNรE PAR ANNรE
|
| 475 |
+
scores = []
|
| 476 |
+
for yr in sorted(df_risk_all['annee'].unique()):
|
| 477 |
+
sub = df_risk_all[df_risk_all['annee'] == yr].copy()
|
| 478 |
+
vmin = sub['nb_faits_A'].min()
|
| 479 |
+
vmax = sub['nb_faits_A'].max()
|
| 480 |
+
sub['score'] = np.where(
|
| 481 |
+
vmax > vmin,
|
| 482 |
+
(sub['nb_faits_A'] - vmin) / (vmax - vmin) * 100,
|
| 483 |
+
50,
|
| 484 |
+
).round(1)
|
| 485 |
+
scores.append(sub)
|
| 486 |
+
df_risk_scored = pd.concat(scores, ignore_index=True)
|
| 487 |
+
|
| 488 |
+
fig_risk_anim = make_animated_choropleth(
|
| 489 |
+
df_risk_scored, 'score',
|
| 490 |
+
title="Crime Risk Score by Region (0 = lowest, 100 = highest)",
|
| 491 |
+
colorscale='RdYlGn_r',
|
| 492 |
+
label='Risk Score (0-100)',
|
| 493 |
+
range_color=[0, 100],
|
| 494 |
+
)
|
| 495 |
+
st.plotly_chart(fig_risk_anim, use_container_width=True)
|
| 496 |
+
|
| 497 |
+
# Barres + heatmap sur l'annรฉe sรฉlectionnรฉe
|
| 498 |
+
year_risk = st.select_slider(
|
| 499 |
+
"Select a year for detailed view",
|
| 500 |
+
options=YEARS_HIST, value=YEARS_HIST[-1], key="year_risk"
|
| 501 |
+
)
|
| 502 |
+
df_risk_yr = df_risk_scored[df_risk_scored['annee'] == year_risk].copy()
|
| 503 |
+
df_risk_yr['region_label'] = df_risk_yr['region'].map(REG_NAMES)
|
| 504 |
+
|
| 505 |
+
fig_risk_bar = px.bar(
|
| 506 |
+
df_risk_yr.sort_values('score', ascending=True),
|
| 507 |
+
x='score', y='region_label', orientation='h',
|
| 508 |
+
color='score', color_continuous_scale='RdYlGn_r',
|
| 509 |
+
title=f"Crime Risk Score ranking โ {year_risk}",
|
| 510 |
+
labels={'score': 'Risk Score (0-100)', 'region_label': 'Region'},
|
| 511 |
+
text='score',
|
| 512 |
+
)
|
| 513 |
+
fig_risk_bar.update_traces(texttemplate='%{text:.1f}', textposition='outside')
|
| 514 |
+
fig_risk_bar.update_layout(
|
| 515 |
+
height=420, coloraxis_showscale=False, plot_bgcolor='#fafafa'
|
| 516 |
+
)
|
| 517 |
+
st.plotly_chart(fig_risk_bar, use_container_width=True)
|
| 518 |
+
|
| 519 |
+
if crime_mode_risk == "Select specific crimes" and len(crimes_risk) > 1:
|
| 520 |
+
st.write("**Crime breakdown by region**")
|
| 521 |
+
pivot_risk = (
|
| 522 |
+
df_hist[
|
| 523 |
+
(df_hist['annee'] == year_risk) &
|
| 524 |
+
(df_hist['indicateur'].isin(crimes_risk)) &
|
| 525 |
+
(df_hist['region'].isin(METRO_REGIONS))
|
| 526 |
+
]
|
| 527 |
+
.groupby(['region', 'indicateur'])['nb_faits_A'].sum()
|
| 528 |
+
.unstack('indicateur').fillna(0)
|
| 529 |
+
)
|
| 530 |
+
pivot_risk.index = pivot_risk.index.map(REG_NAMES)
|
| 531 |
+
pivot_risk.columns = [c[:35] for c in pivot_risk.columns]
|
| 532 |
+
fig_heat = px.imshow(
|
| 533 |
+
pivot_risk, color_continuous_scale='Reds',
|
| 534 |
+
labels=dict(color='Nb of facts'),
|
| 535 |
+
title=f"Crime profile by region โ {year_risk}",
|
| 536 |
+
aspect='auto', text_auto='.0f',
|
| 537 |
+
)
|
| 538 |
+
fig_heat.update_layout(height=420)
|
| 539 |
+
st.plotly_chart(fig_heat, use_container_width=True)
|
| 540 |
+
|
| 541 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 542 |
+
# SECTION 6 โ PREDICTIONS 2022-2030
|
| 543 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 544 |
+
elif section == "๐ฎ Predictions 2022-2030":
|
| 545 |
+
st.subheader("Predictions 2022-2030", divider=True)
|
| 546 |
+
st.write(
|
| 547 |
+
"Forecasts using Prophet, XGBoost, and LightGBM โ "
|
| 548 |
+
"trained on 2012-2019, validated on 2020-2021."
|
| 549 |
+
)
|
| 550 |
+
|
| 551 |
+
col_p1, col_p2 = st.columns(2)
|
| 552 |
+
with col_p1:
|
| 553 |
+
region_pred = st.selectbox(
|
| 554 |
+
"Select Region", ALL_REGIONS,
|
| 555 |
+
format_func=lambda r: REG_NAMES.get(r, r), key="region_pred"
|
| 556 |
+
)
|
| 557 |
+
with col_p2:
|
| 558 |
+
crime_pred = st.selectbox(
|
| 559 |
+
"Select Crime / Offence", ALL_CRIMES, key="crime_pred"
|
| 560 |
+
)
|
| 561 |
+
|
| 562 |
+
modeles_pred = st.multiselect(
|
| 563 |
+
"Models to display", ['Prophet', 'XGBoost', 'LightGBM'],
|
| 564 |
+
default=['Prophet', 'XGBoost', 'LightGBM'], key="modeles_pred"
|
| 565 |
+
)
|
| 566 |
+
|
| 567 |
+
hist_pred = (
|
| 568 |
+
df_hist[
|
| 569 |
+
(df_hist['indicateur'] == crime_pred) &
|
| 570 |
+
(df_hist['region'] == region_pred)
|
| 571 |
+
]
|
| 572 |
+
.groupby('annee')['nb_faits_A'].sum()
|
| 573 |
+
.reset_index()
|
| 574 |
+
)
|
| 575 |
+
|
| 576 |
+
fig_pred = go.Figure()
|
| 577 |
+
fig_pred.add_trace(go.Scatter(
|
| 578 |
+
x=hist_pred['annee'], y=hist_pred['nb_faits_A'],
|
| 579 |
+
mode='lines+markers', name='Historical (2012-2021)',
|
| 580 |
+
line=dict(color='#2c3e50', width=3), marker=dict(size=8),
|
| 581 |
+
))
|
| 582 |
+
|
| 583 |
+
for modele in modeles_pred:
|
| 584 |
+
prev_serie = df_prev[
|
| 585 |
+
(df_prev['indicateur'] == crime_pred) &
|
| 586 |
+
(df_prev['region'] == region_pred) &
|
| 587 |
+
(df_prev['source_modele'] == modele) &
|
| 588 |
+
(df_prev['annee'] >= 2022)
|
| 589 |
+
].sort_values('annee')
|
| 590 |
+
|
| 591 |
+
if len(prev_serie) == 0:
|
| 592 |
+
continue
|
| 593 |
+
|
| 594 |
+
color = MODELE_COLORS.get(modele, '#999')
|
| 595 |
+
|
| 596 |
+
if modele == 'Prophet' and prev_serie['yhat_lower'].notna().any():
|
| 597 |
+
fig_pred.add_trace(go.Scatter(
|
| 598 |
+
x=pd.concat([prev_serie['annee'], prev_serie['annee'][::-1]]),
|
| 599 |
+
y=pd.concat([prev_serie['yhat_upper'], prev_serie['yhat_lower'][::-1]]),
|
| 600 |
+
fill='toself',
|
| 601 |
+
fillcolor=f'rgba{tuple(list(px.colors.hex_to_rgb(color)) + [0.12])}',
|
| 602 |
+
line=dict(color='rgba(0,0,0,0)'),
|
| 603 |
+
showlegend=False, name=f'{modele} CI',
|
| 604 |
+
))
|
| 605 |
+
|
| 606 |
+
fig_pred.add_trace(go.Scatter(
|
| 607 |
+
x=prev_serie['annee'], y=prev_serie['yhat'],
|
| 608 |
+
mode='lines+markers', name=f'{modele} forecast',
|
| 609 |
+
line=dict(color=color, width=2.5, dash='dash'),
|
| 610 |
+
marker=dict(size=7),
|
| 611 |
+
))
|
| 612 |
+
|
| 613 |
+
fig_pred.add_vline(x=2021.5, line_dash='dot', line_color='gray', opacity=0.5)
|
| 614 |
+
fig_pred.add_annotation(
|
| 615 |
+
x=2022, y=1, yref='paper',
|
| 616 |
+
text='โ Historical | Forecast โ',
|
| 617 |
+
showarrow=False, font=dict(color='gray', size=11),
|
| 618 |
+
)
|
| 619 |
+
fig_pred.update_layout(
|
| 620 |
+
height=480,
|
| 621 |
+
title=f"{crime_pred[:60]} โ {REG_NAMES.get(region_pred, region_pred)}",
|
| 622 |
+
xaxis_title='Year', yaxis_title='Nb of facts',
|
| 623 |
+
hovermode='x unified',
|
| 624 |
+
legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='right', x=1),
|
| 625 |
+
plot_bgcolor='#fafafa',
|
| 626 |
+
)
|
| 627 |
+
st.plotly_chart(fig_pred, use_container_width=True)
|
| 628 |
+
|
| 629 |
+
prev_table = df_prev[
|
| 630 |
+
(df_prev['indicateur'] == crime_pred) &
|
| 631 |
+
(df_prev['region'] == region_pred) &
|
| 632 |
+
(df_prev['source_modele'].isin(modeles_pred)) &
|
| 633 |
+
(df_prev['annee'] >= 2022)
|
| 634 |
+
].pivot_table(
|
| 635 |
+
index='annee', columns='source_modele', values='yhat', aggfunc='first'
|
| 636 |
+
).round(0).reset_index()
|
| 637 |
+
prev_table.columns.name = None
|
| 638 |
+
st.dataframe(
|
| 639 |
+
prev_table, hide_index=True, use_container_width=True,
|
| 640 |
+
column_config={'annee': 'Year'}
|
| 641 |
+
)
|
| 642 |
+
|
| 643 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 644 |
+
# SECTION 7 โ MODEL PERFORMANCE
|
| 645 |
+
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 646 |
+
elif section == "๐ Model Performance":
|
| 647 |
+
st.subheader("Model Performance (test on 2020-2021 actuals)", divider=True)
|
| 648 |
+
st.write(
|
| 649 |
+
"Models trained on 2012-2019, tested on 2020-2021. "
|
| 650 |
+
"MAPE = mean absolute percentage error (lower is better)."
|
| 651 |
+
)
|
| 652 |
+
|
| 653 |
+
if len(df_bench) > 0:
|
| 654 |
+
summary = (
|
| 655 |
+
df_bench.groupby('modele')[['RMSE', 'MAE', 'MAPE']]
|
| 656 |
+
.mean().round(2).sort_values('MAPE').reset_index()
|
| 657 |
+
)
|
| 658 |
+
summary.columns = ['Model', 'RMSE', 'MAE', 'MAPE (%)']
|
| 659 |
+
|
| 660 |
+
col_b1, col_b2 = st.columns([1, 2])
|
| 661 |
+
with col_b1:
|
| 662 |
+
st.dataframe(summary, hide_index=True, use_container_width=True)
|
| 663 |
+
with col_b2:
|
| 664 |
+
fig_bench = px.bar(
|
| 665 |
+
summary.sort_values('MAPE (%)', ascending=True),
|
| 666 |
+
x='Model', y='MAPE (%)',
|
| 667 |
+
color='Model',
|
| 668 |
+
color_discrete_map={
|
| 669 |
+
'Prophet': '#EF553B', 'XGBoost': '#636EFA', 'LightGBM': '#00CC96'
|
| 670 |
+
},
|
| 671 |
+
title='MAPE by model (lower = better)',
|
| 672 |
+
text='MAPE (%)',
|
| 673 |
+
)
|
| 674 |
+
fig_bench.update_traces(texttemplate='%{text:.1f}%', textposition='outside')
|
| 675 |
+
fig_bench.update_layout(showlegend=False, height=320)
|
| 676 |
+
st.plotly_chart(fig_bench, use_container_width=True)
|
| 677 |
+
|
| 678 |
+
if 'indicateur' in df_bench.columns and 'modele' in df_bench.columns:
|
| 679 |
+
st.subheader("MAPE by crime type and model", divider=True)
|
| 680 |
+
pivot_mape = (
|
| 681 |
+
df_bench.groupby(['indicateur', 'modele'])['MAPE']
|
| 682 |
+
.mean().round(1).unstack('modele').fillna(0)
|
| 683 |
+
)
|
| 684 |
+
pivot_mape.index = [x[:40] for x in pivot_mape.index]
|
| 685 |
+
fig_heat_bench = px.imshow(
|
| 686 |
+
pivot_mape, color_continuous_scale='RdYlGn_r',
|
| 687 |
+
labels=dict(color='MAPE (%)'),
|
| 688 |
+
title="MAPE (%) โ greener = more accurate",
|
| 689 |
+
aspect='auto', text_auto='.1f',
|
| 690 |
+
)
|
| 691 |
+
fig_heat_bench.update_layout(height=420)
|
| 692 |
+
st.plotly_chart(fig_heat_bench, use_container_width=True)
|
| 693 |
+
else:
|
| 694 |
+
st.info("No benchmark data available.")
|
| 695 |
+
|
| 696 |
+
# โโ Footer โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
| 697 |
+
st.divider()
|
| 698 |
+
st.caption(
|
| 699 |
+
"Sources: French Ministry of Interior โ "
|
| 700 |
+
"Police Nationale (PN) + Gendarmerie Nationale (GN) | "
|
| 701 |
+
"Historical data: 2012-2021 | Forecasts: Prophet, XGBoost, LightGBM | "
|
| 702 |
+
"Aggregation: department โ region (INSEE 2016 boundaries)"
|
| 703 |
+
)
|
requirements.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
altair
|
| 2 |
+
pandas
|
| 3 |
+
streamlit
|
| 4 |
+
plotly
|
| 5 |
+
requests
|
| 6 |
+
prophet
|
| 7 |
+
xgboost
|
| 8 |
+
lightgbm
|
| 9 |
+
scikit-learn
|