http://blog.youkuaiyun.com/pipisorry/article/details/24833173
Python数据图表和绘图工具
Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析。数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些。
幸运的是,过去几年出现了很多新的Python数据可视化库,弥补了一些这方面的差距。matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,bokeh, seaborn, pyga, folium 和 networkx,这些库有些是构建在 matplotlib 之上,还有些有其他一些功能。
本文会基于一份真实的数据,使用这些库来对数据进行可视化。通过这些对比,我们期望了解每个库所适用的范围,以及如何更好的利用整个 Python 的数据可视化的生态系统。
我们在 Dataquest 建了一个交互课程,教你如何使用 Python 的数据可视化工具。如果你打算深入学习,可以点这里。
探索数据集
在我们探讨数据的可视化之前,让我们先来快速的浏览一下我们将要处理的数据集。我们将要使用的数据来自 openflights。我们将要使用航线数据集、机场数据集、航空公司数据集。其中,路径数据的每一行对应的是两个机场之间的飞行路径;机场数据的每一行对应的是世界上的某一个机场,并且给出了相关信息;航空公司的数据的每一行给出的是每一个航空公司。
首先我们先读取数据:

首先,我们使用 pandasapplymethod 计算每个名称的长度。它将找到每个航空公司的名字字符的数量。然后,我们使用 matplotlib 做一个散点图来比较航空 id 的长度。当我们绘制时,我们把 theidcolumn of airlines 转换为整数类型。如果我们不这样做是行不通的,因为它需要在 x 轴上的数值。我们可以看到不少的长名字都出现在早先的 id 中。这可能意味着航空公司在成立前往往有较长的名字。
我们可以使用 seaborn 验证这个直觉。Seaborn 增强版的散点图,一个联合的点,它显示了两个变量是相关的,并有着类似地分布。
|
1
2
|
data
=
pandas
.
DataFrame
(
{
"lengths"
:
name_lengths
,
"ids"
:
airlines
[
"id"
]
.
astype
(
int
)
}
)
seaborn
.
jointplot
(
x
=
"ids"
,
y
=
"lengths"
,
data
=
data
)
|

上面的图表明,两个变量之间的相关性是不明确的——r 的平方值是低的。
静态 maps
我们的数据天然的适合绘图-机场有经度和纬度对,对于出发和目的机场来说也是。
第一张图做的是显示全世界的所有机场。可以用扩展于 matplotlib 的 basemap 来做这个。这允许画世界地图和添加点,而且很容易定制。

上面的代码将会画一个地图,然后再在地图上画线路。我们添加一了写过滤器来阻止过长的干扰其他路由的长路由。
画网络图
我们将做的最终的探索是画一个机场网络图。每个机场将会是网络中的一个节点,并且如果两点之间有路由将划出节点之间的连线。如果有多重路由,将添加线的权重,以显示机场连接的更多。将使用 networkx 库来做这个功能。
首先,计算机场之间连线的权重。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# Initialize the weights dictionary.
weights
=
{
}
# Keep track of keys that have been added once -- we only want edges with a weight of more than 1 to keep our network size manageable.
added_keys
=
[
]
# Iterate through each route.
for
name
,
row
in
routes
.
iterrows
(
)
:
# Extract the source and dest airport ids.
source
=
row
[
"source_id"
]
dest
=
row
[
"dest_id"
]
# Create a key for the weights dictionary.
# This corresponds to one edge, and has the start and end of the route.
key
=
"{0}_{1}"
.
format
(
source
,
dest
)
# If the key is already in weights, increment the weight.
if
key
in
weights
:
weights
[
key
]
+=
1
# If the key is in added keys, initialize the key in the weights dictionary, with a weight of 2.
elif
key
in
added_keys
:
weights
[
key
]
=
2
# If the key isn't in added_keys yet, append it.
# This ensures that we aren't adding edges with a weight of 1.
else
:
added_keys
.
append
(
key
)
|
一旦上面的代码运行,这个权重字典就包含了每两个机场之间权重大于或等于 2 的连线。所以任何机场有两个或者更多连接的路由将会显示出来。
总结
有一个成长的数据可视化的 Python 库,它可能会制作任意一种可视化。大多数库基于 matplotlib 构建的并且确保一些用例更简单。如果你想更深入的学习怎样使用 matplotlib,seaborn 和其他工具来可视化数据,在这儿检出其他课程。
[开源:(Python)面向浏览器的数据可视化库mpld3(Matplotlib+D3js)]
[[[译]比一比:Python的七个数据可视化工具]]
数据可视化方法
数据可视化绘图建议
数据可视化工具
[The 38 best tools for data visualization]
[14 Data Visualization Tools to Tell Better Stories with Numbers]
[时间轴Timeline可视化作品及制作工具making timelines]
[ 数据可视化工具汇总][开源:基于matplotlib绘制Pandas时序数据Calendar heatmaps——Calmap Calendar heatmaps from Pandas time series data]
[Github十大数据可视化项目《Top 10 Data Visualization Projects on Github》by Matthew Mayo]
[GGobi data visualization system]
数据可视化实例
[50 Of The Greatest Data Visualization Examples]
[全球最牛的28个大数据可视化应用案例(三)资金喷泉/担保圈毒刺/]
[网易关系网]
D3.js blocks示例分享/查询网站: [Search the Bl.ocks] [Searching for examples]
from:http://blog.youkuaiyun.com/pipisorry/article/details/24833173
ref:





1456

被折叠的 条评论
为什么被折叠?



