☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》

  • 目录
  • ️‍开讲啦!!!!️‍苏州程序大白️‍
  • 博主介绍
  • 前言
  • 数据关系可视化
    • 散点图 Scatter plots
    • 折线图强调连续性 Emphasizing continuity with line plots
    • 同时显示多了图表
  • 数据种类的可视化 Plotting with categorical data
    • 散点图 categories scatterplots
  • 分布图 Distributions of observations within categories
    • 合并图表
    • 数据估计
    • 图表的大小控制
  • 数据分布的可视化 Visualizing the distribution of a dataset
    • 绘制单变量分布图 Ploting univariate distributions
    • 绘制双变量分布图 Ploting bivariate distributions
    • 可视化数据集中的成对关系 Visualizing pairwise relationships in a dataset
    • 线性关系的可视化 Visualizing linear relationships
      • 画线性回归模型的方法 Functions to draw linear regression models
      • 拟合不同种类的数据 Fitting different kinds of models
  • 作者相关的文章、资源分享

目录

️‍开讲啦!!!!️‍苏州程序大白️‍

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第1张图片

博主介绍

个人主页:苏州程序大白

作者介绍:中国DBA联盟(ACDU)成员,CSDN全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年成立柒月软件工作室。

如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦

️ 承接各种软件开发项目

有任何问题欢迎私信,看到会及时回复

微信号:stbsl6,微信公众号:苏州程序大白

想加入技术交流群的可以加我好友,群里会分享学习资料

前言

环境搭建:

下载Anaconda搭建Python环境。细讲可以看文章

下载类库NumpySciPymatplotlibpandasseaborn。可以参考本文

引入需要的库,设置一下显示网格的样式:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

数据关系可视化

下面我们使用seaborn最常用的方法relplot()实现散点图scatterplot()和线图lineplot()

散点图 Scatter plots

首先可以引入seaborn中自带事例子数据集“tips”,这个数据集的属性有:

  • 时间数据 week。

  • 账单: 总消费,小费 total_bill, tips。

  • 消费者性别 sex。

  • 消费者是否抽烟 smoker。

  • 等等…

下面很多例子使用了tips数据集,不会再特别指出

sns.set(style="darkgrid") # 设置样式为网格
tips = sns.load_dataset("tips")

其实seaborn中有很多画散点图的方法其中一种是scatterplot(),使用方法是把数据集中的集合分配给方法中的属性,这样不同集合就会使用散点图中不同属性的样式展示出来如下面实例中的色调属性hue获取了数据集中的smoker集合,这样集合中的数据差异就可以通过色调的不同展示出来,其他同理。

sns.relplot(x="total_bill", y="tip", size="size",hue="smoker", palette="ch:r=-.5,l=.75",  style="time",sizes=(15, 200), data=tips);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第2张图片
scatterplotrelplot的默认方法所以不需要单独设置,具体属性可以去scatterplot()的Api查看。

折线图强调连续性 Emphasizing continuity with line plots

relplot里的第二个方法lineplot,前面说过默认方法是scatterplot所以要设置属性kind=lineplot启用折线图,这个方法默认sort=true将x轴数据与y轴数据按顺序对应起来。

fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", 
            y="signal",
            hue="region", 
            style="event",
            dashes=True, # 开启显示虚线
            markers=True, # 显示标记
          	# ci="sd" # 显示标准偏差,默认是显示置信区间,None关闭显示
            kind="line", 
            data=fmri);

这里我们引入一个新的fmri数据集。
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第3张图片

同时显示多了图表

用到relplot的属性是colcol_wrap自动分行,同理也可以用row属性设置列。

sns.relplot(x="timepoint", y="signal", hue="event", style="event",
            col="subject", 
            col_wrap=5, # 设置每行显示图表数量
            height=3, # 每个图表的高度 
            kind="line",
            data=fmri.query("region == 'frontal'"));

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第4张图片

数据种类的可视化 Plotting with categorical data

对数据进行分类可视化用到的方法是catplot(),和数据关系可视化类似,catplot()也有多种分类(kind),包括散点图(strip,swarm),分布图(box,violin,boxen)和柱状图(point,bar,count)。

sns.set(style="ticks", color_codes=True) #设置一下样式

散点图 categories scatterplots

除了种类外,散点图能精确的显示数据的分布,散点图默认显示方式是stript,例如下面的例子。

tips = sns.load_dataset("tips") #载入数据
sns.catplot(x="day", y="total_bill", data=tips); 

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第5张图片

可以发现上面有些数据重叠在一起了,解决这个问题可以使用jitter属性,也可使用另一种散点图swarm,它自动使用算法区分出可能重叠的数据。需要注意的是可以使用order来控制顺序。下面的例子可以看出:

