<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://dimiphoton.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://dimiphoton.github.io/" rel="alternate" type="text/html" /><updated>2026-10-09T20:45:09+00:00</updated><id>https://dimiphoton.github.io/feed.xml</id><title type="html">Dimi Photon</title><subtitle>Data scientist — optimisation, analyse spatiale et data engineering. Portfolio et notes techniques.</subtitle><author><name>Dimi Photon</name></author><entry><title type="html">Hello World !</title><link href="https://dimiphoton.github.io/blog/hello-world/" rel="alternate" type="text/html" title="Hello World !" /><published>2026-06-23T00:00:00+00:00</published><updated>2026-06-23T00:00:00+00:00</updated><id>https://dimiphoton.github.io/blog/hello-world</id><content type="html" xml:base="https://dimiphoton.github.io/blog/hello-world/"><![CDATA[<p>Hello World ! This is my first blog post.</p>

<p>I will use this GitHub Pages blog to share my journey in prototyping my data science ideas, as well as sharing my finds in the field of data science and machine learning. I will also share my thoughts on the latest trends in the industry.</p>

<p>I am excited to share my thoughts and experiences with you. Stay tuned for more updates!</p>]]></content><author><name>Dimi Photon</name></author><category term="blog" /><category term="blog note" /><summary type="html"><![CDATA[First blog post — sharing my data science journey and industry thoughts.]]></summary></entry><entry><title type="html">Progress : ETL containerisé — MVP livré</title><link href="https://dimiphoton.github.io/progress/progress-etl-openmeteo-final/" rel="alternate" type="text/html" title="Progress : ETL containerisé — MVP livré" /><published>2026-06-10T00:00:00+00:00</published><updated>2026-06-10T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-etl-openmeteo-final</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-etl-openmeteo-final/"><![CDATA[<p><a href="/projects/etl-openmeteo/">Pipeline ETL météo Open-Meteo</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Image Docker <code class="language-plaintext highlighter-rouge">etl-openmeteo:latest</code> (~180 Mo)</li>
  <li>Entrypoint idempotent : ne réécrit pas les partitions existantes sans <code class="language-plaintext highlighter-rouge">--force</code></li>
  <li>90 jours d’historique sur 10 stations</li>
  <li>README : lancement local, variables d’env, structure Parquet</li>
</ul>

<h2 id="résultat">Résultat</h2>

<p>MVP <strong>terminé</strong>. Consommable par notebook (pandas/pyarrow) ou DuckDB en lecture directe. Prochaine étape possible : brancher le modèle RC chauffage sur ces données.</p>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Monitoring basique (alerte si job échoue 2 jours de suite)</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Lien avec <a href="/projects/rc-model-heating/">RC Model for Home Heating</a></li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="Docker" /><category term="Parquet" /><summary type="html"><![CDATA[Final — image Docker, cron documenté, 90 jours de données stockées.]]></summary></entry><entry><title type="html">Progress : extracteur API et schéma cible</title><link href="https://dimiphoton.github.io/progress/progress-etl-openmeteo-dev/" rel="alternate" type="text/html" title="Progress : extracteur API et schéma cible" /><published>2026-05-25T00:00:00+00:00</published><updated>2026-05-25T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-etl-openmeteo-dev</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-etl-openmeteo-dev/"><![CDATA[<p><a href="/projects/etl-openmeteo/">Pipeline ETL météo Open-Meteo</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Client HTTP avec backoff exponentiel (429 / 5xx)</li>
  <li>Schéma cible : <code class="language-plaintext highlighter-rouge">station_id</code>, <code class="language-plaintext highlighter-rouge">timestamp</code>, <code class="language-plaintext highlighter-rouge">temp_c</code>, <code class="language-plaintext highlighter-rouge">humidity</code>, <code class="language-plaintext highlighter-rouge">wind_ms</code>, <code class="language-plaintext highlighter-rouge">source</code></li>
  <li>Écriture Parquet <code class="language-plaintext highlighter-rouge">year=/month=</code> sur 14 jours de backfill test</li>
  <li>Tests unitaires sur parsing JSON (3 cas limites)</li>
</ul>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Dockerfile + entrypoint <code class="language-plaintext highlighter-rouge">python -m etl.run</code></li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Logging structuré (JSON logs)</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Documentation README du pipeline</li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="Python" /><category term="pandas" /><summary type="html"><![CDATA[Développement — client API, retry, transformation et premiers fichiers Parquet.]]></summary></entry><entry><title type="html">Idée : pipeline ETL météo Open-Meteo</title><link href="https://dimiphoton.github.io/idea/idea-etl-openmeteo/" rel="alternate" type="text/html" title="Idée : pipeline ETL météo Open-Meteo" /><published>2026-05-10T00:00:00+00:00</published><updated>2026-05-10T00:00:00+00:00</updated><id>https://dimiphoton.github.io/idea/idea-etl-openmeteo</id><content type="html" xml:base="https://dimiphoton.github.io/idea/idea-etl-openmeteo/"><![CDATA[<h2 id="motivation">Motivation</h2>

