IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Pandana安装及官方示例 -> 正文阅读

[Python知识库]Pandana安装及官方示例

1、Pandana是什么,干什么用

Pandana 是一个用于网络分析的 Python 库,它使用收缩层次结构来超快速计算,可达性指标和最短路径。数字代码在 C++ 中。
收缩层次结构:一种预先计内存的方法,可以加快模型中最短\最佳路径的计算

安装

Pandana 是一个 Python 包,其中包含用于数值运算的 C++ 扩展。

标准安装
截至 2021 年 3 月,通过 PyPI 和 Conda Forge 为 Mac、Linux 和 Windows 提供二进制安装程序。

您可以使用 Pip 安装 Pandana:

pip install pandana

或conda:

conda install pandana --channel conda-forge

Pandana 最容易在 Python 3.6 到 3.9 中安装。带有 Python 2.7 二进制文件的 Pandana 的最后一个版本是 Conda Forge 上的 v0.4.4。Python 3.5 二进制文件的最后一个版本是 Pip 上的 v0.6。

1.2编译条件
Mac 用户应首先运行以确保您拥有 Apple 的 Xcode 命令行工具,这些工具在幕后是必需的。
Windows 用户将需要Microsoft Visual C++ Build Tools。
Pandana 的构建时要求是cython、numpy和支持 C++11 标准的 C++ 编译器。此外,编译器需要支持 OpenMP 以允许 Pandana 使用多线程。
针对MAC:
建议安装途径是从 Conda Forge 获取编译器——你需要clang和llvm-openmp包。
运行 Pandana 的设置脚本将触发编译:

conda install cython numpy clang llvm-openmp
python setup.py develop

(windows可跳过)
Mac 上的默认 C++ 编译器不支持 OpenMP,这意味着 Pandana 将无法使用多线程。
您可以设置CC环境变量以指定您选择的编译器。如果需要进行额外修改,可以在本地副本中编辑编译脚本setup.py。
多线程
您可以设置CC环境变量以指定您选择的编译器。有关此问题的讨论,请参阅PR #137中的文章。如果需要进行额外修改,可以在本地副本中编辑编译脚本setup.py。

2、Pandana官方简单例子

先上链接:https://github.com/UDST/pandana/blob/dev/examples/Pandana-demo.ipynb
此例子主要用来展示Pandana library:

Pandana library是一个用于网络分析的Python包,它使用收缩层次结构来计算超快速旅行可达性指标和最短路径。

Sections

  1. Loading data
  2. Shortest paths
  3. Proximity
  4. Accessibility
  5. Visualization
    建议在本地vscode下部署
    首先导入pandana包并显示其版本
import numpy as np
import pandas as pd

import pandana
print(pandana.__version__)

设置浮点数输出格式为两位小数,更多理解详见https://blog.csdn.net/S_o_l_o_n/article/details/106418441

pd.options.display.float_format = '{:.2f}'.format

2.1 Loading data

此处所用为pandana的一个包OSMnet,用于提取OpenStreetMap(OSM)街道网络数据的工具
conda安装osmnet或pip安装osmnet

from pandana.loaders import osm
import warnings
warnings.filterwarnings('ignore')

获取San Francisco, CA的数据

network = osm.pdna_network_from_bbox(37.698, -122.517, 37.819, -122.354)  # San Francisco, CA

注:若此处报错,说明没有成功导入osm包,解决方法详见
运行结果
边和节点作为数据帧可见。

network.nodes_df.head()

节点中通过经纬度及id确定位置
在这里插入图片描述
边通过节点展现

network.edges_df.head()

在这里插入图片描述

保存和重新加载网络

不能直接保存Pandana网络对象,但可以轻松地从节点和边重新创建它。

network.nodes_df.to_csv('nodes.csv')
network.edges_df.to_csv('edges.csv')
nodes = pd.read_csv('nodes.csv', index_col=0)
edges = pd.read_csv('edges.csv', index_col=[0,1])
network = pandana.Network(nodes['x'], nodes['y'], 
                          edges['from'], edges['to'], edges[['distance']])

2.2最短路径

该例中以餐厅作为展示,通过加载Open Street Map上列出的餐厅位置(使用与上面相同的OSMnet扩展),然后计算它们之间的一些最短路径。

restaurants = osm.node_query(
    37.698, -122.517, 37.819, -122.354, tags='"amenity"="restaurant"')
res = restaurants.sample(2)//随机展示两个餐厅
res

在这里插入图片描述
首先,确定距离每个餐厅最近的节点。然后获取节点之间的路由。这个网络的距离单位是米。

nodes = network.get_node_ids(res.lon, res.lat).values//输入两个
nodes
network.shortest_path()//返回最短路径经过的结点
network.shortest_path_length(nodes[0], nodes[1])//计算两点间长度
//Pandana可以在不到一分钟内生成数百万条最短路径。

在这里插入图片描述
在这里插入图片描述

计算所有的餐厅最短路径

restaurant_nodes = network.get_node_ids(restaurants.lon, restaurants.lat).values
origs = [o for o in restaurant_nodes for d in restaurant_nodes]
dests = [d for o in restaurant_nodes for d in restaurant_nodes]
%%time
distances = network.shortest_path_lengths(origs, dests)

在这里插入图片描述

pd.Series(distances).describe()//展示各种数据

在这里插入图片描述

2.3 Proximity

为了找到某一点最近的餐厅:
首先将餐厅添加进网络中

network.set_pois(category = 'restaurants',
                 maxdist = 1000,//设置的最大距离
                 maxitems = 3,//设置的最大数目
                 x_col = restaurants.lon, 
                 y_col = restaurants.lat)

此时就可以进行查询了

results = network.nearest_pois(distance = 1000,//寻找 POI 的最大距离。
                               category = 'restaurants',
                               num_pois = 3,//要查找的 POI 的数量
                               include_poi_ids = True//如果此标志设置为 true,则调用将向返回 DataFrame 添加列 - 而不是仅返回第 n 个 POI 的距离,它还将返回该 POI 的 id)
results.head()

在这里插入图片描述

2.4 Accessibility

为了找到任意一个节点任意范围(例子为500米)内所有餐厅。Pananda称这种计算为聚合。
还是先录入网络中

restaurant_nodes = network.get_node_ids(restaurants.lon, restaurants.lat)
network.set(restaurant_nodes, 
            name = 'restaurants')

network.aggregate()
各种数据的展现

accessibility = network.aggregate(distance = 500,
                                  type = 'count',
                                  name = 'restaurants')
accessibility.describe()

在这里插入图片描述

2.5.Visualization

直接使用Matplotlib,绘制餐厅可视化地图

import matplotlib
from matplotlib import pyplot as plt
print(matplotlib.__version__)


fig, ax = plt.subplots(figsize=(10,8))
plt.title('San Francisco: Restaurants within 500m')
plt.scatter(network.nodes_df.x, network.nodes_df.y, 
            c=accessibility, s=1, cmap='YlOrRd', 
            norm=matplotlib.colors.LogNorm())
cb = plt.colorbar()

plt.show()

放一个函数的用法:plt.scatter()

在这里插入图片描述
至此,官方给我们展示的内容就结束了,继续学习upup!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:41:15  更:2022-02-07 13:42:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:44:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码