The twentieth century was the most transformative hundred years in world history. States, empires, and kingdoms popped into and out of existence. The East and West pushed the globe within inches of mutually assured destruction. I could really just copy and paste the lyrics to Billy Joel's We Didn't Start the Fire to get the point across.
After World War II the United States and Soviet Union emerged as the sole superpowers consolidating territory with their own alliances, NATO and the Warsaw pact, respectively. NATO was created out of a necessity to contain Soviet expansion in Europe and other parts of the world. This conflict, more commonly known as the Cold War, saw the United States and the Soviet Union fight for control over dozens of countries in Europe, Asia, Africa, and even in the Americas. Proxy wars became a powerful tool - for example in Vietnam and Korea - where the U.S. and Soviet Union would incite conflict in other countries with the ultimate goal of expanding their influence usually through regime change. Regime change can occur with or without proxy war, but in the case of the Cold War it was typically a process of funding militant, separatist factions with the goal of toppling the government or triggering a coup.
I found an awesome dataset of arms transfers from 1950 all the way to 2014 with over twenty-four thousand observations, each including the buying and selling countries, the type of arms, the quantity, and the value. It's curated by SIPRI which has other very well-maintained datasets. The one I'm using here is the SIPRI Arms Transfer Database which has a really convenient trade register tool you can play around with if you want to explore the data. I was fortunate enough to stumble upon single a curl command that let me download the entire dataset. I've included this file in my github repository right here. My aim is to use this data set to explore, visualize, and showcase perhaps the greatest form of influence that superpowers took advantage of in the struggle between communism and liberal democracy: arms transfers.
The ultimate point of this, as the title suggests, is to evaluate Nicholas Spykman's Rimland Theory. Spykman was one of the father's of geopolitics who, in the early 20th century, challenged his predecessor's Heartland Theory. Heartland Theory, conceived by Halford Mackinder a bit prior to Spykman, argued that "Who controls eastern Europe rules the Heartland; Who controls the Heartland rules the World Island; and Who rules the World Island rules the World". Spykman countered: "Who controls the Rimland rules Eurasia; Who rules Eurasia controls the destinies of the world.” Looking at the image below helps make sense of these theories, and just to clarify, the World Island and Eurasia are are geographic equivalents in this case.
Taking a quick look at the image above reveals several facts you may already know. The Indo-Pacific, Middle East, a bit of North Africa, and Europe are all in the Rimland. These regions contain the vast majority of the world's people, the major centers of trade, and natural resources such as oil. This last one is the most important. The infographic below illustrates the flow of oil throughout the world, a commodity the global economy is completely dependent on. Notice how the majority of significant oil chokepoints - Strait of Hormuz, Strait of Malacca, Suez Canal - are in the Rimland. Control of the Rimland implies control of the most important resources and geographies in the world.
Given Spykman's hypothesis I want to show that the geopolitical stragies of NATO and the Warsaw Pact specifically implemented Rimland Theory in their sale of arms to foreign countries with the ultimate goal of gaining economic, military, and ideological authority over Rimland nations.
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import *
import seaborn as sns
plt.style.use('fivethirtyeight')
import warnings
warnings.filterwarnings('ignore')
!pip install plotly
import plotly.express as px
import plotly.graph_objects as go
arms = pd.read_csv("sipri-by-seller-1950-2014.csv")
#let's drop unnecessary stuff
arms = arms.drop(columns=['term','onai','coprod','nrdel','nrdelai','delyears','status','delivery_year','odai'])
arms.head()
We're left with 13 columuns, most of which are self explanatory. The last three starting with 'tiv' are based off of SIPRI's trend indicator value system. The SIPRI methodology explains how they measure this feature: "The TIV is based on the known unit production costs of a core set of weapons and is intended to represent the transfer of military resources rather than the financial value of the transfer. Weapons for which a production cost is not known are compared with core weapons based on: size and performance characteristics (weight, speed, range and payload); type of electronics, loading or unloading arrangements, engine, tracks or wheels, armament and materials." The TIV is in other words a proxy variable for the value of an arms deal. So in this table, the TIV variables mean:
arms.shape
I'm using plotly to visualize arms deals on a world map and this library takes a specific standard of country codes to match the data to the territory on the map. The SIPRI dataset's country codes do not exactly match the plotly requirements, so I had to make sure all countries were being included by separating the SIPRI data and another file of these country codes into separate sets to see which countries were missing. In addition to this the SIPRI dataset includes countries that no longer exist, terrorist organizations, and revolutionary factions, so I had to decide how I was going to include these.
#csv of iso codes
codes = pd.read_csv("https://raw.githubusercontent.com/lukes/ISO-3166-Countries-with-Regional-Codes/master/all/all.csv")
codes = codes.drop(codes[codes.name == 'Antarctica'].index)
a = codes['name'].unique()
b = set(arms['seller'].unique()).union(set(arms['buyer'].unique())) #union of buyers and sellers
c = list(set(a)&set(b))
print("Number of unique country names: " + str(len(a)))
print("Number of unique buyers and sellers: " + str(len(b)))
print("Number of matches (intersection) between both sets: " + str(len(c)))
leftover = b.difference(c)
print("Leftover country names that need to be changed: " + str(len(leftover)) + "\n\n")
print(leftover)
Tanzania, Macedonia, Moldova, Syria, Swaziland, Bosnia-Herzegovina, Iran, DR Congo, Micronesia, Cote d'Ivoire, Northern Cyprus, United Kingdom, North Korea, UAE, Palestine, United States, Bolivia, Cape Verde, Taiwan, South Korea,Russia,Venezuela,Laos .
Great, that's just about 20 countries - pretty manageable to do manually. In addition to this we have another problem. What do we do about countries like East Germany, Yugoslavia, Czechoslovakia, the Soviet Union, etc. that no longer exist? I've decided that for large countries like these I'd split them up into their individual constituents and map the values to all of them. So, for example, Yugoslavia would map to Serbia, Croatia, Bosnia, Macedonia, Montenegro, and Slovenia.
codes.head()
So what we want to do is change thename
column in the codes
dataframe so that it can match up with the buyer
and seller
columns in the arms
dataframe.
#transform
codes['country'] = codes['name'] #duplicate name column to make indexing easier
codes = codes.set_index("name") #setting name column as index
#europe
codes.at['Russian Federation', 'country'] = "Russia"
codes.at['Korea, Republic of','country'] = "South Korea"
codes.at['North Macedonia','country'] = "Macedonia"
codes.at['Bosnia and Herzegovina','country'] = "Bosnia-Herzegovina"
codes.at['United Kingdom of Great Britain and Northern Ireland','country'] = "United Kingdom"
codes.at['Moldova, Republic of','country'] = "Moldova"
#asia
codes.at['Syrian Arab Republic','country'] = "Syria"
codes.at['Korea (Democratic People\'s Republic of)','country'] = "North Korea"
codes.at['Syrian Arab Republic','country'] = "Syria"
codes.at['Taiwan, Province of China','country'] = "Taiwan"
codes.at['United Arab Emirates','country'] = "UAE"
codes.at['Palestine, State of','country'] = "Palestine"
codes.at['Lao People\'s Democratic Republic','country'] = "Laos"
codes.at['Iran (Islamic Republic of)','country'] = "Iran"
codes.at['Micronesia (Federated States of)','country'] = 'Micronesia'
codes.at['Cyprus','country'] = 'Northern Cyprus'
#americas
codes.at['United States of America','country'] = "United States"
codes.at['Venezuela (Bolivarian Republic of)','country'] = "Venezuela"
codes.at['Bolivia (Plurinational State of)','country'] = "Bolivia"
#africa
codes.at['Côte d\'Ivoire','country'] = 'Cote d\'Ivoire'
codes.at['Congo, Democratic Republic of the','country'] = 'DR Congo'
codes.at['Tanzania, United Republic of','country'] = 'Tanzania'
codes.at['Cabo Verde','country'] = 'Cape Verde'
codes = codes.set_index("country") #setting country column as index now with updates
"""
Given two years and a list of two countries, produces stacked bar charts of those two countries arms sales by category
relative to the rest of the world.
"""
def seller_bars(year1,year2,countries):
#countries = ["United States","Soviet Union","other"]
fig, ax = subplots(figsize=(20,10))
categories = ["AR", "AC", "AV", "MI", "EN", "SH", "OT", "AD", "GR", "NW", "SA"]
N = 11
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars: can also be len(x) sequence
sales = []
for i,country in enumerate(countries):
add = []
for i,c in enumerate(categories):
if country != "other":
add.append(arms.loc[(arms['category']==c) & (arms['order_year']>year1) & (arms['order_year']<year2) & (arms['seller']==country)].shape[0])
else:
add.append(arms.loc[(arms['category']==c) & (arms['order_year']>year1) & (arms['order_year']<year2) & (arms['seller']!=countries[0]) & (arms['seller']!=countries[2])].shape[0])
sales.append(add)
sales = np.array(sales)
p1 = plt.bar(ind, np.array(sales[0]),width, bottom=sales[1]+sales[2])
p2 = plt.bar(ind, np.array(sales[1]), width, bottom=sales[2])
p3 = plt.bar(ind, np.array(sales[2]), width)
plt.bar(ind, sales[0], width=0.6, label=countries[0], bottom=sales[1]+sales[2],color='blue')
plt.bar(ind, sales[1], width=0.6, label=countries[1],bottom=sales[2],color='red')
plt.bar(ind, sales[2], width=0.6, label='Other Countries',color='orange')
plt.ylabel('Scores')
plt.title('Arms sales by category ' + str(year1) + " - " + str(year2))
plt.xticks(ind, ('AR', 'AC', 'AV', 'MI', 'EN', 'SH', 'OT', 'AD', 'GR', 'NW', 'SA'))
plt.legend([p1[0], p2[0],p3[0]], (countries[0], countries[1],'Other Countries'))
plt.show()
"""
Given a dictionary where keys are country names, returns a dictionary of corresponding 3 letter country codes as keys.
"""
def encode(d):
coded = {}
for item in d.items():
try:
country = codes.loc[item[0],'alpha-3']
coded[country] = item[1]
except:
if item[0] == 'Yugoslavia':
coded[codes.loc["Serbia",'alpha-3']] = item[1]
coded[codes.loc["Croatia",'alpha-3']] = item[1]
coded[codes.loc["Macedonia",'alpha-3']] = item[1]
coded[codes.loc["Slovenia",'alpha-3']] = item[1]
coded[codes.loc["Montenegro",'alpha-3']] = item[1]
coded[codes.loc["Bosnia-Herzegovina",'alpha-3']] = item[1]
elif item[0] == 'Soviet Union':
coded[codes.loc["Russia",'alpha-3']] = item[1]
elif item[0] == 'Czechoslovakia':
coded[codes.loc["Czechia",'alpha-3']] = item[1]
coded[codes.loc["Slovakia",'alpha-3']] = item[1]
elif item[0] == "East Germany (GDR)":
coded[codes.loc["Germany",'alpha-3']] = item[1]
elif item[0] == "South Vietnam" or item[0] == "Viet Cong (South Vietnam)*":
coded[codes.loc["Viet Nam",'alpha-3']] = item[1]
else:
pass
return coded
"""
Given two years, produces choropleth of arms sales TIV with NATO countries as sellers throughout this period
"""
def nato_tiv(year1,year2):
nato = ["United States","Canada","France","Germany","United Kingdom","Italy","Netherlands","Denmark","Greece",
"Iceland","Norway","Sweden", "Portugal","Turkey"]
#appending observations where seller is a nato country
cw = pd.DataFrame()
for x in nato:
cw = cw.append(arms.loc[(arms.seller==x) & (arms.order_year > year1) & (arms.order_year < year2)])
#encoding country codes
buyers = dict()
for buyer in cw.buyer.unique():
tiv = cw.loc[cw.buyer==buyer]['tivdel'].sum()
buyers[buyer] = tiv
buyers_coded = encode(buyers)
type(buyers_coded)
#plotly visualization
fig = go.Figure(
data=go.Choropleth(
locations = list(buyers_coded.keys()),
z = list(buyers_coded.values()),
colorscale = 'matter',
autocolorscale=False,
reversescale=False,
marker_line_color='darkgray',
marker_line_width=0.5,
colorbar_title = 'TIV of Arms Transfers (MM)'
))
fig.update_layout(
title_text='Trend Indicator Value of NATO Biggest Arms Clients ' +str(year1+1) + " - " + str(year2-1),
geo=dict(
showframe=False,
showcoastlines=True,
projection_type='equirectangular'
)
)
fig.show()
"""
Given two years, produces choropleth of arms sales TIV with Warsaw countries as sellers throughout this period
"""
def warsaw_tiv(year1,year2):
warsaw = ["Soviet Union","Albania","Bulgaria","Romania","Hungary","Czechoslovakia","Poland","East Germany (GDR)"]
#appending observations where seller is a warsaw pact country
cw = pd.DataFrame()
for x in warsaw:
cw = cw.append(arms.loc[(arms.seller==x) & (arms.order_year > year1) & (arms.order_year < year2)])
#encoding country codes
buyers = dict()
for buyer in cw.buyer.unique():
tiv = cw.loc[cw.buyer==buyer]['tivdel'].sum()
buyers[buyer] = tiv
buyers_coded = encode(buyers)
type(buyers_coded)
#plotly visualization
fig = go.Figure(
data=go.Choropleth(
locations = list(buyers_coded.keys()),
z = list(buyers_coded.values()),
colorscale = 'matter',
autocolorscale=False,
reversescale=False,
marker_line_color='darkgray',
marker_line_width=0.5,
colorbar_title = 'TIV of Arms Transfers (MM)'
))
fig.update_layout(
title_text='Trend Indicator Value of Warsaw Pact Biggest Arms Clients ' +str(year1+1) + " - " + str(year2-1),
geo=dict(
showframe=False,
showcoastlines=True,
projection_type='equirectangular'
)
)
fig.show()
def map_deals(seller,every):
buyers_map = {}
if every:
buyers = arms.loc[(arms.order_year > 1949) & (arms.order_year < 1992)]
buyers_unique = buyers.buyer.unique()
for x in buyers_unique:
buyers_map[x] = buyers.loc[buyers.buyer==x].shape[0]
title = 'Arms Clients 1950-1991'
else:
buyers = arms.loc[(arms.seller==seller) & (arms.order_year > 1949) & (arms.order_year < 1992)]
buyers_unique = buyers.buyer.unique()
for x in buyers_unique:
buyers_map[x] = buyers.loc[buyers.buyer==x].shape[0]
title = seller + ' Arms Clients 1950-1991'
buyers_coded = encode(buyers_map)
fig = go.Figure(
data=go.Choropleth(
locations = list(buyers_coded.keys()),
z = list(buyers_coded.values()),
colorscale = 'matter',
autocolorscale=False,
reversescale=False,
marker_line_color='darkgray',
marker_line_width=0.5,
colorbar_title = 'Number of Deals '
))
fig.update_layout(
title_text=title,
geo=dict(
showframe=False,
showcoastlines=True,
projection_type='equirectangular'
)
)
fig.show()
def map_tiv(seller,every):
buyers_map = {}
if every:
buyers = arms.loc[(arms.order_year > 1949) & (arms.order_year < 1992)]
buyers_unique = buyers.buyer.unique()
for x in buyers_unique:
buyers_map[x] = buyers.loc[buyers.buyer==x].tivdel.sum()
title = 'Arms Clients 1950-1991'
else:
buyers = arms.loc[(arms.seller==seller) & (arms.order_year > 1949) & (arms.order_year < 1992)]
buyers_unique = buyers.buyer.unique()
for x in buyers_unique:
buyers_map[x] = buyers.loc[buyers.buyer==x].tivdel.sum()
title = seller + ' Arms Clients 1950-1991'
buyers_coded = encode(buyers_map)
fig = go.Figure(
data=go.Choropleth(
locations = list(buyers_coded.keys()),
z = list(buyers_coded.values()),
colorscale = 'matter',
autocolorscale=False,
reversescale=False,
marker_line_color='darkgray',
marker_line_width=0.5,
colorbar_title = 'Trend Indicator Value (MM)'
))
fig.update_layout(
title_text=title,
geo=dict(
showframe=False,
showcoastlines=True,
projection_type='equirectangular'
)
)
fig.show()
colors = ['blue','red','black','magenta','yellow','green','orange','purple','teal','grey','brown']
fig, ax = subplots(figsize=(20,10))
for i,x in enumerate(categories):
arms.loc[(arms['order_year']>1949) & (arms.category==x)]['order_year'].groupby(arms.order_year).agg('count').plot(kind='line',ax=ax,c=colors[i])
plt.suptitle('Arms Deals by Category', x=0.5, y=0.95, ha='center', fontsize='xx-large')
#fig.text(0.5, 0.04, ha='center')
fig.text(0.04, 0.5, 'Arms Deals', va='center', rotation='vertical')
ax.legend(["Artillery", "Aircraft", "Armoured Vehicles", "Missiles", "Engines", "Ships", "Other",
"Air Defence Systems", "Sensors/Radar", "Naval Weapons", "Satellites"])
Looking at this chart we see that aircraft were by far the most bought/sold military product in the second half of the twentieth century. However, since there are eleven categories, we don't really get a sense of proportion, so let's visualize each decade with a bar chart of these categories.
seller_bars(1950,1991,["United States","Soviet Union","other"])
Visualizing the deals by categories conveys the enormous extent of the United States' and Soviet Union's domination of the international arms trade
map_deals("",True)
This map simply shows arms transfer deals by country regardless of seller. We can clearly see that Rimland countries are the darkest shade in this map followed by South American and European countries.
map_tiv("",True)
It's a very similar story in this map as the previous, except that the Rimaland is even more distinct from the rest of the world. This map shades countries based on the TIV of arms deals rather than just the deals, so this one is even more representative of trade volumes.
We again see that the darkest shades are in Rimland countries, namely Japan, China, India, Iran, Iraq, Egypt, Turkey, and Poland.
Here I'm going to produce 8 maps to visualize and contextualize arms transfers from NATO and Warsaw Pact countries throughout the Cold War by decade to showcase where arms were flowing and why. I also include a brief summary of the decade after the maps to add context and showcase my point.
nato_tiv(1949,1960)
warsaw_tiv(1949,1960)
The 50s for the US and USSR, apart from the conflicts brieflty outlined below, were heavily focused on rebuilding from the devastation of WW2.
Marshall Plan and Germany: American assistance to rebuild, modernize, and enrich Western Europe, and primarily prevent the spread of Communism. Germany is the perfect example of this as American and Soviet money was pouring in to rebuild the ruins of the Third Reich and also compete against the opposing bloc through arms sales. Germany, until its reunification in 1989 was split into East and West Germany, creating one of the most violent and close-to-home geopolitical conflicts in the world. Germany, one of the most industrially powerful countries in the world was at the crux of the European containment effort.
Korean War: First proxy war between US and USSR where the Soviets backed China and North Korea and the US backed South Korea and started backing Japan and Taiwan. This was a critical conflict for both sides as it had the potential to either expand or shrink the influence of communism in one of the most critical regions of the Rimland, east Asia.
Suez Crisis: Israel, France, and the UK invade Egypt with goal of retaking the Suez Canal. The Suez, located in one of the most volatile regions of the Rimland, is the most important oil chokepoints linking the Mediterranean Sea to the Red Sea, Europe to the Middle East.
Coup in Iran: U.S. and U.K. backed coup which deposed the democratically elected prime minister of Iran and installed the Western friendly Shah as the primary source of political power. Iran's relations with the U.S. would of course become warmer after this.
nato_tiv(1959,1970)
warsaw_tiv(1959,1970)
This is the decade the Soviet Union truly became a world power rather than a regional one.
Vietnam War: Perhaps the greatest proxy war between the US and USSR where the Soviets funded communist insurgents in the North and America funded and notoriously fought alongside South Vietnam. Vietnam is a country of the South China Sea, basically the Carribean of the Indo-Pacific. Its massive coastline is a defining feature of its geography makes its stability critical in linking the Indian and Pacific oceans.
Six-Day War: War between Israel against Jordan, Syria, and Egypt. Zooming into the region you can see significant American arms sales to Israel and heavy Soviet sales to Egypt and Syria. Again, as mentioned, the Arab-Israeli conflict always had a great deal of geopolitical significance, but in some cases was more ideologically motivated.
Cuban Missile Crisis: Strategic sale of arms, primarily missiles, to Cuba with the goal of demoralizing/scaring the American administration and public. One of the most intense conflicts of the Cold War, where Soviet nukes were 90 miles away from U.S. mainland. Served as a great tactic to distract the U.S. from other internation conflicts.
Africa: 32 countries gain independence.
nato_tiv(1969,1980)
warsaw_tiv(1969,1980)
Following the end of the economic booms that came after WW2 many countries and regions experienced radical shocks to their economies with 1973 oil crisis causing stagflation in numerous developed countries.
Vietnam War: Continued until 1975.
Soviet-Afghan War: Another proxy war. Soviet Union invaded Afghanistan in 1979 to stage a coup. The US backed the Mujahideen (which Bin Laden was a part of at the time)
Libya: Gaddafi's socialist Libya, enriched by its recent independence and oil boom, bought massive amounts of arms from both NATO countries and the Soviet Union during the 70s. Libya was always a critical part of North Africa given its access to the Mediterranean, Sahara, and borders with Egypt, Tunisia, and Algeria.
Iranian Revolution: Iran was NATO's biggest client in this period, but that would change with the 1979 Iranian Revolution which transformed the country into a Muslim fundamentalist state, thus ending its almost thirty year relationship with the West. This would start the process of making Saudi Arabia America's greatest ally in the Middle East.
nato_tiv(1979,1992)
warsaw_tiv(1979,1992)
Reagan's hawkish foreign policy increased aggression on America's part in funding NATO members and other Soviet enemies as well as demanding changes from the Soviet Union. The Middle East was a particularly volatile region throughout the 80s as Islam's regional and global influence grew significantly and wars over oil rich regions proliferated. In Europe, the reunification of Germany, the fall of the Soviet Union, and the dissolution of Yugoslavia were cataclysmic geopolitical shifts that ultimately saw the West expand its influence through institutions such as NATO and the EU. Some former Warsaw Pact countries would in fact later become NATO members.
Iran-Iraq War: 8 year war between Iran and Iraq fought over a critical, oil rich Iranian region. One of the most significant contributors to the oil that passes through the Strait of Hormuz.
Soviet-Afghan War: Continued from previous decade and ended in 1989.
Fall of Soviet Union: The economic decay and eventual collapse of the Soviet Union in the early 90s can be seen in the second map as arms sales significantly drop off relative to the previous two decades. Funding to India and Iraq, however continues with strong figures. This was by far the most significant event of the decade and forever changed the face of geopolitics for both NATO and Russia. Former Soviet states and Warsaw Pact members such as Estonia, Latvia, Estonia, Romania, Bulgaria, Poland, Hungary, Czechia, and Slovakia eventually joined the EU and/or NATO, all but fulfilling the function of NATO.
Fall of Yugoslavia: The dissolution of Yugoslavia was another geopolitical crisis that gave the West a huge advantage over the Soviet Union and Russia. Croatia, Slovenia, and Montenegro joined soon after and plans are in place to accept Macedonia and Bosnia.
Fall of the Berlin Wall: The reunification of Germany was a lethal blow to the already crumbling Warsaw Pact as Europe was finally able to complete the accession of its soon to be economic powerhouse.
fig, ax = subplots(figsize=(20,10))
arms.loc[arms.seller=="United States"].groupby(arms.order_year).tivdel.sum().plot(kind='line',ax=ax)
arms.loc[arms.seller=="Soviet Union"].groupby(arms.order_year).tivdel.sum().plot(kind='line',ax=ax)
plt.suptitle('TIV of Arms Deals Throughout Cold War', x=0.5, y=0.95, ha='center', fontsize='xx-large')
#fig.text(0.5, 0.04, ha='center')
fig.text(0.03, 0.5, 'TIV (MM)', va='center', rotation='vertical')
ax.legend(["United States", "Soviet Union"])
The United States and Soviet Union, for the most part, were on equal par in terms of TIV of arms sales throughout the Cold War. So we can't really say that the U.S. just outspent the Russians. Rather, it was a matter of how they spent it.
usa_buy = {}
usa = arms.loc[(arms.seller=="United States")&(arms.order_year<1992)]
for buyer in usa.buyer.unique():
usa_buy[buyer] = usa.loc[arms.buyer==buyer].tivdel.sum()
usa_sorted = sorted(usa_buy.items(), key=lambda x: x[1], reverse=True)
ussr_buy = {}
ussr = arms.loc[(arms.seller=="Soviet Union")&(arms.order_year<1992)]
for buyer in ussr.buyer.unique():
ussr_buy[buyer] = ussr.loc[arms.buyer==buyer].tivdel.sum()
ussr_sorted = sorted(ussr_buy.items(), key=lambda x: x[1], reverse=True)
usa = pd.DataFrame(usa_sorted,columns=['country','tiv'])
usa.tiv.sum()
ussr = pd.DataFrame(ussr_sorted,columns=['country','tiv'])
ussr.tiv.sum()
We can see here the U.S. only spent about $3 billion more than the Soviet Union, certainly not enough to win a Cold War. However, if we look at who they really spent the money on, the picture becomes clearer.
usa.head(20)
Who, in 1945, would have thought that Japan and Germany would be our two biggest arms clients of the remainder of the century? We see that those two, in addition to South Korea, Israel, Iran, Turkey, Taiwan, Saudi Arabia, Egypt, Greece, Vietnam, and other Western allies were the United State's biggest clients over the Cold War. These are all countries located in geopolitically critical territories that have and will continue to hold massive influence over the flow of trade, money, and information.
ussr.head(20)
The only geopolitically consequential countries in this list are India, Iraq, Syria, China, East Germany, Egypt, North Korea, Viet Nam, Yugoslavia, and Cuba. Out of all of these countries, Egypt, Libya, and Iraq are the only countries with significant oil reserves. Other than that, Egypt is the only country with a critical oil chokepoint (Suez Canal) and the rest were either in the Soviet's regional sphere of influence or Africa.
We see from the decade maps that NATO countries invested significantly more aggresively in Rimland countries relative to their Soviet counterparts. This was especially true for Middle Eastern countries such as Egypt, Iraq, and Iran as well as Indo-Pacific ones such as India, Japan, and South Korea. Campaigns in Africa and the Americas were useful to both Blocs in distracting or diverting the other from the Rimland. However, it was NATO’s powerful influence in the Middle East and the Indo-Pacific that not only maintained and increased the economic advantage that eventually triggered the dissolution of the Soviet Union, but gave the West a head-start in 21st century Asia versus the rest of the world.