飞道的博客

Day43.Python数据可视化(1)

217人阅读  评论(0)

Python数据可视化(1)



前言

本文主要展示两个库:Matplotlib和Pyecharts的基本介绍和简单应用。


一. Python 数据可视化

1.1 数据可视化概念

数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为:一种以某种概要形式抽提出来的信息,包括响应信息单位的各种属性和变量。

1.2 Python 数据可视化

  1. Python 是一门富有表达力的语言,很适合用于数据分析。
  2. Python 有很多数据可视化的 package,主要分为探索性分析方向的(Matplotlib,Seaborn)和交互性喜可视化(Boken,Plotly),厚着主要是用于业务结合过程中展现总体分析结果的。
  3. Python 有很多非常优秀易用的数据可视化的库,作为入门在这里使用Python的matplotlib,事实上Python中很多可视化都是基于matplotlib开发的,例如Seaborn等。

二. Matplotlib 可视化

2.1 Matplotlib 库介绍

  1. Matplotlib 是Python中最常用的可视化工具之一,可以非常方便地创造海量类型2D图标和一些基本的3D图表,可视化数据集(DataFrame,Series)自行定义x,y轴,绘制图形(线形图,柱状图,直方图,密度图,散点图等等),能够解决大部分的需求。

  2. Matplotlib 最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发的,因为在函数的设计上参考了MATLAB,所以叫Matplotlib。

  3. 官方文档:https://matplotlib.org/ 。

  4. Matplotlib 中最基础的模块是pyplot。

2.2 掌握 pyplot 基本语法

基本绘图流程:

  1. 创建画布与创建子图:
    第一部分主要作用是构建一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多而图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。
函数名称 函数作用
plt.figure 创建一个空白画布,可以指定画布大小,像素
figure.add_subplot 创建并选中子图,可以指定子图的行数,列数,与选定图片编号。
  1. 添加画布内容

第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,并没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。

函数名称 函数作用
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 调整当前图形中各个子图的相对位置,使图形整体上更美观

上面的图参数说明:

  1. 保存与展示图形
函数名称 函数作用
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()

注释

  1. text() 上面基本命令的使用将文本放在 Axes 上的任意位置。文本的常见用途是注释绘图的某些功能,并且该 annotate() 方法提供帮主公呢以使注释变得更加容易。在注释中,有两点需要考虑:注释的位置由参数 xy 和文本的位置表示 xytext。这两个参数都是(x, y) 元组。

  2. xy (箭头提示)和 xytext 位置(文本位置) 都在数据坐标中。

  1. matplotlib 在任何文本表达式中接受 TeX 方程表达式。编写一个由美元符号包围的TeX表达式。

  2. 例如: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 可视化例子

  1. 销售额随时间的变化情况
    查看核心指标近期情况可以使用折线图反映数据走势,散点图反映数据分布
  2. 销售额与星期的关系
    从上面的折线图可以看出明显的周期性,所以对星期的营业额情况做分析。
  3. 时间,订单量,销售额之间的关系分析

三. Pyecharts 可视化

3.1 介绍

  1. Echarts 是一个由百度开元的书库可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的任课。而Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇到数据可视化时,pyecharts诞生了。

  2. pyecharts 分为v0.5.X 和 v1 两个大版本,v0.5.X 和 V1 不兼容,v1 是一个全新的版本。(这里使用的版本是 v1)

  3. 官网案例:http://echarts.apache.org/examples/zh/index.html

  4. Pyecharts 官网:https://pyecharts.org/#/zh-cn/intro

  5. 安装:pip install pyecharts

3.2 绘图逻辑

  1. 选择图标类型
  2. 添加数据
  3. 设置全局变量
  4. 显示及保存图表
  1. 图表类型:from pyecharts.charts import *
函数 说明 函数 说明
Scatter 散点图 Funnel 漏斗图
Bar 柱状图 Gauge 仪表图
Pie 饼图 Graph 关系图
Line 折线/面积图 Liquid 水球图
Radar 雷达图 Parallel 平行坐标系
Sankey 桑基图 Polar 极坐标系
WordCloud 词云图 HeatMap 热力图
  1. 添加数据
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)])' 方法设置参数。
  1. pyecharts 所有方法均支持链式调用。
    from pyecharts.charts import Bar
bar = (
    Bar()
    .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
bar.render()
  1. 显示,保存图表
1. '.get_opeions()' # 该行只为了查看配置项,方便调试时使用
2. '.render()' :默认将会在当前目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"D:/my_first_chart.html"),文件用浏览器打开。
3. Jupyter Notebook() 直接调用 render_notebook() 随时随地渲染图表。

3.3 全局配置组件:定制图表

  1. 使用 options 配置项,在 pyecharts 中,一切皆 Options。
  2. 全局配置项可以通过 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()

全局配置组件:定制图表

  1. 使用 options 配置项,在 pyecharts 中,一切皆 Options。
  2. 比如,添加标题:’.set_global_options(title_opts=opts.TitleOpts(title=‘主标题’, subtitle=‘副标题’))’

3.4 Gird: 并行多图

  1. 上下布局:
    grid = (Grid() .add(bar, grid_opts=opts.GridOpts(pos_bottom=‘60%’)) .add(line, grid_opts=opts.GridOpts(pos_top=‘60%’)) )

  1. 左右布局:

    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 地理图标

  1. 有时我们会很希望把数据展示在地图上,来做数据可视化,是数据更加清晰明了。
  2. 比如:微信好友全国分布,显示票房省份数据,全国评分显示。

例子:百度迁徙

  1. 百度地图春节人口迁徙大数据(简称百度迁徙),是百度在2014年春运期间推出的一项技术项目。百度迁徙利用大数据,对其拥有的LBS(基于地理位置的服务)大数据进行计算分析,采用的可视化呈现方式,动态,及时,直观地展现中国春节前后人口大迁徙的轨迹与特征。

  2. http://qianxi.baidu.com/ 。

from pyecharts.charts import Geo

# Pyecharts地理图表绘制
Geo().add_schema(  # 地图模式设置
maptype="china"  # 地图类型
)
.add()  # 添加数据
.set_global_opts()  # 设置全局配置项

中国地图

特效散点图

特效散点图:添加箭头

热力图

热力图:广东地图的热力图

广东地图的区域图

例子:分析微信好友性别,地图分布。

详细代码,后面整理好了在放出来。


总结

今天主要是学习了两个Python数据可视化库的简单操作以及常用图形,还是需要多熟练,加油。

溜了溜了,脑壳疼。Loading (43/100)。。。


转载:https://blog.csdn.net/Tomandjava/article/details/115748886
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场