<p>Les modèles énergétiques et géospatial du portfolio ont besoin d’une source météo fiable et rejouable. Open-Meteo offre une API gratuite — objectif : un pipeline reproductible vers Parquet.</p>

<h2 id="rough-plan">Rough plan</h2>

<ol>
  <li>Liste de 10 stations (lat/lon) en France</li>
  <li>Job quotidien : forecast + archive → JSON</li>
  <li>Normalisation schéma → Parquet partitionné</li>
</ol>

<h2 id="open-questions">Open questions</h2>

<ul>
  <li>Orchestration : cron simple ou prefect léger ?</li>
  <li>Rétention : 90 jours rolling ?</li>
</ul>

<p>→ <a href="/projects/etl-openmeteo/">Pipeline ETL météo Open-Meteo</a></p>]]></content><author><name>Dimi Photon</name></author><category term="idea" /><category term="ETL" /><category term="API" /><summary type="html"><![CDATA[Idée de départ — alimenter un stockage analytique météo depuis Open-Meteo.]]></summary></entry><entry><title type="html">Progress : série NDVI complète — livrable final</title><link href="https://dimiphoton.github.io/progress/progress-geo-ndvi-final/" rel="alternate" type="text/html" title="Progress : série NDVI complète — livrable final" /><published>2026-05-02T00:00:00+00:00</published><updated>2026-05-02T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-geo-ndvi-final</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-geo-ndvi-final/"><![CDATA[<p><a href="/projects/geo-ndvi-sentinel/">Cartographie NDVI Sentinel-2</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Série complète mars → août (5 dates exploitables)</li>
  <li>Médiane temporelle NDVI + écart-type pixel</li>
  <li>Carte interactive HTML + rapport PDF 2 pages (méthode + résultats)</li>
  <li>Validation visuelle QGIS sur 3 points terrain</li>
</ul>

<h2 id="résultat">Résultat</h2>

<p>Projet <strong>terminé</strong> au stade <code class="language-plaintext highlighter-rouge">notebook</code>. Pattern saisonnier visible (pic NDVI juin). Données et scripts versionnés.</p>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Option : coupler avec modèle de rendement (hors scope actuel)</li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="QGIS" /><summary type="html"><![CDATA[Final — 5 dates agrégées, carte médiane et rapport court.]]></summary></entry><entry><title type="html">Progress : pipeline NDVI et masquage nuages</title><link href="https://dimiphoton.github.io/progress/progress-geo-ndvi-dev/" rel="alternate" type="text/html" title="Progress : pipeline NDVI et masquage nuages" /><published>2026-04-18T00:00:00+00:00</published><updated>2026-04-18T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-geo-ndvi-dev</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-geo-ndvi-dev/"><![CDATA[<p><a href="/projects/geo-ndvi-sentinel/">Cartographie NDVI Sentinel-2</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Script Python : lecture COG Sentinel-2, extraction B04 (rouge) et B08 (NIR)</li>
  <li>Masquage nuages via bande QA60</li>
  <li>NDVI calculé sur 3 dates (mars, avril, mai)</li>
  <li>Premiers GeoTIFF exportés dans <code class="language-plaintext highlighter-rouge">data/processed/</code></li>
</ul>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Ajouter 2 dates été pour la série complète</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Carte folium avec slider temporel</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Vérifier les valeurs NDVI sur parcelle de référence (photo sol)</li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="rasterio" /><category term="Python" /><summary type="html"><![CDATA[Développement — lecture bands B04/B08, QA60 et calcul NDVI.]]></summary></entry><entry><title type="html">Idée : cartographie NDVI Sentinel-2</title><link href="https://dimiphoton.github.io/idea/idea-geo-ndvi/" rel="alternate" type="text/html" title="Idée : cartographie NDVI Sentinel-2" /><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><id>https://dimiphoton.github.io/idea/idea-geo-ndvi</id><content type="html" xml:base="https://dimiphoton.github.io/idea/idea-geo-ndvi/"><![CDATA[<h2 id="motivation">Motivation</h2>

<p>Besoin de se familiariser avec le traitement Sentinel-2 et les indices de végétation sur une zone agricole connue. Projet week-end étirable sur 2 semaines.</p>

<h2 id="rough-plan">Rough plan</h2>

<ol>
  <li>Télécharger 5 dates L2A sans nuages (tile 31TFK)</li>
  <li>Calculer NDVI = (NIR - Red) / (NIR + Red)</li>
  <li>Produire une carte de synthèse (médiane temporelle)</li>
</ol>

<h2 id="open-questions">Open questions</h2>

<ul>
  <li>Copernicus Browser vs script Python pur ?</li>
  <li>Reprojection nécessaire ou rester en CRS native ?</li>
</ul>

