Method Notes
How we calculate thermal lag, classify surfaces, and validate our findings.
Data Sources
Our thermal lag analysis combines three categories of data: meteorological observations from public agencies, geographic information from government open data portals, and field measurements collected by our team. Each category has its own provenance, quality characteristics, and limitations. We describe all three here so that independent researchers can replicate or critique our work.
Meteorological Data: Open-Meteo API
Live weather data displayed on our website comes from the Open-Meteo API (https://open-meteo.com/), a free, open-source weather API developed by meteorologist Patrick Zippenfenig. Open-Meteo sources its forecast data from multiple numerical weather prediction (NWP) models, including the Japan Meteorological Agency's GSM (Global Spectral Model) at 0.25-degree resolution for the Japan region.
For historical and validation analysis, we use the JMA AMeDAS (Automated Meteorological Data Acquisition System) network. AMeDAS stations record temperature, humidity, wind, precipitation, and sunshine duration at 10-minute intervals. We download quality-controlled daily data from the JMA website (https://www.data.jma.go.jp/) for stations at Fuchu, Nerima, Otemachi, Haneda, and Edogawa.
Surface Material Data: Tokyo Metropolitan Government Open Data Portal
Our land use classification comes from the Tokyo Metropolitan Government's "Land Use Survey" (土地利用調査) dataset, published by the Bureau of Urban Development and available through the Tokyo Open Data Portal (https://portal.data.metro.tokyo.lg.jp/). The dataset classifies land surface into 17 categories at 10-meter spatial resolution, derived from 2020 aerial photography and satellite imagery.
We aggregate the 17 categories into 5 simplified types for our analysis:
| Our Category | Source Categories |
|---|---|
| Building | Building, building-adjacent paved |
| Road | Expressway, arterial road, local road, parking |
| Green | Park, garden, agriculture, cemetery, urban forest |
| Water | River, canal, pond, harbor, other water |
| Other | Bare soil, construction, unclassified |
The raw GIS data is published under the Tokyo Metropolitan Government's open data license, which permits free use, modification, and redistribution with attribution.
Solar Insolation Data: Tokyo Skytree Atmospheric Monitoring Station
Our solar insolation time series comes from the Tokyo Skytree Atmospheric Monitoring Station, operated by the Tokyo Metropolitan Industrial Technology Research Institute (TIRI). This station records global horizontal irradiance (GHI), direct normal irradiance (DNI), and diffuse horizontal irradiance (DHI) at 10-minute intervals at an elevation of 350 meters above ground level. Data is published with a 1-month delay and is available through the TIRI website.
Thermal Lag Calculation Method
We calculate thermal lag using the cross-correlation method, a standard technique in signal processing and climate science. The procedure is as follows:
Step 1: Data preparation. We compile two concurrent time series of equal length: daily mean solar insolation S(t) and daily mean air temperature T(t), where t is the day index. Both series span at least one full year (365+ days) to capture the seasonal cycle.
Step 2: Preprocessing. We remove long-term trends using a 30-day moving average subtraction. This isolates the seasonal signal from year-to-year climate variation. We then normalize both series to zero mean and unit variance:
S_norm(t) = (S(t) - mean(S)) / std(S)
T_norm(t) = (T(t) - mean(T)) / std(T)
Step 3: Cross-correlation. We compute the Pearson correlation coefficient at each time lag τ from 0 to 60 days:
r(τ) = corr(S_norm(t), T_norm(t + τ))
Step 4: Lag identification. The thermal lag is defined as the lag τ that maximizes r(τ):
lag = argmax_τ r(τ)
Step 5: Confidence estimation. We estimate the 95% confidence interval for the lag using bootstrap resampling (n = 10,000 iterations). In each iteration, we randomly resample 80% of the data points (with replacement), recompute the cross-correlation function, and record the maximizing lag. The 2.5th and 97.5th percentiles of the bootstrap distribution define the confidence interval.
Step 6: Seasonal decomposition. We repeat the above procedure for each calendar month using a 30-day rolling window centered on the target month. This produces the monthly lag values shown in our spiral diagram and seasonal analyses.
Example: Chiyoda Ward (2021–2023)
| Month | Lag (days) | r value | 95% CI |
|---|---|---|---|
| January | 38 | 0.91 | 35–41 |
| February | 35 | 0.92 | 32–38 |
| March | 28 | 0.93 | 25–31 |
| April | 18 | 0.94 | 16–20 |
| May | 10 | 0.93 | 8–12 |
| June | 5 | 0.91 | 3–7 |
| July | 8 | 0.92 | 6–10 |
| August | 18 | 0.94 | 16–20 |
| September | 32 | 0.93 | 29–35 |
| October | 40 | 0.91 | 37–43 |
| November | 42 | 0.90 | 39–45 |
| December | 40 | 0.91 | 37–43 |
Surface Temperature Field Measurements
Our field measurement program uses the following equipment and procedures:
Infrared camera: FLIR E8-XT, thermal resolution 320×240 pixels, temperature range -20°C to 550°C, accuracy ±2°C, emissivity adjustable 0.1–1.0. We set emissivity to 0.95 for vegetation, 0.92 for concrete, 0.90 for asphalt, and 0.96 for water.
Contact thermocouple: Type K, ±0.5°C accuracy, used for spot-check calibration of IR readings.
Fixed data loggers: 8× HOBO UX120-014M units recording at 10-minute intervals.
Bicycle transect protocol: Camera mounted on handlebars, measurements at 90-second intervals while moving at 15 km/h. Route covers all 23 wards over 3 days, approximately 185 km total. Quarterly surveys since January 2021.
Code and Data Availability
Our cross-correlation analysis code is written in Python 3.11 using NumPy, SciPy, and Pandas. We plan to publish the complete codebase on GitHub under an MIT license. Raw sensor data (anonymized and aggregated) will be published as CSV files. Publication is scheduled for Q2 2024, pending review by our legal counsel to ensure compliance with data protection regulations.
Known Limitations
Our analysis has several known limitations that affect the interpretation of our results:
Single point per ward: Each ward is represented by a single measurement point. Internal ward variation is not captured.
Measurement height: Temperature is measured at 2 meters above ground, not at the surface. Surface temperatures can be 20–40°C higher.
Anthropogenic heat: Our models do not explicitly separate anthropogenic heat (vehicles, A/C, industry) from solar-driven thermal lag. The measured lag includes both effects.
Temporal coverage: 3+ years of data (2021–2023) is sufficient for seasonal patterns but insufficient for long-term trend detection.
Spatial resolution: GIS land use data at 10-meter resolution misses microscale features like individual trees and building shadows.
We discuss each of these limitations in more detail on our Data Sources page.
Validation
We validate our thermal lag calculations by comparing against independent data sources and published studies:
JMA AMeDAS comparison: Our Otemachi sensor readings agree with the nearest AMeDAS station (Tokyo) within ±0.8°C for 92% of days. Lag calculations using JMA data vs. our sensor data differ by 1–2 days.
Literature comparison: Our Chiyoda lag estimate of 38 days agrees with Ichinose et al. (1999), who reported 35–40 days for central Tokyo using a different methodology. Our Saitama estimate of 22 days agrees with JMA climatological reports for the Kanto plains region.
Cross-validation: We withhold 20% of data points, recompute lag on the remaining 80%, and verify that the withheld points are consistent with the model prediction. Mean absolute error is 1.4 days.
If you identify errors in our methodology or data, please contact us. We publish all corrections on our Corrections page.