数据科学库【matplotlib】


文章目录

  • 数据科学库【matplotlib】
  • 前言
  • 一、数据分析介绍及环境安装
    • 1.为什么要数据分析???
    • 2.环境安装
  • 二、matplotlib
    • 1.为什么学习matplotlib???
    • 2.绘制折线图
    • 3.绘制散点图
    • 3.绘制条形图
    • 4.绘制直方图
    • 5.更多绘图工具

前言

“花圃记录学习日常”。刚开始走上机器学习之路,以下都是入门基础内容的一些要点笔记。


一、数据分析介绍及环境安装

1.为什么要数据分析???

-》岗位要求
-》python数据科学的基础
-》机器学习的基础

数据分析实际上就是用适当的方法对收集来的大量数据进行分析,帮助人们作出判断,以便采取行动。

数据分析流程

2.环境安装

conda环境安装

conda集成了很多平台用到的环境,conda可以非常容易的安装以往不好安装的模块,几乎百分之百可以成功。
我们说实际上一个项目是在一个环境中去做的,我们不是看项目指定什么,而是看我们做项目用到的环境,然后将环境进行requirments说明。
jupyter notebook

实际上它是一款编程、文档、笔记、展示软件

二、matplotlib

1.为什么学习matplotlib???

-》数据的可视化,直观呈现
-》使得数据更加客观,更具有说服力

matplotlib是最为流行的 python底层绘图库,主要做数据可视化图表
,实际上名字就是取材于matlab,仿照matlab的实现。

2.绘制折线图

示例:

from matplotlib import pyplot as pltx=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)
plt.show()
输出结果:


那么显然上述的图像所呈现的信息是不完整的,我们可以 do more!

1.设置图片大小(想要一个高清无码大图)
2.保存到本地
3.描述信息,比如x轴和y轴表示什么,这个图表示什么
4.调整x或者y的刻度的间距
5.线条的样式(比如颜色,透明度等)
6.标记出特殊的点(比如告诉别人最高点和最低点在哪里)
7.给图片添加一个水印(防伪,防止盗用)

from matplotlib import pyplot as pltx=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]# 设置图像的尺寸,figsize表示宽*高,dpi表示每英寸的像素点个数
plt.figure(figsize=(20,8),dpi=80)# 调整x,y刻度大小
# plt.xticks()要注意的是()传入的是什么范围以什么步长进行变化
# plt.xticks([i/2 for i in range(4,49)])
plt.xticks(range(2,25))
# plt.yticks()要注意的是()传入的是什么范围以什么步长进行变化,尤其是范围,一般y不是顺序大小,就需要用到min(y)与max(y)这样的函数,注意range()右端取不到
plt.yticks(range(min(y),max(y)+1))# 绘图
plt.plot(x,y)# 保存,保存要注意的是在绘图plot执行之后,注意./ 表示保存在当前目录下
# .png可以保存为 .svg矢量形式
plt.savefig("./savefig_1.png")#显示
# plt.show()


示例:

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")x=range(11,31)
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_1=[1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]plt.figure(figsize=(20,8),dpi=80)
plt.xticks(range(11,31,1),["{}岁".format(i) for i in range(11,31,1)][::1],fontproperties=my_font)
plt.yticks(range(0,9),["{}个".format(i) for i in range(0,9)],fontproperties=my_font)
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("恋爱次数",fontproperties=my_font)
plt.title("恋爱走势",fontproperties=my_font)
plt.grid(alpha=0.5,linestyle=":") #alpha是透明度参数,1是不透明plt.plot(x,y,label="自己",color="r",linestyle=":",linewidth=2)
plt.plot(x,y_1,label="同桌",color="b",linestyle="--",linewidth=2)
plt.legend(prop=my_font,loc="best")
#   best
#   upper right
#   upper left
#   lower left
#   lower right
#   right
#   center left
#   center right
#   lower center
#   upper center
#   center
plt.savefig("./save_2.png")

