import numpy as np
import pandas as pd
df = pd.read_csv('FAOSTAT_data_en_3-27-2023.csv')
# pivot so that the columns are the animal type (Item) and the rows are the values (Value)
livestock_counts_pivoted = df.pivot_table(columns='Item', values='Value', aggfunc=np.sum)
# now transpose so that we have the animal type and total population as columns
livestock_counts = livestock_counts_pivoted.transpose()
livestock_counts
| Value | |
|---|---|
| Item | |
| Asses | 55000366 |
| Bees | 111007736 |
| Buffalo | 230961965 |
| Camels | 39757450 |
| Cattle | 1589818026 |
| Chickens | 30424208 |
| Ducks | 1769953 |
| Geese | 680195 |
| Goats | 1244310660 |
| Horses | 61887544 |
| Mules and hinnies | 8351073 |
| Other camelids | 8631322 |
| Other rodents | 19177 |
| Rabbits and hares | 260205 |
| Sheep | 1470600904 |
| Swine / pigs | 1430216958 |
| Turkeys | 245751 |
# filter all animals with less than 50 million
low_pop_livestock = livestock_counts['Value'] < 50*1e6
high_pop_livestock = livestock_counts['Value'] >= 50*1e6
# add an other column for the low population animals
out = pd.concat([
livestock_counts[high_pop_livestock],
pd.DataFrame(
{'Value': livestock_counts[low_pop_livestock]['Value'].sum()},
index=['Other']
)
])
out
| Value | |
|---|---|
| Asses | 55000366 |
| Bees | 111007736 |
| Buffalo | 230961965 |
| Cattle | 1589818026 |
| Goats | 1244310660 |
| Horses | 61887544 |
| Sheep | 1470600904 |
| Swine / pigs | 1430216958 |
| Other | 90139334 |
# plot the data with a bar chart
out.plot(kind='bar', figsize=(16,8), title='Livestock Counts')
<AxesSubplot:title={'center':'Livestock Counts'}>
import matplotlib.pyplot as plt
# plot stacked bar plot
out.plot(kind='bar', stacked=True, figsize=(16,8), title='Livestock Counts')
<AxesSubplot:title={'center':'Livestock Counts'}>