7 款 Python 数据图表工具的比较
admin
2023-07-31 00:38:26
0

Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析。数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些。

幸运的是,过去几年出现了很多新的Python数据可视化库,弥补了一些这方面的差距。matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,bokeh, seaborn,  pyga, folium 和 networkx,这些库有些是构建在 matplotlib 之上,还有些有其他一些功能。

本文会基于一份真实的数据,使用这些库来对数据进行可视化。通过这些对比,我们期望了解每个库所适用的范围,以及如何更好的利用整个 Python 的数据可视化的生态系统。

我们在 Dataquest 建了一个交互课程,教你如何使用 Python 的数据可视化工具。如果你打算深入学习,可以点这里。

探索数据集

在我们探讨数据的可视化之前,让我们先来快速的浏览一下我们将要处理的数据集。我们将要使用的数据来自 openflights。我们将要使用航线数据集、机场数据集、航空公司数据集。其中,路径数据的每一行对应的是两个机场之间的飞行路径;机场数据的每一行对应的是世界上的某一个机场,并且给出了相关信息;航空公司的数据的每一行给出的是每一个航空公司。

首先我们先读取数据:

1234567891011 # Import the pandas library.import pandas# Read in the airports data.airports = pandas.read_csv(\”airports.csv\”, header=None, dtype=str)airports.columns = [\”id\”, \”name\”, \”city\”, \”country\”, \”code\”, \”icao\”, \”latitude\”, \”longitude\”, \”altitude\”, \”offset\”, \”dst\”, \”timezone\”]# Read in the airlines data.airlines = pandas.read_csv(\”airlines.csv\”, header=None, dtype=str)airlines.columns = [\”id\”, \”name\”, \”alias\”, \”iata\”, \”icao\”, \”callsign\”, \”country\”, \”active\”]# Read in the routes data.routes = pandas.read_csv(\”routes.csv\”, header=None, dtype=str)routes.columns = [\”airline\”, \”airline_id\”, \”source\”, \”source_id\”, \”dest\”, \”dest_id\”, \”codeshare\”, \”stops\”, \”equipment\”]

这些数据没有列的首选项,因此我们通过赋值 column 属性来添加列的首选项。我们想要将每一列作为字符串进行读取,因为这样做可以简化后续以行 id 为匹配,对不同的数据框架进行比较的步骤。我们在读取数据时设置了 dtype 属性值达到这一目的。

我们可以快速浏览一下每一个数据集的数据框架。

1 airports.head()

1 airlines.head()

1 routes.head()

我们可以分别对每一个单独的数据集做许多不同有趣的探索,但是只要将它们结合起来分析才能取得最大的收获。Pandas 将会帮助我们分析数据,因为它能够有效的过滤权值或者通过它来应用一些函数。我们将会深入几个有趣的权值因子,比如分析航空公司和航线。

那么在此之前我们需要做一些数据清洗的工作。

1 routes = routes[routes[\”airline_id\”] != \”\\\\N\”]

这一行命令就确保了我们在 airline_id 这一列只含有数值型数据。

制作柱状图

现在我们理解了数据的结构,我们可以进一步地开始描点来继续探索这个问题。首先,我们将要使用 matplotlib 这个工具,matplotlib 是一个相对底层的 Python 栈中的描点库,所以它比其他的工具库要多敲一些命令来做出一个好看的曲线。另外一方面,你可以使用 matplotlib 几乎做出任何的曲线,这是因为它十分的灵活,而灵活的代价就是非常难于使用。

我们首先通过做出一个柱状图来显示不同的航空公司的航线长度分布。一个柱状图将所有的航线的长度分割到不同的值域,然后对落入到不同的值域范围内的航线进行计数。从中我们可以知道哪些航空公司的航线长,哪些航空公司的航线短。

为了达到这一点,我们需要首先计算一下航线的长度,第一步就要使用距离公式,我们将会使用余弦半正矢距离公式来计算经纬度刻画的两个点之间的距离。

12345678910111213 import mathdef haversine(lon1, lat1, lon2, lat2):    # Convert coordinates to floats.    lon1, lat1, lon2, lat2 = [float(lon1), float(lat1), float(lon2), float(lat2)]    # Convert to radians from degrees.    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])    # Compute distance.    dlon = lon2  lon1     dlat = lat2  lat1     a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2    c = 2 * math.asin(math.sqrt(a))     km = 6367 * c    return km

然后我们就可以使用一个函数来计算起点机场和终点机场之间的单程距离。我们需要从路线数据框架得到机场数据框架所对应的 ͦ习和数据分析。数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些。

