在Python中使用正态分布和CSV

时间:2018-12-13 22:26:01

标签: python python-3.x

我有一个.csv文件,其中包含每个人的均值和标准差。我创建了一个读取文件并创建字典的函数。

def read_data():
    f = open("data.csv","r")
    reader = csv.reader(f)
    for row in reader:
        data[row[0]] = (float(row[1]),float(row[2]))
    return data

它的输出是

{'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}

我想编写一个函数,该函数获取每个人的均值和标准差,并使用正态分布生成一个随机数。我希望输出为类似

{'Person 1': (*random number*), 'Person 2': (*random number*), 'Person 3': (*random number*)}

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用random.gauss。给定一个人的均值和标准差,您可以根据以下正态分布创建一个随机值

from random import gauss

data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: gauss(mu=v[0], sigma=v[1]) for k,v in data.items()} 

# mu specifies mean and sigma specifies standard deviation

或者,如果您已经计划使用numpy,则可以使用numpy.random.normal

from numpy.random import normal

data = {'Person 1': (50.0, 0.0), 'Person 2': (100.0, 10.0), 'Person 3': (100.0, 5.0)}
# Randomize values based on a normal distribution
rand_data = {k: normal(loc=v[0], scale=v[1]) for k,v in data.items()} 

# loc specifies mean and scale specifies standard deviation   

每个的结果给出了以下正在运行的Python 3.7:

{'Person 1': 50.0, 'Person 2': 104.66767928603309, 'Person 3': 90.49432247610861}