Python数据可视化(1)
文章目录
前言
本文主要展示两个库:Matplotlib和Pyecharts的基本介绍和简单应用。
一. Python 数据可视化
1.1 数据可视化概念
数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为:一种以某种概要形式抽提出来的信息,包括响应信息单位的各种属性和变量。
1.2 Python 数据可视化
- Python 是一门富有表达力的语言,很适合用于数据分析。
- Python 有很多数据可视化的 package,主要分为探索性分析方向的(Matplotlib,Seaborn)和交互性喜可视化(Boken,Plotly),厚着主要是用于业务结合过程中展现总体分析结果的。
- Python 有很多非常优秀易用的数据可视化的库,作为入门在这里使用Python的matplotlib,事实上Python中很多可视化都是基于matplotlib开发的,例如Seaborn等。
二. Matplotlib 可视化
2.1 Matplotlib 库介绍
-
Matplotlib 是Python中最常用的可视化工具之一,可以非常方便地创造海量类型2D图标和一些基本的3D图表,可视化数据集(DataFrame,Series)自行定义x,y轴,绘制图形(线形图,柱状图,直方图,密度图,散点图等等),能够解决大部分的需求。
-
Matplotlib 最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发的,因为在函数的设计上参考了MATLAB,所以叫Matplotlib。
-
官方文档:https://matplotlib.org/ 。
-
Matplotlib 中最基础的模块是pyplot。
2.2 掌握 pyplot 基本语法
基本绘图流程:
- 创建画布与创建子图:
第一部分主要作用是构建一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多而图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。
函数名称 | 函数作用 |
---|---|
plt.figure | 创建一个空白画布,可以指定画布大小,像素 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数,列数,与选定图片编号。 |
- 添加画布内容
第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,并没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。
函数名称 | 函数作用 |
---|---|
plt.title | 在当前图形中添加标题,可以指定标题的名称,位置,颜色,字体大小等参数 |
plt.xlabel | 在当前图形中添加 x 轴名称,可以指定位置,颜色,字体大小等参数 |
plt.tlabel | 在当前图形中添加 y 轴名称,可以指定位置,颜色,字体大小等参数 |
plt.xlim | 指定当前图形 x 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.ylim | 指定当前图形 y 轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.xticks | 指定 x 轴刻度的数目和取值 |
plt.yticks | 指定 y 轴刻度的数目和取值 |
plt.legend | 指定当前图形的图例,可以指定图例的大小,位置,标签 |
plt.tight_layout | 调整当前图形中各个子图的相对位置,使图形整体上更美观 |
上面的图参数说明:
- 保存与展示图形
函数名称 | 函数作用 |
---|---|
plt.savefig | 保存绘制的图片,可以指定图片的 分辨率,边缘颜色等参数 |
plt.show | 在本机直接显示图形 |
2.3 Matplotlib 常用图形案例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
%matplotlib inline # 我在 jupyter notebook 上运行的
# 1. 散点图:plt.scatter()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x) + np.random.random(len(x))
plt.scatter(x, y)
plt.show()
# 2. 折线图:plt.plot()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x) + np.random.random(len(x))
plt.scatter(x, y)
plt.plot(x, y, 'r')
plt.plot(x, np.sin(x)+0.5, 'g')
plt.show()
# 折线图
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
如果 plot() 命令提供单个列表或数组,matplotlib 界定它是一系列 y 值,并自动为您生成 x 值,由于pyton范围以 0 开头,因此默认的 x 向量和 y 的长度相同,但是以 0 开头,因此 x 数据为 [0, 1, 2, 3].
# 3. 柱状图:plt.bar()
n = 12
x = np.arange(n)
y1 = np.random.random(n)
y2 = np.random.random(n)
plt.bar(x, y1, color='y')
plt.bar(x, -y2, color='b')
for i, j in zip(x, y1):
plt.text(i, j+0.1, '%.2f'%j, ha='center', va='bottom')
for i, j in zip(x, y2):
plt.text(i, -j-0.1, '%.2f'%j, ha='center', va='bottom')
plt.ylim(-1.2, 1.2)
plt.show()
注释
-
text() 上面基本命令的使用将文本放在 Axes 上的任意位置。文本的常见用途是注释绘图的某些功能,并且该 annotate() 方法提供帮主公呢以使注释变得更加容易。在注释中,有两点需要考虑:注释的位置由参数 xy 和文本的位置表示 xytext。这两个参数都是(x, y) 元组。
-
xy (箭头提示)和 xytext 位置(文本位置) 都在数据坐标中。
-
matplotlib 在任何文本表达式中接受 TeX 方程表达式。编写一个由美元符号包围的TeX表达式。
-
例如:plt.title(r’ σ i = 15 \sigma_i=15 σi=15’)
# 4. 饼图:Plt.pie()
n = 20
z = np.ones(n)
plt.figure(figsize=(5, 5))
plt.pie(z, explode=[0.1]*(n-1)+[.3], colors=['%f'%(i/n) for i in range(n)])
plt.show()
2.4 Matplotlib 可视化例子
- 销售额随时间的变化情况
查看核心指标近期情况可以使用折线图反映数据走势,散点图反映数据分布
- 销售额与星期的关系
从上面的折线图可以看出明显的周期性,所以对星期的营业额情况做分析。
- 时间,订单量,销售额之间的关系分析
三. Pyecharts 可视化
3.1 介绍
-
Echarts 是一个由百度开元的书库可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的任课。而Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇到数据可视化时,pyecharts诞生了。
-
pyecharts 分为v0.5.X 和 v1 两个大版本,v0.5.X 和 V1 不兼容,v1 是一个全新的版本。(这里使用的版本是 v1)
-
官网案例:http://echarts.apache.org/examples/zh/index.html
-
Pyecharts 官网:https://pyecharts.org/#/zh-cn/intro
-
安装:pip install pyecharts
3.2 绘图逻辑
- 选择图标类型
- 添加数据
- 设置全局变量
- 显示及保存图表
- 图表类型:from pyecharts.charts import *
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
Scatter | 散点图 | Funnel | 漏斗图 |
Bar | 柱状图 | Gauge | 仪表图 |
Pie | 饼图 | Graph | 关系图 |
Line | 折线/面积图 | Liquid | 水球图 |
Radar | 雷达图 | Parallel | 平行坐标系 |
Sankey | 桑基图 | Polar | 极坐标系 |
WordCloud | 词云图 | HeatMap | 热力图 |
- 添加数据
1. 散点图,折线图等二维数据图形课通过 ‘.add_xaxis(xaxis_data=x)’ 和 ‘.add_yaxis(series_name='', y_axis=y)’ 方法设置
2. 饼图等一维图形可以通过'.add(series_name='', data_pair=[(i,j) for i ,j in zip(lab, num)])' 方法设置参数。
- pyecharts 所有方法均支持链式调用。
from pyecharts.charts import Bar
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
bar.render()
- 显示,保存图表
1. '.get_opeions()' # 该行只为了查看配置项,方便调试时使用
2. '.render()' :默认将会在当前目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"D:/my_first_chart.html"),文件用浏览器打开。
3. Jupyter Notebook() 直接调用 render_notebook() 随时随地渲染图表。
3.3 全局配置组件:定制图表
- 使用 options 配置项,在 pyecharts 中,一切皆 Options。
- 全局配置项可以通过 set_global_opetions 方法设置。
# 散点图
from pyecharts.charts import Bar, Line, Scatter, Pie, Grid
from pyecharts import options as opts
x = np.linspace(0, 10, 51)
y = np.sin(x)
point = (Scatter(init_opts=opts.InitOpts(width="720px",height="320px"))
.add_xaxis(xaxis_data=x)
.add_yaxis(series_name="",y_axis=y)
)
point.render_notebook()
# 折线图
line = (Line(init_opts=opts.InitOpts(width="720px",height="320px"))
.add_xaxis(xaxis_data=x)
.add_yaxis(series_name="",y_axis=y,
# 是否显示散点对应的数据(默认显示)
label_opts = opts.LabelOpts(is_show=False))
)
line.render_notebook()
# 饼图
num = [110, 136, 108, 48, 111, 112, 103]
lab = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
pie = (Pie(init_opts=opts.InitOpts(width='720px', height='320px'))
.add(series_name='', data_pair=[(i,j) for i,j in zip(lab, num)]))
pie.render_notebook()
# 柱状图
num1 = [110, 136, 108, 48, 111, 112, 103]
num2 = [90, 110, 101, 70, 90, 120, 99]
lab = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
bar = (Bar(init_opts=opts.InitOpts(width='720px', height='320px'))
.add_xaxis(xaxis_data=lab)
.add_yaxis(series_name='商家A', y_axis=num1)
.add_yaxis(series_name='商家B', y_axis=num2))
bar.render_notebook()
全局配置组件:定制图表
- 使用 options 配置项,在 pyecharts 中,一切皆 Options。
- 比如,添加标题:’.set_global_options(title_opts=opts.TitleOpts(title=‘主标题’, subtitle=‘副标题’))’
3.4 Gird: 并行多图
- 上下布局:
grid = (Grid() .add(bar, grid_opts=opts.GridOpts(pos_bottom=‘60%’)) .add(line, grid_opts=opts.GridOpts(pos_top=‘60%’)) )
-
左右布局:
grid = (Grid() .add(scatter, grid_opts.GridOpts(pos_left=‘55%’)) .add(line, grid_opts=opts.GridOpts(pos_right=‘55%’)) )
bar.overlap(line)
bar.render_notebook()
四. Pyecharts 地理图标
- 有时我们会很希望把数据展示在地图上,来做数据可视化,是数据更加清晰明了。
- 比如:微信好友全国分布,显示票房省份数据,全国评分显示。
例子:百度迁徙
-
百度地图春节人口迁徙大数据(简称百度迁徙),是百度在2014年春运期间推出的一项技术项目。百度迁徙利用大数据,对其拥有的LBS(基于地理位置的服务)大数据进行计算分析,采用的可视化呈现方式,动态,及时,直观地展现中国春节前后人口大迁徙的轨迹与特征。
-
http://qianxi.baidu.com/ 。
from pyecharts.charts import Geo
# Pyecharts地理图表绘制
Geo().add_schema( # 地图模式设置
maptype="china" # 地图类型
)
.add() # 添加数据
.set_global_opts() # 设置全局配置项
中国地图
特效散点图
特效散点图:添加箭头
热力图
热力图:广东地图的热力图
广东地图的区域图
例子:分析微信好友性别,地图分布。
详细代码,后面整理好了在放出来。
总结
今天主要是学习了两个Python数据可视化库的简单操作以及常用图形,还是需要多熟练,加油。
溜了溜了,脑壳疼。Loading (43/100)。。。