IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> ??苏州程序大白一文从基础手把手教你Python数据可视化大佬??《??记得收藏??》 -> 正文阅读

[Python知识库]??苏州程序大白一文从基础手把手教你Python数据可视化大佬??《??记得收藏??》

目录

🏳??🌈开讲啦!!!!🏳??🌈苏州程序大白🏳??🌈

在这里插入图片描述

🌟博主介绍

💂 个人主页:苏州程序大白

🤟作者介绍:中国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);

在这里插入图片描述
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数据集。
在这里插入图片描述

同时显示多了图表

用到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'"));

在这里插入图片描述

数据种类的可视化 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); 

在这里插入图片描述

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

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

在这里插入图片描述

分布图 Distributions of observations within categories

数据量太大的时候,散点图显示不同种类的分布情况非常恐怖,所以可以使用分布图来观察不同种类数据的分布情况,具体代码就不贴了,只需要更改一下kind属性就可以了,下面分别看一下box,boxen,violin三种情况不同的显示风格:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中要重点说一下violin方法使用了KDE,因此有一些额外的属性可以设置,具体可以查看一下api例如:

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

在这里插入图片描述

合并图表

另外看一下如何将两个不同类型的图表合为一个,例如下面我们将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);

在这里插入图片描述

数据估计

很多情况我们是不需要特别精确的数据信息的,只需要了解各个分类的走势和差异性,这个时候柱状图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);

在这里插入图片描述

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

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

在这里插入图片描述

图表的大小控制

设置图表的大小可以使用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轴以对数形式显示

在这里插入图片描述

数据分布的可视化 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);

在这里插入图片描述

直方图没什么说的,是观察数据分布常见且直观的一个方法,原理也比较简单. 这里重点说一下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();

在这里插入图片描述
从图中可以看出,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);

在这里插入图片描述

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

在这里插入图片描述

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

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

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

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

anscombe = sns.load_dataset("anscombe")

以数据集Anscombe’s quartet(安斯库姆四重奏)为例,先通过下面的表格简单了解一下这个数据集,简单是说就是四组包含<x,y>的数据集:
在这里插入图片描述
然后plot一下四组数据(注意这里使用lmplot,所以x,y轴对应的是字符串),基本工作流程是使用数据集和用于构造网格的变量初始化FacetGrid对象。

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

在这里插入图片描述
现在分析一下这四个数据集,第一个没啥显著特征,观察第二个数据集可以发现它存在高阶关系,可以通过order属性控制阶数,进行多项式回归拟合

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

在这里插入图片描述

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

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

在这里插入图片描述

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

🌟让天下没有学不会的技术🌟

学习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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:14:15  更:2021-10-09 16:14:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:54:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码