can’t consider a extra necessary dataset. Simply as we speak, I noticed a headline like this: ‘Warmth Waves Are Getting Extra Harmful with Local weather Change.’ You’ll be able to’t say we haven’t been warned. In 1988, we noticed headlines like this: ‘International Warming Has Begun, Knowledgeable Tells Senate.’ And whereas information science has performed its position in revealing that we’ll probably surpass the 1.5 °C goal set by the Paris Settlement, there may be much more we may very well be doing. For one, folks don’t imagine it, but the information is available, free, and simple to entry. You’ll be able to verify it your self! So on this episode, we’ll. We’ll additionally discuss in regards to the shocking and fascinating methods this information is at the moment being utilized to fight the results of local weather change.
However local weather information can also be extremely fascinating. You’ve most likely additionally seen headlines like: Blue Origin launch of 6 folks to suborbital house delayed once more attributable to climate. Which makes you suppose, if we will ship somebody to the moon, then why can’t we ensure in regards to the climate? If troublesome doesn’t describe it, then a multidimensional stochastic course of would possibly. From an information science perspective, that is our Riemann Speculation, our P vs NP drawback. How effectively we will mannequin and perceive local weather information will form our subsequent many years on this earth. That is crucial drawback we may very well be engaged on.
And whereas New York simply went by way of a warmth wave, it’s vital to notice that local weather change is worse than simply hotter climate.
- Failing harvests undermine world meals safety, particularly in weak areas.
- Vector-borne ailments broaden into new areas as temperatures rise.
- Mass extinctions disrupt ecosystems and erode planetary resilience.
- Ocean acidification unravels marine meals chains, threatening fisheries and biodiversity.
- Freshwater provides dwindle underneath the strain of drought, air pollution, and overuse.
However not all is misplaced; we’ll speak about a few of the methods information has been used to handle these issues. Right here’s a abstract of a few of the information NASA retains observe of. We are going to entry a few of these parameters.
Getting the information
We’ll begin by choosing some fascinating places we’ll look at on this collection. All we want are their coordinates — a click on away on Google Maps. I exploit fairly a little bit of decimal locations right here, however the meteorological information supply decision is ½° x ⅝°, so there’s no should be this correct.
interesting_climate_sites = {
"Barrow, Alaska (Utqiaġvik)": (71.2906, -156.7886), # Arctic warming, permafrost soften
"Greenland Ice Sheet": (72.0000, -40.0000), # Glacial soften, sea stage rise
"Amazon Rainforest (Manaus)": (-3.1190, -60.0217), # Carbon sink, deforestation influence
"Sahara Desert (Tamanrasset, Algeria)": (22.7850, 5.5228), # Warmth extremes, desertification
"Sahel (Niamey, Niger)": (13.5128, 2.1127), # Precipitation shifts, droughts
"Sydney, Australia": (-33.8688, 151.2093), # Heatwaves, bushfires, El Niño sensitivity
"Mumbai, India": (19.0760, 72.8777), # Monsoon variability, coastal flooding
"Bangkok, Thailand": (13.7563, 100.5018), # Sea-level rise, warmth + humidity
"Svalbard, Norway": (78.2232, 15.6469), # Quickest Arctic warming
"McMurdo Station, Antarctica": (-77.8419, 166.6863), # Ice loss, ozone gap proximity
"Cape City, South Africa": (-33.9249, 18.4241), # Water shortage, shifting rainfall
"Mexico Metropolis, Mexico": (19.4326, -99.1332), # Air air pollution, altitude-driven climate
"Reykjavík, Iceland": (64.1355, -21.8954), # Glacial soften, geothermal dynamics
}
Subsequent, let’s choose some parameters. You’ll be able to flip by way of them within the Parameter Dictionary https://power.larc.nasa.gov/parameters/

