IAG 2021 annual report visualisation

Peter Lin
4 min readMay 28, 2021

Overview IAG annual report

# Get data
data = pd.read_excel("IAGExcel.xlsx")
# History Revenue
fig,ax=plt.subplots()
sns.set()
ax=sns.barplot(y=data["Total revenue"],x=data["Year"],order=data.Year,palette="crest")
for x1,y1 in data.iterrows():
ax.text(x1,y1["Total revenue"],int(y1["Total revenue"]),ha="center")
plt.ylabel("Total revenue € million")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title("Total revenue")
plt.show()

Huge lose in 2020

Where the revenue came from

# 2019 revenue segments 
select_year=data[data["Year"]==2019]
year_num = np.array([int(select_year["Passenger revenue"].values),
int(select_year["Cargo revenue"].values),
int(select_year["Other revenue"].values)])
labels=["Passenger revenue","Cargo revenue","Other revenue"]
plt.pie(year_num,labels=labels,autopct='%1.1f%%',explode = [.1,0,0])
plt.title("2019 Revenue Segments Percentage")
plt.show()

Most of revenue came from passenger revenue

If the revenue came from passenger, passenger numbers should increase every year

Detail in revenue and operation profit

# Total revenue and operating profit  
sns.set()
RE=data[["Year","Total revenue","Operating profit"]]
x = np.arange(len(RE.Year))
width = 0.35
fig, ax = plt.subplots()
ax.bar(x - width/2, data["Total revenue"], width, label="Total revenue")
ax.bar(x + width/2, data["Operating profit"], width, label="Operating profit")
ax.set_ylabel("Total revenue € million")
ax.set_xticks(x)
ax.set_xticklabels(RE.Year)
for x1,y1 in enumerate(data["Total revenue"]):
plt.text(x1-0.2, y1+200, y1,ha='center',fontsize=10)
for x2,y2 in enumerate(data["Operating profit"]):
plt.text(x2+0.2,y2+200,y2,ha='center',fontsize=10)
ax.legend()
plt.title("Total Revenue and Operating Profit")
plt.show()

The revenue is increasing but the operating profit is steady

Where the most of cost came from

#2020 operation segments 
segments=["Employee costs","Fuel, oil costs and emissions charges", "Handling, catering and other operating costs",
"Landing fees and en-route charges", "Engineering and other aircraft costs", "Property, IT and other costs",
"Selling costs","Depreciation, amortisation and impairment", "Currency differences"]
cos= [3560, 3735, 1340,918, 1456, 782, 405, 2955,81]
plt.pie(cos,labels=segments,pctdistance = 0.7,
textprops = {"fontsize":10},autopct = "%1.1f%%",
explode = [.05,.05,0,0,0,0,0,0,0])
plt.title("2020 Expenditure On Operations Segments")
plt.show()

Most of cost came from employee costs and energy

Pilot is one of high paid jobs could be the reason.

Detail the Brent-crude price and IAG cost

# brent-crude-oil with IAG cost 
oil=pd.read_csv("brent-crude-oil-prices-10-year-daily-chart.csv")
oil_mea = oil.groupby("year")["Brent oil price"].mean().round(2).reset_index()
CORR =pd.DataFrame({"Fuel cost": data["Fuel oil costs"][1::],"Brent price": oil_mea["Brent oil price"][1::]})
fig, ax=plt.subplots()
ax=sns.lineplot(x=data.Year,y=data["Fuel oil costs"],marker="o",label="Fuel oil costs",color="r")
plt.legend(loc="center left")
plt.ylabel("Fuel oil costs € million")
ax2=ax.twinx()
ax2=sns.lineplot(x=oil_mea.year,y=oil_mea["Brent oil price"],marker="o",label="Brent oil price",color="g")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.legend(loc="upper left")
plt.title("10 years trend between Brent and IAG cost")
plt.show()

Detail in debt and current assets

# Adjusted debt and current assets 
NB = data.loc[3:]
fig, ax = plt.subplots()
plt.bar(NB.Year,NB["Current assets"],label="Current assets",color="tab:orange")
for x1,y1 in enumerate(NB["Current assets"]):
plt.text(x1+2014, y1, y1,ha='center',fontsize=10)
plt.plot(NB.Year,NB["Adjusted net debt"],label="Adjusted net deb",color ="tab:red",marker="o")
plt.plot(NB.Year,NB["Net_debt"],label="Net_debt",color ="tab:blue",marker="o")
plt.legend(loc="best")
plt.title("Current Assets and Net Debt")
plt.xlabel("Year")
plt.ylabel(" € Million")
plt.show()

High debt level in IAG, should common in airline industry

Is current ratio support it?

# Current ratio
sns.set()
dd = data["Current assets"]/data["Current liabilities"]
sns.lineplot(data.Year,dd,marker="o",label="Current ratio")
plt.title("Current Ratio Chart")
plt.ylabel("Current ratio")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.show()

Only 2016 and 2017 curent ratio over 1 that high level debts is nothing new

IS IAG a company make money?

# Return on assets
ROA = ((data["Net income"]/data["Total assets"])*100).round(2)
NIP = ((data["Net income"]/data["Total revenue"])*100).round(2)
ROA_data = pd.DataFrame({"Year":data.Year,"Return on assets":ROA,"Net income profit":NIP})
sns.set()
plt.plot(ROA_data.Year,ROA_data["Return on assets"],label="Return on assets",marker="o")
for x1,y1 in ROA_data.iterrows():
plt.text(x1+2011,y1["Return on assets"]+1.25,y1["Return on assets"],ha="center")
plt.legend()
plt.title("Return On Assets (ROA)")
plt.ylabel("Percentage %")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.show()

The highest is 10.33 in 2018, if not count 2020 the average is 4.255 and mid is 4.84

Detail in leverage percentage

# leverage percentage
leverage = ((data["Total liabilities"]/(data["Total liabilities"]+data["Total equity"]))*100).round(2)
plt.plot(data.Year,leverage,marker="o")
for x1,y1 in enumerate(leverage):
plt.text(x1+2011,y1*1.005,str(y1)+"%",ha="center")
plt.title("Leverage Percentage")
plt.ylabel("Percentage % ")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.show()

The leverage percentage is in high level and 2020 went to 95.65%. This could be a common situation in airline companies as the fleets are expensive.

Lots airline profit in cargo business units in 2020.

# Cargo revenue 
sns.set()
plt.plot(data.Year,data["Cargo revenue"],marker="o")
for x1,y1 in enumerate(data["Cargo revenue"]):
plt.text(x1+2011,y1*1.0025,y1,ha="center")
plt.ylabel("revenue € million ")
plt.title("Cargo Revenue")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.show()

In2020, IAG cargo revenue went to highest position in history

One of major figures to shown IAG could went through the crisis or not is cash.

# Cash and cash equivalents 
sns.lineplot(data.Year,data["Cash and cash equivalents"],marker="o")
for x1,y1 in data.iterrows():
plt.text(x1+2011,y1["Cash and cash equivalents"]*1.01,int(y1["Cash and cash equivalents"]),ha="center")
plt.title("Cash and Cash Equivalents")
plt.ylabel("Cash and cash equivalents € million")
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.show()

Cash position went to the highest point shown IAG have more barganinjing chips.

To sum up, airline company like IAG have high level of debts, operation coast on employees salary and energy fee, and leverage percentage, also the revenue influence by international energy price.

--

--