0%

数据可视化入门

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

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

数据可视化工具

类别 工具 适用范围
商业智能分析 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 数据可视化初版