好的,我需要创建一些随机数据来进行模拟。我知道我试图生成的一些现实生活场景的平均值和标准差。我面临的问题是,生成的与日期对应的随机数不现实。例如天气(MinTP),它的波动很大,这是不现实的。我希望以某种模式生成数字,以便平均值出现在数据集的中间。请参阅下面我的代码示例以及一年中表格和天气散点图的输出。我一直在使用np.random.normal()生成数据,也许我需要使用不同的函数
import numpy as np
import pandas as pd
import datetime
np.random.seed(2)
start2018 = datetime.datetime(2018, 1, 1)
end2018 = datetime.datetime(2018, 12, 31)
dates2018 = pd.date_range(start2018, end2018, freq='d')
synEne2018 = np.random.normal(loc=66.883795, scale=5.448145, size=365)
synMintp2018 = np.random.normal(loc=7.203288, scale=4.690315, size=365)
synCovidDailyCases2018 = np.random.normal(loc=0.0, scale=0.0, size=365)
synCovidDailyDeaths2018 = np.random.normal(loc=0.0, scale=0.0, size=365)
syn2018data = pd.DataFrame({'Date': dates2018, 'Total Daily Energy': synEne2018, 'MinTp': synMintp2018, 'DailyCovidCases': synCovidDailyCases2018, 'DailyCovidDeaths': synCovidDailyDeaths2018})
print(syn2018data)
fig, ax =plt.subplots()
sns.scatterplot(x="Date", y='MinTp', data=syn2018data[0:], color='r')
正态分布
正态分布有两个参数:
std
,即参数“scale”。它实际上并不是结果值的整个范围,但它是一个遵循正常规律的分布。基本上,这意味着,68%的数据将在距离您的mean
一std
之内,95%的数据将在距离您的mean
两std
之内,而99.7%的值将在距离您的mean
三std
之内李>您可以使用正态分布表来掌握期望得到的值
请记住,此表表示获取介于
mean
和mean + z * std
之间的值的概率,而不是获取介于mean - z * std
和mean + z * std
之间的值的概率。你必须做2 * p - 1
才能得到后者模拟年温度
如果降低比例,值将更接近平均值
为了更现实一些,我建议获得一条基本minTp曲线(冬季最小,8月份最大),然后使用loc=0和scale=0.2左右的正态分布添加随机性
如果在
sin
函数中指定了平均值和范围,则使用从零到π的正弦作为基数可以实现此目的:添加偏移量
由于最小值更可能出现在1月份,因此我们可以添加偏移来平移基准曲线
相关问题 更多 >
编程相关推荐