前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据应用导论 Chapter05 | 数据可视化

大数据应用导论 Chapter05 | 数据可视化

作者头像
不温卜火
发布2020-10-28 15:03:07
2.5K0
发布2020-10-28 15:03:07
举报
文章被收录于专栏:不温卜火

一、可视化概述

  • 一图胜千字;一张简单的图标在传递大量信息的同时,能更加直观地阐述观点。可视化历史悠久,最早在墙上、粘土上绘图,随后在纸上。
  • 现代其算计出现后,数据可视化发展迅速,展示方式已超过30种并各有独特地用处。
  • 图形多样:条形图、饼图、箱线图、气泡图、直方图…
  • 绘图工具也多种多样:Matplotlib、Seaborn、Tableau、Echarts等

条形图与直方图能最快地展示数据分布是否均匀。 条形图(bar chart)

  • 纵轴通常代表数量

直方图(histogram)

  • 纵轴通常代表频率
1
1

箱纸图(box plot)

  • 用来展示一个连续数值特征地分布。
2
2

散点图(scatter plot)

  • 散点图是一种图形表达形式,具有描述两个连续型地特征,具有检测离群值地功能。
3
3

气泡图(bubble chart)

  • 展示第三个连续型数值的特征,气泡大小反应特征的大小。
4
4

饼图(pie chart)

  • 饼图是条形图的变种,能很好展示各个分量占总体数的比例。
  • 使用饼图时饼图的分类不宜过多。
5
5

数据可视化工具: 1、Matplotlib(Python):一个2D绘图库,可以绘制许多高质量的图形 2、Seaborn(Python):Matplotlib基础上的高级绘图库,运用简单的操作就能够画出较为复杂的图形 3、Tableau:一个强大的数据可视化工具,可实时进行可视化数据分析和数据探索 4、Echarts:由百度前端技术部开发的,基于Javascript的数据可视化图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表

二、Matplotlib可视化

1、Matplotlib基本介绍

  • 一个Python的2D绘图库,以各种格式和跨平台交互式环境生成高质量的图形。
  • 仅需几行代码,便可生成条形图、直方图等各种图形。
6
6

Matplotlib官网:https://Matplotlib.org/ 安装:

  • Anaconda环境下:自带matplotlib
  • pip环境下:pip install matplotlib

Matplotlib中最常用的是pyplot子模块:

  • Matplotlib.pyplot是命令行式函数的集合。
  • 每个pyplot函数都会对图形进行一些更改。
  • 引入:import matplotlib.pyplot as plt

2、Matplotlib基本图表函数

1. title():图的标题 2. plot():绘制图表 3. show():展示图表 4. xlabel():X轴命名 5. ylabel():Y轴命名 6. xticks():X轴刻度 7. yticks():Y轴刻度 8. savefig():保存图片

2.1、正弦图像

1、简单的正弦图像
代码语言:javascript
复制
## 忽略警告信息
import warnings
warnings.filterwarnings('ignore')

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2 * np.pi, 2 * np.pi, 200)  #在-2Π和2Π间等距离生成200个点
y = np.sin(x)          # 正弦函数

plt.plot(x,y)		   # 绘制图表
plt.title("sinx")	   # 命名标题
plt.show()			   # 展示图表
7
7
2、加上坐标轴名称和刻度
代码语言:javascript
复制
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y = np.sin(x)

plt.plot(x,y)
plt.title("sinx")
plt.xlabel("X")        # X轴命名
plt.ylabel("Y")		   # Y轴命名
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])    # X轴刻度命名

plt.show()
8
8
3、在一个图中画多条线
代码语言:javascript
复制
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x,y1)
plt.plot(x,y2)
plt.title("sinx&cosx")
plt.xlabel("X")
plt.ylabel("Y")
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])
plt.show()
9
9
4、实线变虚线
  • 通过各种函数和参数控制形状、粗细、颜色;坐标轴范围、缩放、平移等。
代码语言:javascript
复制
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

ax=plt.gca()
ax.spines['right'].set_color('none') 
ax.spines['top'].set_color('none') 

ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y1 = np.sin(x)
y2 = np.cos(x)

plt.axis([-3*np.pi,3*np.pi,-1.5,1.5])
plt.plot(x,y1,'b--',label='sinx')
plt.plot(x,y2,'r--',label='cosx')
plt.title("sinx&cosx")
plt.legend(loc='upper left', frameon=False)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])

plt.show()
10
10
5、一界多图
  • 在一个输出界面中画多个图,构造不同的排版

代码语言:javascript
复制
x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y1 = np.sin(x)
y2 = np.cos(x)


plt.subplot(2,2,1)             
plt.plot(x,y1)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])


plt.subplot(2,2,2)            
plt.plot(x,y2)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])



plt.subplot(2,2,3)             
plt.plot(x,y2)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])

