randgen.py (3443B)
1 import json 2 import sys 3 import random 4 import urllib.request 5 import time 6 7 WORDS = [l.strip() for l in open("./words.txt").readlines()] 8 9 def cities(): 10 states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 11 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 12 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 13 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 14 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 15 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 16 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 17 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 18 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 19 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'] 20 regions = ["South", "West", "Southwest", "North", "East", "Northeast", 21 "Middle", "Midwest", "Mideast", "Nowhere"] 22 23 data = [] 24 for i in range(10000): 25 name1 = random.choice(WORDS).capitalize() 26 name2 = random.choice(WORDS).capitalize() 27 data.append({"state": random.choice(states), 28 "region": random.choice(regions), 29 "name": f"{name1} {name2}", 30 "pop": random.randint(1000000, 1000000000), 31 "pop_male": random.randint(10000, 1000000), 32 "pop_female": random.randint(10000, 1000000)}) 33 34 f = open("./cities.json", "w") 35 f.write(json.dumps(data)) 36 f.close() 37 38 class Customer: 39 def __init__(self): 40 self.past_actions = [] 41 self.name = f"{random.choice(WORDS).capitalize()} Corp." 42 self.headcount = random.randint(10, 100000) 43 44 def next(self): 45 self.headcount = random.randint(10, 100000) 46 if self.past_actions == []: 47 self.past_actions.append("new") 48 return "new" 49 possible = [] 50 if "new" in self.past_actions: 51 if "buy" not in self.past_actions: 52 self.past_actions.append("buy") 53 return "buy" 54 if "buy" in self.past_actions: 55 if "return" not in self.past_actions: 56 action = ["return", "complain"] 57 self.past_actions.append(random.choice()) 58 else: 59 self.past_actions.append("leave") 60 return self.past_actions[-1] 61 62 def customers(seq=True): 63 data = [] 64 actions = ["buy", "new", "return", "complain", "leave"] 65 users = [Customer() for i in range(100)] 66 t = int(time.time()) 67 for i in range(1000): 68 t += random.randint(600, 604800 * 3) 69 user = random.choice(users) 70 entry = {} 71 if not seq: 72 entry["time"] = t 73 entry.update({ "action": user.next(), 74 "name": user.name, 75 "headcount": user.headcount }) 76 data.append(entry) 77 if data[-1]["action"] == "leave": 78 users.remove(user) 79 users.append(Customer()) 80 81 f = open(f"./{'seq' if seq else ''}users.json", "w") 82 f.write(json.dumps(data)) 83 f.close() 84 85 if len(sys.argv) < 2: 86 print("usage: randgen.py [cities/sequsers/users]") 87 elif sys.argv[1] == "cities": 88 cities() 89 elif sys.argv[1] == "sequsers": 90 customers() 91 elif sys.argv[1] == "users": 92 customers(seq=False)