Impact of the 2023 Argentina Drought on Soybean Crops
Case Study

Impact of the 2023 Argentina Drought on Soybean Crops

Leveraging Streambatch's API, we analyzed the impact of the 2023 Argentina drought on soybean crops by tracking changes in NDVI values over time.

Introduction

Argentina, a major global producer of soybeans, faced a severe drought in 2023 that threatened agricultural production and affected the livelihoods of farmers across the country. The drought's impact on soybean crops raised concerns about food security and economic stability. To understand the extent of the impact, we turned to satellite-based remote sensing data.

Question

The key question guiding this case study was: how were soybean crops across Argentina impacted by the 2023 drought compared to the historical baseline?

Extracting Random Locations from the Argentina GeoTIFF

We began by using a GeoTIFF crop map from Argentina's National Institute of Agricultural Technology (INTA) website. This map provided information on land cover and crop types across Argentina.

To perform our analysis, we extracted a random sample of locations from the GeoTIFF map where soybeans were grown. These locations, represented by latitude and longitude coordinates, served as the basis for our subsequent data query.


argentina = rasterio.open('MNC_verano2022.tif')

# get band
band = argentina.read(1)


# filter band for value of interest
filtered_band = np.where(band == 11) # soybeans


#select number of random points
sample_indices = np.random.choice(len(filtered_band[0]), size=1000, replace=False) # randomly choose 10 indices
sample_latitudes, sample_longitudes = arg.xy(filtered_band[0][sample_indices], filtered_band[1][sample_indices])


# create a dictionary with latitudes and longitudes
data = {'lat': sample_latitudes,
       'lon': sample_longitudes}

# create a DataFrame from the dictionary
df = pd.DataFrame(data)


# prepare points for query
points = np.vstack([df.lat.values, df.lon.values]).T.tolist()

Soybean Farm Locations

First we did a sanity check by plotting the locations we used in the query:


# create figure
fig = plt.figure(figsize=(5,8), facecolor='none', dpi=96)
ax = fig.add_subplot(111, projection=ccrs.Mercator())
ax.set_extent([-75.92012, -47.50920, -39.83511, -21.25095], ccrs.PlateCarree()) # set extent for argentina


# add cartopy features
ax.add_feature(cf.LAND.with_scale('10m'), facecolor='#F5F5F3', edgecolor='none', linewidth=1, zorder=1)
ax.add_feature(cf.OCEAN.with_scale('10m'), facecolor='#CAD2D3', edgecolor='none', linewidth=1, zorder=1)
ax.add_feature(cf.BORDERS.with_scale('10m'), facecolor='none', edgecolor='#A2A2A2', linewidth=0.6, zorder=1)


# plot the soybean farm locations
ax.scatter(df['lon'], df['lat'], s=5, transform=ccrs.Geodetic(), zorder=2, edgecolor='#ffffff', linewidth=0.25)


# add a title
plt.title('1000 Soybean Farms in Argentina')

Querying Data from Streambatch

With the locations in hand, we used the Streambatch API to query satellite-derived NDVI (Normalized Difference Vegetation Index) data for each location. NDVI is a widely used vegetation index that provides insights into the health and growth of vegetation. The query structure for the Streambatch API was as follows:


ndvi_request = {
   'variable': ['ndvi.streambatch'],
   'space': points,
   'time': {
       'start':'2019-01-01',
       'end':'2023-03-31',
   }
}


# Make the request to the API
response = requests.post('streambatch.io/async', json=ndvi_request, headers=api_header)


# Parse the response to get the access URL for the result data
result_data = json.loads(response.content)
access_url = result_data.get('access_url')

The query retrieved NDVI values over a specified time range (`start` and `end`) for the given locations (`space`). We obtained NDVI values for the years 2019 to 2023.


# Read the data from the access URL into a pandas DataFrame
df = pd.read_parquet(access_url, storage_options={"anon": True})

Analysis

After obtaining the NDVI data, we conducted our main analysis: 

We compared the peak NDVI value for 2023 with the historical baseline, which we defined as the average of peak NDVI values from previous years (2019-2022).

Impact Compared to Historical Baseline

We compared the peak NDVI value for 2023 with the historical baseline, which we defined as the average of peak NDVI values from previous years.


# Set the 'time' column as the index of the DataFrame
df.set_index('time', inplace=True)


# Calculate the average NDVI across all locations for each time point
mean_ndvi_over_time = df.groupby('time')['ndvi.sentinel2'].mean()


# Group the data by year and calculate the peak (maximum) NDVI value for each year
peak_ndvi_by_year = mean_ndvi_over_time.groupby(mean_ndvi_over_time.index.year).max()


# Calculate the historical baseline (average of peak NDVI values before 2023)
historical_baseline = peak_ndvi_by_year.loc[:2022].mean()


# Find the peak NDVI value for 2023
peak_ndvi_2023 = peak_ndvi_by_year.loc[2023]


# Calculate the impact compared to the historical baseline
impact_vs_baseline = peak_ndvi_2023 - historical_baseline

Visualize the NDVI time-series for all of the points

Here we plotted a simple time-series of the data:


# create figure
fig, ax = plt.subplots(figsize=(8,5),dpi=300)

# plot the ndvi data
plt.plot(mean_ndvi_over_time.index, mean_ndvi_over_time['ndvi.sentinel2'])


# set the title and axis labels
plt.title("NDVI 2019-2023")
plt.ylabel("NDVI")

Then we visualized the peak NDVI values for each year, highlighting the impact of the drought in 2023:


#create plot
fig, ax = plt.subplots(figsize=(8,5),dpi=96)


# plot bar chart
peak_ndvi_by_year.plot(kind='bar')


# set the title and axis labels
plt.title('Peak NDVI Values by Year')
plt.ylabel('Peak NDVI')


# add historical baseline
ax.axhline(y=historical_baseline, linestyle='--', label='Historical Baseline', color='red')

In the bar plot, the historical baseline is represented as a red dashed line. The lower peak NDVI value for 2023, as compared to the historical baseline, indicates the adverse impact of the drought on soybean crops. 

Calculating Percent Change

In order to assess the magnitude of the change in 2023, we compared the % change from 2023 vs the historical baseline:


2023_vs_historical_baseline=((peak_ndvi_by_year.loc[2023]-historical_baseline)/historical_baseline)*100

We found a -25.1% difference between the 2023 NDVI and the historical baseline.

Results & Conclusion

The analysis revealed a significant decline in peak NDVI values for soybean crops in 2023 compared to both the historical baseline and the previous year. The lower NDVI values indicated adverse effects on soybean crops, likely due to reduced soil moisture and water availability during the drought.

The 2023 Argentina drought had a substantial impact on soybean crops, as evidenced by the decline in NDVI values. Satellite-based remote sensing data, such as NDVI, provide valuable tools for monitoring and assessing agricultural conditions. Addressing the challenges posed by drought requires the development of sustainable agricultural practices, water management strategies, and climate resilience initiatives.

Related Posts

Ready?

The data is.

Don't spend valuable resources doing research and image processing. We've done that for you.

Get the power of daily, high resolution NDVI data with the industry's best API. And then get to work on actual analysis.

Start Now