plt.subplot(2,2,4)            
plt.plot(x,y1)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
           [r'$-2\pi$', r'$-\pi$',  r'$0$', r'$\pi$',r'$2\pi$'])


plt.show()
11
11

2

代码语言:javascript
复制
x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(1)
plt.subplot(2, 1, 1)
plt.plot(x, y1)
plt.xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi],
           [r'$-2\pi$', r'$-\pi$', r'$0$', r'$\pi$', r'$2\pi$'])

plt.subplot(2, 1, 2)
plt.plot(x, y2)
plt.xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi],
           [r'$-2\pi$', r'$-\pi$', r'$0$', r'$\pi$', r'$2\pi$'])

plt.savefig('sinx&cosx1', dpi=1000)

plt.figure(2)
plt.subplot(1, 2, 1)
plt.plot(x, y2)
plt.xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi],
           [r'$-2\pi$', r'$-\pi$', r'$0$', r'$\pi$', r'$2\pi$'])

plt.subplot(1, 2, 2)
plt.plot(x, y1)
plt.xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi],
           [r'$-2\pi$', r'$-\pi$', r'$0$', r'$\pi$', r'$2\pi$'])

plt.show()
12
12

2.2、其他图像

导入

代码语言:javascript
复制
import pandas as pd
tips = pd.read_csv('./input/tips.csv')
tips.head()
1、散点图
代码语言:javascript
复制
x = tips['total_bill']
y = tips['tip']
plt.scatter(x,y)
plt.show()
13
13
2、柱形图
代码语言:javascript
复制
x = tips['size'].value_counts().index.tolist()
y = tips['size'].value_counts().tolist()
plt.bar(x,height = y)
plt.show()
14
14
3、箱线图
代码语言:javascript
复制
x = tips['tip']
plt.boxplot(x, labels=['tip'])
plt.show()
15
15
4、饼图
代码语言:javascript
复制
#x为计数,y为标签
x = tips['day'].value_counts().tolist()
y = tips['day'].value_counts().index.tolist()

plt.pie(x, labels=y, autopct='%0.0f%%')
plt.show()
16
16

2.3、拓展包

  • 除此之外matplotlib有很多拓展包,如mpl_toolkits.mplot3d提供3D绘图
17
17

三、Seaborn可视化

1、Seaborn基本介绍

安装:

  • 在终端使用pip安装Seaborn:
  • pip install seadorn
  • 使用conda安装Seaborn:
  • conda install seaborn
  • 使用pip从github上下载:
  • pip install git+https://github.com/mwaskom/seaborn.git

在使用Seaborn前,建议配置的库:

  • Numpy
  • Scipy
  • Matplotlib
  • Pandas

导入Seaborn库:import seaborn as sns

1.1、视图设置

Seaborn其中一个特点是可以设置视图主题

Seaborn中可以选择的主题有五种:

1. darkgrid:灰色风格 2. whilegrid:白色风格 3. dark:黑色 4. while:白色 5. ticks:有刻度的

设置Seaborn主题可用set()函数

18
18

1.2、颜色设置

Seaborn在颜色设置上也十分方便

有六个默认颜色循环主题:

1. deep 2. muted 3. pastel 4. bright 5. colorblind

19
19
  • 其中一组常用的颜色是“hls”,有多种颜色可供选择
20
20
  • 连续渐变颜色可用于数值型数据:数据值越大,颜色越深
21
21
  • 还有用于区别不同类别数据的颜色
22
22

2、案例(基本使用方法)

2.1、读取数据

代码语言:javascript
复制
import pandas as pd
tips = pd.read_csv('./input/tips.csv')
tips.head()
23
23
24
24

2.2、作图

1、regplot
  • 使用regplot对两个数值变量的关系进行视图
代码语言:javascript
复制
fig, ax = plt.subplots(figsize=(10,8))
sns.set(style="whitegrid",font_scale=2)
ax = sns.regplot(x="total_bill", y="tip",data=tips)
ax.set_xlabel("total bill")
ax.set_ylabel("tip")
ax.set_title("The relationship between total bill and tip")
25
25
  • 据上图可知,随着总账单的增加,消费也随之增加
2、countplot

对于离散型的数据,Seaborn提供了多种视图方法:

  • countplot:计算每种类别的个数
  • violinplot:查看每种类别对应的连续数据分布

下面以吸烟者和非吸烟者人数的情况对比图进行演示:

代码语言:javascript
复制
fig, ax = plt.subplots(figsize=(10,8))
sns.set(style="whitegrid",font_scale=3)
sns.countplot('smoker',data=tips,palette=sns.color_palette("Blues_d", 2))
26
26

由上图可知:

  • 吸烟者数量没有非吸烟者数量多
  • 非吸烟者数量约150
  • 吸烟者数量不到100
3、violinplot

以男性和女性在午餐和晚餐的小费情况:

代码语言:javascript
复制
fig, ax = plt.subplots(figsize=(10,8))
sns.set(style="whitegrid",font_scale=2)
sns.violinplot(x="time",y="tip",hue="sex",data=tips,palette=sns.color_palette("Blues_d", 2))
27
27

由上图可知:

  • 晚餐时间男女性给的小费范围相对午餐时间大
  • 午餐时间小费金额集中在2左右
  • 晚餐时间小费金额集中在3左右
  • 男性比女性给出的小费金额范围较大
  • 女性比男性给出的小费金额较为集中
4、pairplot

Seaborn的pairplot可以快捷展示不同类型对应的数值性数据情况:

代码语言:javascript
复制
#fig, ax = plt.subplots(figsize=(10,8))
sns.set(style="ticks",font_scale=2)
g = sns.pairplot(tips, hue="sex",height=3)
28
28
  • 斜对角线的图展示了三个变量的分布情况
  • 其他图体现了变量间的关系
  • 直观体现男女在变量分布和变量关系的区别

四、Tableau可视化

关于Tableau可视化,具体可以看我往期的博文:

  • 传送门:

Tableau

https://blog.csdn.net/qq_16146103/category_9813151.html

数据可视化

https://blog.csdn.net/qq_16146103/category_9813153.html

五、Seborn绘图案例(源码)

代码语言:javascript
复制
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

tips = pd.read_csv('./input/tips.csv')
tips.head()
29
29
代码语言:javascript
复制
# 男性和女性相比,谁更慷慨
male = tips[tips['sex'] == 'Male']
female = tips[tips['sex'] == 'Female']

sns.barplot(x=['male', 'female'], y=[male['tip'].mean(), female['tip'].mean()])
# 男性更加慷慨一些
# 男性性别上的慷慨
30
30
代码语言:javascript
复制
# 抽烟的人和不抽烟的人相比,谁更慷慨
smoker = tips[tips['smoker'] == 'Yes']
no_smoker = tips[tips['smoker'] == 'No']

sns.barplot(x=['smoker', 'no_smoker'], y=[smoker['tip'].mean(), no_smoker['tip'].mean()])
# 抽烟和不抽烟的人,对小费的影响不大
31
31
代码语言:javascript
复制
tips.groupby('sex').mean()['size'].plot(kind='bar')
# 男性买单的情况下,聚餐人数比较多
32
32
代码语言:javascript
复制
# 如何同时展示多个图像
tips.groupby('smoker').mean().plot(kind='bar')
33
33
代码语言:javascript
复制
tips.groupby('day').mean().plot(kind='bar')
34
34
代码语言:javascript
复制
tips.groupby('time').mean().plot(kind='bar')
35
35
代码语言:javascript
复制
# 男性买单的情况比较多
tips.groupby(['sex'])['size'].count().plot(kind='bar')
36
36
代码语言:javascript
复制
# total_bill在8~32的情况比较多
tips['total_bill'].plot(kind='hist')
37
37
代码语言:javascript
复制
# 5元一下的tip比较多,占大多数
tips['tip'].plot(kind='hist')
38
38
代码语言:javascript
复制
# 小费和账单的相关性
sns.regplot(x='total_bill', y='tip', data=tips)
# total_bill和小费之间有正相关关系
# total_bill越大,小费越多
39
39
代码语言:javascript
复制
tips[['total_bill', 'tip']].corr()
40
40
代码语言:javascript
复制
sns.jointplot(x='total_bill', y ='tip', data = tips, kind='reg')
41
41
代码语言:javascript
复制
sns.pairplot(tips[['total_bill', 'tip', 'size']], kind='reg')
# total_bill、tip、size相互是正相关的
# 探索一下,因果关系
# size->total_bill->tip
42
42
代码语言:javascript
复制
new_tips = tips.copy()

new_tips['averge_cost'] = new_tips['total_bill']/new_tips['size']

new_tips.groupby('size').mean()['averge_cost'].plot(kind='bar')
# 人均消费,从2个人的消费开始,逐渐下降
43
43
代码语言:javascript
复制
new_tips['averge_tip'] = new_tips['tip']/new_tips['size']

new_tips.groupby('size').mean()['averge_tip'].plot(kind='bar')
# 人越多,人均小费就越少
44
44
代码语言:javascript
复制
new_tips.groupby('size').count()['averge_tip'].head(10)
45
45
代码语言:javascript
复制
tips['all'] = tips['total_bill'] + tips['tip']

tips['all']
46
46
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、可视化概述
  • 二、Matplotlib可视化
    • 1、Matplotlib基本介绍
      • 2、Matplotlib基本图表函数
        • 2.1、正弦图像
        • 2.2、其他图像
        • 2.3、拓展包
    • 三、Seaborn可视化
      • 1、Seaborn基本介绍
        • 1.1、视图设置
        • 1.2、颜色设置
      • 2、案例(基本使用方法)
        • 2.1、读取数据
        • 2.2、作图
    • 四、Tableau可视化
    • 五、Seborn绘图案例(源码)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档