1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【数据挖掘】数据挖掘之Matplotlib完整使用(折线图 散点图 柱状图 直方图 饼图)

【数据挖掘】数据挖掘之Matplotlib完整使用(折线图 散点图 柱状图 直方图 饼图)

时间:2018-09-29 12:04:37

相关推荐

【数据挖掘】数据挖掘之Matplotlib完整使用(折线图 散点图 柱状图 直方图 饼图)

数据挖掘之Matplotlib

一、数据挖掘基础环境安装与使用1、库的安装2、软件推荐(Jupyter Notebook)3、Jupyter常用快捷键4、Jupyter中的cell操作 二、数据挖掘之Matplotlib库1、什么是Matplotlib1.1 基础入门 2、Matplotlib三层结构2.1 容器层(1) 画板层(Canvas)(2) 画布层(Figure)(3)绘图区/坐标系(Axes) 2.2 辅助显示层2.3 图像层 3、折线图绘制与保存图片3.1 matplotlib.pyplot模块3.2 折线图绘制与显示(plot)(1)设置画布属性与图片保存(2)展现上海一周的天气,比如从星期一到星期天的天气温度如下(3)完善原始折线图(辅助显示层)(4)完善原始折线图2(图像层)(5)创建多个绘图区(面向对象的画图方法)(6)绘制数学函数图像 4、常见图表4.1 散点图(scatter)(1)相关代码(2)结果 4.2 柱状图(bar)(1)数量统计相关代码(2)用户数量对比分析 4.3 直方图(histogram)(1)相关概念(2)直方图与柱状图的对比(3)设置组距(4)相关代码 4.4 饼图(pie)(1)相关代码(2)结果

一、数据挖掘基础环境安装与使用

1、库的安装

matplotlib、

numpy、

pandas、

TA-Lib(技术指标库)

tables(hdf5)

Jupyter(数据分析与展示的平台)

2、软件推荐(Jupyter Notebook)

使用Jupyter Notebook,是IPython的加强网页版,一个开源Web应用程序,是一款程序员和科学工作者的编程/文档/笔记/展示软件。

.ipynb文件格式是用于计算型叙述的JSON文档格式的正式规范

3、Jupyter常用快捷键

运行代码:

Shift + Enter(执行本单元代码,并跳转到下一单元)

Ctrl + Enter(执行本单元代码,留在本单元)

4、Jupyter中的cell操作

cell: 一对In Out 会话被视作一个代码单元,称为cell

编辑模式(Enter)

(1)命令模式下,回车Enter 或 鼠标双击cell 进入编辑模式

(2)可以操作cell内文本或代码,剪切/复制/粘贴移动等操作

A,在当前cell的上面添加cell

B,在当前cell的下面添加cell

命令模式(ESC)

(1)按ESC退出编辑,进入命令模式

(2)可以操作cell单元本身进行剪切/复制/粘贴/移动等操作

二、数据挖掘之Matplotlib库

1、什么是Matplotlib

专门用于开发2D图表(包括3D图表)

以渐进、交互式方式实现数据可视化

1.1 基础入门

import matplotlib.pyplot as plt%matplotlib inlineplt.figure()plt.plot([1,0,9],[4,5,6])plt.show()

Jupyter显示结果

2、Matplotlib三层结构

2.1 容器层

(1) 画板层(Canvas)

(2) 画布层(Figure)

可以设置画布的大小和分辨率

一个画布(Figure)可以包含多个绘图区(Axes),但是一个绘图区(Axes)只能属于一个画布(Figure)

plt.figure()

(3)绘图区/坐标系(Axes)

数据的绘图区域,一个坐标系(axes)可以包含多个坐标轴(axis),包含两个即为2d坐标系,3个即为3d坐标系。

plt.subplots()

2.2 辅助显示层

辅助显示层为绘图区(Axes)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容

2.3 图像层

图像层指绘图区(Axes)内通过折线图,散点图、饼图等函数根据数据绘制出的图像

3、折线图绘制与保存图片

3.1 matplotlib.pyplot模块

matplotlib.pyplot包含了一系列类似于matlab的画图函数,函数作用于当前图形(figure)的当前坐标系(Axes)。

import matplotlib.pyplot as plt

3.2 折线图绘制与显示(plot)

(1)设置画布属性与图片保存

#figsize: 指定图的长度#dpi: 图像的清晰度plt.figure(figsize=(20,8), dpi=80)#保存图片plt.savefig(path)

(2)展现上海一周的天气,比如从星期一到星期天的天气温度如下

