can’t consider a extra necessary dataset. Simply at the moment, 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, Skilled Tells Senate.’ And whereas information science has performed its function in revealing that we are going to seemingly surpass the 1.5 °C goal set by the Paris Settlement, there may be much more we could possibly be doing. For one, individuals don’t consider it, but the information is available, free, and simple to entry. You may examine it your self! So on this episode, we’ll. We’ll additionally discuss concerning the stunning and attention-grabbing methods this information is at present being utilized to fight the consequences of local weather change.
However local weather information can also be extremely attention-grabbing. You’ve most likely additionally seen headlines like: Blue Origin launch of 6 individuals to suborbital area delayed once more because of climate. Which makes you assume, if we will ship somebody to the moon, then why can’t we be certain 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 nicely we will 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 by a warmth wave, it’s obligatory to notice that local weather change is worse than simply hotter climate.
- Failing harvests undermine world meals safety, particularly in weak areas.
- Vector-borne illnesses develop 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 discuss among the methods information has been used to handle these issues. Right here’s a abstract of among the information NASA retains observe of. We’ll entry a few of these parameters.

Getting the information
We’ll begin by selecting some attention-grabbing places we’ll look at on this sequence. All we want 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 must 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 impression
"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 by them within the Parameter Dictionary https://energy.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 development fashions, resembling 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 because of local weather change. This information follows agroeconomic conventions, permitting it to be ingested immediately 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 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 may be fed into PVsyst, NREL-SAM and WindPRO to estimate annual vitality yields and prices. This information helps every part 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 immediately 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 day by day information, however should you 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, neighborhood, begin, finish):
"""
Fetch day by day information from NASA POWER API for given parameters and placement.
Dates should 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),
"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.objects()
]
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 comprises 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.objects():
print(f"Fetching day by day information for {metropolis}...")
city_data = {}
for neighborhood, params in community_params.objects():
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 sophisticated. 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 outcome.
# 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.objects()
}
# 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 develop into columns
combined_df = combined_df.reset_index()
# 4) Deliver 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 the event you’re uninterested in coding for the day, you may as well use their information entry device. Simply click on wherever 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 kind, CSV, JSON, ASCII, NETCDF, and hit submit. A few clicks and you will get all of the climate information on this planet.
https://energy.larc.nasa.gov/data-access-viewer

Sanity examine
Now, let’s carry out a fast sanity examine to confirm that the information we have now is sensible.
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 required 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 shade 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, shade=colours[i]) # Utilizing T2M for temperature and smaller dots
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.title('Day by 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 required 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, shade=colours[i])
axes[i].set_title(f'Day by 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 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('Day by 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 rather a lot 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 area 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 a warmth wave right here in Toronto. By the sounds my AC made, I feel it almost broke. However in a temperature graph, you’ll want to look fairly rigorously to see that they’re rising. It’s because there may be seasonality and vital variability. Issues develop into clearer after we have a look at the yearly common. We name an anomaly the distinction between the common for a particular 12 months and the baseline. The baseline being the common temperature over 1981–2024, we will then see that the latest yearly common is considerably larger 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 dissatisfied by a easy linear regression. However that’s all it takes to indicate that temperatures are rising. But individuals don’t consider.
# 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.12 months
slope, intercept = np.polyfit(years, anomaly.values, 1)
development = slope * years + intercept
# 5) Plot
plt.determine(figsize=(10, 6))
plt.bar(years, anomaly, shade='lightgray', label='Annual Anomaly')
plt.plot(years, roll5, shade='C0', linewidth=2, label='5-yr Rolling Imply')
plt.plot(years, development, shade='C3', linestyle='--', linewidth=2,
label=f'Development: {slope:.3f}°C/yr')
plt.axhline(0, shade='ok', 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 12 months. That’s the most well liked desert on this planet. We will even examine each location we picked and see that not a single one has a destructive 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. Nonetheless, there are extra methods information may be utilized to handle local weather change in a scientific and mathematically grounded method. In the event 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 device optimizing tree planting
- Secure 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 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 by 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 information, displacing hundreds of thousands.
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 report 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 individuals to Suborbital House June 29 after climate delay. House. https://www.area.com/space-exploration/private-spaceflight/watch-blue-origin-launch-6-people-to-suborbital-space-on-june-21