sns.catplot(x="total_bill", y="day", hue="time", kind="swarm",  order=["Sun", "Sat","Fri","Thur"], data=tips);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第6张图片

分布图 Distributions of observations within categories

数据量太大的时候,散点图显示不同种类的分布情况非常恐怖,所以可以使用分布图来观察不同种类数据的分布情况,具体代码就不贴了,只需要更改一下kind属性就可以了,下面分别看一下box,boxen,violin三种情况不同的显示风格:
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第7张图片
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第8张图片
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第9张图片
其中要重点说一下violin方法使用了KDE,因此有一些额外的属性可以设置,具体可以查看一下api例如:

sns.catplot(x="total_bill", y="day", hue="sex",bw=.4, cut=2, inner="stick",
            kind="violin", split=True, data=tips);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第10张图片

合并图表

另外看一下如何将两个不同类型的图表合为一个,例如下面我们将violinswarm类型的图表在一张图里展示:

g = sns.catplot(x="day", y="total_bill", kind="violin", inner=None, data=tips)
sns.swarmplot(x="day", y="total_bill", color="k", size=3, data=tips, ax=g.ax);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第11张图片

数据估计

很多情况我们是不需要特别精确的数据信息的,只需要了解各个分类的走势和差异性,这个时候柱状图bar和点状图point可以展示的信息更简洁明了。

例如这里我们引入一个新的数据集titanic来分析一下泰坦尼克号上不同仓位的乘客的生存率

titanic = sns.load_dataset("titanic")

首先下面看一下柱状图,这张图是可以直观的比较出各个仓位的生存率,需要指出的是柱状图的矩形边框也可以设置颜色。

sns.catplot(x="class", 
            y="survived", hue="sex",
            palette={
     "male": "g", "female": "m"}, # 设置hue属性显示的颜色
            edgecolor=".6",
            kind="bar", 
            data=titanic);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第12张图片

点状图可以设置的属性也有很多,比如线的样式,点的样式等等

sns.catplot(x="class", y="survived", hue="sex",
            palette={
     "male": "g", "female": "m"},
            markers=["^", "o"], linestyles=["-", "--"],
            kind="point", data=titanic);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第13张图片

图表的大小控制

设置图表的大小可以使用matplotlib里的plt.subplots(figsize=(width,height))

想要改变图表各个轴的精度可以使用set方法参照下面的实例

g = sns.catplot(x="fare", y="survived", row="class",
                kind="box", orient="h", height=1.5, aspect=4,
                data=titanic.query("fare > 0"))
g.set(xscale="log"); # x轴以对数形式显示

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第14张图片

数据分布的可视化 Visualizing the distribution of a dataset

拿到数据集后,通常第一件事就是确定数据的分布,接下来我们看一下对于单变量(unvariable)和双变量(bivariable)分布如何进行可视化。

绘制单变量分布图 Ploting univariate distributions

单变量分布的常见可视化模式是直方图(histogram)或者KDA(kernel debsity estimate),在seaborn中使用的方法是displot(),其中的hist属性控制是否显示直方图(默认开启),kda属性控制是否显示KDA分布(默认开启),rug属性控制显示刻度(默认关闭)。

x = np.random.normal(size=100)
sns.distplot(x,hist=True,kde=True, rug=True);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第15张图片

直方图没什么说的,是观察数据分布常见且直观的一个方法,原理也比较简单. 这里重点说一下KDE,它本身在很多领域都是极其重要的工具. 绘制kde图还可以使用kdeplot()方法或者rugplot()方法,例如下面的例子

x = np.random.normal(0, 1, size=30)
sns.kdeplot(x)
sns.kdeplot(x, shade=True, bw=.2,  label="bw: .2"); # shade属性控制是否显示分布区域阴影
sns.kdeplot(x, bw=2, label="bw: 2") 
plt.legend();

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第16张图片
从图中可以看出,bw属性控制的是kde曲线的拟合程度。

绘制双变量分布图 Ploting bivariate distributions

首先我们创建一个数据集作为例子

mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])

绘制双变量分布图的方法是jointplot(),用多个面板从两个维度绘制数据分布,seaborn提供了scatterplot(defult),hexbin,kde三种样式

sns.jointplot(x="x", y="y", data=df);
x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="k");
sns.jointplot(x="x", y="y", data=df, kind="kde");

其实kdeplot()也可以实现kde双变量分布

f, ax = plt.subplots(figsize=(6, 6)) # 设置显示图形的大小
sns.kdeplot(df.x, df.y, ax=ax)	
sns.rugplot(df.x, color="g", ax=ax)
sns.rugplot(df.y, vertical=True, ax=ax);

可视化数据集中的成对关系 Visualizing pairwise relationships in a dataset

例如调用数据集iris(鸢尾属植物)

