数据处理与统计分析篇-day10-Matplotlib数据可视化

数据可视化简介

可视化介绍

  1. 数据可视化是指直观展现数据,它是数据处理过程的一部分。

  2. 把数值绘制出来更方便比较。借助数据可视化,能更直观地理解数据,这是直接查看数据表做不到的

  3. 数据可视化有助于揭示数据中隐藏的模式,数据分析时可以利用这些模式选择模型

可视化库介绍

基于Matplotlib 绘制静态图形
  1. pandas

  2. seaborn

基于JS (javaScript)
  1. pyecharts/echarts

  2. plotly

Matplotlib的API介绍

Matplotlib提供了两种方法作图: 状态接口面向对象

复制代码
import numpy as np
​
import matplotlib.pyplot as plt
​
plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示汉字
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
​
import pandas as pd
import os
​
os.chdir(r'D:\CodeProject\03data_processing_analysis\my_project')
os.getcwd()

状态接口

步骤:
  1. 准备x轴和y轴的数据

  2. 创建画布: plt.figure(figsize=(画布大小)). figure: 创建画布, figsize: 指定画布大小

  3. 绘图, 传入x轴和y轴数据: plt.plot(x, y)

  4. 设置x轴和y轴坐标及范围: plt.xlim(0, 10), plt.xlim(0, 10)

  5. 设置网格: plt.grid(True)

  6. 设置x轴和y轴的标签: plt.xlabel('标签内容', size=大小(数字))

    plt.xlabel('标签内容', size=大小(数字))

  7. 设置标题: plt.title('内容', size=大小(数字))

  8. 具体显示绘图结果: plt.show()

代码:
复制代码
# 准备x轴和y轴的一些坐标点, 结合x, y轴就可以确定一个点的位置
x = [1, 3, 2, -1]
y = [3, 11, 8, 3]
​
# 创建1个画板
plt.figure(figsize=(12, 6))
​
# 开始绘图
plt.plot(x, y)
​
# 设置坐标值的范围
plt.xlim(-1, 3)
plt.ylim(0, 11)
​
# 设置网格
plt.grid(True)
​
# 设置x和y轴标签
plt.xlabel('x轴')
plt.ylabel('y轴')
​
# 设置标题
plt.title('状态接口', fontsize=21)
​
# 具体绘图动作
plt.show()
结果图

面向对象

步骤:
  1. 准备x轴 和 y轴的一些坐标点, 结合x, y轴就可以锁定1个点的位置.

  2. 创建画布和坐标对象: fig, ax = plt.subplots(figsize=(范围))

  3. 利用坐标对象开始绘图: ax.plot(x, y)

  4. 设置坐标值的范围: ax.set_xlim(范围), ax.set_ylim(范围)

  5. 设置网格: ax.grid(True)

  6. 设置x轴和y轴坐标: ax.set_xlabel('x轴'), ax.set_xlabel('x轴')

  7. 设置标题: ax.set_title('内容')

  8. 具体绘图结果: plt.show()

代码:
复制代码
# 主备x轴和y轴的一些坐标点, 结合x, y轴就可以确定一个点的位置
x = [1, 3, 2, -1]
y = [3, 11, 8, 3]
​
# 调用函数, 创建1个画板, 及坐标对象
fig, ax = plt.subplots(figsize=(12, 6))
​
# 开始绘图
ax.plot(x, y)
​
# 设置坐标值的范围
ax.set_xlim(-1, 3)
ax.set_ylim(0, 11)
​
# 设置网格
ax.grid(True)
​
# 设置x和y轴标签
ax.set_xlabel('x轴')
ax.set_ylabel('y轴')
​
# 设置标题
ax.set_title('状态接口', fontsize=21)
​
# 具体绘图动作
plt.show()
结果图

散点图-可视化重要性

数据集介绍

  1. 通过Anscombe数据集说明数据可视化的重要性

  2. Anscombe数据集由英国统计学家Frank Anscombe创建

  3. 数据集包含4组数据,每组数据包含两个连续变量。

  4. 每组数据的平均值、方差、相关性基本相同,但是当它们可视化后,就会发现每组数据的模式明显不同。

describe()查看数据的查看数据的分布情况

发现每组数据中, x, y 的分布情况基本相同, 从均值, 极值和几个4分位数上看, 这几组数据貌似分布差不多

复制代码
anscombe = pd.read_csv('data/anscombe.csv')
anscombe
​
anscombe.describe()
anscombe[anscombe.dataset == 'I'].describe()
anscombe[anscombe.dataset == 'II'].describe()
anscombe[anscombe.dataset == 'III'].describe()
anscombe[anscombe.dataset == 'IV'].describe()
​
# 上述格式的合并版, 按照 dataset进行分组, 然后统计.
anscombe.groupby('dataset').describe().T  # 转置矩阵
anscombe.groupby('dataset').describe().T

代码-数据可视化

