-
库的介绍
- matplotlib
- numpy
- pandas
- TA-Lib 技术指标库
- tables 数据格式 hdf5
- jupyter 数据分析与展示的平台
-
如果TA-Lib出现问题,去这个网址下载
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
-
其他库找不到可以到这个网址
https://www.lfd.uci.edu/~gohlke/pythonlibs
-
Jupyter Notebook介绍
- web版的ipython
- Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
-
Jupter Notebook快速上手
-
界面启动
#进入虚拟环境 workon ai #输入命令 jupter notebook 或者 ipython notebook #快捷键 shift + enter 执行代码
本地notebook默认url地址为:localhost:8888
-
cell操作
-
什么是cell
一对 in out会话被视作一个代码单元,称为cell
-
模式
- 编辑模式 enter
- 命令模式 esc
-
-
快捷键操作:
-
通用快捷键:
- shift + enter 执行本单元代码,并跳转到下一单元
- ctrl + enter 执行本单元代码,留在本单元
- cell行号前的* ,表示代码正在运行。
-
命令模式:按esc进入
- A,在当前cell的上面添加cell
- B,在当前cell的下面添加cell
- 双击D,删除当前cell
- Y,cell切换到code模式
- M,cell切换到markdown模式
- Z,回退
- L,为当前cell加上行号<!–
- ctrl + shift + P,对话框输入命令直接运行
- 快速跳转到首个cell ,ctrl + Home
- 快速跳转到最后一个cell ,ctrl + end -->
-
编辑模式:按enter进入
- 多光标操作:ctrl键点击鼠标(mac :CMD + 点击鼠标)
- 回退:ctrl + z
- 补全代码: tab键
- 为一行或者多行代码添加/取消注释,ctrl + /,mac:cmd + /
- 屏蔽自动输出信息:可在最后一个语句之后加一个分号
-
Markdown快捷键:
# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 - 缩进 -二级缩进 - 三级缩进
-
-
-
Matplotlib学习与快速上手
-
什么是matplotlib,画二维i二图表的python库
-
为什么要学matplotlob,数据可视化
- 奥卡姆剃刀原理 - 如无必要勿增实体
-
DEMO
import matplotlib.pyplot as plt #导包 %matplotlib inline #看环境添加 plt.figure() #创建画布(容器层) plt.plot([1,0,9],[4,5,6]) #绘制折线图(图像层) plt.show() #显示图
-
认识matplotlib图像结构
-
Matplotlib三层结构
-
容器层 (底层)
-
画板层(Canvas)
-
画布层(Figure)
-
创建绘图区,坐标系(axes):plt.subplots()
-
-
辅助显示层
- 使图像显示更加 容易被用户理解,但又不会对图像结构进行破坏,主要包括Axes外观(facecolor),边框线(spines),坐标轴(axis),坐标轴名称(axis label),坐标轴刻度(tick),坐标轴刻度标签(tick label),网格线(grid),图例(legend),标题title等内容
-
图像层
-
-
折线图绘制与保存图片
-
DEMO利用天气温度变化来绘图
-
maplotlib.pyplot模块
- 包含一系列的matlab的函数,他的函数作用于当前图形(figure)的当前坐标系(axes)
- import matplotlib.pyplot as plt
-
折线图绘制与显示
-
创建画布
plt.figure()
-
绘制图像
plt.plot()
-
显示图像
plt.show()
-
-
设置画布属性与图片保存
- plt.figure(figsize =(20,8), dpi = 80)
- figsize:指定图的长度
- dpi:图像的清晰度
- 返回fig对象
- 保存图片
- plt.savefig(path)
- 注意:plt.show()会释放figure资源,如果在plt.show()之后保存图片将只能保存空图片
- plt.figure(figsize =(20,8), dpi = 80)
-
数据准备
import random #准备数据 x = range(60) #生成y的随机数 y_shanghai = [random.uniform(15,18) for i in x] #创建画布 plt.figure(figsize=(20, 8), dpi = 80) #绘制图像 plt.plot(x, y_shanghai) #显示图 plt.show()
-
添加自定义x, y刻度(坐标轴显示粗细度)
-
plt.xticks(x, **kwargs)
x:要显示的刻度值
-
plt.yticks(y, **kwargs)
y:要显示的刻度值
demo:
plt.yticks(range(40)) #0–40每一个数字都显示出来
plt.yticks(range(0, 40, 5)) #0—40,每五个数字显示一次
3.准备x 的刻度说明
x_label = [“11点{}分”.format(i) for i in x ]
plt.xticks(x[::5], x_label[::5])import random #准备数据 x = range(60) #生成y的随机数 y_shanghai = [random.uniform(15,18) for i in x] #创建画布 plt.figure(figsize=(20, 8), dpi = 80) #绘制图像 plt.plot(x, y_shanghai) #显示图 plt.yticks(range(0, 40, 5)) #显示标签 x_label = ["11点{}分".format(i) for i in x ] plt.xticks(x[::5], x_label[::5]) #显示图像 plt.show()
-
-
解决中文显示不出来的问题
-
安装字体
windows和mac和ubantu下:双击安装
linux下:
拷贝字体到usr/share/fonts下
sudo cp~/SimHei.ttf /usr/share/fonts/SimHei.ttf -
删除matplotlib缓存文件
mac:删除~/.matplotlib中的缓存文件
cd ~/.matplotlibrc
rm -r *
linux: 删除~/.cache/matplotlib
cd ~/ .cache /matplotlib
rm -r * -
修改配置文件matplotlibrc
mac:
vi ~/.matplotlib/matplotlibrc
将文件内容修改为:
-
font.family :sans-serif
font.sans-serif: SimHei
axes.unicode_minus:False
linux :
sudo find -name matplotlibrc
返回结果: ./.virtualenvs/ai/lib/python3.5/site-packets/matplotlib/mpl-data/matplotlibrc
打开配置文件:
vi ./.virtualenvs/ai/lib/python3.5/site-packets/matplotlib/mpl-data/matplotlibrc
修改内容为:
font.family :sans-serif font.sans-serif: SimHei axes.unicode_minus:False
或者可以增加代码:
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
-
添加网格显示以及各种完善(显示多个图像),显示图例(修改图像层和辅助显示层)
颜色字符 风格字符 r 红色 - 实线 g 绿色 - - 虚线 b 蓝色 -. 点划线 w 白色 :点虚线 c 青色 ’ ‘ 留空,空格 m 洋红 y 黄色 k 黑色 显示图例:
location string location ’best‘ 0 ’upper right‘ 1 ‘upper left’ 2 ‘lower left’ 3 ‘lower right’ 4 ''right 5 ‘center left’ 6 DEMO
import matplotlib.pyplot as plt import random import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #准备数据 x = range(60) #生成y的随机数 y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(1,3) for i in x] #创建画布 plt.figure(figsize=(20, 8), dpi = 80) #绘制图像 plt.plot(x, y_beijing, color='r',linestyle="-.",label="上海") plt.plot(x, y_shanghai, color='b',label = "北京") #显示图例 plt.legend(loc = "lower left") #plt.legend(loc = 4) #显示图 plt.yticks(range(0, 40, 5)) x_label = ["11点{}分".format(i) for i in x ] plt.xticks(x[::5], x_label[::5]) #添加网格显示 plt.grid(linestyle="--",alpha=0.5) #添加x轴,y轴描述信息及标题 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点0分到12点之间的温度变化图示") #显示图 plt.show()
-
多个坐标系显示-plt.subplots(面向对象的画图方法)
-
subplots可以创建一个带有多个axes(坐标系/绘图区)的图
可以返回多个面板,坐标系对象
import matplotlib.pyplot as plt import random import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #准备数据 x = range(60) #生成y的随机数 y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(1,3) for i in x] #创建画布 #plt.figure(figsize=(20, 8), dpi = 80) figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80) #绘制图像 axes[0].plot(x, y_beijing, color='r',linestyle="-.",label="上海") axes[1].plot(x, y_shanghai, color='b',label = "北京") #显示图例 axes[0].legend(loc = "lower left") axes[1].legend(loc = "lower left") #plt.legend(loc = 4) #显示图 x_label = ["11点{}分".format(i) for i in x ] axes[0].set_xticks(x[::5]) axes[0].set_xticklabels(x_label[::5]) axes[0].set_yticks(range(0, 40, 5)) axes[1].set_xticks(x[::5]) axes[1].set_xticklabels(x_label[::5]) axes[1].set_yticks(range(0, 40, 5)) #添加网格显示 axes[0].grid(linestyle="--",alpha=0.5) axes[1].grid(linestyle="--",alpha=0.5) #添加x轴,y轴描述信息及标题 axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("上海中午11点0分到12点之间的温度变化图示") axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("北京11点0分到12点之间的温度变化图示") #显示图 plt.show()
-
-
绘制数学函数图像
import numpy as np #准备数据 x = np.linspace(-1,1,1000) #左闭右闭,range是左闭右开 y = 2 * x * x #创建画布 plt.figure(figsize=(20,8),dpi=80) #绘制图像 plt.plot(x, y) #添加网格 plt.grid(linestyle="--",alpha=0.5) #显示图像 plt.show()
-
常见图形种类及意义
- 折线图plot
- 散点图scatter
- 关系/规律
- 柱状图bar
- 统计/对比
- 直方图histogram
- 分布状况
- 饼图pie
- 占比
-
各种图的写法
-
柱状图
- 对比每部电影的票房收入
#1.准备数据 movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车杀人案','寻梦环游记','全球风暴','降魔传','追捕'] tickets = [73853,57767,22354,15969,14839,8725,8716] #2.创建画布 plt.figure(figsize=(20,8),dpi=80) #3.绘制柱状图 x_ticks = range(len(movie_names)) plt.bar(range(len(movie_names)),tickets,color = {'b','r','g','y','c','k','b'}) #修改x刻度 plt.xticks(x_ticks) #添加标题 plt.title("电影票房收入对比") #添加网格显示 plt.grid(linestyle="--", alpha=0.5) #4.显示图像 plt.show()
2.比较相同天数的票房
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #1.准备数据 movie_names = ['雷神3:诸神黄昏','正义联盟','寻梦环游记'] first_day = [10587.6,10062,1275.7] first_weekend = [36224.9,34479.6,11830] x = range(len(movie_names)) #2.创建画布 plt.figure(figsize=(20,8),dpi=80) #3.绘制柱状图 plt.bar(range(3),first_day, width=0.2,label="首日票房") #plt.bar([0.2,1.2,2.2],first_weekend,width=0.2) plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label="首周票房") #修改x刻度 plt.xticks([i+0.2 for i in x], movie_names) #添加标题 plt.title("电影票房收入对比") plt.legend() #添加网格显示 plt.grid(linestyle="--", alpha=0.5) #4.显示图像 plt.show()
-
直方图
-
概念
- 组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数成为组数
- 组距 :每一组两个端点的差
-
直方图和柱状图的比较
- 直方图时数据的分布,柱状图比较数据的大小
- 直方图描述的是一组数据的频次分布,是以矩形的长度表示每一组的频数或数量,宽度则表示每组的组距,因此其高度和宽度都有意义。直方图有助于我们知道数据的分布情况,如众数,中位数的大致位置,数据是否存在缺口或异常值
- 直方图x轴为定量数据,柱状图x轴为分类数据
- 直方图柱子无间隔,柱状图柱子有间隔
- 直方图柱子宽度可不一,柱状图宽度须一致
- 直方图时数据的分布,柱状图比较数据的大小
-
直方图:电影时长的分布状况
#1.准备数据 x = range(120) time = [random.randint(100,130) for i in x] #2.创建画布 plt.figure(figsize=(20,8), dpi=80) #3.绘制直方图 #组距 distance = 2 #组数 group_num = int((max(time) - min(time)) / distance) plt.hist(time, bins=group_num) #修改x轴刻度 plt.xticks(range(min(time) , max(time)+2,distance)) # 添加网格 plt.grid(linestyle="--",alpha=0.5) #4.显示图像 plt.show()
-
注意点:
- 注意组距:组距会影响直方图呈现出来的数据分布,因此在绘制直方图的时候需要多次尝试改变组距
- 注意Y轴所代表的变量:可以是频数,也可以是频率,若要显示频率,需要normed或者distance = true,hist后后面加参数
-
-
饼图
-
介绍:注意显示的百分比的位数
-
plt.pie(x, labels=,autopct=,colors)
- x数量,自动算百分比
- labels,每部分名称
- autopct,占比显示指定%1.2f%%
- colors:每部分颜色
-
绘制
#1.准备数据 movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车杀人案','寻梦环游记','全球风暴','降魔传','追捕'] tickets =[73853,57767,22354,15969,14839,8725,8716] #2,创建画布 plt.figure(figsize=(20,8),dpi=80) #绘制饼图 plt.pie(tickets,labels=movie_names,colors=['b','r','g','y','c','k','b'],autopct="%1.2f%%") #显示图例 plt.lagend() #注意,若饼图的角度不对 #添加:plt.axis('equal') #显示图像 plt.show()
-
-
-
-
-
Matplotlib
最新推荐文章于 2023-02-02 12:14:21 发布