Financial Statement Analysis

This project analysed five years of company financial data (2018โ€“2022), including Balance Sheet, Income Statement, and Cash Flow Statement. I used Python and pandas to calculate key financial ratios, identify operational trends, and visualise multi-year performance.

๐Ÿ’ป Tech Stack:

๐Ÿงช Data Pipeline:

๐Ÿ“Š Code Snippets & Visualisations:

# Load required libraries for visualizations
library(ggplot2)
library(tidyverse)

# Data
revenue <- c(14574.49, 7606.46, 8611.41, 9175.41, 8058.65, 8105.44, 
             11496.28, 9766.09, 10305.32, 14379.96, 10713.97, 15433.50)

expenses <- c(12051.82, 5695.07, 12319.20, 12089.72, 8658.57, 840.20, 
              3285.73, 5821.12, 6976.93, 16618.61, 10054.37, 3803.96)

# Calculate Profit As The Difference Between Revenue And Expenses
profit <- revenue - expenses
profit

# Calculate Tax As 30% Of Profit And Round To 2 Decimal Places
tax <- round(0.30 * profit, 2)
tax

# Calculate Profit Remaining After Tax Is Deducted
profit.after.tax <- profit - tax
profit.after.tax

# Visualize Profit After Tax
# Create a data frame for visualization
data <- data.frame(
    Month = 1:12,
    Profit_After_Tax = profit.after.tax
)

# Create the bar chart using ggplot2 (Figure 1)
ggplot(data, aes(x = factor(Month), y = Profit_After_Tax)) +
    geom_bar(stat = "identity", fill = "steelblue") +
    labs(title = "Monthly Profit After Tax", x = "Month", y = "Profit After Tax") +
    theme_minimal()

# Calculate The Profit Margin As Profit After Tax Over Revenue
profit.margin <- round(profit.after.tax / revenue, 2) * 100
profit.margin

# Visualize Profit Margin
# Create a data frame for visualization
data <- data.frame(
    Month = 1:12,
    Profit_Margin = profit.margin
)

# Create the bar chart using ggplot2 (Figure 2)
ggplot(data, aes(x = factor(Month), y = Profit_Margin)) +
    geom_bar(stat = "identity", fill = "orange") +
    labs(title = "Monthly Profit Margin (%)", x = "Month", y = "Profit Margin (%)") +
    theme_minimal()

# Calculate The Mean Profit After Tax For The 12 Months
mean_pat <- mean(profit.after.tax)
mean_pat

# Find The Months With Above-Mean Profit After Tax
good.months <- profit.after.tax > mean_pat
good.months

# Bad Months Are The Opposite Of Good Months
bad.months <- !good.months
bad.months

# The Best Month Is The Month With The Highest Profit After Tax
best.month <- profit.after.tax == max(profit.after.tax)
best.month

# The Worst Month Is The Month With The Lowest Profit After Tax
worst.month <- profit.after.tax == min(profit.after.tax)
worst.month

						

๐ŸŒŸ Key Insights:

The company showed stable asset growth and rising equity, but the Debt-to-Equity ratio increased post-2020, signalling higher leverage risk. Operating cash flow was consistently positive, suggesting sufficient liquidity to meet short-term obligations โ€” a green flag for operational health.

๐Ÿง—๐Ÿพ Challenge Faced:

Initially, aligning the financial statements by year was inconsistent due to mixed string/index formats across categories. I overcame this by explicitly extracting year-based columns and standardising label references. This made ratio computations and cross-statement comparisons reliable and reproducible.

View on GitHub

โ† Back to Projects