当前位置: 首页 > article >正文

【基于数据分析-画图展示】

数据可视化

    • 导包
    • 1. Matplotlib 基本绘图
    • 2.安斯科姆数据集- 解释可视化重要性-散点图
    • 3.单变量 :直方图
    • 4.双变量:散点图
    • 5.多变量 : 散点图
  • 数据可视化-Pandas
    • 导包
    • 1.加载数据
    • 2.绘制-条形图
      • bar:条形图
      • line:折线图
      • area面积图
      • pie:饼图
  • 数据可视化-Seabron
    • 导包
    • 图形名称
      • histplot - 直方图
      • kdeplot- 密度图
      • countplot-计数图
      • 散点图
        • scatterplot
        • regplot
        • jointplot
      • boxplot- 箱变量
      • violinplot-小提琴变量
      • 1.直方图-单变量
        • data-要操作的df或者Series对象
        • x:x轴数据
        • y:y轴数据
        • bins -直方图-划分几个区间
        • hue-分组字段,把相同分组数据画到一张图上
        • kde 绘制核密度线
      • 2.密度图
      • 3.计数图-单变量
      • 4.散点图
        • scatterplot()函数实现
        • regplot()函数实现
        • jiontplot()函数实现
      • 5. 2D密度图,双变量
      • 6. 箱线图,双变量
      • 7.小提琴图-双变量
      • 8. Seaborn-绘制多变量
      • 9. Seaborn-风格与样式
        • 格式-sns.set_style('风格名')
        • white (白色无网格)
        • whitegrid(白色有网格)
        • dark(黑色无网格)
        • darkgrid(黑色有网格)
        • ticks刻度线

导包

import numpy as np
import pandas as pd
import os

import matplotlib.pyplot as plt
#正常显示汉字
plt.rcParams['font.sans-serif'] = ['SimHei'] 
#正常显示负号
plt.rcParams['axes.unicode_minus'] = False
#更改当前工作目录
os,chdir()

1. Matplotlib 基本绘图

  • 方式1:状态接口
#准备x轴y轴的一些坐标点
x = [-3,5,7]
y = [10,2,5]
# 创建一个画板
plt.figure(figsize = (12,6))
#开始绘图,传入x轴与y轴
plt.plot(x,y)
#设置坐标轴值的范围
plt.xlim(-3,10)
plt.ylim(-3,10)
#设置网格
plt.grid(True)
#设置x,y轴标签
plt.xlabel('x轴')
plt.ylabel('y轴')
#设置标题
plt.title('状态接口')
#具体画图动作
plt.show()
  • 面向对象方式,绘图
#准备x轴y轴的一些坐标点
x = [-3,5,7]
y = [10,2,5]
# 创建一个画板
fig .ax = plt.subplots(figsize = (12,6))
#开始绘图,传入x轴与y轴
ax.plot(x,y)
#设置坐标轴值的范围
ax.xlim(-3,10)
ax.ylim(-3,10)
#设置x,y轴标签
ax.xlabel('x轴')
ax.ylabel('y轴')
#设置标题
ax.set_title('状态接口')
#具体画图动作
plt.show()

2.安斯科姆数据集- 解释可视化重要性-散点图

  • scatter:散点图
  • hist :直方图
  • 加载数据,获取df对象
# 1. 加载数据, 获取df对象.
anscombe = pd.read_csv('data/anscombe.csv')
anscombe
  • 查看统计信息
  • 转置矩阵 :anscombe.groupby(‘dataset’).describe().T
# 2. 查看数据的统计信息.
anscombe.describe()
anscombe[anscombe.dataset == 'I'].describe()
anscombe[anscombe.dataset == 'II'].describe()
anscombe[anscombe.dataset == 'III'].describe()
anscombe[anscombe.dataset == 'IV'].describe()
  • 具体可视化动作

  • 获取数据动作作为x,y轴数据

anscombe[anscombe.dataset == 'I'].x
anscombe[anscombe.dataset == 'I'].y