You’ll be able to solely request from one group at a time, so we group the parameters by group.
community_params = {
"AG": ["T2M","T2M_MAX","T2M_MIN","WS2M","ALLSKY_SFC_SW_DWN","ALLSKY_SFC_LW_DWN",
"CLRSKY_SFC_SW_DWN","T2MDEW","T2MWET","PS","RAIN","TS","RH2M","QV2M","CLOUD_AMT"],
"RE": ["WD2M","WD50M","WS50M"],
"SB": ["IMERG_PRECTOT"]
}
How is that this information used?
- AG = Agricultural. Agroeconomists sometimes use this group in crop development fashions, corresponding to DSSAT and APSIM, in addition to in irrigation planners like FAO CROPWAT. It’s additionally used for livestock warmth stress evaluation and in constructing meals safety early warning techniques. This helps mitigate meals insecurity attributable to local weather change. This information follows agroeconomic conventions, permitting it to be ingested straight by agricultural decision-support instruments.
- RE = Renewable Power. Given the identify and the truth that you may get windspeed information from right here, you would possibly be capable to guess its use. This information is primarily used to forecast long-term vitality yields. Wind velocity for generators, photo voltaic radiation for photo voltaic farms. This information could be fed into PVsyst, NREL-SAM and WindPRO to estimate annual vitality yields and prices. This information helps every thing from rooftop array design to nationwide clear vitality targets.
- SB = Sustainable Buildings. Architects and HVAC engineers make the most of this information to make sure their buildings adjust to vitality efficiency rules, like IECC or ASHRAE 90.1. It may be straight dropped into EnergyPlus, OpenStudio, RETScreen, or LEED/ASHRAE compliance calculators to confirm buildings are as much as code.
Now we decide a begin and finish date.
start_date = "19810101"
end_date = "20241231"
To make the API name one thing repeatable, we use a perform. We are going to work with day by day information, however if you happen to favor yearly, month-to-month, and even hourly information, you simply want to vary the URL to
…/temporal/{decision}/level.
import requests
import pandas as pd
def get_nasa_power_data(lat, lon, parameters, group, begin, finish):
"""
Fetch day by day information from NASA POWER API for given parameters and placement.
Dates have to be in YYYYMMDD format (e.g., "20100101", "20201231").
"""
url = "https://energy.larc.nasa.gov/api/temporal/day by day/level"
params = {
"parameters": ",".be part of(parameters),
"group": group,
"latitude": lat,
"longitude": lon,
"begin": begin,
"finish": finish,
"format": "JSON"
}
response = requests.get(url, params=params)
information = response.json()
if "properties" not in information:
print(f"Error fetching {group} information for lat={lat}, lon={lon}: {information}")
return pd.DataFrame()
# Construct one DataFrame per parameter, then mix
param_data = information["properties"]["parameter"]
dfs = [
pd.DataFrame.from_dict(values, orient="index", columns=[param])
for param, values in param_data.gadgets()
]
df_combined = pd.concat(dfs, axis=1)
df_combined.index.identify = "Date"
return df_combined.sort_index().astype(float)
This perform retrieves the parameters we requested from the group we specified. It additionally converts JSON right into a dataframe. Every response all the time comprises a property key — if it’s lacking, we print an error.
Let’s name this perform in a loop to fetch the information for all our places.
all_data = {}
for metropolis, (lat, lon) in interesting_climate_sites.gadgets():
print(f"Fetching day by day information for {metropolis}...")
city_data = {}
for group, params in community_params.gadgets():
df = get_nasa_power_data(lat, lon, params, group, start_date, end_date)
city_data[community] = df
all_data[city] = city_data
Proper now, our information is a dictionary the place the values are additionally dictionaries. It seems like this:

This makes utilizing the information difficult. Subsequent, we mix these into one dataframe. We be part of on the information after which concatenate. Since there have been no lacking values, an internal be part of would yield the identical end result.
# 1) For every metropolis, be part of its communities on the date index
city_dfs = {
metropolis: comms["AG"]
.be part of(comms["RE"], how="outer")
.be part of(comms["SB"], how="outer")
for metropolis, comms in all_data.gadgets()
}
# 2) Concatenate into one MultiIndexed DF: index = (Metropolis, Date)
combined_df = pd.concat(city_dfs, names=["City", "Date"])
# 3) Reset the index so Metropolis and Date change into columns
combined_df = combined_df.reset_index()
# 4) Carry latitude/longitude in as columns
coords = pd.DataFrame.from_dict(
interesting_climate_sites, orient="index", columns=["Latitude", "Longitude"]
).reset_index().rename(columns={"index": "Metropolis"})
combined_df = combined_df.merge(coords, on="Metropolis", how="left")
# then save into your Drive folder
combined_df.to_csv('/content material/drive/MyDrive/climate_data.csv', index=False)
In case you’re bored with coding for the day, it’s also possible to use their information entry software. Simply click on anyplace on the map to retrieve the information. Right here I clicked on Venice. Then simply choose a Group, Temporal Common, and your most popular file kind, CSV, JSON, ASCII, NETCDF, and hit submit. A few clicks and you may get all of the climate information on the planet.
https://power.larc.nasa.gov/data-access-viewer

