Python可视化必看,用三种方式学会制作散点图!

作者:潘彼得

本文我们将使用Python的三种绘图包Matplotlib、Seaborn、ECharts为大家展示如何对数据进行可视化以及如何选择和解读图表,如有解读不恰当的地方还请各位多多指教。

散点图概述

用两组变量的数据构成多个坐标点,观察坐标点的分布,从而判断两变量之间是否存在某种关联或总结坐标点的分布模式。

特征与适用

散点图常用于显示和比较跨类别的聚合数据,且数据量越多,散点图的效果也会越明显。从散点图可以解读出的信息有:变量间是否存在数量关联趋势、存在线性还是曲线的关联趋势、判断数据中是否有离群点等。

数据简介

本次使用的数据集是使用了seaborn中自带的线上数据,是一组餐厅经营的数据,共7个字段: - 连续型变量有2个:total_bill(消费金额),tip(小费金额); - 离散型变量有5个:sex(性别),smoker(是否吸烟),day(就餐日期:周一~周日),time(就餐时间:Lunch/Dinner),size(就餐人数)。

#导入需要用到的绘图库
import matplotlib.pyplot as plt
import seaborn as sns
import pyecharts as pye

#导入并查看线上数据集tips
tips=sns.load_dataset("tips")
tips.head()

Python可视化必看,用三种方式学会制作散点图!_第1张图片

数据思考

获取到数据之后我们可以从业务角度出发,设想几个问题,带着问题去探索数据

例如:
1影响小费金额的大小因素有哪些,分别是什么关系?

2通过数据探索,我们还可以得知哪些信息?

3对餐厅有没有经营建议?

绘图

Matplotlib.pyplot

matplotlib是Python的一个绘图库,其中pyplot封装了很多类似 MATLAB 中的绘图相关函数,是Python比较常用绘图方式,绘图可定制性较强,图片也会根据参数的调整而产生变化。pyplot主要用于交互式绘图和简单的程序化绘图。

#绘制散点图,查看小费金额与客户消费金额的关系
plt.scatter(tips.total_bill,tips.tip)

#保存图片,可直接写入存储路径
plt.savefig('plt-散点图1.jpg')

Python可视化必看,用三种方式学会制作散点图!_第2张图片

通过设置函数参数,把它变成我们想要的样式:

#设置坐标点参数
plt.scatter(tips.total_bill,tips.tip,                        
            marker = '*',     #数据点的形状
            label = 'money',  #数据标签名称
            s = 50,           #数据点大小
            c = 'y',          #数据点填充颜色
            edgecolors='m')   #数据点边缘颜色
#设置轴参数
plt.xlabel("total_bill")      #x轴标签名称
plt.ylabel("tip")             #y轴标签名称
#设置数据标签参数
plt.legend(loc='upper left')  
plt.show()

Python可视化必看,用三种方式学会制作散点图!_第3张图片
通过散点图可以看到,小费和消费金额呈正比,即消费金额越大,小费金额越高。

matplotlib绘图相对基础,根据我们的需求想法设置不同的参数就可以了,有兴趣的可以去官网探索https://matplotlib.org/。

Seaborn

Seaborn是基于matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形。Seaborn库旨在将可视化作为探索和理解数据的核心部分,有助于帮人们更近距离了解所研究的数据集。无论是在kaggle官网各项算法比赛中,还是互联网公司的实际业务数据挖掘场景中,都有它的身影。

图一

#查看小费与消费金额之间的关系,并用吃饭时间表示散点的颜色
sns.set()  #使用set单独设置画图样式和风格,如未填写任何参数即使用默认样式
sns.scatterplot(x="total_bill", y="tip",  #设置数据集
                hue="time",    #用标记点颜色表示的变量
                data=tips)

Python可视化必看,用三种方式学会制作散点图!_第4张图片
上图可以看到:1.小费和消费金额呈正比,即消费金额越大,小费金额越高;2.该店晚上客流量高于中午的客流量;3. 小费金额区间大约为[1,6],消费金额大约为区间[8,40]

图二

#通过增加参数增加图片显示的信息维度,用散点颜色表示是否抽烟,散点形状表示性别
sns.scatterplot(x='total_bill',y='tip',data=tips,hue='smoker',
                style = 'sex',    #用标记点形状表示的变量
                palette='YlGnBu')  #修改图标色板

Python可视化必看,用三种方式学会制作散点图!_第5张图片
上图可以看到:1.该店吸烟人士大多为男士;2.小费金额在5以上的大都是不吸烟男士贡献的,但小费金额的最大值是一位吸烟的男士,我们可以把它当作"离群点";3.男士给的小费金额普遍高于女士;

图三

#继续增加维度
sns.relplot(x="total_bill", y="tip", col="time",hue="smoker", style="sex", 
            size="size",        #用点大小表示的变量
            palette="YlGnBu",   #变换色板
            markers=["D", "o"], #标记点的样式,和style对应,style变量有几种分类,需设置相应的点形状
            sizes=(10, 125),    #标记点大小的区间范围
            edgecolor=".2",     #标记点边缘线颜色
            linewidth=.5,       #边缘线的宽度
            data=tips);

Python可视化必看,用三种方式学会制作散点图!_第6张图片
上图可以看到:1.消费金额会随着就餐人数增多而增加,且小费也会随之增加,且该店就餐人数2人同行居多;2.大部分的吸烟人士处于消费金额较底的区间;

图四

sns.relplot(x="total_bill", y="tip", col="day",row = 'time',
            hue="smoker", style="sex", size="size",
            palette="YlGnBu", markers=["D", "o"], sizes=(10, 125),
            edgecolor=".2", linewidth=.9, 
            data=tips);

Python可视化必看,用三种方式学会制作散点图!_第7张图片
上图展示了7个维度的信息,绿色圆圈代表吸烟女性,绿色菱形代表吸烟男性,蓝色圆圈代表不吸烟女性,蓝色菱形代表不吸烟男性,可以看出:1.tips数据集时间为周四~周日该店的就餐情况,且客流量主要集中在周四中午和周末晚上;2.此家餐厅女性就餐相对较少;

Echarts

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

在我看来ECharts最大的特点就是可以让图片动起来,在展示和表现力上更胜一筹。

from pyecharts import Scatter
sca = Scatter("散点图",width = 600,height = 300) #设置画布参数
sca.add("消费与小费金额情况",     #设置图标名称
        tips.total_bill,tips.tip,   #数据集
        xaxis_name="消费金额",yaxis_name="小费",  #x轴,y轴坐标名称
        yaxis_name_gap=35,      #调整x轴坐标名称
        mark_line=["average"],  #标记统计值:均值
        mark_point=["max", "min"],  #标记数据最大最小值
        is_label_show=True)     #是否显示每个坐标点数据
sca
from pyecharts import EffectScatter
es = EffectScatter("动态散点图")
es.add("effetScatter",tips.total_bill,tips.tip)
es
es.render('effectScatter.html')  #将动态图保存为html文件

Python可视化必看,用三种方式学会制作散点图!_第8张图片
通过对数据的探索,我们可以对此家餐厅提出以下经营建议:

该店就餐人数2人居多,可适当增加两人餐桌;
该店就餐女性较少,可考虑做一些活动或适合女性的餐饮来吸引女性;
该店午餐客流量较少,如果想增加午餐时间客流量,可以进一步探索数据对症下药。

如果我的分享对你有帮助,请关注我们,以后会有更多精彩的内容呈现。

你可能感兴趣的:(python,可视化,python,数据可视化,机器学习,大数据)