<p>→ <a href="/projects/geo-ndvi-sentinel/">Cartographie NDVI Sentinel-2</a></p>]]></content><author><name>Dimi Photon</name></author><category term="idea" /><category term="Sentinel-2" /><category term="NDVI" /><summary type="html"><![CDATA[Idée de départ — suivre la végétation d'une parcelle via NDVI multitemporel.]]></summary></entry><entry><title type="html">Progress : VRP livré — prototype terminé</title><link href="https://dimiphoton.github.io/progress/progress-optim-vrp-final/" rel="alternate" type="text/html" title="Progress : VRP livré — prototype terminé" /><published>2026-03-20T00:00:00+00:00</published><updated>2026-03-20T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-optim-vrp-final</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-optim-vrp-final/"><![CDATA[<p><a href="/projects/optim-vrp-delivery/">Optimisation de tournées VRP</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Fenêtres horaires ajoutées sur 8 arrêts (contrainte soft via pénalité)</li>
  <li>Notebook final avec instructions de reproduction</li>
  <li>Export JSON des tournées + carte HTML autonome</li>
  <li>Tests sur 3 scénarios de demande (faible / moyenne / pic)</li>
</ul>

<h2 id="résultat">Résultat</h2>

<p>Prototype <strong>terminé</strong> au stade <code class="language-plaintext highlighter-rouge">prototype</code>. Gain distance médian <strong>14 %</strong> vs construction manuelle simulée. Pas de déploiement prévu — livrable = notebook + artefacts.</p>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Idée future : brancher sur API de routage réel (OSRM)</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Ou archiver comme référence pour un cas client réel</li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="OR-Tools" /><summary type="html"><![CDATA[Final — prototype validé, notebook et exports livrés.]]></summary></entry><entry><title type="html">Progress : modèle VRP et premières tournées</title><link href="https://dimiphoton.github.io/progress/progress-optim-vrp-dev/" rel="alternate" type="text/html" title="Progress : modèle VRP et premières tournées" /><published>2026-02-28T00:00:00+00:00</published><updated>2026-02-28T00:00:00+00:00</updated><id>https://dimiphoton.github.io/progress/progress-optim-vrp-dev</id><content type="html" xml:base="https://dimiphoton.github.io/progress/progress-optim-vrp-dev/"><![CDATA[<p><a href="/projects/optim-vrp-delivery/">Optimisation de tournées VRP</a></p>

<h2 id="what-i-did">What I did</h2>

<ul>
  <li>Génération d’un jeu de 25 arrêts autour de Lyon (coordonnées aléatoires contraintes)</li>
  <li>Modèle <code class="language-plaintext highlighter-rouge">RoutingIndexManager</code> + <code class="language-plaintext highlighter-rouge">RoutingModel</code> avec dimension capacité</li>
  <li>Première solution : distance totale 142 km → 118 km vs ordre naïf (+17 %)</li>
  <li>Export GeoJSON des polylines + carte folium</li>
</ul>

<h2 id="next-steps">Next steps</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Ajouter contrainte fenêtre horaire sur 5 arrêts prioritaires</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Benchmark temps de résolution selon taille de flotte</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Documenter les paramètres du solveur dans le notebook</li>
</ul>]]></content><author><name>Dimi Photon</name></author><category term="progress" /><category term="Python" /><category term="OR-Tools" /><summary type="html"><![CDATA[Développement — implémentation OR-Tools et visualisation folium.]]></summary></entry><entry><title type="html">Idée : optimisation de tournées VRP</title><link href="https://dimiphoton.github.io/idea/idea-optim-vrp/" rel="alternate" type="text/html" title="Idée : optimisation de tournées VRP" /><published>2026-02-10T00:00:00+00:00</published><updated>2026-02-10T00:00:00+00:00</updated><id>https://dimiphoton.github.io/idea/idea-optim-vrp</id><content type="html" xml:base="https://dimiphoton.github.io/idea/idea-optim-vrp/"><![CDATA[<h2 id="motivation">Motivation</h2>

<p>Une connaissance gère une petite flotte de livraison locale. Les tournées sont construites à la main dans Excel. Hypothèse : un solveur VRP pourrait réduire les km parcourus de 10–15 %.</p>

<h2 id="rough-plan">Rough plan</h2>

<ol>
  <li>Formaliser le VRP capacité + distance</li>
  <li>Prototyper avec OR-Tools sur 20–30 arrêts fictifs</li>
  <li>Visualiser les tournées sur une carte</li>
</ol>

<h2 id="open-questions">Open questions</h2>

<ul>
  <li>Fenêtres horaires client : indispensables ou V2 ?</li>
  <li>Données réelles disponibles ou jeu synthétique pour le prototype ?</li>
</ul>

<p>→ Hub projet : <a href="/projects/optim-vrp-delivery/">Optimisation de tournées VRP</a></p>]]></content><author><name>Dimi Photon</name></author><category term="idea" /><category term="OR-Tools" /><summary type="html"><![CDATA[Idée de départ — modéliser des tournées de livraison comme un VRP.]]></summary></entry></feed>