Sanity verify
Now, let’s carry out a fast sanity verify to confirm that the information we’ve is smart.
import matplotlib.pyplot as plt
import seaborn as sns # Import seaborn
# Load information
climate_df = pd.read_csv('/content material/drive/MyDrive/TDS/Local weather/climate_data.csv')
climate_df['Date'] = pd.to_datetime(climate_df['Date'].astype(str), format='%Ypercentmpercentd')
# Filter for the desired cities
selected_cities = [
'McMurdo Station, Antarctica',
'Bangkok, Thailand',
]
df_selected_cities = climate_df[climate_df['City'].isin(selected_cities)].copy()
# Create a scatter plot with completely different colours for every metropolis
plt.determine(figsize=(12, 8))
# Use a colormap for extra aesthetic colours
colours = sns.color_palette("Set2", len(selected_cities)) # Utilizing a seaborn colour palette
for i, metropolis in enumerate(selected_cities):
df_city = df_selected_cities[df_selected_cities['City'] == metropolis]
plt.scatter(df_city['Date'], df_city['T2M'], label=metropolis, s=2, colour=colours[i]) # Utilizing T2M for temperature and smaller dots
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Each day Temperature (°C) for Chosen Cities')
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.present()
Sure, temperatures in Bangkok are fairly a bit hotter than within the Arctic.

# Filter for the desired cities
selected_cities = [
'Cape Town, South Africa',
'Amazon Rainforest (Manaus)',
]
df_selected_cities = climate_df[climate_df['City'].isin(selected_cities)].copy()
# Arrange the colour palette
colours = sns.color_palette("Set1", len(selected_cities))
# Create vertically stacked subplots
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(12, 10), sharex=True)
for i, metropolis in enumerate(selected_cities):
df_city = df_selected_cities[df_selected_cities['City'] == metropolis]
axes[i].scatter(df_city['Date'], df_city['PRECTOTCORR'], s=2, colour=colours[i])
axes[i].set_title(f'Each day Precipitation in {metropolis}')
axes[i].set_ylabel('Precipitation (mm)')
axes[i].grid(alpha=0.3)
# Label x-axis solely on the underside subplot
axes[-1].set_xlabel('Date')
plt.tight_layout()
plt.present()
Sure, it’s raining extra within the Amazon Rainforest than in South Africa.
South Africa experiences droughts, which place a major burden on the agricultural sector.

# Filter for Mexico Metropolis
df_mexico = climate_df[climate_df['City'] == 'Mexico Metropolis, Mexico'].copy()
# Create the plot
plt.determine(figsize=(12, 6))
sns.set_palette("husl")
plt.scatter(df_mexico['Date'], df_mexico['WS2M'], s=2, label='WS2M (2m Wind Pace)')
plt.scatter(df_mexico['Date'], df_mexico['WS50M'], s=2, label='WS50M (50m Wind Pace)')
plt.xlabel('Date')
plt.ylabel('Wind Pace (m/s)')
plt.title('Each day Wind Speeds at 2m and 50m in Mexico Metropolis')
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.present()
Sure, wind speeds at 50 meters are so much quicker than at 2 meters.
Usually, the upper you go, the quicker the wind strikes. At flight altitude, the wind can attain speeds of 200 km/h. That’s, till you attain house at 100,000 meters.

