如何基于高斯分布(Gauss Law)生成DataFrame的日期列?
生成符合高斯分布日期的停车数据DataFrame
要生成服从高斯分布的日期列,核心思路是基于一个中心时间戳(均值),生成正态分布的时间偏移量,再转换为日期格式。以下是修改后的完整代码,替换了原代码中普通随机日期的生成逻辑:
import pandas as pd from faker import Faker import random from datetime import datetime # 初始化Faker fake = Faker('zh_CN') # 1. 定义高斯分布的中心日期(均值)和时间偏移的标准差 # 中心日期设为2023年10月1日,转换为时间戳(单位:秒) center_date = datetime(2023, 10, 1) center_timestamp = center_date.timestamp() # 标准差设为7天的秒数(86400秒/天 *7),可根据需求调整 std_dev = 86400 * 7 # 2. 生成符合高斯分布的日期数据 def generate_gauss_date(): # 生成高斯分布的时间偏移量 offset = random.gauss(mu=0, sigma=std_dev) # 计算目标时间戳并转换为datetime对象 target_timestamp = center_timestamp + offset # 处理极端情况:避免时间戳为负(可选,根据业务场景调整) if target_timestamp < 0: target_timestamp = center_timestamp return datetime.fromtimestamp(target_timestamp) # 3. 生成停车数据集 parking_data = [] for _ in range(10000): start_date = generate_gauss_date() # 生成停车时长(1小时到24小时之间的随机数) duration_hours = random.randint(1, 24) end_date = start_date + pd.Timedelta(hours=duration_hours) parking_data.append({ '车牌号码': fake.license_plate(), '入场时间': start_date, '离场时间': end_date, '停车时长(小时)': duration_hours, '停车区域': fake.random_element(elements=['A区', 'B区', 'C区', 'D区']) }) # 转换为DataFrame df = pd.DataFrame(parking_data) print(df.head())
关键细节说明:
- 中心日期与标准差:你可以根据业务需求调整
center_date(比如选择停车高峰日)和std_dev(控制日期的分散程度,标准差越大,日期分布越广)。 - 时间戳处理:
random.gauss()生成的偏移量可能为负,导致时间戳小于0(对应1970年之前的日期),代码中加入了简单的兜底逻辑,你也可以根据需要替换为其他处理方式。 - 其他字段:保留了原代码中Faker生成的车牌、停车区域等字段,你可以根据实际需求修改这些字段的生成规则。
内容的提问来源于stack exchange,提问作者Jonah
相关产品推荐
相关产品推荐

