1
donnees_meteo/docs/06 - Downsampling.md
2025-11-17 02:00:28 +01:00

6.1 KiB

Downsampling

On peut maintenant s'assurer d'avoir une seule ligne par minute, avec toutes les valeurs de capteurs :

python -m scripts.make_minutely_dataset

Ce qui va produire le fichier data/weather_minutely.csv.

On peut s'assurer que plus aucune information n'est manquante :

python -m scripts.check_missing_values
Dataset chargé : data/weather_minutely.csv
  Lignes   : 321881
  Colonnes : ['temperature', 'humidity', 'pressure', 'illuminance', 'wind_speed', 'wind_direction', 'r
ain_rate']
=== Synthèse des valeurs manquantes ===
Total de cellules      : 2253167
Cellules manquantes    : 0
Fraction manquante     : 0.000000
Lignes complètes       : 321881
Lignes avec des trous  : 0
Fraction lignes complètes : 1.000000

Valeurs manquantes par colonne :
  - temperature   : 0
  - humidity      : 0
  - pressure      : 0
  - illuminance   : 0
  - wind_speed    : 0
  - wind_direction : 0
  - rain_rate     : 0

✔ Aucune valeur manquante dans le dataset minuté.

Le script suivant nous permet de vérifier rapidement si des problèmes majeurs peuvent être découverts :

python -m scripts.describe_minutely_dataset
Dataset minuté chargé : data/weather_minutely.csv
  Lignes   : 321881
  Colonnes : ['temperature', 'humidity', 'pressure', 'illuminance', 'wind_speed', 'wind_direction', 'r
ain_rate']                                                                                              Période  : 2025-03-10 09:35:00+00:00 → 2025-11-17 00:41:00+00:00

=== describe() ===
         temperature       humidity       pressure  ...     wind_speed  wind_direction      rain_rate
count  321881.000000  321881.000000  321881.000000  ...  321881.000000   321881.000000  321881.000000
mean       15.004488      74.131993    1010.683189  ...       2.877190      181.977411       0.108216
std         6.349077      18.885843       8.210283  ...       3.151080       88.089334       0.820691
min        -2.200000      20.000000     976.973123  ...       0.000000        0.000000       0.000000
25%        10.277778      59.000000    1005.420000  ...       0.000000       96.000000       0.000000
50%        14.600000      77.666667    1011.514287  ...       2.333549      210.000000       0.000000
75%        19.000000      91.000000    1015.900000  ...       4.650000      247.666196       0.000000
max        34.888889      99.000000    1033.187174  ...      26.554176      360.000000      42.672000

[8 rows x 7 columns]

=== Min / max avec dates ===
- temperature:
    min = -2.2 à 2025-03-17 05:16:00+00:00
    max = 34.8888888888889 à 2025-07-02 15:59:00+00:00
- humidity:
    min = 20.0 à 2025-04-30 15:22:00+00:00
    max = 99.0 à 2025-03-11 06:29:00+00:00
- pressure:
    min = 976.973122738378 à 2025-10-23 05:06:00+00:00
    max = 1033.18717416804 à 2025-10-10 17:12:00+00:00
- illuminance:
    min = 0.0 à 2025-03-10 17:44:00+00:00
    max = 133520.394 à 2025-07-29 11:48:00+00:00
- wind_speed:
    min = 0.0 à 2025-03-10 14:31:00+00:00
    max = 26.554176 à 2025-06-26 00:10:00+00:00
- wind_direction:
    min = 0.0 à 2025-03-12 04:57:00+00:00
    max = 360.0 à 2025-03-12 07:33:00+00:00
- rain_rate:
    min = 0.0 à 2025-03-10 09:35:00+00:00
    max = 42.672 à 2025-06-15 03:10:00+00:00

=== Vérification de la continuité temporelle ===
Différences d'intervalle (top 5):
time
0 days 00:01:00    304291
0 days 00:02:00      9426
0 days 00:03:00      3562
0 days 00:04:00      1740
0 days 00:05:00      1142
Name: count, dtype: int64

Nombre d'intervalles ≠ 60s : 17589

Il y a donc des trous entre certains jeux de données. Ces écarts peuvent être identifiés avec le script suivant :

python -m scripts.list_time_gaps
Dataset minuté chargé : data/weather_minutely.csv
  Lignes   : 321881

=== Gaps temporels détectés ===
Nombre de gaps        : 17589
Total minutes manquantes (théoriques) : 40466

Top 10 des gaps les plus longs :
- De 2025-06-21 19:09:00+00:00 à 2025-06-21 20:10:00+00:00 (durée: 0 days 01:01:00, manquants: 60, de
2025-06-21 19:10:00+00:00 à 2025-06-21 20:09:00+00:00)                                                - De 2025-08-10 22:17:00+00:00 à 2025-08-10 23:15:00+00:00 (durée: 0 days 00:58:00, manquants: 57, de
2025-08-10 22:18:00+00:00 à 2025-08-10 23:14:00+00:00)                                                - De 2025-09-24 20:34:00+00:00 à 2025-09-24 21:32:00+00:00 (durée: 0 days 00:58:00, manquants: 57, de
2025-09-24 20:35:00+00:00 à 2025-09-24 21:31:00+00:00)                                                - De 2025-06-21 10:58:00+00:00 à 2025-06-21 11:55:00+00:00 (durée: 0 days 00:57:00, manquants: 56, de
2025-06-21 10:59:00+00:00 à 2025-06-21 11:54:00+00:00)                                                - De 2025-07-10 07:17:00+00:00 à 2025-07-10 08:14:00+00:00 (durée: 0 days 00:57:00, manquants: 56, de
2025-07-10 07:18:00+00:00 à 2025-07-10 08:13:00+00:00)                                                - De 2025-07-24 03:52:00+00:00 à 2025-07-24 04:46:00+00:00 (durée: 0 days 00:54:00, manquants: 53, de
2025-07-24 03:53:00+00:00 à 2025-07-24 04:45:00+00:00)                                                - De 2025-10-28 08:31:00+00:00 à 2025-10-28 09:23:00+00:00 (durée: 0 days 00:52:00, manquants: 51, de
2025-10-28 08:32:00+00:00 à 2025-10-28 09:22:00+00:00)                                                - De 2025-03-16 15:31:00+00:00 à 2025-03-16 16:20:00+00:00 (durée: 0 days 00:49:00, manquants: 48, de
2025-03-16 15:32:00+00:00 à 2025-03-16 16:19:00+00:00)                                                - De 2025-06-21 12:22:00+00:00 à 2025-06-21 13:08:00+00:00 (durée: 0 days 00:46:00, manquants: 45, de
2025-06-21 12:23:00+00:00 à 2025-06-21 13:07:00+00:00)                                                - De 2025-06-21 17:25:00+00:00 à 2025-06-21 18:10:00+00:00 (durée: 0 days 00:45:00, manquants: 44, de
2025-06-21 17:26:00+00:00 à 2025-06-21 18:09:00+00:00)

Ces trous dans les données peuvent correspondre à des pannes de connexion entre la station et mon réseau, un redémarrage de mon serveur (physique ou logiciel), au redémarrage de la box ou du point d'accès sans-fil, etc.