Réorganisation de la documentation
This commit is contained in:
parent
5a546688f1
commit
db17e3e48e
@ -166,4 +166,6 @@ Measurement « °C »
|
||||
- station_meteo_bresser_exterieur_temperature
|
||||
```
|
||||
|
||||
Ces informations combinées se retrouvent dans le fichier `meteo/station_config.py`.
|
||||
Ces informations combinées se retrouvent dans le fichier `meteo/station_config.py` et dans `meteo/variables.py`.
|
||||
|
||||
On aurait pu se passer de ces scripts pour déterminer la structure des données stockées dans Influx, mais ils évitent de se reposer sur des intuitions : ici, on demande à Influx de nous donner les informations dont on va avoir besoin au lieu de les deviner.
|
||||
|
||||
@ -17,3 +17,4 @@ Vérifiez que le fichier est bien créé et qu'il contient des données.
|
||||
|
||||
À la place de `scripts.export_station_data`, on pourrait aussi lancer `scripts.export_station_data_full`.
|
||||
Au lieu de télécharger les données des 7 derniers jours, l'ensemble des données stockées sur le serveur pour ce bucket seront téléchargées, ce qui, selon la granularité et l'ancienneté des données peut prendre un certain temps et occuper un espace disque conséquent.
|
||||
Mon fichier complet contient plus d'un million d'enregistrements et pèse 70Mo.
|
||||
|
||||
@ -68,3 +68,141 @@ Fichier 1s formaté chargé : data/weather_formatted_1s.csv
|
||||
nd_direction', 'rain_rate'] Après propagation des dernières valeurs connues : 630171 lignes
|
||||
✔ Fichier 1s 'complet' écrit dans : /Users/richard/Documents/donnees_meteo/data/weather_filled_1s.csv
|
||||
```
|
||||
|
||||
On peut maintenant s'assurer d'avoir une seule ligne par minute, avec toutes les valeurs de capteurs :
|
||||
|
||||
```shell
|
||||
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 :
|
||||
|
||||
```shell
|
||||
python -m scripts.check_missing_values
|
||||
```
|
||||
|
||||
```output
|
||||
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 :
|
||||
|
||||
```shell
|
||||
python -m scripts.describe_minutely_dataset
|
||||
```
|
||||
|
||||
```output
|
||||
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 :
|
||||
|
||||
```shell
|
||||
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.
|
||||
|
||||
Ces scripts sont intéressants parce qu'ils mettent en évidence des facteurs indirects, contribuant à la qualité des données soumise.
|
||||
On peut prendre toutes les précautions, on peut avoir l'intuition d'avoir tout géré, et se rassurer parce qu'on utilise des outils fiables, mais il existera toujours des manques dans les données.
|
||||
|
||||
Il faut être capable de les identifier, et il faut les prendre en compte dans tout calcul ultérieur.
|
||||
|
||||
Une fois que tout est passé en revue, on passe d'un jeu contenant plus d'un million d'enregistrements à un jeu n'en contenant plus que 300 000.
|
||||
|
||||
@ -1,132 +0,0 @@
|
||||
# Downsampling
|
||||
|
||||
On peut maintenant s'assurer d'avoir une seule ligne par minute, avec toutes les valeurs de capteurs :
|
||||
|
||||
```shell
|
||||
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 :
|
||||
|
||||
```shell
|
||||
python -m scripts.check_missing_values
|
||||
```
|
||||
|
||||
```output
|
||||
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 :
|
||||
|
||||
```shell
|
||||
python -m scripts.describe_minutely_dataset
|
||||
```
|
||||
|
||||
```output
|
||||
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 :
|
||||
|
||||
```shell
|
||||
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.
|
||||
15
docs/06 - Premiers graphiques.md
Normal file
15
docs/06 - Premiers graphiques.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Premiers graphiques
|
||||
|
||||
Ces premiers graphiques devraient être similaires à ce que sortirait InfluxDB.
|
||||
On s'assure juste, ici, d'être capables de produire un résultat parlant, sans erreurs, et conforme à ce qui est vérifiable dans Influx.
|
||||
|
||||
Un premier script simple va nous permettre d'afficher la température des 7 derniers jours, de sorte à vérifier que tout fonctionne bien.
|
||||
On pourra comparer ce graphique avec celui proposé par Home Assistant et celui proposé par InfluxDB :
|
||||
|
||||
```shell
|
||||
python -m scripts.plot_temperature
|
||||
```
|
||||
|
||||

|
||||
|
||||
Maintenant que l'on peut produire des graphiques à partir d'un jeu de données adapté, on peut commencer à explorer nos données.
|
||||
@ -1,8 +0,0 @@
|
||||
# Premiers graphiques
|
||||
|
||||
Ces premiers graphiques devraient être similaires à ce que sortirait InfluxDB.
|
||||
On s'assure juste, ici, d'être capables de produire un résultat parlant, sans erreurs, et conforme à ce qui est vérifiable dans Influx.
|
||||
|
||||
## Température moyenne sur les 7 derniers jours
|
||||
|
||||

|
||||
Loading…
x
Reference in New Issue
Block a user