2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图相关的知识,希望对你有一定的参考价值。

背景

《贝叶斯方法》里面有一个案例“图书管理员还是农民”:

丹尼尔卡尼曼在《思考,快与慢》中说,史蒂芬被描述为一个害羞的人,他乐于助人,但是他对其他人不太关注。他非常乐于见到事情处于合理的顺序,并对他的工作非常细心。你认为史蒂芬是一个图书管理员还是一个农民呢?

从上面的描述来看,大多数人都会认为史蒂芬看上去更像一个图书管理员,但是这里却忽视了一个关于图书管理员和农民的事实:男性图书管理员的人数只有男性农民的 1/20 。

所以统计学的角度来看,他更有可能是一个农民。本文整理该案例绘制的条形图,主要在于了解 matplotlib 的简单用法。

贝叶斯定理推断

根据贝叶斯定理推断,史蒂芬是图书管理员的先验概率和后验概率分别是:

  1. 先验概率:1/21 = 0.047,什么都不知道的情况下的概率。
  2. 后验概率:0.087,即知道史蒂芬具有一些乐于助人、细心的特点后,判断他是图书管理员的概率是 0.087,比先验概率大了一点点。

Python 条形图展示

在 PyCharm 中编码绘制两个概率的条形图:

from IPython.core.pylabtools import figsize
import numpy as np
from matplotlib import pyplot as plt

# 设置参数
figsize(12.5, 4)
plt.rcParams['savefig.dpi'] = 300
plt.rcParams['figure.dpi'] = 300

#设置参数
colors = ['#348ABD','#A60628']
prior = [1/21. , 20/21.]
posterior = [0.087, 1-0.087]

#绘制先验概率图:
plt.bar([0, .7], prior, alpha=0.70, width=0.25,
        color=colors[0], label='prior distribution',
        lw="3",edgecolor=colors[0])

#绘制后验概率图
plt.bar([0+0.25, .7+0.25],posterior, alpha=0.7,width=0.25,
        color=colors[1],label='posterior distribution',
        lw="3",edgecolor=colors[1])

#设置 X 轴的位置和名称
plt.xticks([0.20, 0.95],["Librarian","Farmer"])

#设置图形标题
plt.title("Prior and posterior probabilities of Steven's occupation")

#设置纵轴名称
plt.ylabel("Probability")

# 设置图例位置
plt.legend(loc="upper left")

#展示该图,没有这句话,就没有图
plt.show()

编码注意事项,依赖模块安装,在 Pycharm 的控制台执行:

  1. 安装 pip3 install IPython 模块。
  2. 安装 pip3 install matplotlib 模块。

运行结果

原样敲的代码运行出的图形特别大,占满了电脑屏幕,就是这个图:

这个图可以看到,史蒂芬是农民的概率是远远高于图书管理员的概率的。

编程启示录

Pycharm 安装后自带了一个 venv 的目录,下面有 pyhton3.9 的环境,所以我想默认的开发都是以自带的环境为基础的。

本例中安装依赖模块都是在当前项目下执行的,看安装结果也是用的“venv/bin/python -m pip “ 该环境的 pip3 安装的依赖模块。

那么如果用本机的 pip3 安装的模块,在 Pycharm 环境下编码能引用到吗?反之呢,刚刚安装的两个模块,直接通过命令行能访问到么?

我不记得本机 Python 环境有没有安装过这个 matplotlib ,但是通过控制台执行能导入成功:

以上是关于2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图的主要内容,如果未能解决你的问题,请参考以下文章

2022 年,把 Python 学得跟 Java 一样熟练——05 插入排序

2022 年,把 Python 学得跟 Java 一样熟练——02 类定义

2022 年,把 Python 学得跟 Java 一样熟练——04 matplotlib 绘制概率图

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic

2022 年,把 Python 学得跟 Java 一样熟练——06 获取 u817eu8bafu0020 Cosmic