数据可视化入门

数据可视化可以直观的展示数据之间的关系,但数据可视化最重要的不是你展示的工具和做的图多么漂亮,而是紧紧围绕核心目的,把你想表达的内容传递给目标人群。

所以,数据可视化具体呈现形式,取决于你的目的。

数据可视化工具

类别 工具 适用范围
商业智能分析 Tableau 适合BI工程师、数据分析师
PowerBI 配合excel使用
FineBI 中国帆软出品,国内使用更友好,企业级BI
可视化大屏类 DataV
FineRepor 可以数据大屏和可视化报表
前端可视化组件
(前端工程师适用) Canvas 适用于位图,可用于绘制比较复杂的动画
SVG 可缩放矢量图形,经常用于图标和图表上,任意缩放不会失真
WebGL 3D 绘图协议,可在网页浏览器中呈现 3D 画面技术
编程语言 python常用的 Matplotlib、Seaborn、 Bokeh、Plotly、Pyecharts、Mapbox 和 Geoplotlib,其中适用频率最高的Matplotlib 和 Seaborn
R语言 Graphics 以及工具包 ggplot2、ggmap、timevis 和 plotly

工具使用建议:

如果目标是成为数据挖掘工程师或算法工程师,最重要的是了解和使用python数据可视化工具。

推荐使用Tableau—使用范围广。

使用微图、DataV—成本低,上手快。

散点图

用来反映两个变量之间的关系

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  

|

import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt  
  
# 数据准备  
N = 1000  
x = np.random.randn(N)  
y = np.random.randn(N)  
  
# 用Matplotlib画散点图  
plt.scatter(x, y,marker='x')  
plt.show()  
  

—|—

折线图

用来反映随时间变化后的关系

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  

|

import pandas as pd  
import matplotlib.pyplot as plt  
  
# 数据准备  
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]  
y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]  
  
# 使用Matplotlib画折线图  
plt.plot(x, y)  
plt.show()  
  

—|—

直方图

反映变量的数值分布

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt  
  
# 数据准备  
a = np.random.randn(100)  
s = pd.Series(a)  
  
# 用Matplotlib画直方图  
plt.hist(s) #默认为10个直方图plt.hist(x, bins=10)  
plt.show()  
  

—|—

条形图

反映各阶段数值出现的频率

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  

|

import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt  
  
# 数据准备  
x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']  
y = [5, 4, 8, 12, 7]  
  
# 用Matplotlib画条形图  
plt.bar(x, y) # plt.bar(x, height) 函数,参数 x 代表位置,height代表y轴的高度  
plt.show()  
  

—|—

箱线图

包括最大值 (max)、最小值 (min)、中位数 (median) 和上下四分位数 (Q3, Q1)几个部分。

用于分析数据差距急离散程度。

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  

|

import numpy as np  
import pandas as pd  
import matplotlib.pyplot as plt  
  
# 数据准备  
# 生成10*4维度数据  
data=np.random.normal(size=(10,4))   
lables = ['A','B','C','D']  
  
# 用Matplotlib画箱线图  
plt.boxplot(data,labels=lables) # 使用 plt.boxplot(x, labels=None),x代表数据,labels添加数据标签  
plt.show()  
  

—|—

饼图

用于表示各部分与分部分的比例。

1  
2  
3  
4  
5  
6  
7  
8  
9  

|

import matplotlib.pyplot as plt  
  
# 数据准备  
nums = [25, 37, 33, 37, 6]  
labels = ['High-school','Bachelor','Master','Ph.d', 'Others']  
  
# 用Matplotlib画饼图  
plt.pie(x = nums, labels=labels) #使用plt.pie(x, labels=None)函数  
plt.show()  
  

—|—

热力图

直观的进行多元分析,不同颜色表示不同类别的数据。

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  

|

import matplotlib.pyplot as plt  
import seaborn as sns # 一般使用seaborn模块  
  
# 数据准备  
flights = sns.load_dataset("flights")  
data=flights.pivot('year','month','passengers')  
  
# 用Seaborn画热力图  
sns.heatmap(data) # 使用sns.heatmap(data),其中data表示数据  
plt.show()  
  

—|—

蜘蛛图

显示多维变量对整体的影响程度

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  

|

import numpy as np  
import matplotlib.pyplot as plt  
import seaborn as sns  
from matplotlib.font_manager import FontProperties    
  
# 数据准备  
labels=np.array([u"推进","KDA",u"生存",u"团战",u"发育",u"输出"])  
stats=[83, 61, 95, 67, 76, 88]  
# 画图数据准备,角度、状态值  
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)  
stats=np.concatenate((stats,[stats[0]]))  
angles=np.concatenate((angles,[angles[0]]))  
# 用Matplotlib画蜘蛛图  
fig = plt.figure()  
ax = fig.add_subplot(111, polar=True)     
ax.plot(angles, stats, 'o-', linewidth=2)  
ax.fill(angles, stats, alpha=0.25)  
# 设置中文字体  
font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)    
ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font)  
plt.show()  
  

—|—

二元变量间的关系

可以使用 Seaborn呈现散点图、核密度图、Hexbin图、直方图呈现。

sns.jointplot(x, y, data=None, kind) , kind 表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’ ”代表 Hexbin 表示对直方图的二维模拟。

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  

|

import matplotlib.pyplot as plt  
import seaborn as sns  
  
# 数据准备  
tips = sns.load_dataset("tips") # tips为Seaborn中自带的数据集  
print(tips.head(10))  
  
# 用Seaborn画二元变量分布图(散点图,核密度图,Hexbin图)  
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()  
  

—|—

参考资料

《数据分析实战45讲》|极课时间

ChangeLog

2020907 数据可视化初版