数据可视化详解+代码演练

作者 | Walker

编辑 | 磐石

出品 | 磐创AI技术团队

【磐创AI导读】:本文详细介绍了两个数据可视化工具库并附python演练。欢迎大家点击上方蓝字关注我们的公众号:磐创AI

我们本篇文章讲的数据可视化是面向开发人员的,是利用python中一些可视化库如:matplotlib或是seaborn通过对数据可视化,来分析数据表格中各维度间的关系或是数据分布的特性,从而有助于我们更好的理解数据,帮助我们进行下一步数据分析或是为数据建模提供方向。本篇文章的方法并非是面向用户做数据展示或面向企业做数据可视化,这种情况下大家可以尝试使用Echarts或Tableau等数据展示工具。本文将分为matplotlib可视化和seaborn可视化两个部分。

一、Matplotlib数据可视化

Matplotlib是一个Python的2D绘图库,开发者使用Matplotlib仅需要几行代码便可以轻松绘图,生成柱状图、散点图、折线图、盒图、琴图等。

首先,matplotlib的安装非常的简单,Windows环境下我们可以通过pip install matplotlib直接完成安装,而Linux环境可以使用sudo pip install matplotlib完成安装。接着我们使用import matplotlib.pyplot as plt导入matplotlib库,便可以开始绘图了。

完整的绘图程序如下所示,包括图例、坐标轴、取值范围、刻度值、标题、注解等内容。

程序1:

import numpy as np
import matplotlib.pyplot as plt
from pylab import *

# 定义数据部分
x = np.arange(0., 10, 0.2)
y1 = np.cos(x)
y2 = np.sin(x)
y3 = np.sqrt(x)

# 绘制 3 条函数曲线
plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')
plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')
plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')

# 坐标轴上移
ax = plt.subplot(111)
ax.spines['right'].set_color('none')     # 去掉右边的边框线
ax.spines['top'].set_color('none')       # 去掉上边的边框线

# 移动下边边框线,相当于移动 X 轴
ax.xaxis.set_ticks_position('bottom')    
ax.spines['bottom'].set_position(('data', 0))

# 移动左边边框线,相当于移动 y 轴
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

# 设置 x, y 轴的取值范围
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.5, 4.0)

# 设置 x, y 轴的刻度值
plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10'])
plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], 
    [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])

# 添加文字
plt.text(4, 1.68, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
plt.text(4, 1.38, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)

# 特殊点添加注解
plt.scatter([8,],[np.sqrt(8),], 50, color ='m')  # 使用散点图放大当前点
plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))

# 设置标题、x轴、y轴
plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)

# 设置图例及位置
plt.legend(loc='up right')    
# plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')

# 显示网格线
plt.grid(True)    

# 显示绘图
plt.show()

散点图、曲线图、折线图、灰度图、饼状图、箱图、琴图等常用图形的绘制,也非常的简单,程序如下所示:

程序2:

#散点图,是用来展示两个维度间的相关性
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plt.scatter(x,y)

程序3:

#曲线图,观察某个变量的走势

x = np.arange(-5,5,0.1)

y = x ** 2

plt.plot(x,y)y = np.random.normal(size=1000)

程序4:

#灰度图,查看某个维度的数据状况

x = np.random.normal(size=1000)

plt.hist(x, bins=100)

程序5:

#饼图,显示一个系列中各项的大小以及各项所占总和的比例

import numpy as np

import matplotlib.pyplot as plt

# x为数据, 根据数据在所有数据中所占的比例显示结果

# labels设置每个数据的标签

# autoper 设置每一块所占的百分比

# explode 设置某一块或者很多块突出显示出来, 由上面定义的explode数组决定

# shadow 设置阴影,这样显示的效果更好

labels = ["SH", "BI", "SZ", "GD"]

facts = [20, 10, 30, 40]

explode = [0, 0, 0.02, 0]

plt.axes(aspect = 1)

plt.pie(x = facts, labels = labels, explode= explode, shadow= True)

plt.show()

程序6:

#箱图

#上边缘(Q3+1.5IQR)、下边缘(Q1-1.5IQR)、IQR=Q3-Q1

#上四分位数(Q3)、下四分位数(Q1)

#中位数

#异常值

#处理异常值时与3σσ标准的异同:统计边界是否受异常值影响、容忍度的大小

 

plt.boxplot(y)

二、Seaborn数据可视化

Seaborn相较于matplotlib更加的方便、简单。因为Seaborn中自带了一些统计的包,它在画图的同时,会完成统计的拟合。而且Seaborn画图时的参数也更多,这样matplotlib可能很多行的代码,seaborn仅仅需要间的几行就能实现同样的效果。

Seaborn的安装也非常的简单,使用pip install seaborn直接安装即可,首先我们来介绍一些Seaborn中的基本绘图函数:折线图:plot()、散点图:lmplot()、柱状图:barplot()、联合分布图:jointplot()、琴图:violinplot()、箱式图:boxplot()、比较图:pairplot()等。常用的属性有hue:对数据按照不同的类型先做分组,再分别对每组数据绘图;col:用于多列数据都出现分组时;markers:用哪种符号对数据进行标注,Ci:是否开启置信区间;color、data、x、y等。

接下来我们通过两个案例来直观的比较一下seaborn和matplotlib的不同。

案例一:给定数据集航班乘客变化分析data = sns.load_dataset("flights"),利用柱状图分析乘客在一年中各月份的分布情况。

Matplotlib版本:

per_month_distribute = data.groupby('month').agg([np.mean, np.std])['passengers']

_,axe=plt.subplots()

plt.rcParams["figure.figsize"] = (12,8)

