??苏州程序大白一文从基础手把手教你Python数据可视化大佬??《??记得收藏??》
目录
🏳??🌈开讲啦!!!!🏳??🌈苏州程序大白🏳??🌈 |
🌟博主介绍
💂 个人主页:苏州程序大白
🤟作者介绍:中国DBA联盟(ACDU)成员,CSDN全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年成立柒月软件工作室。
💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦
🎗? 承接各种软件开发项目
💅 有任何问题欢迎私信,看到会及时回复
👤 微信号:stbsl6,微信公众号:苏州程序大白
🎯 想加入技术交流群的可以加我好友,群里会分享学习资料
前言
环境搭建:
下载Anaconda搭建Python环境 。细讲可以看文章
下载类库Numpy , SciPy , matplotlib , pandas 和 seaborn 。可以参考本文
引入需要的库,设置一下显示网格的样式:
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”,这个数据集的属性有:
下面很多例子使用了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);
scatterplot 是relplot 的默认方法所以不需要单独设置,具体属性可以去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 的属性是col 和col_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);
合并图表
另外看一下如何将两个不同类型的图表合为一个,例如下面我们将violin 和swarm 类型的图表在一张图里展示:
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);
通过上面两个例子 ,会发现这两个方法绘制的结果区别不大,但是他们传入的数据是有区别的:
拟合不同种类的数据 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编程基础问答??《😀记得收藏不然看着看着就不见了😀》》🍏
?有关各大公司面试题、面试流程欢迎各位查看个人主页?
??关注苏州程序大白公众号??
👇 👇👇
|