can’t consider a extra essential dataset. Simply right now, I noticed a headline like this: ‘Warmth Waves Are Getting Extra Harmful with Local weather Change.’ You may’t say we haven’t been warned. In 1988, we noticed headlines like this: ‘International Warming Has Begun, Professional Tells Senate.’ And whereas information science has performed its position in revealing that we are going to seemingly surpass the 1.5 °C goal set by the Paris Settlement, there’s much more we could possibly be doing. For one, individuals don’t imagine it, but the information is available, free, and straightforward to entry. You may verify it your self! So on this episode, we’ll. We’ll additionally speak concerning the shocking and fascinating methods this information is at present being utilized to fight the consequences of local weather change.
However local weather information can be extremely fascinating. You’ve in all probability additionally seen headlines like: Blue Origin launch of 6 individuals to suborbital house delayed once more because of climate. Which makes you assume, if we are able to ship somebody to the moon, then why can’t we ensure concerning the climate? If tough 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 are able to mannequin and perceive local weather information will form our subsequent many years on this earth. That is an important drawback we could possibly be engaged on.
And whereas New York simply went via 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 susceptible areas.
- Vector-borne ailments increase 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 below the strain of drought, air pollution, and overuse.
However not all is misplaced; we’ll speak about among the methods information has been used to handle these issues. Right here’s a abstract of among the information NASA retains monitor of. We’ll entry a few of these parameters.
Getting the information
We’ll begin by selecting some fascinating places we’ll look at on this collection. All we’d like are their coordinates — a click on away on Google Maps. I take advantage of fairly a little bit of decimal locations right here, however the meteorological information supply decision is ½° x ⅝°, so there’s no have to 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 degree rise
"Amazon Rainforest (Manaus)": (-3.1190, -60.0217), # Carbon sink, deforestation affect
"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 may flip via them within the Parameter Dictionary https://power.larc.nasa.gov/parameters/

You may solely request from one neighborhood at a time, so we group the parameters by neighborhood.
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 neighborhood in crop progress 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 programs. This helps mitigate meals insecurity because of local weather change. This information follows agroeconomic conventions, permitting it to be ingested instantly by agricultural decision-support instruments.
- RE = Renewable Power. Given the identify and the truth that you will get windspeed information from right here, you would possibly be capable of guess its use. This information is primarily used to forecast long-term vitality yields. Wind pace for generators, photo voltaic radiation for photo voltaic farms. This information may be fed into PVsyst, NREL-SAM and WindPRO to estimate annual vitality yields and prices. This information helps all the things 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 laws, like IECC or ASHRAE 90.1. It may be instantly dropped into EnergyPlus, OpenStudio, RETScreen, or LEED/ASHRAE compliance calculators to confirm buildings are as much as code.
Now we choose a begin and finish date.
start_date = "19810101"
end_date = "20241231"
To make the API name one thing repeatable, we use a operate. We’ll work with each day information, however for those who want yearly, month-to-month, and even hourly information, you simply want to alter the URL to
…/temporal/{decision}/level.
import requests
import pandas as pd
def get_nasa_power_data(lat, lon, parameters, neighborhood, begin, finish):
"""
Fetch each 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/each day/level"
params = {
"parameters": ",".be a part of(parameters),
"neighborhood": neighborhood,
"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 {neighborhood} 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 operate retrieves the parameters we requested from the neighborhood we specified. It additionally converts JSON right into a dataframe. Every response at all times accommodates a property key — if it’s lacking, we print an error.
Let’s name this operate 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 each day information for {metropolis}...")
city_data = {}
for neighborhood, params in community_params.gadgets():
df = get_nasa_power_data(lat, lon, params, neighborhood, 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 to be like this:

This makes utilizing the information difficult. Subsequent, we mix these into one dataframe. We be a part of on the information after which concatenate. Since there have been no lacking values, an internal be a part of would yield the identical outcome.
# 1) For every metropolis, be a part of its communities on the date index
city_dfs = {
metropolis: comms["AG"]
.be a part of(comms["RE"], how="outer")
.be a 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)
If you happen to’re bored with coding for the day, you may also use their information entry device. Simply click on anyplace on the map to retrieve the information. Right here I clicked on Venice. Then simply choose a Neighborhood, Temporal Common, and your most well-liked file sort, CSV, JSON, ASCII, NETCDF, and hit submit. A few clicks and you will get all of the climate information on this 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 got 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 totally 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 coloration 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, coloration=colours[i]) # Utilizing T2M for temperature and smaller dots
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Every 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, coloration=colours[i])
axes[i].set_title(f'Every 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 big 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 Velocity)')
plt.scatter(df_mexico['Date'], df_mexico['WS50M'], s=2, label='WS50M (50m Wind Velocity)')
plt.xlabel('Date')
plt.ylabel('Wind Velocity (m/s)')
plt.title('Every 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 sooner than at 2 meters.
Sometimes, the upper you go, the sooner 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 via a warmth wave right here in Toronto. By the sounds my AC made, I believe it almost broke. However in a temperature graph, it is advisable look fairly rigorously to see that they’re rising. It is because there’s seasonality and vital variability. Issues change into clearer after we have a look at the yearly common. We name an anomaly the distinction between the typical for a selected yr and the baseline. The baseline being the typical temperature over 1981–2024, we are able to then see that the latest yearly common is considerably greater than the baseline, primarily because of the cooler temperatures current in earlier years. The converse is equally true; The early yearly common is considerably decrease than the baseline because of hotter temperatures lately.
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 individuals 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, middle=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, coloration='lightgray', label='Annual Anomaly')
plt.plot(years, roll5, coloration='C0', linewidth=2, label='5-yr Rolling Imply')
plt.plot(years, development, coloration='C3', linestyle='--', linewidth=2,
label=f'Development: {slope:.3f}°C/yr')
plt.axhline(0, coloration='ok', linewidth=0.8, alpha=0.6)
plt.xlabel('Yr')
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 this planet. We will even verify each location we picked and see that not a single one has a unfavorable development.

So sure, Temperatures are rising.
The forest for the timber
An enormous motive NASA makes this information open-source is to fight the consequences of Local weather Change. We’ve talked about modelling crop yields, renewable vitality, and sustainable constructing compliance. Nevertheless, there are further methods information may be utilized to handle local weather change in a scientific and mathematically grounded method. If you happen to’re on this subject, 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 device optimizing tree planting
- Protected consuming water in Kenya
- The socioeconomic prices of emissions
- Managed burning of forests
I hope you’ll be a part of me on this journey. Within the subsequent episode, we’ll talk about how differential equations have been used to mannequin local weather. And whereas a lot is being performed to handle local weather change, the sooner listing 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 via 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/schooling/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 still 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, professional tells Senate (printed 1988). The New York Instances. (1988, June 24). https://internet.archive.org/internet/20201202103915/https:/www.nytimes.com/1988/06/24/us/global-warming-has-begun-expert-tells-senate.html
- NASA. (n.d.). NASA LARC POWER Mission. NASA. https://energy.larc.nasa.gov/
- Wall, M. (2025, June 20). Blue Origin to launch 6 individuals to Suborbital House June 29 after climate delay. House. https://www.house.com/space-exploration/private-spaceflight/watch-blue-origin-launch-6-people-to-suborbital-space-on-june-21