date
icon
password
博客链接
Pin
Pin
Hide-in-Web
Hide-in-Web
网址
type
slug
tags
category
bottom
bottom
Hide-in-Config
Hide-in-Config
comment
status
summary
📌
本页面是 python 常用于数据分析库的笔记,仍然观看的是黑马程序员的课程。但不知为何,黑马程序员似乎未官方发布过该课程,但有其他 up 主发过此课程,且课程上传于 2019 年到现在还没被 ban,可以放心食用🙏
本篇笔记是在过去黑马程序员 python 入门课程的基础上完成的,因此对于一些基本的概念和方法我可能不会深入说明(如果想要了解一些基本的概念,比如变量是什么,为什么函数又叫做方法这样类似的问题,建议大家先去看看 python 的入门课程),不适合完全零基础的伙伴们阅读,除此之外,我会尽力将笔记写的通俗易懂些。

官方课程资源

下面这个文件来源于评论区 @率德布耀步耀德 ,感谢您的分享!!
文件中包含 ppt 和案例的代码。
如果仅需要下载 ppt,那么可以下载下面这个文件:

课程前的准备

建议大家都使用 anaconda 来安装 python,未来在进军 机器学习 和 深度学习 领域的时候会经常性的切换环境,而 anaconda 可以创建多个虚拟环境,帮助我们实现这一点。
anaconda 的安装可以参考我的这篇文章 👉🏾 『Anaconda 的安装教程』(可以试试能不能打开)或 跳转到 👉🏾 『Anaconda 的安装教程-共享』页面。
Anaconda 是用于方便创建虚拟环境的,而 pycharm 可以方便我们写 python 程序以及运行 python 程序 ,二者是不一样的。
安装了 Anaconda 后,会同时将 jupyter notebook 安装。我们一般运行代码时,都是写好整个 python 文件一同运行的,而在 jupyter notebook 中,我们可以写一行代码运行一行代码,这样方便讲解知识,也方便我们调试代码。jupyter notebook 比较适合用于交互,由于它既可以输出 Markdown 文本,又可以进行代码的运行,因此也可以用于做笔记。
在 Windows 中运行 jupyter notebook 的方法是按下 Win+R 输入 cmd,然后在打开的命令行窗口中输入 jupyter notebook 就可以自动跳转到网页了。需要注意的是,jupyter notebook 在运行过程中不能关闭 cmd 窗口。
📌
大家不要被老师前面的 jupyter notebook 吓到了,后面老师都是使用 pycharm 来演示的。

matplotlib 库

主要用于绘制可视化图形,名字取材于 matlab。
【补充】如何快速了解一个函数的用法?
使用 help() 函数即可。现在不理解这个指令没事,等学习到后面的课程时再回来看会容易理解。
首先进入 pycharm,打开代码文件,在 pycharm 左下角处找到终端的按钮(如图中所示),点击终端后,输入 python 进入 python 环境。
然后输入 from matplotlib import pyplot as plt 导入 plt 模块,使用 help() 函数查看相关函数的用法,比如 help(plt.plot)
图中查询的是 plt.legend 函数的用法
图中查询的是 plt.legend 函数的用法
折线图的绘制
绘制图形的核心
使用 matplotlib 库中的函数来绘图,核心是确定好 x 轴使用哪些点,y 轴使用哪些点,也就是提前准备好数据。
而具体这些点如何绘制成线是 matplotlib 内部帮助我们完成的,我们的任务就是把点找到传入对应的函数中。
pyplot 模块的介绍
matplotlib.pyplot 是 matplotlib 库的核心模块,提供了一套类似于 MATLAB 的绘图接口,支持快速生成各种类型的图表(折线图、柱状图、散点图等)。
在后面的笔记中,我都会使用 from matplotlib import pyplot as plt 来导入pyplot,同时使用别名 plt 来调用它。
【回忆】range() 函数
用于创建一个等差数列。
notion image
简单案例:
notion image
案例求解:
 