anscombe.query('dataset == "I"')
anscombe.query("dataset == 'I'")
# 3. 具体的可视化动作. 
# 3.1 获取画布对象, 指定: 宽高.
fig = plt.figure(figsize=(16, 8))

# 3.2 获取坐标轴后对象.
# 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)

# 3.3 具体的绘制散点图的过程.
ax1.scatter(anscombe.query('dataset == "I"').x, anscombe.query('dataset == "I"').y)
ax2.scatter(anscombe.query('dataset == "II"').x, anscombe.query('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)

# 3.4 设置标题
# 子图的标题
ax1.set_title('数据集I')
ax2.set_title('数据集II')
ax3.set_title('数据集III')
ax4.set_title('数据集IV')
# 画板(画布)的标题
fig.suptitle('Anscome(安斯科姆)数据集', fontsize=21)

# 4. 具体的绘图
plt.show()

3.单变量 :直方图

  • 等差数列 : np.lispace(起始值,最终值,个数) 包左包右
# 需求: 展示不同消费区间, 频次关系. 
# 1. 读取数据, 获取df对象.
tips = pd.read_csv('data/tips.csv')
tips
# 2. 查看上述数据的常用统计值.
tips.describe()  # total_bill(总消费金额), 最小: 3.07, 最大: 50.81
# 3. 回顾: 等差数列,  3.07 ~ 50.81之间, 11个值 => 能划分成10个区间
np.linspace(3.07, 50.81, 11)
  • hist(): 直方图, total_bill: 表示要绘制的列. bins: 划分成几个区间(底层是: 等差数列)
# 4. 绘制图形 => 直方图.
# hist(): 直方图,  total_bill: 表示要绘制的列.   bins: 划分成几个区间(底层是: 等差数列) 
# 写法1: df对象.hist()      属于 Pandas的 绘图方式.
# tips.hist('total_bill', bins=10, figsize=(12, 6))

# 写法2: plt.hist()      属于 Matplotlib的 绘图方式.
# plt.hist(tips['total_bill'], bins=10)
plt.hist(tips.total_bill, bins=10)

plt.xlabel('总消费金额')
plt.ylabel('频次')
plt.title('总消费金额-直方图(适用于 单变量)', fontsize=21)
plt.show()
# 5. 按照总金额进行排序, 查看数据的个数.
tips.sort_values('total_bill')

4.双变量:散点图

# 需求: 绘图, 分析 总消费金额 和 小费之间的关系. 可以通过 散点图来实现, 它适用于: 呈现当1个变量变化的时候, 另一个变量的变化情况(大体趋势).
# 1. 查看源数据.
tips
# 2. 绘制图形.
# 2.1 获取画板.
plt.figure(figsize=(12, 6))
# 2.2 绘制散点图.
plt.scatter(tips.total_bill, tips.tip)  # x轴 => 总小费金额, y轴 => 小费
# 2.3 设置坐标轴的标签.
plt.xlabel('总消费金额')
plt.ylabel('小费')
# 2.4 设置标题
plt.title('总消费金额-小费散点图(适用于双变量)', fontsize=21)
# plt.grid(True)  # 网格
# 2.5 绘图.
plt.show()

5.多变量 : 散点图

# 需求: 在上述基础上, 加入性别信息, 进行绘图, 观察: 性别, 总消费金额, 小费之间的关系. 
# 1. 观察数据源
tips
# 2. apply()函数实现, 通过自定义的函数, 给 df对象 新增1列.
def recode_sex(sex):
    if sex == 'Female':
        return 'blue'
    else:
        return 'red'


# 3. 调用自定义的函数, 给df对象新增1列
tips['sex_color'] = tips.sex.apply(recode_sex)
# 4. 查看结果
tips
# 5. 具体的绘图.
# 5.1 创建画板.
plt.figure(figsize=(12, 6))
# 5.2 绘制散点图.
# x轴 => 总消费金额, y轴 => 小费, c=颜色, s=大小, alpha=透明度
plt.scatter(tips.total_bill, tips.tip, c=tips.sex_color, s=tips['size'] * 10, alpha=0.5)
# 5.3 设置坐标轴的标签.
plt.xlabel('总消费金额')
plt.ylabel('小费')
# 5.4 设置标题.
plt.title('总消费金额-小费散点图(r:男, b:女)', fontsize=21)
# 5.5 绘制
plt.show()

数据可视化-Pandas

导包

1.加载数据

# 1. 加载数据, 获取df对象
reviews = pd.read_csv('data/winemag-data_first150k.csv', index_col=0)   # 指定第1列为: 索引列
reviews

2.绘制-条形图

  • bar:条形图

# 需求1: 将所有的葡萄酒品牌按照产区分类, 查看哪个产区的葡萄酒品种多.
# reviews.province.value_counts()
# reviews.province.value_counts().head(10)
# reviews.province.value_counts().head(10).plot.bar(figsize=(12, 6), fontsize=11, color=['r', 'g', 'b', 'y', 'k', 'm', 'c', 'pink', 'gray','orange'])

# 上述格式优化版, 因为绘图的参数后续我们要一直用, 所以可以把它们抽取成 变量, 后续直接传参即可.
kwargs_dict = dict(figsize=(12, 6), fontsize=11, color=['r', 'g', 'b', 'y', 'k', 'm', 'c', 'pink', 'gray','orange'])
reviews.province.value_counts().head(10).plot.bar(**kwargs_dict)
plt.show()
# 需求2: 计算产葡萄酒最多的前10个产区, 产出葡萄酒的比例. 
# 只计算: 加利福尼亚洲 产出葡萄酒占比. 
# (reviews.province.value_counts().head(1) / len(reviews)).plot.bar(**kwargs_dict)

# 产出葡萄酒最多的10个产区, 产出比例. 
(reviews.province.value_counts().head(10) / len(reviews)).plot.bar(**kwargs_dict)
# 需求3: 展示 评分数量 的分布情况. 
reviews.points.value_counts().sort_index().plot.bar(**kwargs_dict)
  • line:折线图

# 需求: 查看葡萄酒评分的分布情况, 折线图展示.
reviews.points.value_counts().sort_index().plot.line(**kwargs_dict)
  • area面积图

# 需求: 查看葡萄酒评分的分布情况, 折线图展示.
reviews.points.value_counts().sort_index().plot.area(**kwargs_dict)
  • pie:饼图

# 需求: 查看葡萄酒评分的分布情况, 折线图展示.
# reviews.points.value_counts().sort_index().plot.pie(**kwargs_dict)        # 分类较多, 不方便查看. 

# 需求: 将所有的葡萄酒品牌按照产区分类, 查看哪个产区的葡萄酒品种多.
reviews.province.value_counts().head(10).plot.pie(**kwargs_dict)
plt.show()

数据可视化-Seabron

导包

import numpy as np
import pandas as pd
import seaborn as sns
import os

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示汉字
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

os.chdir(r'D:\Workspace\Work-20\numpyProject')   # 改变当前的工作目录.  change current work directory
# 1. 记载数据, 获取df对象.
tips = pd.read_csv('data/tips.csv')
tips

图形名称

1.直方图-单变量

fig, ax = plt.subplots(figsize=(10, 5))
# data: 要操作的df 或者 Series对象
# x: x轴数据
# y: y轴数据
# bins: 直方图, 划分区间的个数. 
# hue: 分组字段, 默认为None, 会按照该字段进行分组, 把相同分组数据画到一张图上. 
# kde: 绘制 核密度预估曲线
# 写法1: 传入df对象 和 它的列名
sns.histplot(data=tips, x='total_bill', bins=10, hue='sex', kde=True)

# 写法2: 可以直接传入Series对象.
# sns.histplot(tips['total_bill'], bins=10)
ax.set_title('直方图-总消费金额分布情况')
plt.show()

2.密度图

# 密度图 和 直方图的区别: 密度图是连续的 => 概率分布, 直方图是离散的 => 样本数据.
# 应用场景: 基于少量的样本数据, 去推理总体数据的概率分布情况. 
fig, ax = plt.subplots(figsize=(10, 5))
# x轴: 总消费金额(样本数据),  y: 密度值(概率分布)
sns.kdeplot(data=tips, x='total_bill')
ax.set_title('密度图-总消费金额分布情况')
plt.show()

3.计数图-单变量

# 需求: 按照星期进行分组, 统计每个星期的消费次数.
# 方式1: 计数图
# 计数图 = 按照某个字段分组, 统计每个分组的数量, 然后绘制成: 条形图(柱状图)
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制 计数柱状图
sns.countplot(data=tips, x='day', color='red')  # 底层 = 分组 + 聚合.
# 3. 设置标题
ax.set_title('消费次数分布情况')
# 4. 具体的绘图. 
plt.show()
# 需求: 按照星期进行分组, 统计每个星期的消费次数.
# 方式2: 手动分组 + 聚合计算, 然后绘图.
# 1. 获取画布, 坐标轴对象.
# fig, ax = plt.subplots(figsize=(10, 5))

# 2. 绘制 手动计算并绘图.
# tips.groupby('day').total_bill.count().plot.bar(figsize=(10, 5), color=['red', 'blue', 'yellow'])
tips.day.value_counts().plot.bar(figsize=(10, 5), color=['red', 'blue', 'yellow'])

# 3. 设置标题
ax.set_title('消费次数分布情况')
# 4. 具体的绘图. 
plt.show()

4.散点图

  • scatterplot()函数实现
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制散点图, 分析: 总消费金额, 小费 之间的关系.
# sns.scatterplot(data=tips, x='total_bill', y='tip')
# 2. 绘制散点图, 分析: 总消费金额, 小费, 性别 之间的关系.
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='sex')
# 3. 设置标题
ax.set_title('散点图-总消费金额和小费之间的关系')
# 4. 绘图
plt.show()
  • regplot()函数实现
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制散点图, 分析: 总消费金额, 小费 之间的关系.
# fit_reg: 是否绘制回归线, True(默认) => 绘制,  False => 不绘制.
# 拟合回归线: 就是基于你的数据点(散点), 拟合出一条直线, 底层跑了: 线性回归. 
# sns.regplot(data=tips, x='total_bill', y='tip', fit_reg=False)
sns.regplot(data=tips, x='total_bill', y='tip', fit_reg=True)
# 3. 设置标题
ax.set_title('散点图-总消费金额和小费之间的关系')
# 4. 绘图
plt.show()
  • jiontplot()函数实现
# 细节: 某些函数在绘图的时候, 是直接绘制的, 无需指定画板等, 也没有figsize属性设置: 图形宽高.
# 这类函数一般都有 height属性, 设置图形宽高.

# 可以把 jointplot()理解为: 散点图 + 直方图(每行每列都会绘制直方图)

# 1. 绘制散点图, 分析: 总消费金额, 小费 之间的关系.
sns.jointplot(data=tips, x='total_bill', y='tip', height=10)

# 如果设定了kind属性值, 可以将去绘制成: 蜂巢图. 
# sns.jointplot(data=tips, x='total_bill', y='tip', height=10, kind='hex')
# 2. 设置标题
plt.title('散点图-总消费金额和小费之间的关系')
# 3. 绘图
plt.show()

5. 2D密度图,双变量

# 需求: 通过 2D 密度图, 分析: 总消费金额, 小费 之间的关系.
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制 2D 密度图
# cbar: 是否绘制颜色条
# fill: 是否填充颜色
sns.kdeplot(data=tips, x='total_bill', y='tip', fill=True, cbar=True)
# 3. 设置标题
ax.set_title('2D Kde TotalBill & Tip')
# 4. 绘图
plt.show()

6. 箱线图,双变量

# 需求: 通过 箱线图(盒须图, 箱子图), 分析: 总消费金额, 时间 之间的关系.
# IQR: Interquantile Range, 四分位距表示法,  IQR = Q3 - Q1
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制 箱线图
sns.boxplot(data=tips, x='time', y='total_bill')
# 3. 设置标题
ax.set_title('箱线图-分析就餐时间和消费总金额之间的关系')
# 4. 绘图
plt.show()

7.小提琴图-双变量

# 小提琴图就是在箱线图的基础上, 加入了密度图, 即: 把箱线图的箱线 替换成 核密度曲线.
# 需求: 通过 箱线图(盒须图, 箱子图), 分析: 总消费金额, 时间 之间的关系.
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制 箱线图
# hue: 可以理解为分组字段, 会按照该字段进行分组, 把相同分组数据画到一张图上.  这里是按照 性别分组
# split: 是否拆分, True => 拆分, False => 不拆分, 它一般要结合hue属性一起使用.
sns.violinplot(data=tips, x='time', y='total_bill')
# sns.violinplot(data=tips, x='time', y='total_bill', hue='sex', split=True)
# 3. 设置标题
ax.set_title('小提琴图-分析就餐时间和消费总金额之间的关系')
# 4. 绘图
plt.show()

8. Seaborn-绘制多变量

# 细节: 在Seaborn中, 绘制多变量没有固定的套路, 都是通过属性传参即可. 

# 需求: 查看 时间(就餐类型, time) 和 总消费金额, 性别之间的关系. 
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制图形 => 小提琴图
sns.violinplot(data=tips, x='time', y='total_bill', hue='sex', split=True)
# 3. 设置标题.
ax.set_title('小提琴图-多变量-时间, 金额, 性别')
# 4. 具体的绘制动作
plt.show()

9. Seaborn-风格与样式

# 细节: Seaborn的样式(风格)只需要设置一次即可, 后续就会生效了. 
# 格式: sns.set_style('风格名')
# 常用的风格: white(白色无网格), whitegrid(白色有网格), dark(黑色无网格), darkgrid(黑色有网格), ticks(刻度线)

# 设置风格
sns.set_style('ticks')

# 需求: 查看 时间(就餐类型, time) 和 总消费金额, 性别之间的关系. 
# 1. 获取画布, 坐标轴对象.
fig, ax = plt.subplots(figsize=(10, 5))
# 2. 绘制图形 => 小提琴图
sns.violinplot(data=tips, x='time', y='total_bill', hue='sex', split=True)
# 3. 设置标题.
ax.set_title('ViolinPlot time & totall_bill & sex')
# 4. 具体的绘制动作
plt.show()

http://www.kler.cn/news/356016.html

相关文章:

  • 【Unity - 屏幕截图】技术要点
  • Spring Boot框架的电影评论系统设计与实现
  • 多种方式实现安全帽佩戴检测
  • 上位机-简介
  • 与双指针的亲密接触:快与慢的浪漫交错
  • 细说网络安全五家龙头企业,你去过哪一家?
  • Linux 中,`tee` 和 `grep` 分别用于处理输出流[从标准输入读取数据,并将数据同时输出到标准输出和文件]和文本内容的过滤。
  • fmql之Linux Uart
  • 【C++刷题】力扣-#252-会议室
  • 【AI学习】Mamba学习(八):HiPPO通用框架定义和方法
  • JAVA学习-练习试用Java实现“选择排序”
  • 学生社会适应能力测试
  • 【最新华为OD机试E卷-支持在线评测】内存资源分配(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • WordPress+Nginx 安装教程
  • 越狱你的 iPhone 安全吗?
  • JMeter之mqtt-jmeter 插件介绍
  • 一个使用接口模式、工厂模式、模板方法模式的日志文件系统
  • Python画笔案例-086 turtle 多线程绘画
  • Unity Vision Pro 保姆级开发教程-PolySpatial VisionOS Samples 示例场景
  • 基于STM32设计的实验室安全预警系统(OneNet)(246)