python可视化

后续如果再学习可视化就是列一些看到不错的图加上自己的实现代码

预备

学习目标

  • 掌握数据可视化常见图都有哪些?每个图想做什么事情?

  • python实现这些图需要设置哪些参数?pd、mpl和sns的基本用法?

时间安排

主要根据[^1]进行学习,感觉正常速度的话需要看完要1个月,看完+写代码要2个月,看完+记笔记+写代码要2个半月,前面可以三个任务都做,后面可以提速一下。

学习内容

主要根据可视化50图[^1]进行学习,还有一个视频课[^2],因为自已pandas用得少,不太熟练,还会补充学一些pandas的知识,另外就是把这些图的模板留一下,方便未来使用。

前面见过的图主要学习matplotlib的代码风格以及参数选项、后面一些没见过的图主要学习这个图的用途、绘制方法以及如何对图进行解读。

这些50图主要还是从几个主要的图中派生出来的,派生的意义可能有:1. 加入更多信息 2. 样式更加美观 3. 突出某些信息

可视化50图

0. pandas & matplotlib review

pandas基本用法

  1. 特点
    • 处理浮点与非浮点数据里的缺失数据,表示为 NaN

    • 大小可变:插入或删除 DataFrame 等多维对象的列;

    • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;

    • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;

    • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;

    • 基于智能标签,对大型数据集进行切片花式索引子集分解等操作;

    • 直观地合并(merge)连接(join)数据集;

    • 灵活地重塑(reshape)透视(pivot)数据集;

    • 支持结构化标签:一个刻度支持多个标签;

    • 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;

    • 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

matplotlib

见前面的笔记

1. 关联分析

  • 散点图、气泡图、待线性回归的散点图、抖动图、计数图

    描述 图示 matplotlib实现
    抖动图 通常,多个数据点具有完全相同的 X 和 Y 值。 结果,多个点绘制会重叠并隐藏。 为避免这种情况,请将数据点稍微抖动,以便可以直观地看到它们。 使用 seaborn 的 `stripplot()` 很方便实现这个功能。 seaborn自带实现。sns.stripplot(df.cty, df.hwy, jitter=0.25, size=8, ax=ax, linewidth=.5)
    气泡图 气泡图(bubble chart)是可用于展示三个变量之间的关系。 第三个变量通过改变点的大小实现
    带线性回归的散点图 加入一条线性预测以及error range sns.lmplot
    计数图 一种避免点重叠问题的方法是增加点的大小,取决于有多少点在那个点上。所以,点的尺寸越大,它周围的点的集中度就越大。 sns.stripplot(df_counts.cty, df_counts.hwy, size=df_counts.counts*2, ax=ax)
  • 边缘直方图、边缘箱式图

    描述 图示 matplotlib实现
    边缘直方图 探索两个变量各自的分布 左上、右上、左下三个subplot;注意画hist的方向参数
    边缘箱式图 在上图的基础上将直方图换成箱式图 sns.boxplot(df.hwy, ax=ax_right, orient="v")
  • 相关图、矩阵图

    描述 图示 matplotlib实现
    相关图(Correllogram) 相关图用于直观地查看给定数据框(或二维数组)中所有可能的数值变量对之间的相关度量 sns.heatmap(df.corr(), xticklabels=df.corr().columns, yticklabels=df.corr().columns, cmap='RdYlGn', center=0, annot=True)
    矩阵图Pairwise Plot Pairwise plot is a favorite in exploratory analysis to understand the relationship between all possible pairs of numeric variables. It is a must have tool for bivariate analysis. `sns.pairplot(df, kind="scatter", hue="species", plot_kws=dict(s=80, edgecolor="white", linewidth=2.5)) ` `sns.pairplot(df, kind="reg", hue="species")`

4. 偏差分析

  • 偏差分析
  • 偏差条形图、偏差文本、偏差点阵图、面积图、带标记的偏差棒棒糖图

5. 序关系

  • 排序
  • 有序条形图、点阵图、坡度图、哑铃图、棒棒糖图

6. 分布

  • 连续变量的直方图、分类变量的直方图、密度图、带直方图的密度曲线、山峦图、分布式点阵图、箱式图、点图+箱图、小提琴图、人口金字塔、分类图

    描述 图示 matplotlib实现
    山峦图 多个密度图(or 直方图)的叠加 fig, axes = joypy.joyplot(mpg, column=['hwy', 'cty'], by="class", ylim='own', figsize=(14,10))
    箱式图 中位数、四分位数Q1和Q3、上下限、异常值;上下限的计算方式为:IQR = Q3-Q1 上限=Q3+1.5IQR 下限=Q1-1.5IQR;异常值为上下限之外的数。箱式图适合单变量的数据分析以及多类似变量的对比分析、同时还能反应数据中的异常值(偏态与尾重) sns.boxplot(x='class', y='hwy', data=df, notch=False)

7.组合

  1. Waffle Chart
  2. Pie Chart
  3. Treemap
  4. Bar Chart

8. Change

  1. Time Series Plot

  2. Time Series with Peaks and Troughs Annotated

  3. Autocorrelation Plot

  4. Cross Correlation Plot

  5. Time Series Decomposition Plot

  6. Multiple Time Series

  7. Plotting with different scales using secondary Y axis

  8. Time Series with Error Bands

  9. Stacked Area Chart

  10. Area Chart Unstacked

  11. Calendar Heat Map ❤github日历

  12. Seasonal Plot

9. Groups

  1. Dendrogram
  2. Cluster Plot
  3. Andrews Curve
  4. Parallel Coordinates

常见问题以及解决方法

  • matplotlib中文乱码问题?

    解决[^3]:

    import matplotlib as mpl
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['font.serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
    

    这段代码目前已经放在自己的自定义代码段中,vscode直接键入mpl就可以了

    设置自定义代码段方法:

    vscode->文件->首选项->用户代码片段->python

    "import matplotlib": {
            "prefix": "mpl",  
            "body": [  // 确认后添加的代码
                " import numpy as np              # 导入numpy库 ",
                " import pandas as pd             # 导入pandas库 ",
                " import matplotlib as mpl        # 导入matplotlib库 ",
                " import matplotlib.pyplot as plt  ",
                " import seaborn as sns           # 导入seaborn库 ",
                "  ",
                " mpl.rcParams['font.sans-serif'] = ['SimHei'] ",
                " mpl.rcParams['font.serif'] = ['SimHei'] ",
                " mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串, ",
                "$0"  // $0代表光标最后停留的位置
            ],
            "description": "导入matplotlib并解决中文乱码问题"
        }
    

Reference