plt.grid(alpha=0.5,linestyle=":") #alpha是透明度参数,1是不透明plt.plot(x,y,label="自己",color="r",linestyle=":",linewidth=2)
plt.plot(x,y_1,label="同桌",color="b",linestyle="--",linewidth=2)
plt.legend(prop=my_font,loc="best")

plt.grid()是开启网格,其中参数alpha是表示网格透明度,1为不透明,linestyle为线形

plt.plot()中参数label是表示给图加入图例,color表示选取颜色,这里的颜色可以是一些常见英文单词,也可以去找颜色对应的十六进制码,linestyle线形,linewidth表示线宽

plt.legend(prop=my_font,loc=“best”)尤为注意,这其实与label对应的,加入图例后,设置中文格式表示,需要用它,注意其他地方的参数都是fontproperties等于我们的实例对象my_font,而这里是prop,后面的loc代表图例的位置,注释中右对应的字符

we have done!
绘制折线图(plt.plot)
设置了图片大小(plt.figure)
实现了图片保存(plt.saveflg)
设置了xy轴上的刻度和字符串(xticks)
解决了刻度稀疏和密集的问题(xticks)
【注意这里调整间距传入的参数是包含数字的可迭代对象】
【注意这里的添加字符串到轴上,需要的参数是与间距一一对应的另一个可迭代对象】
设置了标题,xy轴的lable(title,xlable,ylable)
设置了字体(font_manager. fontProperties,matplotlib.rc)
在一个图上绘制多个图形(plt多次plot即可)
为不同的图形添加图例

3.绘制散点图

matplotlib能够绘制折线图,散点图,柱状图,直方图,箱线图,饼图等(代码完全可以去找官方代码的demo)

示例:

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")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]x_3=range(1,32)
x_10=range(41,72)#设置图片尺寸
plt.figure(figsize=(20,8),dpi=80)#设置刻度
_x=list(x_3)+list(x_10)
_x_labels=["3月{}日".format(i) for i in _x[:32]]+["10月{}日".format(i-40) for i in _x[33:]]
plt.xticks(_x[::3],_x_labels[::3],rotation=45,fontproperties=my_font)# 设置信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("气温走势",fontproperties=my_font)# 绘图,并设置图例,格式
plt.scatter(x_3,y_3,label="3月份",linestyle=":",linewidths=2)
plt.scatter(x_10,y_10,label="10月份",linestyle=":",linewidths=2)
plt.legend(loc="upper left",prop=my_font)# 保存
plt.savefig("./save_3.png")

3.绘制条形图

示例:

