Expense

Mon 30 June 2025
# Import libraries
import pandas as pd
import matplotlib.pyplot as plt
# Define expense data
data = [
    {"Date": "2025-06-01", "Category": "Food", "Amount": 250},
    {"Date": "2025-06-03", "Category": "Transport", "Amount": 80},
    {"Date": "2025-06-05", "Category": "Rent", "Amount": 5000},
    {"Date": "2025-06-10", "Category": "Food", "Amount": 300},
    {"Date": "2025-06-15", "Category": "Shopping", "Amount": 1200},
    {"Date": "2025-06-20", "Category": "Entertainment", "Amount": 600},
    {"Date": "2025-06-25", "Category": "Food", "Amount": 280},
]
# Create DataFrame
df = pd.DataFrame(data)
df
Date Category Amount
0 2025-06-01 Food 250
1 2025-06-03 Transport 80
2 2025-06-05 Rent 5000
3 2025-06-10 Food 300
4 2025-06-15 Shopping 1200
5 2025-06-20 Entertainment 600
6 2025-06-25 Food 280
# Total expenses
df["Amount"].sum()
np.int64(7710)
# Total by category
df.groupby("Category")["Amount"].sum()
Category
Entertainment     600
Food              830
Rent             5000
Shopping         1200
Transport          80
Name: Amount, dtype: int64
# Add weekday
df["Date"] = pd.to_datetime(df["Date"])
df["Weekday"] = df["Date"].dt.day_name()
df
Date Category Amount Weekday
0 2025-06-01 Food 250 Sunday
1 2025-06-03 Transport 80 Tuesday
2 2025-06-05 Rent 5000 Thursday
3 2025-06-10 Food 300 Tuesday
4 2025-06-15 Shopping 1200 Sunday
5 2025-06-20 Entertainment 600 Friday
6 2025-06-25 Food 280 Wednesday
# Expenses by weekday
df.groupby("Weekday")["Amount"].sum().sort_values()
Weekday
Wednesday     280
Tuesday       380
Friday        600
Sunday       1450
Thursday     5000
Name: Amount, dtype: int64
# Pie chart by category
df.groupby("Category")["Amount"].sum().plot.pie(autopct="%1.1f%%", figsize=(6,6))
plt.title("Expense Distribution")
plt.ylabel("")
plt.show()

png

# Daily trend line
df.groupby("Date")["Amount"].sum().plot(marker="o")
plt.title("Daily Expense Trend")
plt.xticks(rotation=45)
plt.grid(True)
plt.show()

png

# Highest spending day
df[df["Amount"] == df["Amount"].max()]
Date Category Amount Weekday
2 2025-06-05 Rent 5000 Thursday
# Add comments
df["Comment"] = df["Amount"].apply(lambda x: "Too much!" if x > 1000 else "Okay")
df
Date Category Amount Weekday Comment
0 2025-06-01 Food 250 Sunday Okay
1 2025-06-03 Transport 80 Tuesday Okay
2 2025-06-05 Rent 5000 Thursday Too much!
3 2025-06-10 Food 300 Tuesday Okay
4 2025-06-15 Shopping 1200 Sunday Too much!
5 2025-06-20 Entertainment 600 Friday Okay
6 2025-06-25 Food 280 Wednesday Okay
# Save report
df.to_csv("expenses_report.csv", index=False)


Score: 10

Category: basics