iris = sns.load_dataset("iris")

然后使用pairplot()方法

sns.pairplot(iris, hue="species");

四个属性sepal_width sepa_height和petal_length petal_width的对应关系。

线性关系的可视化 Visualizing linear relationships

线性回归模型在数据可视化中可以展示数据的分布和趋势,也可以起到预测数据的作用。我们还是使用小费tips数据集。

tips = sns.load_dataset("tips")

画线性回归模型的方法 Functions to draw linear regression models

seaborn提供了两个方法regplot()lmplot()

sns.regplot(x="total_bill", y="tip", data=tips);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第17张图片

sns.lmplot(x="total_bill", y="tip", data=tips);

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第18张图片

通过上面两个例子 ,会发现这两个方法绘制的结果区别不大,但是他们传入的数据是有区别的:

  • regplot()xy轴可以是简单的numpy数组,pandas series对象或者pandas DataFrame对象

  • lmplot()的x,y参数必须指定为字符串。

拟合不同种类的数据 Fitting different kinds of models

anscombe = sns.load_dataset("anscombe")

以数据集Anscombe’s quartet(安斯库姆四重奏)为例,先通过下面的表格简单了解一下这个数据集,简单是说就是四组包含的数据集:
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第19张图片
然后plot一下四组数据(注意这里使用lmplot,所以x,y轴对应的是字符串),基本工作流程是使用数据集和用于构造网格的变量初始化FacetGrid对象。

sns.lmplot(x="x", y="y", col="dataset", col_wrap=2, data=anscombe,
           ci=None,scatter_kws={
     "s": 80});

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第20张图片
现在分析一下这四个数据集,第一个没啥显著特征,观察第二个数据集可以发现它存在高阶关系,可以通过order属性控制阶数,进行多项式回归拟合

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           order=2, ci=None, scatter_kws={
     "s": 80});

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第21张图片

第三个数据集存在一个噪点outlier影响了拟合效果,可以使用roboust属性保持健壮性

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),
           robust=True, ci=None, scatter_kws={
     "s": 80});

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第22张图片

作者相关的文章、资源分享

让天下没有学不会的技术

学习C#不再是难问题

C#入门到高级教程

有关C#实战项目

C#RS232C通讯源码

C#委托数据传输

C# Modbus TCP 源代码

C# 仓库管理系统源码

C# 欧姆龙通讯Demo

C#+WPF+SQL目前在某市上线的车管所摄像系统

2021C#与Halcon视觉通用的框架

2021年视觉项目中利用C#完成三菱PLC与上位机的通讯

VP联合开源深度学习编程(WPF)

✨有关C#项目欢迎各位查看个人主页✨

机器视觉、深度学习

学习机器视觉、深度学习不再是难问题

Halcon入门到精通

深度学习资料与教程

有关机器视觉、深度学习实战

2021年C#+HALCON视觉软件

2021年C#+HALCON实现模板匹配

C#集成Halcon的深度学习软件

C#集成Halcon的深度学习软件,带[MNIST例子]数据集

C#支持等比例缩放拖动的halcon WPF开源窗体控件

2021年Labview联合HALCON

2021年Labview联合Visionpro

基于Halcon及VS的动车组制动闸片厚度自动识别模块

✨有关机器视觉、深度学习实战欢迎各位查看个人主页✨

Java、数据库教程与项目

学习Java、数据库教程不再是难问题

JAVA入门到高级教程

数据库入门到高级教程

有关Java、数据库项目实战

Java经典怀旧小霸王网页游戏机源码增强版

js+css类似网页版网易音乐源码

Java物业管理系统+小程序源码

JavaWeb家居电子商城

JAVA酒店客房预定管理系统的设计与实现SQLserver

JAVA图书管理系统的研究与开发MYSQL

✨有关Java、数据库教程与项目实战欢迎各位查看个人主页✨

分享Python知识讲解、分享

学习Python不再是难问题

Python知识、项目专栏

Python 检测抖音关注账号是否封号程

手把手教你Python+Qt5安装与使用

用一万字给小白全面讲解python编程基础问答

Python 绘制Android CPU和内存增长曲线

有关Python项目实战

Python基于Django图书管理系统

Python管理系统

2021年9个常用的python爬虫源码

python二维码生成器

✨有关Python教程与项目实战欢迎各位查看个人主页✨

分享各大公司面试题、面试流程

面试成功不是难事

2021年金九银十最新的VUE面试题☀️《❤️记得收藏❤️》

只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》

❤️用一万字给小白全面讲解python编程基础问答❤️《记得收藏不然看着看着就不见了》

✨有关各大公司面试题、面试流程欢迎各位查看个人主页✨

☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》_第23张图片

❤️关注苏州程序大白公众号❤️



你可能感兴趣的