数据可视化自身就是一种通用语言。咱们这里通用语言的意思是:它可能向各行各业的人示意信息。它突破了语言和技术了解的阻碍。数据是一些数字和文字的组合,然而可视化能够展现数据蕴含的信息。
“数据可视化有助于弥合数字和文字之间的差距”——Brie E. Anderson。
有许多无代码 / 少代码的数据可视化工具,如 tableau、Power BI、Microsoft Excel 等。然而作为一名数据迷信从业者最好的工具还是 python。所以在咱们进行数据迷信我的项目的时候,肯定要留神数据可视化,因为这是示意信息和洞察数据的最简略办法。
所以在这篇文章中,咱们将整顿咱们能看到的所有数据可视化图表。如果你是数据迷信初学者,那么本文将是最适宜你的。
数据可视化是一种以图形形式示意数据和信息的办法。它能够被形容为应用图表、动画、信息图等将数据转换为可能可视化的上下文。它有助于发现数据的趋势和模式。
如果给你一个蕴含数百行的表格格局的数据集,你将感到困惑。然而适当的数据可视化能够帮忙你取得数据的正确趋势、异样值和模式等等。
高级数据可视化
这里咱们总结了 9 个数根底可视化图,这些都是咱们在日常工作中罕用的也是最简略的图表。
频率表
频率是一个值呈现的次数的计数。频率表是用表格示意频率的一种形式。表格如下所示。
Scatter Plot
散点图是一种在二维坐标系中绘制两个数值变量的办法。通过散点图咱们能够很容易地可视化数据分布
Line Plot
折线图相似于散点图,但点是用间断的线按程序连接起来的。在二维空间中寻找数据流时,折线图更加直观。
上图能够看到weight 是如何续变动的。
Bar Chart
柱状图次要用于用柱状示意类别变量的呈现频率。柱的不同高度示意频率大小。
Histogram
方图的概念与条形图雷同。在柱状图中频率显示在分类变量的离散条中,而直方图显示间断距离的频率。它能够用于查找区间内连续变量的频率。
Pie Chart
饼图以圆形的形式以百分比示意频率。每个元素依据其频率百分比持有圆的面积。
Exploded Pie Chart
开展饼图
开展饼图和饼图是一样的。在开展饼图中,能够开展饼图的一部分以突出显示元素。
Distribution Plot
分布图能够显示连续变量的散布。
Box Plot
箱线图是一种基于五数汇总(“最小值”、第一四分位数 [Q1]、中位数、第三四分位数 [Q3] 和“最大值”)显示数据分布的标准化办法。它能够显示异样值等信息。
中级数据可视化
中级的可视化图表是对根底可视化图表的延申,咱们这里总结了 8 个
Stacked Bar Chart
重叠柱状图是一种非凡的柱状图。咱们能够在重叠柱状图中集成比传统柱状图 [2] 更多的信息。
Grouped Bar Chart
“分组柱状图”这个名字意味着——它是一种分成不同组的非凡类型的柱状图。它次要用于比拟两个分类变量。
Stacked Area Chart
重叠面积图将几个区域序列叠加在一起进行绘制。每个序列的高度由每个数据点中的值决定。
Pareto Diagram
帕累托图包含柱状图和折线图,其中各个值由柱状图降序示意,直线示意累计总数。
Donut Chart
环形图是一个以圆心为切口简略的饼状图。尽管它和饼图表白的意思是一样的,但它也有一些长处:在饼图中咱们常常会混同每个类别所共享的区域。因为饼图的核心从环形图中移除,所以它能够强调读者要关注饼图的外弧线,同时内圈也能够用来显示额定的信息。
Heatmap
热图是一个能够分为多个子矩形的矩形图,它用不同色彩示意不同的值 / 强度。
Radar Chart
雷达图是一种以二维图表的模式显示多元数据的图形办法,三个或更多变量在从同一点开始的轴上进行示意。来自核心的辐条称为半径,代表变量的数值。半径之间的角度不蕴含任何信息。
Treemap
矩形树图用嵌套的矩形模式显示档次数据。
高级数据可视化
这些图都比较复杂,个别状况下可能也不太常见,然而在解决特定工作时却十分好用。这里总结了 10 个相干的图表
Parallel Coordinate Plot
因为咱们生存在三维空间,所以个别的可视化最多解决 3 维的数据。但有时须要可视化超过 3 维的数据,咱们常常应用 PCA 或 t-SNE 来降维并绘制它。在降维的状况下,可能会失落大量的信息。并且有时咱们须要思考所有特色,这时就须要平行坐标图。
Hexagonal Binning
六边形分箱图是用六边形直观示意二维数值数据点密度办法。
Contour Plot
2D 等高线密度图是可视化特定区域内数据点密度的另一种办法。它能够不便的找到两个数值变量的密度。例如上面的图表显示了每个暗影区域中有多少个数据点。
QQ-Plot
QQ 代表分位数 - 分位数图。这是一种直观地查看数值变量是否合乎正态分布的办法。
Violin Plot
小提琴图和箱形图是相干的。从小提琴图中能够失去的另一个信息是密度散布。简略地说它是一个与密度散布集成的箱形图。
Boxen Plot
Boxen Plot 是 seaborn 库引入的一种新型箱形图。对于箱线图的方框是在四分位上创立的。但在 Boxen plot 中,数据被划分为更多的分位数。它能够提供了对于数据的更多见解。
Point Plot
点坐标图蕴含了一些名为误差线的线的折线图。
通过上图所示的点的地位来示意数值变量的集中趋势,误差线示意变量的不确定性(置信区间)。绘制折线图是为了比拟数值变量在不同类别值下的变异性。
Swarm plot
分簇散点图是另一个受“beeswarm”启发的乏味图表,咱们能够理解不同的分类值如何沿数值轴散布。
Word Cloud
在单云图中,所有的单词都被绘制在一个特定的区域,频繁呈现的单词被高亮显示(用较大的字体显示。
Sunburst Chart
夕阳图是环行图或饼图的定制版本,它将一些额定的档次信息集成到图中。
天文空间数据可视化
天文空间数据可视化侧重于数据与其物理地位之间的关系,天文空间可视化的独特之处在于其规模都不较大。
天文可视化将变量叠加在地图上,应用纬度和经度来显示信息。
地图是天文空间可视化的次要焦点。它们的范畴从描述街道、城镇、公园或分区到显示一个国家、大陆或整个星球的边界。它们充当额定数据的容器。它们能够帮忙辨认问题、跟踪变动、了解趋势,并执行与特定地点和工夫相干的预测。所以这里独自将其提出阐明
一些用于天文空间数据可视化的 python 库和工具
tableau, power b.i.,ArcGIS, QGIS 等都能够用于简单的天文空间数据可视化。python 中也有很多也非常适合天文空间数据可视化的库,例如
- Geoplot
- Folium
- Geopandas
- PySAL
- rworldmap
- rworldxtra
- etc.
我将应用 Folium 来展现可视化的一些实现。
这里应用了 HIFLD 的医院数据集,其中蕴含医院地位和其余医院信息。依据受权信息这个数据是能够被公开展现的
主数据集中有 34 个特色。出于演示目标,我将应用“ADDRESS”、“STATE”、“TYPE”、“STATUS”、“POPULATION”、“LATITUDE”、“LONGITUDE”这些特色。其中“LATITUDE”和“LONGITUDE”将用于确定医院在地图上的地位,而其余列如 STATE、TYPE 和 STATUS 用于过滤,最初 ADDRESS 和 POPULATION 用作自定义地图上的标记的元数据。
绘制根本地图
导入绘制地图所需的库。
import pandas as pd
import folium
from folium.plugins import MarkerCluster
加载数据集。
hosp_df = pd.read_csv('/work/Hospitals.csv')
过滤数据。
WORKING_COLS = ["ADDRESS", "STATE", "TYPE", "STATUS", "POPULATION", "LATITUDE", "LONGITUDE"]
STATE = "CA"
hosp_df = hosp_df.loc[hosp_df["STATE"] == STATE, WORKING_COLS]
hosp_df.head(5)
一些数据预处理。
hosp_df = hosp_df[hosp_df["POPULATION"] >= 0]
hosp_df.describe()
绘制地图
Folium 提供了.Map(),它将地位参数作为蕴含一对纬度和经度的列表,并围绕给定地位生成一个地图,主动将生成的地图会围绕数据居中。
m=folium.Map(location=[hosp_df["LATITUDE"].mean(), hosp_df["LONGITUDE"].mean()],
zoom_start=6)
m
图中三角的点就是咱们数据集中蕴含的数据点
增加图层
Folium 中的默认地图是 OpenStreetMap。咱们能够增加具备不同图层,例如 Stamen Terrain、Stamen Water Color、CartoDB Positron 等,失去不同的图层示意
应用 folium.TileLayer 将多个图层增加单个地图中,并应用 folium.LayerControl 以交互方式进行切换。
m=folium.Map(location=[hosp_df["LATITUDE"].mean(), hosp_df["LONGITUDE"].mean()],
zoom_start=6)
folium.TileLayer('cartodbdark_matter').add_to(m)
folium.TileLayer('cartodbpositron').add_to(m)
folium.TileLayer('Stamen Terrain').add_to(m)
folium.TileLayer('Stamen Toner').add_to(m)
folium.TileLayer('Stamen Water Color').add_to(m)
folium.LayerControl().add_to(m)
m
能够看到右上角呈现了图层抉择的按钮
生成地图标记
在交互式地图中,标记对于指定地位十分重要。folium.Marker 能够在给定地位创立一个标记
m=folium.Map(location=[hosp_df["LATITUDE"].mean(), hosp_df["LONGITUDE"].mean()],
zoom_start=8)
hosp_df.apply(
lambda row: folium.Marker(location=[row['LATITUDE'], row['LONGITUDE']]
).add_to(m),
axis=1)
m
自定义标记
也能够应用自定义标记
m=folium.Map(location=[hosp_df['LATITUDE'].mean(), hosp_df['LONGITUDE'].mean()],
zoom_start=8)
def get_icon(status):
if status == "OPEN":
return folium.Icon(icon='heart',
color='black',
icon_color='#2ecc71'
)
else:
return folium.Icon(icon='glyphicon-off',
color='red')
hosp_df.apply(
lambda row: folium.Marker(location=[row['LATITUDE'], row['LONGITUDE']],
#color='red',
popup=row['ADDRESS'],
tooltip='<h5>Click here for more info</h5>',
icon=get_icon(row['STATUS']),
).add_to(m),
axis=1)
m
生成气泡图
为了示意地图上的数值,咱们能够通过将圆半径与其在数据集中的值绑定来绘制不同大小的圆。在咱们的例子中,咱们用每个核心示意笼罩的人口,其半径与其 population 值成正比。
m=folium.Map(location=[hosp_df['LATITUDE'].mean(), hosp_df['LONGITUDE'].mean()],
zoom_start=8)
def get_radius(pop):
return int(pop / 20)
hosp_df.apply(
lambda row: folium.CircleMarker(location=[row['LATITUDE'], row['LONGITUDE']],
radius=get_radius(row['POPULATION']),
popup=row['ADDRESS'],
tooltip='<h5>Click here for more info</h5>',
stroke=True,
weight=1,
color="#3186cc",
fill=True,
fill_color="#3186cc",
opacity=0.9,
fill_opacity=0.25,
).add_to(m),
axis=1)
m
生成标记簇
在数据点密集地图上工作时,应用标记簇能够以防止许多左近标记互相重叠造成的凌乱的状况。Folium 提供了一种设置标记簇的简略办法,将它们增加到 folium.plugins.MarkerCluster 实例
m=folium.Map(location=[hosp_df['LATITUDE'].mean(), hosp_df['LONGITUDE'].mean()],
zoom_start=8)
cluster = MarkerCluster(name="Hospitals")
def get_icon(status):
if status == "OPEN":
return folium.Icon(icon='heart',
color='black',
icon_color='#2ecc71'
)
else:
return folium.Icon(icon='glyphicon-off',
color='red')
hosp_df.apply(
lambda row: folium.Marker(location=[row['LATITUDE'], row['LONGITUDE']],
popup=row['ADDRESS'],
tooltip='<h5>Click here for more info</h5>',
icon=get_icon(row['STATUS']),
).add_to(cluster),
axis=1)
cluster.add_to(m)
m
当鼠标悬停在一个标记上时,它会显示该簇所笼罩区域的边界。这种默认行为能够通过将 showCoverageOnHover 选项设置为 false 来勾销,如下所示
cluster = MarkerCluster(name="Hospitals", options={"showCoverageOnHover": False})
总结
这篇文章有点长,但我齐全置信它会对你有很大的帮忙。我在本文中整顿了基本上所有的图表概述。这将是一篇对于数据可视化的残缺文章,尤其是展现了地理位置可视化的一些办法,心愿这篇文章对你有所帮忙。
https://avoid.overfit.cn/post/93e1e9cadcb84b13bf6a44b981a41843
作者 Md. Zubair