数据可视化视图有很多,需要掌握视图的使用和其背后的目的,包括以下九种情况:
需要思考,用户是谁,想呈现的内容,突出数据怎样的特点,以及采用哪种视图呈现。
可视化工具
工具分为以下几类:
商业智能分析软件、可视化大屏、前端可视化组件和编程语言类。
1、商业智能分析
Tableau、PowerBI和中国软帆的FineBI
2、可视化大屏类
DataV、FineReport
3.前端可视化组件
基于Web渲染技术:Canvas(适用于位图)、SVG(可缩放矢量图)、WebGL(3D绘图协议)
可视化组件:Echarts、D3、Three.js和AntV
4、编程语言
Python的可视化库,如Matplotlib(基础)和Seaborn(高级)
R语言可视化库,自带绘图包Graphics及工具包ggplot2等
Python数据可视化
可视化视图可分为4类:
1、比较:比较数据间各类别的关系,或随时间变化的趋势,如折线图。
2、联系:观察两个或两个以上变量之间的关系,如散点图。
3、构成:每个部分占整体的百分比,或随时间的百分比变化,如饼图。
4、分布:关注单个变量或者多个变量的分布情况,如直方图。
按照变量个数,可视化视图可分为单变量分析和多变量分析。
下面介绍以下10种视图
1、散点图
scatter plot,将两个变量的值显示在二维坐标中,适合展示两个变量的关系,还有三维散点图。
可以采用两种方法绘制:(Matplotlib或Seaborn)
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
N=1000
x=np.random.randn(N)
y=np.random.randn(N)
plt.scatter(x,y,marker='x')
plt.show()
df=pd.DataFrame({'x':x,'y':y})
sns.jointplot(x='x',y='y',data=df,kind='scatter')
plt.show()
结果如下:
matplotlib
seaborn
2、折线图
可以用来表示数据随时间变化趋势。
同样可以用Matplotlib或Seaborn进行画图。
x=[2010,2011,2012,2013,2014,2015,2016,2017,2018]
y=[5,3,6,20,17,16,30,32,35]
plt.plot(x,y)
plt.show()
df=pd.DataFrame({'x':x,'y':y})
sns.lineplot(x='x',y='y',data=df)
plt.show()
3、直方图
将横坐标分成一定数量的小区间,用矩形条表示个数
a=np.random.randn(100)
s=pd.Series(a)
plt.hist(a)
plt.show()
sns.distplot(s,kde=False)
plt.show()
sns.distplot(s,kde=True) #通过核函数估计概率密度
plt.show()
4、条形图
查看类别的特征,宽度表示类别,长度表示类别的频数.
x=['Cat1','Cat2','Cat3','Cat4','Cat5']
y=[5,4,8,12,7]
plt.bar(range(5),y,width=0.8,align = 'center')
plt.xticks(range(5),x)
plt.show()
sns.barplot(x,y)
plt.show()
需要注意的是:bar()函数不能直接分类,它的横坐标仍然是标量刻度,要用xticks来映射分类(原专栏中代码有错误)。
5、箱线图
又称盒式图,由五个数值点组成:最大值(max)、最小值(min)、中位数(median)和上下四分位数(Q3,Q1)。可以分析出数据的差异性、离散程度和异常值等。
data=np.random.normal(size=(10,4))
lables=['A','B','C','D']
plt.boxplot(data,labels=lables)
plt.show()
df=pd.DataFrame(data,columns=lables)
sns.boxplot(data=df)
plt.show()
箱线图注解:
6、饼图
每个部分与总和的比例
nums=[25,37,33,37,6]
labels=['High-school','Bachelor','Master','Ph.d','Others']
plt.pie(x=nums,labels=labels)
plt.show()
7、热力图
heat map,一种矩阵表示方法,直观的多元变量分析方法。用颜色代表矩阵的元素值。
flights=sns.load_dataset('flights') #自带数据集,记录了1949到1960年期间,每个月航班乘客数量
data=flights.pivot('year','month','passengers')#索引名、列名、值。
ax = sns.heatmap(flights, annot=True,fmt="d",linewidth=0.5) #annot指定是否显示数据,fmt指定数据的显示格式,linewidth指定数据格子间的距离
plt.show()
颜色越浅,数量越多。
8、蜘蛛图
显示一对多关系的方法。一个变量相对于另一个变量的显著性。
使用Matplotlib画图,首先设置两个数组:labels(属性名称)、stats(属性值)。
准备angles数组,作为坐标角度,用stats数组设定统计结果数值,并且在原有的两个数组上增添一位,即添加数组的第一个元素(画完最后一个点后,要与第一个点进行连线)。
from matplotlib.font_manager import FontProperties
labels=np.array(['推进','KDA','生存','团战','发育','输出'])#设置雷达各个顶点的名称
stats=[83,61,95,67,76,88]
angles=np.linspace(0,2*np.pi,len(labels),endpoint=False)#在[0,2*pi]中返回均匀分布的样本,个数为6,endpoint为false则不包括stop(圆,stop与start重合)
stats=np.concatenate((stats,[stats[0]]),axis=0) #闭合,默认axis=0
angles=np.concatenate((angles,[angles[0]]))
fig=plt.figure() #创建空白figure对象
ax=fig.add_subplot(111,polar=True) #极坐标子图,位置111
ax.plot(angles,stats,'o-',linewidth=2,color='r')#画线
ax.fill(angles,stats,facecolor='r',alpha=0.25)#填充
font=FontProperties(fname="C:\Windows\Fonts\simhei.ttf",size=14)#设置中文字体
ax.set_thetagrids(angles*180/np.pi,labels,fontproperties=font)
plt.show()
9、二元变量分布
两个变量之间的关系,需要用到二元变量分布,散点图就是一种二元变量分布。
在Seaborn里用sns.jointplot(x,y,data=Nane,kind)函数即可,kind='scatter’表示散点图,kind='kde’表示核密度图,kind='hex’表示Hexbin图(直方图的二维模拟)
tips=sns.load_dataset('tips')
print(tips.head(10))
sns.jointplot(x='total_bill',y='tip',data=tips,kind='scatter')
sns.jointplot(x='total_bill',y='tip',data=tips,kind='kde')
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
plt.show()
散点图:
核密度图:
Hexbin图:
10、成对关系
数据集中多个成对变量的分布,可直接采用sns.pairplot()函数,会同时展示出df中每对变量的关系,另外在对角线上,是每个变量自身作为单变量的分布情况。
iris=sns.load_dataset('iris')
sns.pairplot(iris)
plt.show()
总结: