深入浅出数据分析CH04-数据图形化

2 篇文章 0 订阅
1 篇文章 0 订阅

前言

本文是本人研读《深入浅出数据分析》一书后,使用不同工具对书中案例的分析,一是为了加强自己对案例的理解,二是希望能将各种主流工具学以致用,三是将个人的学习思考进行总结量化;

本文所使用的案例数据均从《深入浅出数据分析》的官网中下载,根据自己的学习需求对数据进行了一些处理,不代表官方,官方下载地址如下:examples / Head First Data Analysis · GitLab (oreilly.com)

背景描述

有一家在线服装零售商,刚刚进行了一次测试网页外观的试验,在一个月的时间内,每一位浏览网站的人都随机浏览到三种不同风格的主页设计之一。实验数据非常丰富,甚至可以说是太多了,老板想知道哪一种网页设计能够给网站带来最高营业额、最多浏览时间、最多浏览次数和最高回访率,需要你从中找出有用的数据,按照老板的要求呈现数据图表,并分析出最优秀的主页设计!

思考引导

你需要哪些数据来回应老板的要求?

个人思考:老板想知道哪一种网页设计能够给网站带来最高营业额、最多浏览时间和最高回访率,那么我就需要每个主页的上述信息,通过对比各个主页的数据,分析出最优秀的主页设计;

现有数据

3个主页的数据,数据结构如下

解决思路

绘制出每个主页的浏览时间、浏览次数、回访率与营业额之间的两两关系散点图,并加上以上各项数据的平均值线,通过对比分析出最优秀的主页设计;

详细步骤

(1)先手绘草图构思好数据要怎么呈现(横轴和纵轴分别放什么数据);

(2)思考在图面上要加什么图表对象(坐标轴、坐标轴标题、图表标题、数据标签、趋势线、图例);

(3)思考这些对象的位置、颜色、风格、形状、透明度等方面要调整成什么参数,先从散点的形状开始调整;

(4)先做出一个样图后再批量复制代码/图表,更换数据源画另一个图;

工具选择

Excel

(1)首先将源数据处理成以下格式并进行转置,计算了每个属性的平均值;

(2)绘制散点图

如果想在散点图中绘制线条,只需要传入两个坐标点做为一个序列,将这个序列的标记分割全部改为无,将线条风格改为实线,并将实线改为虚线。上一步计算出的各项平均值就是是为了绘制平均线用的,每项平均值都是两个是因为绘制一条直线需要两个点,两点确定一条直线,通过(0,平均营业额),(25,平均营业额) 这两点绘制出平均营业额直线,通过(平均浏览时间,0), (平均浏览时间,120)这两点绘制出平均浏览时间直线;具体数据源选择见附录;

Tableau

(1)首先可以根据个人喜好修改源数据的列名,本文为了方便操作使用源数据格式;

(2)绘制散点图

导入上述数据后,需要在Tableau工作表中将所有度量转换为维度、连续放置在行列框上,才能绘制散点图;

Python

(1)首先可以根据个人喜好修改源数据的列名,本文为了方便操作更改了数据列名;

(2)绘制散点图

源代码见附录。

工具总结

Excel绘图的优点是简单快速,但是当要批量做同样的图时,一定要先调好一张图的格式,再复制这张图,更改数据列,画下一张图,不然每张图都要调格式的话很浪费时间!!

Tableau制图,最简单最友好,平均线的添加最简单!

Python适合批量制图,和Exce制图的思维差不多,调好一张图后,复制黏贴代码,更改代码数据画下一张图,本次散点图效果和Excel不相上下!

图表分析

(1)通过两条平均线,将数据点分布区划分为四象限,左上表示浏览时间短但营业额高,左下表示浏览时间短且营业额低,右上表示浏览时间长且营业额高,右下表示浏览时间长但营业额低;对于一个店铺来说,最好的效果当然是营业额越高越好,但显然大部分人的消费金额都是低于平均营业额的;

(2)通过两条平均线,将数据点分布区划分为四象限,左上表示浏览次数少但营业额高,左下表示浏览次数少且营业额低,右上表示浏览次数多且营业额高,右下表示浏览次数多但营业额低;

(3)通过两条平均线,将数据点分布区划分为四象限,左上表示回头次数少但营业额高,左下表示回头次数少且营业额低,右上表示回头次数多且营业额高,右下表示回头次数多但营业额低;

