Links

Consumer price indice

Tags: #fao #opendata #food #analytics #plotly
Author: Dereck DANIEL
Food Balance Sheet presents a comprehensive picture of the pattern of a country's food supply during a specified reference period. The food balance sheet shows for each food item - i.e. each primary commodity and a number of processed commodities potentially available for human consumption - the sources of supply and its utilization. The total quantity of foodstuffs produced in a country added to the total quantity imported and adjusted to any change in stocks that may have occurred since the beginning of the reference period gives the supply available during that period. On the utilization side a distinction is made between the quantities exported, fed to livestock, used for seed, put to manufacture for food use and non-food uses, losses during storage and transportation, and food supplies available for human consumption. The per caput supply of each such food item available for human consumption is then obtained by dividing the respective quantity by the related data on the population actually partaking of it. Data on per caput food supplies are expressed in terms of quantity and - by applying appropriate food composition factors for all primary and processed products - also in terms of caloric value and protein and fat content. Source: http://www.fao.org/faostat/en/?#data/FBS

Input

Import librairies

import requests, zipfile, io
import matplotlib.pyplot as plt
import naas_drivers
import pandas as pd
import plotly.express as px
import csv
import codecs
import plotly.graph_objects as go

Set the variables

filename = "ConsumerPriceIndices_E_All_Data_(Normalized).csv"
zip_file_url = "http://fenixservices.fao.org/faostat/static/bulkdownloads/ConsumerPriceIndices_E_All_Data_(Normalized).zip"

Get the data

r = requests.get(zip_file_url, stream=True)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
df = pd.read_csv(filename, encoding='latin-1')
df.to_csv(filename, index=False)
df = pd.read_csv(filename)
df.head()

Model

Sort the data

df = df[df['Item Code'] == 23013]
df = df[df.Year == 2020]
dfmax10 = df.groupby(['Area', 'Year']).mean().reset_index().sort_values('Value', ascending=False).reset_index()
dfmin10 = df.groupby(['Area', 'Year']).mean().reset_index().sort_values('Value', ascending=True).reset_index()

Output

Display the plot of the Top 10 of the biggest evolution in 2020

dfmax10y = dfmax10['Area'].head(10).iloc[::-1]
dfmax10x = dfmax10['Value'].head(10).iloc[::-1]
fig = go.Figure(go.Bar(
x=dfmax10x,
y=dfmax10y,
orientation='h'))
fig.update_xaxes(type="log")
fig.update_layout(title_text='Top 10 of the biggest evolution in 2020')
fig.show()

Display the plot of the Top 10 of the worst evolution in 2020

dfmin10y = dfmin10['Area'].head(10).iloc[::-1]
dfmin10x = dfmin10['Value'].head(10).iloc[::-1]
fig = go.Figure(go.Bar(
x=dfmin10x,
y=dfmin10y,
orientation='h'))
fig.update_layout(title_text='Top 10 of the worst evolution in 2020')
fig.show()
Last modified 1mo ago