import matplotlib.pyplot as plt# 1、创建画布plt.figure(figsize=(20, 8), dpi = 80)# 2、绘制图像plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])# 3、保存图片plt.savefig("test1.png")# 4、显示图像plt.show()

注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

(3)完善原始折线图(辅助显示层)

从辅助显示层方面来完善原始折线图,注意要设置中文字体,否则报错不显示。

# 需求: 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度到18度import randomimport matplotlib.pyplot as plt#设置字体为楷体plt.rcParams['font.sans-serif'] = ['KaiTi']# 1、准备数据 x yx = range(60)y_shanghai = [random.uniform(15, 18) for i in x]# 2、创建画布plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像plt.plot(x,y_shanghai)# 4、修改x,y刻度# 构造x轴刻度标签x_ticks_label = ["11点{}分".format(i) for i in x]# 构造y轴刻度标签y_ticks = range(40)plt.xticks(x[::5],x_ticks_label[::5])plt.yticks(y_ticks[::5])# 5、添加网格显示plt.grid(True, linestyle="--", alpha=0.5)# 6、添加描述信息plt.xlabel("时间变化")plt.ylabel("温度变化")plt.title("某城市11点到12点每分钟的温度变化状况")# 7、显示图像plt.show()

结果显示

(4)完善原始折线图2(图像层)

# 需求:再添加一个城市的温度变化# 需求: 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度到18度import randomimport matplotlib.pyplot as plt#设置字体为楷体plt.rcParams['font.sans-serif'] = ['KaiTi']# 1、准备数据 x yx = range(60)# 收集到上海当天温度变化情况,温度在15度到18度# 准备上海的数据y_shanghai = [random.uniform(15, 18) for i in x]# 收集到北京当天温度变化情况,温度在1度到3度# 准备北京的数据y_beijing = [random.uniform(1, 3) for i in x]# 2、创建画布plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像plt.plot(x,y_shanghai, color="r", linestyle="-.", label="上海")plt.plot(x,y_beijing, color="b", label="北京")# 4、显示图例plt.legend()# 5、修改x,y刻度# 构造x轴刻度标签x_ticks_label = ["11点{}分".format(i) for i in x]# 构造y轴刻度标签y_ticks = range(40)plt.xticks(x[::5],x_ticks_label[::5])plt.yticks(y_ticks[::5])# 6、添加网格显示plt.grid(True, linestyle="--", alpha=0.5)# 7、添加描述信息plt.xlabel("时间变化")plt.ylabel("温度变化")plt.title("北京、上海11点到12点每分钟的温度变化状况")# 8、显示图像plt.show()

结果

(5)创建多个绘图区(面向对象的画图方法)

