fork download
  1. import random
  2.  
  3. # ==========================================
  4. # 1. GENERATE SYNTHETIC DATA
  5. # ==========================================
  6. random.seed(42)
  7. regions = ['North', 'South', 'East', 'West']
  8. data = []
  9.  
  10. # Generate 200 records
  11. for _ in range(200):
  12. region = random.choice(regions)
  13. age = int(random.normalvariate(35, 10))
  14. ad_spend = random.uniform(1000, 5000)
  15. # Calculate revenue with some added noise
  16. revenue = (ad_spend * 2.5) + (age * 15) + random.normalvariate(0, 1500)
  17.  
  18. data.append({'Region': region, 'Age': age, 'Revenue': revenue})
  19.  
  20. # ==========================================
  21. # 2. ASCII VISUALIZATIONS
  22. # ==========================================
  23. MAX_BAR_LENGTH = 40
  24.  
  25. print("--- ASCII BAR CHART: AVERAGE REVENUE BY REGION ---\n")
  26. # Calculate averages
  27. region_rev = {r: [] for r in regions}
  28. for row in data:
  29. region_rev[row['Region']].append(row['Revenue'])
  30.  
  31. avg_rev = {r: sum(revs)/len(revs) for r, revs in region_rev.items()}
  32. max_rev = max(avg_rev.values())
  33.  
  34. # Draw Bar Chart
  35. for region, rev in avg_rev.items():
  36. bar_length = int((rev / max_rev) * MAX_BAR_LENGTH)
  37. bar = '█' * bar_length
  38. print("{:<5} | {} (${:,.2f})".format(region, bar, rev))
  39.  
  40. print("\n\n--- ASCII HISTOGRAM: CUSTOMER AGE DISTRIBUTION ---\n")
  41. # Group ages into 10-year bins
  42. bins = {'10-19': 0, '20-29': 0, '30-39': 0, '40-49': 0, '50-59': 0, '60+': 0}
  43.  
  44. for row in data:
  45. age = row['Age']
  46. if 10 <= age < 20: bins['10-19'] += 1
  47. elif 20 <= age < 30: bins['20-29'] += 1
  48. elif 30 <= age < 40: bins['30-39'] += 1
  49. elif 40 <= age < 50: bins['40-49'] += 1
  50. elif 50 <= age < 60: bins['50-59'] += 1
  51. elif age >= 60: bins['60+'] += 1
  52.  
  53. max_count = max(bins.values())
  54.  
  55. # Draw Histogram
  56. for label, count in bins.items():
  57. if max_count > 0:
  58. bar_length = int((count / float(max_count)) * MAX_BAR_LENGTH)
  59. else:
  60. bar_length = 0
  61. bar = '█' * bar_length
  62. print("{:<5} | {} ({})".format(label, bar, count))
Success #stdin #stdout 0.09s 14124KB
stdin
Standard input is empty
stdout
--- ASCII BAR CHART: AVERAGE REVENUE BY REGION ---

North | ████████████████████████████████████████ ($8,742.49)
South | ███████████████████████████████████████ ($8,675.05)
East  | ████████████████████████████████████ ($7,950.39)
West  | █████████████████████████████████████ ($8,128.34)


--- ASCII HISTOGRAM: CUSTOMER AGE DISTRIBUTION ---

10-19 | █████ (9)
20-29 | ██████████████████████████████ (53)
30-39 | ████████████████████████████████████████ (69)
40-49 | ████████████████████████████ (49)
50-59 | ████████ (15)
60+   | ██ (4)