import random
# ==========================================
# 1. GENERATE SYNTHETIC DATA
# ==========================================
random.seed(42)
regions = ['North', 'South', 'East', 'West']
data = []
# Generate 200 records
for _ in range(200):
region = random.choice(regions)
age = int(random.normalvariate(35, 10))
ad_spend = random.uniform(1000, 5000)
# Calculate revenue with some added noise
revenue = (ad_spend * 2.5) + (age * 15) + random.normalvariate(0, 1500)
data.append({'Region': region, 'Age': age, 'Revenue': revenue})
# ==========================================
# 2. ASCII VISUALIZATIONS
# ==========================================
MAX_BAR_LENGTH = 40
print("--- ASCII BAR CHART: AVERAGE REVENUE BY REGION ---\n")
# Calculate averages
region_rev = {r: [] for r in regions}
for row in data:
region_rev[row['Region']].append(row['Revenue'])
avg_rev = {r: sum(revs)/len(revs) for r, revs in region_rev.items()}
max_rev = max(avg_rev.values())
# Draw Bar Chart
for region, rev in avg_rev.items():
bar_length = int((rev / max_rev) * MAX_BAR_LENGTH)
bar = '█' * bar_length
print("{:<5} | {} (${:,.2f})".format(region, bar, rev))
print("\n\n--- ASCII HISTOGRAM: CUSTOMER AGE DISTRIBUTION ---\n")
# Group ages into 10-year bins
bins = {'10-19': 0, '20-29': 0, '30-39': 0, '40-49': 0, '50-59': 0, '60+': 0}
for row in data:
age = row['Age']
if 10 <= age < 20: bins['10-19'] += 1
elif 20 <= age < 30: bins['20-29'] += 1
elif 30 <= age < 40: bins['30-39'] += 1
elif 40 <= age < 50: bins['40-49'] += 1
elif 50 <= age < 60: bins['50-59'] += 1
elif age >= 60: bins['60+'] += 1
max_count = max(bins.values())
# Draw Histogram
for label, count in bins.items():
if max_count > 0:
bar_length = int((count / float(max_count)) * MAX_BAR_LENGTH)
else:
bar_length = 0
bar = '█' * bar_length
print("{:<5} | {} ({})".format(label, bar, count))