matplotlib.pyplot.subplots(nrows = 1, nclos = 1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图

注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。

相关代码

# 需求:再添加一个城市的温度变化# 需求: 画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度到18度import randomimport matplotlib.pyplot as plt#设置字体为楷体plt.rcParams['font.sans-serif'] = ['KaiTi']# 1、准备数据 x yx = range(60)# 收集到上海当天温度变化情况,温度在15度到18度# 准备上海的数据y_shanghai = [random.uniform(15, 18) for i in x]# 收集到北京当天温度变化情况,温度在1度到3度# 准备北京的数据y_beijing = [random.uniform(1, 3) for i in x]# 2、创建画布# plt.figure(figsize=(20, 8), dpi=80)figure, axes= plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)# 3、绘制图像axes[0].plot(x,y_shanghai, color="r", linestyle="-.", label="上海")axes[1].plot(x,y_beijing, color="b", label="北京")# 4、显示图例axes[0].legend()axes[1].legend()# 5、修改x,y刻度# 构造x轴刻度标签x_ticks_label = ["11点{}分".format(i) for i in x]# 构造y轴刻度标签y_ticks = range(40)axes[0].set_xticks(x[::5])axes[0].set_xticklabels(x_ticks_label[::5])axes[0].set_yticks(y_ticks[::5])axes[1].set_xticks(x[::5])axes[1].set_xticklabels(x_ticks_label[::5])axes[1].set_yticks(y_ticks[::5])# 6、添加网格显示axes[0].grid(True, linestyle="--", alpha=0.5)axes[1].grid(True, linestyle="--", alpha=0.5)# 7、添加描述信息axes[0].set_xlabel("时间变化")axes[0].set_ylabel("温度变化")axes[0].set_title("上海11点到12点每分钟的温度变化状况")axes[1].set_xlabel("时间变化")axes[1].set_ylabel("温度变化")axes[1].set_title("北京11点到12点每分钟的温度变化状况")# 8、显示图像plt.show()

注意:使用subplot方法创建的图表不能直接使用set_sticks方法传入自定义的刻度,必须使用set_sticklabels()方法

结果为:

(6)绘制数学函数图像

import randomimport matplotlib.pyplot as pltimport numpy as np#用来正常显示正负号plt.rcParams['axes.unicode_minus']=False #用来正常显示负号# 1、准备x,y数据x = np.linspace(-1, 1, 1000)y = 2 * x * x# 2、创建画布plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像plt.plot(x,y)# 4、添加网格显示plt.grid(True, linestyle="--", alpha=0.5)# 5、显示图像plt.show()

结果

4、常见图表

4.1 散点图(scatter)

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式

特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

(1)相关代码

import matplotlib.pyplot as plt# 1、房屋面积x = [225.98, 247.07, 253.14, 457.85, 301.01, 20.67, 342.75, 483.21]# 2、房屋价格y = [196.63, 203.88, 210.75, 247.61, 288.23, 400.02, 330.64, 33.1]# 3、创建画布plt.figure(figsize=(20, 8), dpi=80)# 4、绘制图像plt.scatter(x, y)# 5、显示图像plt.show()

(2)结果

4.2 柱状图(bar)

柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中

特点:绘制连离散的数据,能够比较数据之间的差别(统计/对比)

(1)数量统计相关代码

import matplotlib.pyplot as plt#设置字体为楷体plt.rcParams['font.sans-serif'] = ['KaiTi']# 1、准备数据movie_names = ['正义联盟', '寻梦环游记', '全球风暴', '追捕']tickets = [73853,57767,22354,15969]# 2、创建画布plt.figure(figsize=(20,8), dpi=80)# 3、绘制柱状图x_ticks = range(len(movie_names))plt.bar(x_ticks, tickets, color=['b','r','g','y'], width=0.2)# 4、修改x刻度plt.xticks(x_ticks, movie_names)# 5、添加标题plt.title("电影票房收入对比")# 6、添加网格显示plt.grid(linestyle="--", alpha=0.5)# 6、显示图像plt.show()

结果

(2)用户数量对比分析

import matplotlib.pyplot as plt#设置字体为楷体plt.rcParams['font.sans-serif'] = ['KaiTi']# 1、准备数据movie_name = ['雷神', '正义联盟', '寻梦环游记']first_day = [10587.6, 10062.5, 1275.7]first_weekend = [36224.9, 34479.6, 11830]# 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, label="首周票房")# 显示图例plt.legend()# 修改刻度plt.xticks([0.1, 1.2, 2.2], movie_name)# 4、显示图像plt.show()

结果

4.3 直方图(histogram)

直方图:由一系列高度不等的纵向条纹或线段表示数据的分布情况。

特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

(1)相关概念

组数:在统计数据时,将数据按照不同的范围分成几个组,分成的组的个数称为组数

组距:每一组两个端点的差

(2)直方图与柱状图的对比

直方图展示数据的分布,柱状图比较数据的大小

直方图X轴为定量数据,柱状图X轴为分类数据

直方图柱子无间隔,柱状图柱子有间隔

直方图柱子宽度可不一,柱状图柱子宽度须一致

(3)设置组距

组数 = 极差/组距=(max - min)/bins

(4)相关代码

# 电影时长分布状况import matplotlib.pyplot as plt# 1、准备数据time = [131, 98, 125, 131, 124, 139, 131, 117, 128]# 2、创建画布plt.figure(figsize=(20, 8), dpi=80)# 3、绘制直方图distance = 2group_num = int((max(time) - min(time))/distance)plt.hist(time, bins=group_num, density=True)# 4、修改x轴刻度plt.xticks(range(min(time), max(time)+2, distance))# 5、添加网格显示plt.grid(linestyle="--", alpha=0.5)# 6、显示图像plt.show()

结果

4.4 饼图(pie)

饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类

特点:分类数据的占比情况(占比)

(1)相关代码

import matplotlib.pyplot as plt# 1、准备数据movie_name = ['白菜', '土豆', '辣椒', '鸡腿']place_count = [60605, 54546, 45819, 28243]# 2、创建画布plt.figure(figsize=(20, 8),dpi=80)# 3、绘制饼图plt.pie(place_count, labels=movie_name, colors=['b','r','g','y'], autopct="%1.2f%%")# 4、显示图例plt.legend()# 5、使饼图大小保持一致plt.axis('equal')# 6、显示图像plt.show()

(2)结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。