We’ll take a a lot nearer have a look at this information within the following chapters.
It’s heating up
We simply went by way of a warmth wave right here in Toronto. By the sounds my AC made, I feel it almost broke. However in a temperature graph, it is advisable look fairly rigorously to see that they’re rising. It’s because there may be seasonality and vital variability. Issues change into clearer once we have a look at the yearly common. We name an anomaly the distinction between the typical for a particular yr and the baseline. The baseline being the typical temperature over 1981–2024, we will then see that the current yearly common is considerably greater than the baseline, primarily as a result of cooler temperatures current in earlier years. The converse is equally true; The early yearly common is considerably decrease than the baseline attributable to hotter temperatures in recent times.
With all of the technical articles current right here, headlines like ‘Grammar as an Injectable: A Trojan Horse to NLP Pure Language Processing’. I hope you’re not disillusioned by a easy linear regression. However that’s all it takes to point out that temperatures are rising. But folks don’t imagine.
# 1) Filter for Sahara Desert and exclude 2024
metropolis = 'Sahara Desert (Tamanrasset, Algeria)'
df = (
climate_df
.loc[climate_df['City'] == metropolis]
.set_index('Date')
.sort_index()
)
# 2) Compute annual imply & anomaly
annual = df['T2M'].resample('Y').imply()
baseline = annual.imply()
anomaly = annual - baseline
# 3) 5-year rolling imply
roll5 = anomaly.rolling(window=5, heart=True, min_periods=3).imply()
# 4) Linear development
years = anomaly.index.yr
slope, intercept = np.polyfit(years, anomaly.values, 1)
development = slope * years + intercept
# 5) Plot
plt.determine(figsize=(10, 6))
plt.bar(years, anomaly, colour='lightgray', label='Annual Anomaly')
plt.plot(years, roll5, colour='C0', linewidth=2, label='5-yr Rolling Imply')
plt.plot(years, development, colour='C3', linestyle='--', linewidth=2,
label=f'Pattern: {slope:.3f}°C/yr')
plt.axhline(0, colour='okay', linewidth=0.8, alpha=0.6)
plt.xlabel('12 months')
plt.ylabel('Temperature Anomaly (°C)')
plt.title(f'{metropolis} Annual Temperature Anomaly')
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.present()

The Sahara is getting hotter by 0.03°C per yr. That’s the most well liked desert on the planet. We will even verify each location we picked and see that not a single one has a unfavourable development.

So sure, Temperatures are rising.
The forest for the bushes
A giant motive NASA makes this information open-source is to fight the results of Local weather Change. We’ve talked about modelling crop yields, renewable vitality, and sustainable constructing compliance. Nevertheless, there are extra methods information could be utilized to handle local weather change in a scientific and mathematically grounded method. In case you’re on this matter, this video by Luis Seco covers issues I didn’t get to handle on this article, like
- The carbon commerce and the worth of carbon
- Predictive biomass software optimizing tree planting
- Protected ingesting water in Kenya
- The socioeconomic prices of emissions
- Managed burning of forests
I hope you’ll be part of me on this journey. Within the subsequent episode, we’ll focus on how differential equations have been used to mannequin local weather. And whereas a lot is being accomplished to handle local weather change, the sooner record of results was not exhaustive.
- Melting ice sheets destabilize world local weather regulation and speed up sea-level rise.
- Local weather-related damages cripple economies by way of escalating infrastructure and well being prices.
- Rising numbers of local weather refugees pressure borders and gas geopolitical instability.
- Coastal cities face submersion as seas rise relentlessly
- Excessive climate occasions shatter data, displacing tens of millions.
However there’s noise, and there’s sign, and they are often separated.

Sources
- Local weather change impacts | Nationwide Oceanic and Atmospheric Administration. (n.d.). https://www.noaa.gov/training/resource-collections/local weather/climate-change-impacts
- Freedman, A. (2025, June 23). Warmth waves are getting extra harmful with local weather change – and we should be underestimating them. CNN. https://www.cnn.com/2025/06/23/local weather/heat-wave-global-warming-links
- International local weather predictions present temperatures anticipated to stay at or close to document ranges in coming 5 years. World Meteorological Group. (2025, Might 26). https://wmo.int/information/media-centre/global-climate-predictions-show-temperatures-expected-remain-or-near-record-levels-coming-5-years
- International warming has begun, skilled tells Senate (revealed 1988). The New York Instances. (1988, June 24). https://net.archive.org/net/20201202103915/https:/www.nytimes.com/1988/06/24/us/global-warming-has-begun-expert-tells-senate.html
- NASA. (n.d.). NASA LARC POWER Undertaking. NASA. https://energy.larc.nasa.gov/
- Wall, M. (2025, June 20). Blue Origin to launch 6 folks to Suborbital Area June 29 after climate delay. Area. https://www.house.com/space-exploration/private-spaceflight/watch-blue-origin-launch-6-people-to-suborbital-space-on-june-21