Python数据可视化正态分布简单分析及实现代码

yizhihongxing

本篇文档将介绍如何使用Python对正态分布数据进行可视化分析。

正态分布的基础知识

正态分布是一种连续的概率分布,也被称为高斯分布。正态分布在自然界中十分常见,比如身高、体重、智商、测量误差等等都服从正态分布。正态分布的概率密度函数为:

$$
f(x)=\dfrac{1}{\sigma\sqrt{2\pi}}e^{-\dfrac{(x-\mu)^2}{2\sigma^2}}
$$

其中$\mu$为均值,$\sigma$为标准差。

数据可视化

要对正态分布进行数据可视化,我们可以使用在Python中常用的两个可视化库:Matplotlib和Seaborn。

Matplotlib实现

使用Matplotlib可视化正态分布分为以下几步:

  1. 生成正态分布样本数据;
  2. 计算概率密度函数值;
  3. 使用Matplotlib绘制直方图和概率密度函数曲线。

下面是一个简单的例子:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(1)
mu = 0
sigma = 1
x = np.random.normal(mu, sigma, 1000)

plt.hist(x, bins=50, density=1, alpha=0.5, color='g')
xmin, xmax = plt.xlim()
x_range = np.linspace(xmin, xmax, 100)
p = np.exp(-(x_range-mu)**2 /(2 * sigma**2))/(sigma*np.sqrt(2*np.pi))
plt.plot(x_range, p, color='r', linewidth=2)
plt.title('Normal distribution', fontsize=18)
plt.xlabel('Value', fontsize=16)
plt.ylabel('Probability density', fontsize=16)
plt.show()

该例子生成了一个均值为0,标准差为1的正态分布的样本数据,然后使用Matplotlib绘制了该分布的直方图和概率密度函数曲线。

Seaborn实现

Seaborn库在Matplotlib的基础上进一步封装了一些高级数据可视化功能。

要使用Seaborn可视化正态分布,我们可以直接使用Seaborn提供的distplot函数,该函数可以同时绘制直方图和概率密度函数曲线,具体方式如下:

import seaborn as sns
sns.set()

np.random.seed(1)
mu = 0
sigma = 1
x = np.random.normal(mu, sigma, 1000)

sns.distplot(x, bins=50, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})
plt.title('Normal distribution', fontsize=18)
plt.xlabel('Value', fontsize=16)
plt.ylabel('Probability density', fontsize=16)
plt.show()

该例子同样生成了一个均值为0,标准差为1的正态分布样本数据,并使用Seaborn的distplot函数绘制了该分布的直方图和概率密度函数曲线。

示例说明

下面我们再给出两个具体的示例说明。

示例1:观察随机抽样和样本量的影响

np.random.seed(1)
mu = 0
sigma = 1

x1 = np.random.normal(mu, sigma, 100)
x2 = np.random.normal(mu, sigma, 10000)

fig, axs = plt.subplots(1, 2, figsize=(12, 4))

sns.distplot(x1, ax=axs[0], bins=20, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})
sns.distplot(x2, ax=axs[1], bins=50, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})

axs[0].set_title('n=100', fontsize=16)
axs[0].set_xlabel('Value', fontsize=14)
axs[0].set_ylabel('Probability density', fontsize=14)

axs[1].set_title('n=10000', fontsize=16)
axs[1].set_xlabel('Value', fontsize=14)
axs[1].set_ylabel('Probability density', fontsize=14)

plt.show()

该示例展示了随机抽样和样本量对正态分布的影响。通过生成两个样本量不同的样本数据,我们可以看到当样本量较小时,分布的波动较大,而当样本量增大时,分布的形态变得较为稳定。

示例2:比较不同参数的正态分布

np.random.seed(1)
mu1, mu2, mu3 = -2, 0, 2
sigma1, sigma2, sigma3 = 0.5, 1, 2

x1 = np.random.normal(mu1, sigma1, 10000)
x2 = np.random.normal(mu2, sigma2, 10000)
x3 = np.random.normal(mu3, sigma3, 10000)

fig, axs = plt.subplots(1, 3, figsize=(16, 4))

sns.distplot(x1, ax=axs[0], bins=50, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})
sns.distplot(x2, ax=axs[1], bins=50, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})
sns.distplot(x3, ax=axs[2], bins=50, kde=True, hist_kws={'alpha':0.5, 'color':'g'}, kde_kws={'color':'r', 'linewidth':2})