print(per_month_distribute)

plt.bar(range(12), per_month_distribute['mean'],color='cadetblue',label='average')

#yerr:y坐标对应误差的正负值,ls=linestyle,lw=linewidth

plt.errorbar(range(12), per_month_distribute['mean'],yerr=per_month_distribute['std'],ls='none',color='darkslategray', lw=5, label='error')

plt.xticks(range(12),per_month_distribute.index,fontsize=15,rotation=45)#把X轴上的字体旋转45度,以免重叠

plt.xlabel('Month of Year',fontsize=20)

plt.ylabel('Passengers',fontsize=20)

plt.legend([u"乘客量均值", u"乘客量标准差"],fontsize=15) #把label标注的内容显示出来

plt.title(u'乘客在一年中各月份的分布',fontsize=25)

axe.spines['top'].set_color(None)

axe.spines['right'].set_color(None)

plt.scatter(x,y)

Seaborn版本:

import seaborn as sns

sns.factorplot(x='month',y='passengers',data=data, kind='bar',size=8)

效果图:

案例二:给定数据集餐厅收取小费的情况:data = sns.load_dataset("tips"),绘制分组柱状图分析性别+抽烟的组合因素对慷慨度的影响。

Matplotlib版本:

tmp_data=data.groupby(['sex','smoker'])['tip'].agg([np.mean,np.std])

width = 0.2

_,axe=plt.subplots()

plt.bar([1,2],tmp_data['mean'].loc['Male'],width=width, label='Male')

plt.errorbar([1,2],tmp_data['mean'].loc['Male'],

             yerr = tmp_data['std'].loc['Male'], ls ='none',lw=4,color='darkblue',label=None)

#画女性抽烟柱状图,X+0.2

plt.bar([x+width for x in [1,2]],tmp_data['mean'].loc['Female'],width=width,label='Female',color='salmon')

plt.errorbar([x+width for x in [1,2]],tmp_data['mean'].loc['Female'],

             yerr=tmp_data['std'].loc['Female'],ls='none',lw=4,color='darkred',label=None)

plt.setp(axe, xticks=[1.1,2.1], xticklabels=['Yes','No'])  #设置横坐标参数

plt.legend(fontsize=15)

plt.xlabel('Smoker',fontsize=15)

plt.ylabel('Tip',fontsize=15)

plt.axis([0.7,2.7,0,5])   #移动坐标轴,[left,right,bottom,top],距离左右,上下边框的距离

plt.title(u'性别+抽烟的组合因素对慷慨度的影响')

Seaborn版本:

sns.barplot(x='smoker',y='tip',data=tips,hue='sex')

效果图:

总结:通过上边的案例我们分别通过matplotlib和seaborn完成了数据可视化的操作,我么可以看到Seaborn封装的更好,使用起来更简单;但Matplotlib灵活性更高、功能也更加强大。学习Matplotlib和Seaborn更多的函数、图形的绘制,欢迎大家学习它们的官方手册,这里小编只是做了一个简单的常用整理。Matplotlib官方文档:http://www.matplotlib.org;

Seaborn官方手册:http://seaborn.pydata.org。

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习入门与实践

【原】KMeans与深度学习自编码AutoEncoder结合提高聚类效果

这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: 1 id goods_name goods_amount 2 1 ...

5257
来自专栏数据小魔方

图表案例|纵向折线图

今天要跟大家分享的是纵向折线图! 本例中要展示的是纵向折线图的制作技巧! 在excel中折线图、散点图等图表类型是没有办法直接做成纵向的那种的(就像是柱形图和条...

3985
来自专栏FreeBuf

Kaggle:一套完整的网站流量预测模型

今天给大家推荐的是一个名叫Kaggle的网站流量预测项目,本项目采用Python语言开发,可以给大家的流量预测建模提供一些思路。 ? 数据模型 Kaggle的训...

4956
来自专栏机器之心

入门 | 完全云端运行:使用谷歌CoLaboratory训练神经网络

3899
来自专栏量子位

前端利器!让AI根据手绘原型生成HTML | 教程+代码

这么多环节,任何地方出一点问题,都会拉长开发周期。因此,不少公司,比如Airbnb已经开始用机器学习来提高这个过程的效率。

2793
来自专栏九彩拼盘的叨叨叨

选择合适的动画缓动函数

最近在写要兼容IE6的幻灯组件(感兴趣的点这里)。为了让幻灯的切换效果更舒服,就研究了下动画的缓动函数。

873
来自专栏CSDN技术头条

AI 可能真的要代替插画师了……

事先声明,这篇文章的标题绝不是在耸人听闻。事情的起因是前段时间在朋友圈看到同学在转发一篇论文,名字叫《Create Anime Characters with ...

2128
来自专栏机器之心

KDD2018 | 电商搜索场景中的强化排序学习:形式化、理论分析以及应用

(1)对电商搜索场景中的多步排序问题进行形式化描述,定义搜索会话马尔科夫决策过程问题模型(Search Session Markov Decision Proc...

2452
来自专栏数据小魔方

带预测区间的图表

今天跟大家分享带预测区间的图表图表制作技巧! 当图表中的数据带有预测区间,也就是包含未来预测的还未发生的业绩数据时,按照惯常的做法,无法很好地区分已发生和未发生...

3645
来自专栏数据小魔方

旋风图(蝴蝶图)

今天要给大家分享的图表是旋风图! ▽▼▽ 其实我更喜欢叫这种图为蝴蝶图,因为图表两侧像一对翅膀一样,这种图表多用于某个事物的两种不同指标对比,如同一个年龄段两种...

3265

扫码关注云+社区

领取腾讯云代金券