Visualisation et analyse de données

Nous travaillerons sur une jeu de données contenu dans un fichier csv (comma separated value). Il s’agit des demandes de valeurs foncières géolocalisées par département: https://cadastre.data.gouv.fr/data/etalab-dvf/latest/csv/2019/departements/

Nous nous intéresserons notamment au département du Doubs. Tout d’abord, il va falloir importer les données.

Visualisation et traitement des données

Revenons à nos données géolocalisées et chargeons la base de données directement dans un DataFrame.

import pandas as pd
df = pd.read_csv("data/25.csv")
print(df.head(2))
  id_mutation date_mutation  numero_disposition nature_mutation  \
0  2019-73036    2019-02-25                   1           Vente   
1  2019-73036    2019-02-25                   1           Vente   

   valeur_fonciere  adresse_numero adresse_suffixe adresse_nom_voie  \
0         200000.0             NaN             NaN       AU VILLAGE   
1         200000.0             NaN             NaN       AU VILLAGE   

  adresse_code_voie  code_postal  ...  type_local surface_reelle_bati  \
0              B037        25640  ...         NaN                 NaN   
1              B037        25640  ...         NaN                 NaN   

   nombre_pieces_principales  code_nature_culture  nature_culture  \
0                        NaN                    S            sols   
1                        NaN                    P            prés   

  code_nature_culture_speciale  nature_culture_speciale  surface_terrain  \
0                          NaN                      NaN           2260.0   
1                          NaN                      NaN           2792.0   

   longitude   latitude  
0   6.178685  47.388526  
1   6.178685  47.388526  

[2 rows x 40 columns]

Affichons désormais les statistiques descriptives pour chaque variable

df.describe()
numero_disposition valeur_fonciere adresse_numero code_postal code_commune code_departement ancien_code_commune ancien_nom_commune ancien_id_parcelle numero_volume ... lot4_surface_carrez lot5_numero lot5_surface_carrez nombre_lots code_type_local surface_reelle_bati nombre_pieces_principales surface_terrain longitude latitude
count 1122.000000 1122.000000 761.000000 1122.000000 1122.000000 1122.0 0.0 0.0 0.0 0.0 ... 4.000000 7.000000 2.000000 1122.000000 714.000000 527.000000 713.000000 722.000000 1117.000000 1117.000000
mean 1.044563 162458.884127 169.919842 25293.212121 25255.843137 25.0 NaN NaN NaN NaN ... 35.897500 91.857143 31.405000 0.591800 2.128852 103.884250 2.371669 1844.631579 6.363802 47.238550
std 0.245879 158839.680463 940.512485 250.469920 189.888907 0.0 NaN NaN NaN NaN ... 19.312033 141.404183 37.455446 1.489495 0.912855 194.453128 2.160845 4830.122997 0.347765 0.191982
min 1.000000 198.000000 1.000000 25000.000000 25001.000000 25.0 NaN NaN NaN NaN ... 8.000000 6.000000 4.920000 0.000000 1.000000 2.000000 0.000000 3.000000 5.774606 46.668816
25% 1.000000 55000.000000 5.000000 25000.000000 25056.000000 25.0 NaN NaN NaN NaN ... 31.617500 11.500000 18.162500 0.000000 1.000000 57.000000 0.000000 321.250000 6.025504 47.149638
50% 1.000000 125000.000000 11.000000 25260.000000 25258.000000 25.0 NaN NaN NaN NaN ... 41.760000 44.000000 31.405000 0.000000 2.000000 80.000000 2.000000 681.000000 6.305465 47.246357
75% 1.000000 213000.000000 25.000000 25480.000000 25411.000000 25.0 NaN NaN NaN NaN ... 46.040000 85.500000 44.647500 1.000000 3.000000 110.000000 4.000000 1289.000000 6.713855 47.386621
max 3.000000 804000.000000 9010.000000 25960.000000 25633.000000 25.0 NaN NaN NaN NaN ... 52.070000 399.000000 57.890000 40.000000 4.000000 4144.000000 10.000000 85381.000000 6.978547 47.553060

8 rows × 27 columns

Nous avons ici une base de données regroupant toutes les valeurs foncières de l’année 2019 dans le Doubs. Il faut s’intérroger à comment visualiser ces données de façon utile et agréable.

On pourrait par exemple aggréger les données pour chaque ville/village.

Agrégation

On souhaite effectuer des calculs sur des sous-groupes de données. Il fait séparer les données en fonction de groupes identifiés et appliquer une opération sur chacun des groupes. Pour effectuer le regroupement, pandas propose la méthode groupby().

df = df.dropna(subset=['lot1_surface_carrez'])
print(df.groupby("code_postal")["valeur_fonciere"].sum()/df.groupby("code_postal")["lot1_surface_carrez"].sum())
code_postal
25000    2072.524454
25110     444.883836
25120    1059.001513
25130    2221.821677
25140    1441.492369
25160    6232.919742
25170    1952.902519
25200    1270.379488
25220    1299.245599
25230     922.560805
25240    2900.305966
25300    2373.105653
25370    2358.651226
25410    1570.623917
25420     986.272158
25430     811.770675
25450    1384.562132
25480    2106.481481
25500    2365.857163
25580    1653.543307
25680     587.994543
25700     338.632828
25930    1175.908222
dtype: float64

Cette opération permet de visualiser le prix au m2 dans les différentes communues.