(4)综上所述,数据最漂亮的是主页3,因为主页3的平均营业额最高,但由于官网只提供了主页1的数据,因此本文没有办法呈现出其他主页的数据图进行对比(除非自己虚假造出一些数据),原书中三个主页的数据图如下:

全文总结

通过散点图,我们可以大致呈现出每位顾客数据的分布,在散点图上加上平均线后,能将区域划分为四象限,更直观展现出散点的分布区域,也方便我们聚焦一开始的目标,最重要的就是营业额的高低,因此平均营业额这条线必不可少;其实还可以将四象限中的重点区域标记上显眼的颜色,让用户一眼看到高光区;

附录

1.Excel数据列选择

(1)双击散点图后,进入图表设计-选择数据

(2)更改数据列

(3)传入平均值点

可以通过手动键入,也可以创造两行数据列来传入x,y

(4)修改平均值序列样式

双击平均值坐标点,进入系列选项-标记,将标记里的参数全部改为“无”,将线条修改为“实线”,颜色改为“黑色”,短划线类型改为“- - -”;

 

2.Python源代码

import matplotlib.pyplot as plt
import pandas as pd

#导入数据
data = pd.read_csv('F:/hfda/home_page1.csv')
print(data)#查看数据

#分离数据,计算各个变量的平均值
Rev=data['营业额']
Rev_Mean=Rev.mean()
Time=data['浏览时间']
Time_Mean=Time.mean()
View=data['浏览次数']
View_Mean=View.mean()
Return=data['回头次数']
Return_Mean=Return.mean()

#散点图
f = plt.figure()  # 创造一个空图框
# 在空图框中绘制子图,行数=模型个数,列数=数据集个数,子图开始位置= 第几个
plt.rcParams['font.sans-serif']='SimHei'#设置中文字体格式
plt.rcParams['axes.unicode_minus']=False#设置横杠显示

#向图框中逐个添加子图
#添加子图1
f.add_subplot(1, 3, 1)
plt.scatter(Time,Rev,color='white',edgecolors='black')#设置散点的填充色和边框色
plt.axvline(Time_Mean,color='black',linestyle='--',alpha=0.5,label='平均浏览时间')#添加平均线,alpha是线条透明度
plt.axhline(Rev_Mean,color='orange',linestyle='--',alpha=0.5,label='平均营业额')
plt.grid(True,linewidth=0.5,alpha=0.4)#设置网格线格式
plt.legend()#显示图例,图例标签为上述线条代码中的label值
plt.title('主页1')  #设置标题
plt.xlabel('浏览时间')   #设置x轴名称
plt.ylabel('营业额',rotation='vertical').set_rotation(90)  #设置y轴名称
plt.ylim(0,120) #设置y轴范围
plt.xlim(0,25) #设置X轴范围

#添加子图2
f.add_subplot(1, 3, 2)
plt.scatter(View,Rev,color='white',edgecolors='black')
plt.axvline(View_Mean,color='black',linestyle='--',alpha=0.5,label='平均浏览次数')
plt.axhline(Rev_Mean,color='orange',linestyle='--',alpha=0.5,label='平均营业额')
plt.grid(True,linewidth=0.5,alpha=0.4)
plt.legend()
plt.title('主页1')  #设置标题
plt.xlabel('浏览次数')   #设置x轴名称
plt.ylabel('营业额',rotation='vertical').set_rotation(90)   #设置y轴名称
plt.ylim(0,120) #设置y轴范围
plt.xlim(0,80) #设置X轴范围

#添加子图3
f.add_subplot(1, 3, 3)
plt.scatter(Return,Rev,color='white',edgecolors='black')
plt.axvline(Return_Mean,color='black',linestyle='--',alpha=0.5,label='平均回头次数')
plt.axhline(Rev_Mean,color='orange',linestyle='--',alpha=0.5,label='平均营业额')
plt.grid(True,linewidth=0.5,alpha=0.4)
plt.legend()
plt.title('主页1')  #设置标题
plt.xlabel('回头次数')   #设置x轴名称
plt.ylabel('营业额',rotation='vertical').set_rotation(90)   #设置y轴名称
plt.ylim(0,120) #设置y轴范围
plt.xlim(0,25) #设置X轴范围

#显示图像
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值