数据可视化入门
数据可视化可以直观的展示数据之间的关系,但数据可视化最重要的不是你展示的工具和做的图多么漂亮,而是紧紧围绕核心目的,把你想表达的内容传递给目标人群。
所以,数据可视化具体呈现形式,取决于你的目的。
数据可视化工具
类别 | 工具 | 适用范围 |
---|---|---|
商业智能分析 | 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 数据可视化初版