数据可视化可以直观的展示数据之间的关系,但数据可视化最重要的不是你展示的工具和做的图多么漂亮,而是紧紧围绕核心目的,把你想表达的内容传递给目标人群。
所以,数据可视化具体呈现形式,取决于你的目的。
数据可视化工具
类别 |
工具 |
适用范围 |
商业智能分析 |
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)
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]
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)
plt.hist(s) 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]
plt.bar(x, 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
data=np.random.normal(size=(10,4)) lables = ['A','B','C','D']
plt.boxplot(data,labels=lables) 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']
plt.pie(x = nums, labels=labels) plt.show()
|
热力图
直观的进行多元分析,不同颜色表示不同类别的数据。
1 2 3 4 5 6 7 8 9 10
| import matplotlib.pyplot as plt import seaborn as sns
flights = sns.load_dataset("flights") data=flights.pivot('year','month','passengers')
sns.heatmap(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]]))
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") 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()
|
参考资料
《数据分析实战45讲》|极课时间
ChangeLog
2020907 数据可视化初版