正态分布图做法(输入数据自动生成)
- 格式:xls
- 大小:852.50 KB
- 文档页数:14
Excel中2010版进行绘制标准正态分布概率密度函数图的方
法
在社会经济学问题中,有许多随机变量的概率分布都服从正态分布。
今天,店铺就教大家在Excel中2010版进行绘制标准正态分布概率密度函数图的方法。
Excel中2010版进行绘制标准正态分布概率密度函数图的步骤先输入数据,这里是以初始值为”-2“,终值为”2“的等差数列,作为标准正态变量的值。
选中B1单元格,选择函数标签。
在选择类别中找到”统计“,选择”NORMDIST“,点击”确定“。
在X中输入A1,
在mean中输入0(这里是计算均值),
在stand_dev中输入1(标准差为1),
最后在Cumulative中输入0或false(表示计算的是概率密度)。
点击”确定“。
单击B1单元格,鼠标指向单元格右下角填充空点,往下拖。
然后选中区域,找到”插入“中的折线图,选择一个。
效果图如下。
excel拟合正态分布曲线
要在Excel中拟合正态分布曲线,可以按照以下步骤:
1. 输入数据:将正态分布的观测值按照从小到大的顺序排列,输入到Excel的工作表中。
2. 计算平均数和标准差:使用Excel的平均数和标准差函数(AVERAGE和STDEV)计算出样本的平均数和标准差。
3. 计算正态分布函数值:对于每个输入值,使用Excel的正态分布函数(NORM.DIST)计算出其对应的正态分布函数值。
4. 绘制曲线拟合图:将输入值和上一步计算出的正态分布函数值放入散点图中,并使用Excel的趋势线功能添加一条正态分布曲线。
5.调整曲线参数:根据实际情况,可以调整曲线的参数(如平均值和标准差)以更好地拟合数据。
python⽣成正态分布数据,并绘图和解析1、⽣成正态分布数据并绘制概率分布图import pandas as pdimport numpy as npimport matplotlib.pyplot as plt# 根据均值、标准差,求指定范围的正态分布概率值def normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdf# result = np.random.randint(-65, 80, size=100) # 最⼩值,最⼤值,数量result = np.random.normal(15, 44, 100) # 均值为0.5,⽅差为1print(result)x = np.arange(min(result), max(result), 0.1)# 设定 y 轴,载⼊刚才的正态分布函数print(result.mean(), result.std())y = normfun(x, result.mean(), result.std())plt.plot(x, y) # 这⾥画出理论的正态分布概率曲线# 这⾥画出实际的参数概率与取值关系plt.hist(result, bins=10, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙plt.title('distribution')plt.xlabel('temperature')plt.ylabel('probability')# 输出plt.show() # 最后图⽚的概率和不为1是因为正态分布是从负⽆穷到正⽆穷,这⾥指截取了数据最⼩值到最⼤值的分布根据范围⽣成正态分布:result = np.random.randint(-65, 80, size=100) # 最⼩值,最⼤值,数量根据均值、⽅差⽣成正态分布:result = np.random.normal(15, 44, 100) # 均值为0.5,⽅差为12、判断⼀个序列是否符合正态分布import numpy as npfrom scipy import statspts = 1000np.random.seed(28041990)a = np.random.normal(0, 1, size=pts) # ⽣成1个正态分布,均值为0,标准差为1,100个点b = np.random.normal(2, 1, size=pts) # ⽣成1个正态分布,均值为2,标准差为1, 100个点x = np.concatenate((a, b)) # 把两个正态分布连接起来,所以理论上变成了⾮正态分布序列k2, p = stats.normaltest(x)alpha = 1e-3print("p = {:g}".format(p))# 原假设:x是⼀个正态分布if p < alpha: # null hypothesis: x comes from a normal distributionprint("The null hypothesis can be rejected") # 原假设可被拒绝,即不是正态分布else:print("The null hypothesis cannot be rejected") # 原假设不可被拒绝,即使正态分布3、求置信区间、异常值import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsimport pandas as pd# 求列表数据的异常点def get_outer_data(data_list):df = pd.DataFrame(data_list, columns=['value'])df = df.iloc[:, 0]# 计算下四分位数和上四分位Q1 = df.quantile(q=0.25)Q3 = df.quantile(q=0.75)# 基于1.5倍的四分位差计算上下须对应的值low_whisker = Q1 - 1.5 * (Q3 - Q1)up_whisker = Q3 + 1.5 * (Q3 - Q1)# 寻找异常点kk = df[(df > up_whisker) | (df < low_whisker)]data1 = pd.DataFrame({'id': kk.index, '异常值': kk})return data1N = 100result = np.random.normal(0, 1, N)# result = np.random.randint(-65, 80, size=N) # 最⼩值,最⼤值,数量mean, std = result.mean(), result.std(ddof=1) # 求均值和标准差# 计算置信区间,这⾥的0.9是置信⽔平conf_intveral = stats.norm.interval(0.9, loc=mean, scale=std) # 90%概率print('置信区间:', conf_intveral)x = np.arange(0, len(result), 1)# 求异常值outer = get_outer_data(result)print(outer, type(outer))x1 = outer.iloc[:, 0]y1 = outer.iloc[:, 1]plt.scatter(x1, y1, marker='x', color='r') # 所有离散点plt.scatter(x, result, marker='.', color='g') # 异常点plt.plot([0, len(result)], [conf_intveral[0], conf_intveral[0]])plt.plot([0, len(result)], [conf_intveral[1], conf_intveral[1]])plt.show()4、采样点离散图和概率图import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsimport pandas as pdimport timeprint(time.strftime('%Y-%m-%D %H:%M:%S'))# 根据均值、标准差,求指定范围的正态分布概率值def _normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdf# 求列表数据的异常点def get_outer_data(data_list):df = pd.DataFrame(data_list, columns=['value'])df = df.iloc[:, 0]# 计算下四分位数和上四分位Q1 = df.quantile(q=0.25)Q3 = df.quantile(q=0.75)# 基于1.5倍的四分位差计算上下须对应的值low_whisker = Q1 - 1.5 * (Q3 - Q1)up_whisker = Q3 + 1.5 * (Q3 - Q1)# 寻找异常点kk = df[(df > up_whisker) | (df < low_whisker)]data1 = pd.DataFrame({'id': kk.index, '异常值': kk})return data1N = 100result = np.random.normal(0, 1, N)# result = np.random.randint(-65, 80, size=N) # 最⼩值,最⼤值,数量# result = [100]*100 # 取值全相同# result = np.array(result)mean, std = result.mean(), result.std(ddof=1) # 求均值和标准差# 计算置信区间,这⾥的0.9是置信⽔平if std == 0: # 如果所有值都相同即标准差为0则⽆法计算置信区间conf_intveral = [min(result)-1, max(result)+1]else:conf_intveral = stats.norm.interval(0.9, loc=mean, scale=std) # 90%概率# print('置信区间:', conf_intveral)# 求异常值outer = get_outer_data(result)# 绘制离散图fig = plt.figure()fig.add_subplot(2, 1, 1)plt.subplots_adjust(hspace=0.3)x = np.arange(0, len(result), 1)plt.scatter(x, result, marker='.', color='g') # 画所有离散点plt.scatter(outer.iloc[:, 0], outer.iloc[:, 1], marker='x', color='r') # 画异常离散点plt.plot([0, len(result)], [conf_intveral[0], conf_intveral[0]]) # 置信区间线条plt.plot([0, len(result)], [conf_intveral[1], conf_intveral[1]]) # 置信区间线条plt.text(0, conf_intveral[0], '{:.2f}'.format(conf_intveral[0])) # 置信区间数字显⽰plt.text(0, conf_intveral[1], '{:.2f}'.format(conf_intveral[1])) # 置信区间数字显⽰info = 'outer count:{}'.format(len(outer.iloc[:, 0]))plt.text(min(x), max(result)-((max(result)-min(result)) / 2), info) # 异常点数显⽰plt.xlabel('sample count')plt.ylabel('value')# 绘制概率图if std != 0: # 如果所有取值都相同fig.add_subplot(2, 1, 2)x = np.arange(min(result), max(result), 0.1)y = _normfun(x, result.mean(), result.std())plt.plot(x, y) # 这⾥画出理论的正态分布概率曲线plt.hist(result, bins=10, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙info = 'mean:{:.2f}\nstd:{:.2f}\nmode num:{:.2f}'.format(mean, std, np.median(result))plt.text(min(x), max(y) / 2, info)plt.xlabel('value')plt.ylabel('Probability')else:fig.add_subplot(2, 1, 2)info = 'non-normal distribution!!\nmean:{:.2f}\nstd:{:.2f}\nmode num:{:.2f}'.format(mean, std, np.median(result))plt.text(0.5, 0.5, info)plt.xlabel('value')plt.ylabel('Probability')plt.savefig('./distribution.jpg')plt.show()print(time.strftime('%Y-%m-%D %H:%M:%S'))以上就是python ⽣成正态分布数据,并绘图和解析的详细内容,更多关于python 正态分布的资料请关注其它相关⽂章!。
正态分布函数的语法是NORMDIST(x,mean,standard_dev,cumulative)cumulative为一逻辑值,如果为0则是密度函数,如果为1则是累积分布函数。
如果画正态分布图,则为0。
例如均值10%,标准值为20%的正态分布,先在A1中敲入一个变量,假定-50,选中A列,点编辑-填充-序列,选择列,等差序列,步长值10,终止值70。
然后在B1中敲入NORMDIST (A1,10,20,0),返回值为0.000222,选中B1,当鼠标在右下角变成黑十字时,下拉至B13,选中A1B13区域,点击工具栏上的图表向导-散点图,选中第一排第二个图,点下一步,默认设置,下一步,标题自己写,网格线中的勾去掉,图例中的勾去掉,点下一步,完成。
图就初步完成了。
下面是微调把鼠标在图的坐标轴上点右键,选坐标轴格式,在刻度中填入你想要的最小值,最大值,主要刻度单位(x轴上的数值间隔),y轴交叉于(y 为0时,x多少)等等。
确定后,正态分布图就大功告成了。
PS:标准正态分布的语法为NORMSDIST(z),正态分布(一)NORMDIST函数的数学基础利用Excel计算正态分布,可以使用函数。
格式如下:变量,均值,标准差,累积,其中:变量:为分布要计算的值;均值:分布的均值;标准差:分布的标准差;累积:若1,则为分布函数;若0,则为概率密度函数。
当均值为0,标准差为1时,正态分布函数即为标准正态分布函数。
例3已知考试成绩服从正态分布,,,求考试成绩低于500分的概率。
解在Excel中单击任意单元格,输入公式:“ 500,600,100,1 ”,得到的结果为0.158655,即,表示成绩低于500分者占总人数的15.8655%。
例4假设参加某次考试的考生共有2000人,考试科目为5门,现已知考生总分的算术平均值为360,标准差为40分,试估计总分在400分以上的学生人数。
假设5门成绩总分近似服从正态分布。
制作直方图
1、数据录入
新建Excel文档,录入待分析数据(本例中将数据录入A列,则在后面引用中所有的数据记为A:A);2
2、计算最大值、最小值、极差、分组数、分组组距
其中:极差=最大值-最小值,分组数=数据的平方根向上取整,分组组距=极差/分组数
3、分组
分组就是确定直方图的横轴坐标起止范围和每个小组的起止位置。
选一个比最小值小的一个恰当的值作为第一个组的起始坐标,然后依次加上“分组组距”,直到最后一个数据值比“最大值”大为止。
这时的实际分组数量可能与计算的“分组数”有一点正常的差别。
4、统计频率
5、制作直方图
选中统计好的直方图每个小组的分布个数的数据源(就是“频率”),用“柱形图”来完成直方图:选中频率列下所有数据(G1:G21),插入→柱形。