文章目录
概要
openAI 的 GPT 大模型的发展历程。
1、案例需求
模拟生成新能源车辆数据
编写一个程序,每天凌晨3点模拟生成当天的新能源车辆数据(字段信息必须包含:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等)。
要求:
1、最终部署时,要将这些数据写到第一题的HDFS中。(如果有多个组做第一题,则任选一个HDFS即可);
2、车辆数据要按天存储,数据格式是JSON格式,另外如果数据文件大于100M,则另起一个文件存。每天的数据总量不少于300M。比如假设程序是2023-01-1 03点运行,那么就将当前模拟生成的数据写入到HDFS的/can_data/2023-01-01文件夹的can-2023-01-01.json文件中,写满100M,则继续写到can-2023-01-01.json.2文件中,依次类推;
3、每天模拟生成的车辆数据中,必须至少包含20辆车的数据,即要含有20个车架号(一个车架号表示一辆车,用字符串表示);
4、每天生成的数据中要有少量(20条左右)重复数据(所有字段都相同的两条数据则认为是重复数据),且同一辆车的两条数据的数据生成时间间隔两秒;
5、每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的)。
生成数据可看模拟生成新能源车辆数据,
链接: 模拟生成新能源车辆数据
本次博客主要讲解如果在Linux每天凌晨3点定时启动运行程序。
下面是模拟新能源汽车数据的源码:
// 模拟生成新能源汽车数据
import random
import datetime
import json
def get_vin(number: int) -> list:
"""
用来生成指定数量的车架号
param:number 生成多少量车的数据
return: 返回一个列表
"""
vin_set = set() # 创建一个空集合
for i in range(number):
vin = ''.join(random.choices(
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', k=17)) # 车架号
if vin not in vin_set:
vin_set.add(vin)
return list(vin_set)
class GenerationData:
def __init__(self, vin):
self.vin = vin
self.mileage = round(random.uniform(200, 50000), 2) # 行驶总里程
# 随机初始化电量
self.soc = round(random.uniform(10, 100), 2) # 剩余电量SOC
# 需要混入少量前几天的数据(让其在今天和前几天中选择,但被选中的几率极低)
self.now_day = random.choices([(datetime.datetime.now() - datetime.timedelta(days=random.randint(1, 3))),
datetime.datetime.now()], weights=[0.05, 0.95])[0]
# 随机选取司机用车时间(或充电的时间)
self.use_car_time = \
random.choices([self.get_random_date(0, 23), self.get_random_date(8, 11), self.get_random_date(16, 22)],
weights=[0.2, 0.4, 0.4])[0] # 模拟这个时间段用车的人较多
# 低点预警
self.soc_low_alarm = '电量正常' if self.soc >= 30 else '电量低于30%'
# 用于保证数据为当天的数据
self.time_compare = datetime.datetime.combine(self.now_day.date(), datetime.time(23, 59, 50))
@staticmethod
def get_random_speed():
"""
用来随机获取车速
"""
speed1 = random.randint(0, 60)
speed2 = random.randint(61, 90)
speed3 = random.randint(91, 120)
speed = random.choices([speed1, speed2, speed3], weights=[0.6, 0.3, 0.1])[0]
return speed
def get_random_date(self, start: int, end: int):
"""
用来生成当天的随机时间
param:start 起始时间(小时)
param:end 结束时间(小时)
return: 当天的随机时间
"""
# 生成随机的小时数、分钟数和秒数,并构造时间对象
random_time = datetime.time(random.randint(
start, end), random.randint(0, 59), random.randint