A Python-collected dataset of laptop listings turned into a Power BI dashboard comparing brand price ranges and budget segments across the Bangladesh market.

Comparing laptop pricing across brands and specs meant manually checking dozens of listings with no consistent view of budget segments.
A self-serve dashboard for comparing price ranges by brand and budget tier, cutting manual research from hours to minutes.
Comparing laptops across brands means untangling specs that are never formatted consistently — "8GB" vs "8 GB", "256GB SSD" vs "256GB Flash Storage" — before you can compare anything at all. This project is a good beginner-to-intermediate exercise precisely because most of the real work is in Python data cleaning, not the dashboard. You can build it with the public Laptop Price dataset on Kaggle, which mirrors real listing data closely enough that the cleaning steps below transfer directly to scraped data.
A typical row looks like this before cleaning:
| Company | Product | Ram | Memory | Price |
|---|---|---|---|---|
| Dell | Inspiron 3567 | 8GB | 256GB SSD | 158196.00 |
| HP | 250 G6 | 4GB | 500GB HDD | 71378.65 |
| Apple | MacBook Pro | 16GB | 512GB SSD | 4400.00 |
Memory mixes size and storage type in one string, and prices come in whatever currency the source used — both need parsing before anything downstream is trustworthy.
import pandas as pd
import re
df = pd.read_csv("laptop_data.csv")
# "8GB" -> 8
df["ram_gb"] = df["Ram"].str.replace("GB", "", regex=False).astype(int)
def parse_storage(mem: str) -> int | None:
match = re.search(r"(\d+)\s*(GB|TB)", mem)
if not match:
return None
size, unit = match.groups()
size = int(size)
return size * 1000 if unit == "TB" else size
df["storage_gb"] = df["Memory"].apply(parse_storage)
df["storage_type"] = df["Memory"].str.extract(r"(SSD|HDD|Flash Storage|Hybrid)")
# Adjust the multiplier to your target currency and current exchange rate
df["price_bdt"] = df["Price_euros"] * 127Run df.isna().sum() right after this step — a handful of unparsed storage_gb values almost always means the regex is missing a format your dataset uses, and it's much cheaper to catch that here than to notice a gap in the Power BI chart later.
Rather than hardcoding thresholds into the data itself, build the band as a measure so it's easy to adjust as prices change over time:
Avg Price by Brand = AVERAGE(Laptops[price_bdt])
Price Band =
SWITCH(
TRUE(),
Laptops[price_bdt] < 40000, "Budget",
Laptops[price_bdt] < 80000, "Mid-range",
Laptops[price_bdt] < 150000, "Premium",
"Flagship"
)
Laptops in Band =
CALCULATE(
COUNTROWS(Laptops),
Laptops[Price Band] = SELECTEDVALUE(Laptops[Price Band])
)Two pages carry the whole analysis:
Price Band measure and the two report pages.The strongest thing to point at here isn't the dashboard — it's the regex parsing step. Being able to explain why you extract storage type and size separately (so you can filter "256GB SSD" laptops without accidentally including "256GB HDD" ones) shows you understand the data quality problem, not just the charting tool.