axs[0].set_title('$\mu=-2,\sigma=0.5$', fontsize=16)
axs[0].set_xlabel('Value', fontsize=14)
axs[0].set_ylabel('Probability density', fontsize=14)

axs[1].set_title('$\mu=0,\sigma=1$', fontsize=16)
axs[1].set_xlabel('Value', fontsize=14)
axs[1].set_ylabel('Probability density', fontsize=14)

axs[2].set_title('$\mu=2,\sigma=2$', fontsize=16)
axs[2].set_xlabel('Value', fontsize=14)
axs[2].set_ylabel('Probability density', fontsize=14)

plt.show()

该示例展示了不同参数的正态分布。通过可视化比较了均值和标准差不同的三个正态分布,我们可以清晰地看到这些参数的变化,对分布形态的影响。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python数据可视化正态分布简单分析及实现代码 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 浅谈Python中的zip()与*zip()函数详解

    浅谈Python中的zip()与*zip()函数详解 简介 zip() 和 *zip() 函数是 Python 中常用的内置函数,它们能够帮助我们处理多个序列(例如列表、元组等)数据,将它们以每个序列的相同索引处的元素为基准,打包成一个元组,并返回由这些元组组成的新的序列。这两个函数的使用方法和效果类似,但是在参数的传递方式上存在区别。 zip() 函数 z…

    python 2023年5月14日
    00
  • 如何从 python 脚本成功调用 gsutil rsync?

    【问题标题】:How do you successfully invoke gsutil rsync from a python script?如何从 python 脚本成功调用 gsutil rsync? 【发布时间】:2023-04-07 14:42:01 【问题描述】: 我正在尝试执行以下行 gsutil -m rsync s3://input gs:…

    Python开发 2023年4月8日
    00
  • 简单了解python中的f.b.u.r函数

    下面是关于“简单了解Python中的f.b.u.r函数”的攻略: 标题 首先,让我们来了解一下,这个f.b.u.r函数的作用是什么。 函数介绍 在Python中,f.b.u.r函数主要用于字符串的操作,其含义是将字符串中的小写字母转换成大写字母。具体来说,f.b.u.r函数是由三个字符串处理函数组成的,即: f函数:将字符串中首字母变成大写字母; b函数:将…

    python 2023年5月14日
    00
  • Python使用sorted对字典的key或value排序

    Python中使用sorted函数可以对字典的key或value进行排序。下面就来详细讲解一下如何使用sorted函数对字典进行排序。 字典排序方法 按key排序 字典的sorted排序方法默认按照字典的key进行排序,用法如下: dict = {‘a’: 2, ‘d’: 1, ‘c’: 3} print(sorted(dict.items())) 结果为:…

    python 2023年5月13日
    00
  • Python实现读取csv文件并进行排序

    下面是Python实现读取csv文件并进行排序的完整攻略: 1. 读取CSV文件 CSV文件是一种通用的电子表格文件格式,以逗号分隔足以区分不同的数据列,因此读取CSV文件是通过Python中的csv模块实现的,具体步骤如下: import csv with open(‘filename.csv’, ‘r’) as file: reader = csv.re…

    python 2023年6月3日
    00
  • 用Python selenium实现淘宝抢单机器人

    用Python selenium实现淘宝抢单机器人 1. 简介 淘宝抢单机器人是用Python selenium实现了自动抢购淘宝商品的程序。本攻略旨在帮助初学者了解如何利用Python和selenium库编写一个简单的抢单机器人。 2. 前提条件 安装Python和selenium库。 下载和安装Chrome浏览器。 下载和安装Chrome浏览器驱动程序。…

    python 2023年5月23日
    00
  • Python匿名函数及应用示例

    Python匿名函数及应用示例 在Python中,有一种特殊的函数叫做匿名函数,也称为lambda函数。 什么是匿名函数? 匿名函数是一种不需要正式定义的函数,通常只在需要时被调用一次。它通常也被称为lambda函数,因为它们使用lambda关键字进行定义。 匿名函数的语法和用法 匿名函数的语法如下: lambda argument_list: expres…

    python 2023年6月5日
    00
  • 手把手教你用322行Python代码编写贪吃蛇游戏

    《手把手教你用322行Python代码编写贪吃蛇游戏》是一篇非常详细的Python游戏开发教程。下面我会对这篇教程的内容进行详细讲解。 简介部分 这一部分对课程内容进行了简单的介绍,包括学习目标、教学方法、前置知识和课程大纲。 准备工作 这一部分主要介绍了编写Python贪吃蛇游戏所需要的软件环境和配置,在这个过程中,作者使用了Visual Studio C…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部