幸运的是,过去几年出现了很多新的Python数据可视化库,弥补了一些这方面的差距。matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如vispy,bokeh, seaborn,  pyga, folium 和 networkx,这些库有些是构建在 matplotlib 之上,还有些有其他一些功能。

本文会基于一份真实的数据,使用这些库来对数据进行可视化。通过这些对比,我们期望了解每个库所适用的范围,以及如何更好的利用整个 Python 的数据可视化的生态系统。

我们在 Dataquest 建了一个交互课程,教你如何使用 Python 的数据可视化工具。如果你打算深入学习,可以点这里。

探索数据集

在我们探讨数据的可视化之前,让我们先来快速的浏览一下我们将要处理的数据集。我们将要使用的数据来自 openflights。我们将要使用航线数据集、机场数据集、航空公司数据集。其中,路径数据的每一行对应的是两个机场之间的飞行路径;机场数据的每一行对应的是世界上的某一个机场,并且给出了相关信息;航空公司的数据的每一行给出的是每一个航空公司。

首先我们先读取数据:

1234567891011 # Import the pandas library.import pandas# Read in the airports data.airports = pandas.read_csv(\”airports.csv\”, header=None, dtype=str)airports.columns = [\”id\”, \”name\”, \”city\”, \”country\”, \”code\”, \”icao\”, \”latitude\”, \”longitude\”, \”altitude\”, \”offset\”, \”dst\”, \”timezone\”]# Read in the airlines data.airlines = pandas.read_csv(\”airlines.csv\”, header=None, dtype=str)airlines.columns = [\”id\”, \”name\”, \”alias\”, \”iata\”, \”icao\”, \”callsign\”, \”country\”, \”active\”]# Read in the routes data.routes = pandas.read_csv(\”routes.csv\”, header=None, dtype=str)routes.columns = [\”airline\”, \”airline_id\”, \”source\”, \”source_id\”, \”dest\”, \”dest_id\”, \”codeshare\”, \”stops\”, \”equipment\”]

这些数据没有列的首选项,因此我们通过赋值 column 属性来添加列的首选项。我们想要将每一列作为字符串进行读取,因为这样做可以简化后续以行 id 为匹配,对不同的数据框架进行比较的步骤。我们在读取数据时设置了 dtype 属性值达到这一目的。

我们可以快速浏览一下每一个数据集的数据框架。

1 airports.head()

1 airlines.head()

1 routes.head()

我们可以分别对每一个单独的数据集做许多不同有趣的探索,但是只要将它们结合起来分析才能取得最大的收获。Pandas 将会帮助我们分析数据,因为它能够有效的过滤权值或者通过它来应用一些函数。我们将会深入几个有趣的权值因子,比如分析航空公司和航线。

那么在此之前我们需要做一些数据清洗的工作。

1 routes = routes[routes[\”airline_id\”] != \”\\\\N\”]

这一行命令就确保了我们在 airline_id 这一列只含有数值型数据。

制作柱状图

现在我们理解了数据的结构,我们可以进一步地开始描点来继续探索这个问题。首先,我们将要使用 matplotlib 这个工具,matplotlib 是一个相对底层的 Python 栈中的描点库,所以它比其他的工具库要多敲一些命令来做出一个好看的曲线。另外一方面,你可以使用 matplotlib 几乎做出任何的曲线,这是因为它十分的灵活,而灵活的代价就是非常难于使用。

我们首先通过做出一个柱状图来显示不同的航空公司的航线长度分布。一个柱状图将所有的航线的长度分割到不同的值域,然后对落入到不同的值域范围内的航线进行计数。从中我们可以知道哪些航空公司的航线长,哪些航空公司的航线短。

为了达到这一点,我们需要首先计算一下航线的长度,第一步就要使用距离公式,我们将会使用余弦半正矢距离公式来计算经纬度刻画的两个点之间的距离。

12345678910111213 import mathdef haversine(lon1, lat1, lon2, lat2):    # Convert coordinates to floats.    lon1, lat1, lon2, lat2 = [float(lon1), float(lat1), float(lon2), float(lat2)]    # Convert to radians from degrees.    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])    # Compute distance.    dlon = lon2  lon1     dlat = lat2  lat1     a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2    c = 2 * math.asin(math.sqrt(a))     km = 6367 * c    return km

然后我们就可以使用一个函数来计算起点机场和终点机场之间的单程距离。我们需要从路线数据框架得到机场数据框架所对应的 class=\”crayon-sy\”>.columns = [\”airline\”, \”airline_id\”, \”source\”, \”source_id\”, \”dest\”, 

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...