绘制简单的折线图(介绍两个基本方法—— plt.plot()plt.show()
要绘制折线图,首先要导入 matplotlib 库,使用 matplotlib 库中的 pyplot 方法就可以就可以绘制图形了。
【回忆】如何安装 python 的库?
  1. 通过命令行提示符下载。
    1. 按下 Win+R 输入 cmd 回车打开命令行提示符,在里面输入 pip install [包名] 即可安装相应的包,如 pip install numpy 。如果你拥有“科学上网”的能力,那么你的下载速度应该比较快;如果你没有,那么就需要利用清华镜像站去下载,使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple [包名称] 即可。
      如果你安装了 anaconda,那么请通过这个方式安装
      首先,按下 Win+R 输入 cmd 打开命令行窗口,通过 conda activate [你的环境名称] (假设你先前已经创建过环境了)的方式进入虚拟环境,然后输入 conda install [包的名称] 的方式即可下载包了,比如 conda install numpy
      如果你之前没有创建过环境,那么请你先通过指令 conda create -n [环境名称] python=3.x 的方式创建环境,比如 conda create -n py_learn python=3.x ,然后通过 conda activate py_learn 即可打开。
  1. 在 pycharm 中进行下载,我是可以正常进行下载的,不过有些人说需要能够上外网才行,可以自己试试。
notion image
  1. plt.plot(横轴, 纵轴) 方法:
    1. 用于绘制图像并暂时保存(不会保存在本地)。其中横轴和纵轴都放置列表,列表的长度需要相同,因为 x 和 y 要一一对应。可以使用变量存放横纵轴的值。
      横纵轴的值也可以是字符串,只要长度相同,能够一一对应即可。
  1. plt.show() 方法:
    1. 用于将 .plot() 保存的图像显示出来。一般 .show() 方法和 .plot() 方法是搭配使用的。
完整代码:
notion image
【案例】第一个案例
案例:
假设一天中某 12 小时(range(12))的气温(℃)分别是 [15,13,14.5,17,20,25,26,26,27,22,18,15]
代码:
绘制结果:
notion image
创建画布(fig = plt.figure(figsize=, dpi=)
在我们没有使用指令创建画布时,python 内部会隐式地帮我们自动创建一个画布,在这个画布中,可以显示我们绘制的图像。
但是,如果我们想要实现图像的大小更改,图像的分辨率(控制图像清晰程度)的设置,创建子图像或多个独立画布等操作时,就需要使用指令创建画布。简而言之,画布可以帮助我们实现更多的功能。
通过 plt.figure(figsize=(宽, 高), dpi=...) 即可实现画布的绘制,其中宽和高的单位都是英寸, dpi 表示 dots per inch,即每英寸绘制多少个点,每两个点之间是一个像素。
也就是说,如果我通过 plt.figure(figsize=(10, 20), dpi=10) 绘制了图像,那么图像最终的大小就是 100 * 200 ,图像宽为 10 英寸,100 个像素,高为 20 英寸,200 个像素。
📌
也可以将 figure 的结果赋给一个新变量,比如 fig = plt.figure() 。可以把 fig 看作是一个对象,后续可以调用 fig 来实现更多调整(后面会介绍)。
x 轴和 y 轴刻度值的设置(plt.xticks()plt.yticks()
简单设置(自定义刻度)
在前面绘制的图像中,横轴和纵轴刻度是 python 内部自动生成的,如果我们想要自定义刻度大小,就需要利用本节的内容。
notion image
设置横轴的刻度:
plt.xticks(ticks) ,其中“ticks”可以用列表,也可以使用元组numpy 数组(在后面会介绍)。
这条语句是 Matplotlib 中用于 自定义 x 轴刻度位置和标签 的。比如原先传入的 x 坐标为 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],但通过 plt.xticks([2, 4, 6]) 语句就可以在横轴上只显示 x[2]x[4]x[6] 处的 x 坐标,即横轴上只显示 3,5,7 这三个数字(列表第一个元素为 x[0])。
设置纵轴的刻度:
plt.yticks(ticks) ,除了方法名字不一样外,其他都与 plt.xticks() 相同。
notion image
当我们具有大量的数据点的时候,plt.xticks 可以使用切片来表示:
notion image
 
notion image
 
高级设置(自定义刻度文本、刻度值旋转)
下面的介绍主要以 plt.xticks() 为主,但 plt.yticks() 也是通用的。
自定义刻度
原先的语句(plt.xticks())可以自定义 x 轴显示的刻度,如果我们想将显示的刻度替换为其他文本或数字,如何操作呢?
可以通过 plt.xticks(ticks, labels) ,其中,tickslabels 都可以使用列表来表示,但是它们的长度需要一样,这样 labels 的第一个元素就会替换刻度的第一个元素;labels 的第二个元素就会替换刻度的第二个元素,以此类推。
输出结果:
notion image
刻度值的旋转
plt.xticks(ticks, rotation=...) rotation 如果填写正数,表示顺时针旋转,如果填写负数,表示逆时针旋转。
输出结果:
notion image
【补充】变量的前导下划线和单尾下划线介绍
类似 _x_ticks 这样的变量,前导单下划线约定表示该变量/方法为“内部使用”,例如模块内的非公开变量、类中不暴露给外部的属性等;
类似 class_ 这样的变量,其下划线后缀用于避免关键字冲突。当变量名与 Python 关键字冲突时,可用下划线后缀(如 class_ 代替 class)。
保存折线图(plt.savefig("路径")
通过 plt.savefig("保存路径") 一条语句即可进行保存。
【回忆】两种保存路径的介绍——绝对路径和相对路径
路径(Path) 是文件的“地址”,告诉计算机去哪里找到文件或文件夹。
路径有两种表示方法:绝对路径相对路径
绝对路径指的是以根目录(带盘符)开始的路径,使用盘符:/ (盘符如 D:/C:/F:/ 等)或 盘符:\\ (这里之所以是两个正斜杠是因为在 python 中 \ 是转义字符)表示。如 D:/test 就表示根目录下的 test 文件夹(D:\\test 也可以表示根目录下的 test 文件夹)。
相对路径指的是文件或文件夹相对于当前代码文件存放的文件夹的路径,比如代码文件存放在 D:/test 文件夹下,那么在这个文件夹中的 hello.txt 文件就可以表示为 hello.txt ,这个路径下的文件夹 folder 中的文件 hello2.txt 就可以表示为 D:/folder/hello2.txt

另外还需要知道两个符号 ./../
./ 表示的是当前文件夹,D:/test 文件夹下的 hello.txt 文件就是 ./hello.txt ,这个路径也是相对路径,通常用于要在当前文件夹下创建新文件时使用。
../ 表示的是当前文件夹的上一级文件夹,比如 D:/test 文件夹的上一级文件夹就是盘符 D:/ ,因此假如我们使用路径 ../test2 就表示 D:/test2 的意思。

📌
在 python 中,路径需要放在引号中作为字符串,因此,除了 盘符:/盘符:\\ 两种方式表示路径外,也可以使用 r"盘符:/..." 来表示路径,前缀 r 表示忽略引号中所有的转义字符。比如 r"D:\test\hello.txt"
📌
使用时需要注意,这条语句必须在 plt.plot(x, y) 后面调用。
png 格式保存的图片放大后。
png 格式保存的图片放大后。
jpg 格式保存的图片放大后。
jpg 格式保存的图片放大后。
设置横纵坐标轴的标签及图像的标题(plt.xlabel()plt.ylabel()plt.tilte()
通过 plt.xlabel("name_x")plt.ylabel("name_y") 两条语句即可设置坐标轴的标签,通过 plt.tilte() 即可设置图像的标题。
输出结果
notion image
📌
在上面的图像中,横纵坐标和标题都是使用英文表示的,但很多时候,我们希望将图标呈现给中国人看,因此我们需要将标签和标题改为用中文显示,后面的部分就是中文字体的介绍。
中文字体的设置(plt.rcParams()matplotlib.rc()font_manager()
matplotlib 默认是不支持中文的,需要手动更改字体才行。
matplotlib 有以下三种方式可以更改字体:
【最简单】plt.rcParams()
全局设置字体。
font 常用的字体(亲测有效)
经过测试,下面的几个字体名称都可以使用。
中文名
字体名 (英文)
黑体
SimHei
微软雅黑
Microsoft YaHei
宋体
SimSun
楷体
KaiTi
仿宋
FangSong
华文细黑
STXihei
华文宋体
STSong
使用示例:
matplotlib.rc()
设置全局字体。似乎只能用于 Windows 和 Linux 系统中。
font 常用的字体(亲测有效)
经过测试,下面的几个字体名称都可以使用。
中文名
字体名 (英文)
黑体
SimHei
微软雅黑
Microsoft YaHei
宋体
SimSun
楷体
KaiTi
仿宋
FangSong
华文细黑
STXihei
华文宋体
STSong
使用示例:
输出结果:
notion image
font_manager()
这种方法会稍微麻烦点,但是 Windows 、 Linux 和 Mac 系统都是通用的。
设置的是局部字体。
如何查找字体文件?
首先打开设置,在搜索框中输入 “字体设置”并选择,找到你想要用的字体后点进去。
notion image
点进去后,找到字体文件的路径,将其输入到代码中。(由于无法复制,可以使用 QQ 或者是什么截图软件 OCR 识别后粘贴,但要确保识别后的内容不会多出一些空格或其他字符。或者找一个路径短一点的,比如微软雅黑)
上面的字体路径我自己在代码中试用过,可以正常使用。
上面的字体路径我自己在代码中试用过,可以正常使用。
【案例】第二个案例
案例:
如果列表 a 表示 10 点到 12 点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]
代码:
输出结果:
notion image
绘制网格(透明度)
输出结果
notion image
输出结果
notion image
多折线绘制(图例、曲线颜色、线型、线条)
当我们需要在一副折线图中观察多幅图像的时候,需要利用本部分的知识。
绘制多折线
输出结果
notion image
【优化】添加图例
输出结果
notion image

调整图例的位置(在 legend 中加入 loc 参数):
上图来源于帮助文档。
上图来源于帮助文档。
📌
在查看帮助文档时,按照老师的方法,使用 Ctrl+鼠标左键 点按函数没有找到上图的内容。上图是通过终端中导入 matplotlib.pyplot 后输入 help(plt.legend) 打开的帮助文档中找到的(如下图所示)。
help() 函数查找方法图片
notion image
loc 参数既可以使用上图中的字符串,也可以使用上图中的数字。
输出结果
notion image

中文显示:
在这里需要特别注意以下 plt.legend() 中文显示的问题,如果使用 matplotlib.rc() 方法设置全局中文,plt.legend() 不需要额外设置。
如果使用 font_manager() 来配置中文,那么在其他函数中需要加上 fontproperties=my_font 这样的参数,而在 plt.legend() 中比较特殊,加上的是 prop=my_font 。老师说,其他的像 xticks() 这些函数全部都是 fontproperties 的参数,只有 legend() 特殊,需要特别注意。
【优化】曲线颜色、线型、线条
plot 函数中增加参数。
notion image
散点图的绘制
散点图的绘制可以说除了绘图的函数不同外,其他和折线图的绘制是一样的。
折线图使用函数 plt.plot() 来绘制图像,而散点图使用 plt.scatter() 函数来绘制。由于大体内容都相似,因此本部分直接通过案例来介绍,不会再一一介绍语法。
案例:
假设通过爬虫你获取到了北京 2016 年 3,10 月份每天白天的最高气温(分别位于列表 a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
y_3 = [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21, 22, 22, 22, 23]
y_10 = [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13, 12, 13, 6]
最终绘制出的效果图
notion image
代码:
条形图(柱状图)的绘制
条形图的回执与折线图、散点图也是类似的,绘图的函数为 plt.bar() ,这个函数绘制的是竖条形图;
如果要绘制横向的条形图(横轴标签比较长的时候),需要使用 plt.barh() 函数进行绘制。
bar() 函数的基本语法
  • x柱子的 x 轴位置(即自变量,通常是类别标签对应的数值或位置列表,可以为数字,也可以是字符串)。
  • height柱子的高度(即因变量,对应 y 轴数值的列表)。
  • width:柱子的宽度(默认 0.8)。
  • align: x 轴标签与柱子间的对齐方式,可选 'center'(默认,刻度位于柱子正中间)或 'edge'(刻度位于柱子左边缘)。
  • color: 柱子填充颜色(支持颜色名、十六进制代码或 RGB 元组)。
    • 常用颜色
      颜色名
      十六进制代码
      示例效果
      备注
      'red'
      #FF0000
      🔴 纯红色
      基础色
      'blue'
      #0000FF
      🔵 纯蓝色
      'green'
      #008000
      🟢 深绿色
      注意和 'lime'(亮绿)区别
      'yellow'
      #FFFF00
      🟡 纯黄色
      'black'
      #000000
      ⚫ 纯黑色
      'white'
      #FFFFFF
      ⚪ 纯白色
      'orange'
      #FFA500
      🟠 橙色
      醒目,适合高亮数据点
      'purple'
      #800080
      🟣 紫色
      'cyan'
      #00FFFF
      青蓝色
      类似浅蓝
      'magenta'
      #FF00FF
      品红色
      'pink'
      #FFC0CB
      粉红色
      柔和风格
      'gold'
      #FFD700
      金色
      高对比度
  • edgecolor: 每个柱子的边框颜色。
  • label: 图例标签(需配合 plt.legend() 使用)。
barh() 函数
barh() 函数的用法与 bar() 基本一致,有一些细微的区别如下:
bar() 函数的基础定义 plt.bar(x, height, width=0.8)barh() 函数的基础定义 plt.barh(y, width, height=0.8)
从基础定义中可以看到,bar() 函数使用 x 接收横坐标height 接收纵坐标width 表示柱子宽度;
barh() 函数通过 y 接收纵坐标width 接收横坐标,用 height 表示柱子宽度(相当于 matplotlib 已经自动帮助我们倒过来了)。
这样定义的好处是 plt.bar(x, y)plt.barh(x, y) 两个函数在相互转变的时候无需手动更换 x y 坐标(可以通过下面的示例来体会)。
📌
一般我们先通过 plt.bar(x, y) 函数绘制出符合要求的图像,然后只需要在 bar 后面加上一个 h 即可直接将图像横向显示 plt.barh(x, y)
下面通过案例一来理解 bar() 函数和 barh() 函数的使用。案例二为多电影多日图像绘制。
案例一及代码
案例:
假设现在有 2017 年内地电影票房前 20 的电影(列表a)和电影票房数据(列表b),如何更加直观的展示该数据?
x = ['战狼2', '速度与激情8', '功夫瑜伽', '西游伏妖篇', '变形金刚5:最后的骑士', '摔跤吧!爸爸', '加勒比海盗5:死无对证', '金刚:骷髅岛', '极限特工:终极回归', '生化危机6:终章', '乘风破浪', '神偷奶爸3', '智取威虎山', '大闹天竺', '金刚狼3:殊死一战', '蜘蛛侠:英雄归来', '悟空传', '银河护卫队2', '情圣', '新木乃伊']
y = [56.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88, 6.86, 6.58, 6.23] 单位:亿
代码:
竖柱状图
输出结果:
notion image
横柱状图
输出结果:
notion image
从上图中,我们可以看到柱状图是已经排好序的(说明给定的 x 和 y 的数据就是排序好的数据),但最大的在下面,最小的在上面,看着很不舒服。
可以通过 plt.barh(x[::-1], y[::-1], color='orange') 将柱状图逆过来,得到:
notion image
有些时候我们得到的数据是未排序的,我们可以通过下面改进后的代码来实现柱状图的排序。
案例二及代码
案例:
假设你知道了列表 a 中电影分别在 2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?(数据如下)
代码:
 
 
 
如果本篇笔记对你有用,能否『请我吃根棒棒糖🍭 』🤠…
Loading...