# 绘制竖着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b=[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]# 设置图片尺寸
plt.figure(figsize=(20,15),dpi=100)# 设置刻度
plt.xticks(range(len(a)),a,rotation=90,fontproperties=my_font)
plt.xlabel("电影",fontproperties=my_font)
plt.ylabel("票房(单位:亿元)",fontproperties=my_font)
plt.title("2017电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.bar(range(len(a)),b,width=0.3,color="orange")
# 这里注意的是竖着的width表示的是条形的宽度,而横着的条形图是不同的# 保存
plt.savefig("./save_4.png")

# 绘制横着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b=[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]
# ------------------------与之前竖着的条形图基本相同----------------------------------------------
# 设置图片尺寸
plt.figure(figsize=(20,8),dpi=100)# 设置刻度
plt.yticks(range(len(a)),a,fontproperties=my_font)
# plt.ylabel("电影",fontproperties=my_font)
plt.xlabel("票房(单位:亿元)",fontproperties=my_font)
plt.title("2017电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.barh(range(len(a)),b,height=0.3,color="orange")
# 这里注意的横着的条形图是height
# 这里用的函数是barh# 保存
plt.savefig("./save_4_1.png")


示例(绘制多个条形图):

# 绘制横着的条形图
# 导入模块
from matplotlib import pyplot as plt
from matplotlib import font_manager# 实例化设置中文格式
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")# 数据
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]x_14=list(range(len(a)))
x_15=[i+0.2 for i in x_14]
x_16=[i+0.4 for i in x_14]# 设置图片尺寸
plt.figure(figsize=(20,8),dpi=100)# 设置刻度
plt.xticks(x_15,a,fontproperties=my_font)
plt.xlabel("电影",fontproperties=my_font)
plt.ylabel("票房",fontproperties=my_font)
plt.title("电影票房",fontproperties=my_font)# 打开网格
plt.grid(alpha=0.4)
# 绘图
plt.bar(x_14,b_14,label="2017年09月14日",width=0.2,color="orange")
plt.bar(x_15,b_15,label="2017年09月15日",width=0.2,color="blue")
plt.bar(x_16,b_16,label="2017年09月16日",width=0.2,color="green")# 设置图例
plt.legend(loc="upper right",prop=my_font)# 保存
plt.savefig("./save_5.png")

一次要绘制多个图在一起,比如之前的两个例子,散点图和上方的柱状图,那么这个时候,只需要调用多次相应的plt.scatter、plt.bar绘制命令,但相应的我要将横坐标进行移动不能重合,也要注意宽度的问题。
以plt.bar(x,y)为例子,实际上,这里面的x,y确实是可迭代的对象,只是数量,取什么x对应什么y
而已,那么把握整个x轴或y轴的是plt.xstick与plt.xstick
也就是说我设置好了一个取值步长,范围,我只需要将其余的做相同的步长,但每个x都平移以至不与之重合。

4.绘制直方图

示例:

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")a=[131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114,119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99,136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144,105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123,117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116,108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125,138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107,143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123,116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111,100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149,122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114,133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110,137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94,146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]plt.figure(figsize=(20,8),dpi=100)bin_width=3
num_bin=(max(a)-min(a))//bin_widthplt.grid(alpha=0.8)
plt.xticks(range(min(a),max(a)+bin_width,bin_width))
# plt.hist(a,num_bin)plt.hist(a,num_bin,density=True)
# 这里是绘制频率直方图,注意的是,新的matplotlib中density=True,代替了norms=Trueplt.savefig("./save_6.png")


绘制直方图,这里可能会有疑问说,直方图与条形图长得一样,不是一个东西吗???事实上,长得确实一样,但表示表示的内容确实相差的,条形图表示的内容是离散的什么是离散的呢,就比如说是电影、水果等这些种类问题,而直方图表示的连续的量,比如说是时间、距离。

在直方图的绘制方法中我们调用的是plt.hist,这其中的参数是我们需要停机的序列即数据,要将这些数据分成几组,调用会自动的生成我们的纵轴,后面加上一个参数(新版matplotlib)是density=True,即可绘制频率直方图。


示例:

这个例子可以绘制成直方图吗???显然是不可以的,题目中的数据已经是完成统计之后的了,那么我们就没办法调用hist去生成,因为hist我们使用的是原始的数据,当然,事实上我们可以调整条形图让我们的统计结果变成神似直方图的图形。

from matplotlib import pyplot as plt
from matplotlib import font_managermy_font=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]plt.figure(figsize=(20,8),dpi=100)_x=[i-0.5 for i in range(len(interval)+1)]
_x_labels=interval+[150]plt.xticks(_x,_x_labels)
plt.bar(range(len(interval)),quantity,width=1)plt.grid(alpha=0.5)plt.savefig("./save_7.png")

5.更多绘图工具

matplotlib使用流程

明确问题
选择图形的呈现方式
准备数据
绘图和图形完善

后期就是利用我们的numpy和pandas去处理数据,获取数据,然后matpkotlib去数据可视化,但实际上它用的并不是很多,百度ECharts等前端的绘图工具也是很多的。

应该选择那种图形来呈现数据
matplotlib.plot(x,y)
matplotlib.bar(x,y)
matplotlib.scatter(x,y)
matplotlib.hist(data,bins,normed)
xticks和yticks的设置
label和titile,grid的设置
绘图的大小和保存图片

plotly:可视化工具中的github,相比于matplotlib更加简单,图形更加漂亮,同时兼容matplotlib和pandas

使用用法:简单,照着文档写即可

文档地址: https://plot.ly/python/