复制代码
# 可视化
# 获取画布对象
fig = plt.figure(figsize=(16, 8))
​
# 获取坐标轴对象
# 2行2列, 对应坐标轴1, 即: 第1个位置. 
ax1 = fig.add_subplot(2, 2, 1)
# 2行2列, 对应坐标轴2, 即: 第2个位置. 
ax2 = fig.add_subplot(2, 2, 2)
# 2行2列, 对应坐标轴3, 即: 第3个位置. 
ax3 = fig.add_subplot(2, 2, 3)
# 2行2列, 对应坐标轴4, 即: 第4个位置. 
ax4 = fig.add_subplot(2, 2, 4)
​
# 绘制散点图的过程
# 下述两种写法效果一致
ax1.scatter(anscombe[anscombe.dataset == 'I'].x, anscombe[anscombe.dataset == 'I'].y)
ax2.scatter(anscombe[anscombe.dataset == 'II'].x, anscombe[anscombe.dataset == 'II'].y)
ax3.scatter(anscombe.query("dataset == 'III'").x, anscombe.query("dataset == 'III'").y)
ax4.scatter(anscombe.query("dataset == 'IV'").x, anscombe.query("dataset == 'IV'").y)
​
# 设置标题
# 子集
ax1.set_title('数据集I', fontsize=15)
ax2.set_title('数据集II', fontsize=15)
ax3.set_title('数据集III', fontsize=15)
ax4.set_title('数据集IV', fontsize=15)
# 画布标题
fig.suptitle('安斯克姆数据集', fontsize=21)
​
# 具体绘图过程
plt.show()

结果图

单变量直方图

格式

df对象/plt.hist(total_bill, bins)

total_bill: 表示要绘制的列

bins: 分成几个区间(底层是等差数列)
等差数列(分成10个区间需要11个值), 生成3.07 ~ 50.81区间的11个等差数列

np.linspace(3.07, 50.81, 11)
直方图的高度, 就是落到每个区间中的数据的条目数

代码

复制代码
tips = pd.read_csv('data/tips.csv')
tips
​
tips.describe()  # total_bill: 最小值:3.070000, 最大值: 50.810000
​
# 绘制直方图
# hist(): total_bill: 表示要绘制的列,  bins: 分成几个区间(底层是等差数列)
# 等差数列(分成10个区间需要11个值)
# 生成3.07 ~ 50.81区间的11个等差数列
# np.linspace(3.07, 50.81, 11)
​
# pandas写法
# tips.hist('total_bill', bins=10, figsize=(16, 8))
​
# Matplotlib写法
plt.hist(tips.total_bill, bins=10)
plt.xlabel('消费金额')
plt.ylabel('频次')
plt.title('消费金额-直方图(适用于单变量)', fontsize=21)
plt.show()

结果图

双变量散点图

概述

  1. 双变量(bivariate)指两个变量

  2. 散点图用于表示一个连续变量随另一个连续变量的变化所呈现的大致趋势

  3. 例如: 了解账单金额小费之间的关系可以绘制散点图

代码

复制代码
# 画布
plt.figure(figsize=(12, 6))
# 绘制散点图
plt.scatter(tips.total_bill, tips.tip)
# 横纵坐标
plt.xlabel('消费金额')
plt.ylabel('消费')
# 设置标题
plt.title('消费金额-消费关系图')
# 具体画图
plt.show()

结果图

多变量散点图

概述

  1. 在散点图的基础上, 可以通过颜色来区分不同的类别

  2. 散点的大小也可以用来表示一个变量

代码

复制代码
# 在上述基础上, 增加性别信息
tips
​
# 给原始数据增加一列, 根据性别显示颜色
tips['sex_color'] = tips.sex.apply(lambda sex: 'blue' if sex == 'Female' else 'black')
tips
​
# 绘图
plt.figure(figsize=(16, 6))
plt.scatter(tips.total_bill, tips.tip, c=tips.sex_color, alpha=1,
            s=tips['size'] * tips['size'] * tips['size'] * tips['size'])
# 横纵坐标
plt.xlabel('消费金额')
plt.ylabel('小费')
​
# 设置图例
from matplotlib.lines import Line2D
legend_elements = [Line2D([0], [0], marker='o', color='w', label='Female', 
                            markerfacecolor='blue', markersize=10),
                   Line2D([0], [0], marker='o', color='w', label='Male', 
                            markerfacecolor='black', markersize=10)]
​
plt.legend(handles=legend_elements)
​
# 设置标题
plt.title('消费金额-消费关系图')
# 具体画图
plt.show()

结果图

相关推荐
布说在见33 分钟前
魅力标签云,奇幻词云图 —— 数据可视化新境界
信息可视化·数据挖掘·数据分析
千汇数据的老司机2 小时前
webGIS在可视化大屏中的应用场景有哪些,有哪些类库
信息可视化·webgis·#web
小华同学ai3 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
西柚小萌新12 小时前
七.numpy模块
numpy
布说在见13 小时前
层次与网络的视觉对话:树图与力引导布局的双剑合璧
信息可视化·数据挖掘·数据分析
写代码的小阿帆1 天前
深度学习—Pandas标签库基础
深度学习·pandas
我就说好玩1 天前
2020年美国总统大选数据分析与模型预测
大数据·python·数据挖掘·数据分析·pandas·sklearn
有梦想的Frank博士1 天前
R语言*号标识显著性差异判断组间差异是否具有统计意义
开发语言·信息可视化·r语言
神奇夜光杯1 天前
Python酷库之旅-第三方库Pandas(200)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
立黄昏粥可温1 天前
Python 从入门到实战44(Pandas读写数据)
开发语言·python·pandas