HuaPu在学:机器学习——数据科学库【matplotlib】相关推荐

  1. 机器学习-数据科学库:matplotlib绘图

    机器学习-数据科学库:matplotlib绘图 matplotlib绘图 matplotlib折线图 matplotlib散点图 matplotlib条形图 matplotlib直方图 对比常用统计图 ...

  2. 机器学习-数据科学库-day6

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day6 pandas学习 动手练习 pandas中的时间序列 生成一段时间范围 关于频率的更多缩写 在Data ...

  3. 机器学习-数据科学库-day5

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day5 pandas学习 pandas之DataFrame pandas常用统计方法 将字符串离散化 数据合并 ...

  4. 机器学习-数据科学库-day1

    机器学习-数据科学库-day1 机器学习-数据科学库-day1 matplotlib 机器学习-数据科学库-day1 数据分析课程包括: 基础概念与环境 matplotlib numpy pandas ...

  5. 机器学习-数据科学库:Pandas总结(1)

    机器学习-数据科学库:Pandas总结(1) Pandas pandas的常用数据类型 pandas之Series创建 pandas之Series切片和索引 pandas之读取外部数据 pandas之 ...

  6. 机器学习-数据科学库(第三天)

    14.numpy的数组的创建 什么是numpy 一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型.多维数组上执行数值运算(数组就是列表.列表 ...

  7. 机器学习-数据科学库(第六天)

    37.pandas时间序列01 现在我们有2015到2017年25万条911的紧急电话的数据,请统计出出这些数据中不同类型的紧急情况的次数,如果我们还想统计出不同月份不同类型紧急电话的次数的变化情况, ...

  8. 机器学习-数据科学库(第五天)

    31.数据的合并和分组聚合--字符串离散化的案例 字符串离散化的案例 刚刚我们学会了数据分合并,那么接下来,我们按照电影分类(genre)信息把数据呈现出来 import numpy as np im ...

  9. 机器学习-数据科学库(第四天)

    23.pandas的series的了解 为什么要学习pandas numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据 pandas的常 ...

最新文章

  1. CSS中关于margin的理解误区
  2. JAVA9模块化详解(一)——模块化的定义
  3. qt练习7 定时爆炸小游戏
  4. LevelDB 源码剖析(九)DBImpl模块:Open、Get、Put、Delete、Write
  5. 玩玩Xamarin Evolve 2016带来的新特性(一)-iOS Simulator(for Windows)
  6. python 模块路径搜索_Python模块搜索路径问题
  7. A股开盘:深证区块链50指数跌0.46%,泰豪科技涨停
  8. 数据结构与算法——栈、队列、堆汇总整理
  9. 2022年考研数据结构_2 线性表
  10. GridView中的格式化
  11. QTreeView QTreeWidget改变图标大小
  12. matlab新手入门的简单操作
  13. 郭盛华是如何登上神坛?令全世界认识了中国的黑科技
  14. SEO优化 关键词部署策略
  15. Android 仿微信图片选择器 PictureSelector3.0 的使用
  16. 《Web安全之机器学习入门》一 3.2 数据集
  17. 保持良好的人际关系,赢得好人缘的八大诀窍
  18. 【JVM高级特性与最佳实践(第3版)-周志明】-学习记录之【自动内存管理】
  19. react 点击弹窗之外关闭弹窗 demo
  20. win7 virtualbox VBoxDD.DLL 0x80004005 uxtheme.dll

热门文章

  1. U盘无法格式化:windows无法完成格式化
  2. H5 自适应正方形图片与文字溢出产生省略号
  3. 集五福2 python
  4. 【通俗易懂的通信】什么是边缘计算?(Edge Computing)
  5. 关于xtk.js的使用(医疗影像处理插件)
  6. DOM(xx.HTML文档的基础结构)
  7. CI3.* 获取控制器名、方法名
  8. 智慧数字门店管理系统、门店系统、收银开单、预约服务、会员管理、账单管理、数据统计、商品、库存、美容美体、美甲美睫、医疗美容、美发造型、医疗诊所、中医理疗、宠物服务、美业、经营业务、售卡、交班
  9. 罗德里格斯公式(Rodrigues Formula)
  10. android vitamio 函数,Android如何集成Vitamio