xingjuwang的个人博客分享 http://blog.sciencenet.cn/u/xingjuwang

博文

关于python 进行复杂网络计算的软件框架架构随笔

已有 6383 次阅读 2013-3-25 20:45 |系统分类:科研笔记| Python, 复杂网络, 数据库

本人的专业是交通工程,致力于交通网络、应急交通和GIST方向,研究中用到了复杂网络的理论,需要复杂网络的指标,但却不想在复杂网络的计算上花费太多精力(呵呵,毕竟不是那个专业的)。本来想用Pajek,研究生能了几个星期也没能明白,看了看写个文件一读也能做,但灵活性较差。问了下搞复杂网络的同事(呵呵,在网上呢),说python可以,就搭了一个编程框架,觉得也是python进行复杂网络计算的难点,大多数学生可能搭建起了比较费劲费时(反正自己的学生没有让他们碰),实现通过数据库或者地理信息系统数据快速建立复杂网络,解决已有数据进行复杂网络计算的问题,个人觉得还是挺有意义的,共享给大家交流,希望各个研究者、学生节省更多时间关注本专业的相关研究。我的工作环境是 WIN7SQL2005(因为做交通地理信息系统,数据都存在数据库里)。

一、Python + Eclipse + PyDev 插件的Python开发环境

1.准备工作:

下载32位的JDK6 Java的开发包

下载32位的Eclipse  

下载Python 3.2 (一定要3.23.3版本不支持扩展库,我就走了弯路)

2. 安装JDK6

JDK的安装很容易的,一般一直点下一步即可。

添加环境变量JAVA_HOME,值为JDK的路径,我这里是C:JavaJDK
添加环境变量CLASSPATH,值为.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar

在环境变量Path的值后面加上;%JAVA_HOME%bin;%JAVA_HOME%jrebin

3.安装Eclipse和Python

Eclipse是绿色软件,找个地方解压一下就OK了。
Python
的安装就更不用说了。

这里最好也设置环境变量,扩展库安装挺简单的。

在环境变量Path的值后面加上python安装路径;我的是c:python32,即”;c:python32”

4.给Eclipse安装PyDev插件

在Help菜单中,选择Install New Software···, 选择Add按钮,Name:PyDev(这个随便起),Location:http://pydev.org/updates(PyDev的更新地址),OK

选择PyDev下的PyDev for Eclipse,别的都不要选,否则依赖检查那关过不去,依次完成即可。

5.配置PyDev插件

最后重启Eclipse,在Window菜单中选Preference,PyDev->Interpreter - Python,New一个Python解释器,填上解释器名字(任意)和路径,路径选相应的python.exe。所所有选项全选即可。

二、python扩展库的安装

1.准备工作:

networkx:复杂网络扩展库

pywin32访问windows系统API的库

matplotlib:绘图软件

numpy :快速处理数据库

SciPy: 数值计算库

Sympy:符号运算数据库

pyodbc: ODBC数据连接库

如果进行科学计算,上面的库还非常有用的。下载可在https://pypi.python.org/pypi网站下载即可,下载3.2版本的。

2. 安装

只有networkx 需要在DOS命令下安装,其他的双击安装即可。networkx 安装需要进入DOS窗口,即“附件“中的”命令提示符“下,进入networkx 安装文件所在目录,键入” python setup.py install“ 安装即可(注:前面设置了环境变量,忘了设置就要键入全部路径信息了)。

3.配置ODBC

   我们数据经常会存在数据库或地理信息系统当中,可通过ODBC平台,建立复杂网络,实现计算。

  在控制面板中的管理工具中打开ODBC管理器,输入在“用户DSN”中点“添加”,驱动程序选择SQL NATIVE CLIENT,然后点“完成”,输入名称(任意),服务器就输你那个服务器IP或local,接着下一步输入用户名密码,然后跟着向导下一步到结束就行了。

检查1433端口是否打开,如果没有打开则不能应用,DOS命令键入“netstat -an”,没有找到1433端口,说明1433端口没有打开。安装的SQL2005默认TCP/IP的状态是禁止的。选择“开始菜单->所有程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager”,选择“SQLServer 2005 网络配置->MSAQLSERVER的协议”和“SQL Native Client”,把TCP/IP和Nameed Pipes的状态设置为Enabled,可能有已设为Enabled。重新启动计算机,再次检验是否打开1433。

三、实例计算




实例路网如图所示,这是我们GIS的路网,存储在数据库里。

程序如下:

importnetworkx as nx               #导入复杂网络计算扩展库

importpyodbc                        #导入ODBC连接扩展库

importmatplotlib.pyplot asplt    #导入绘图扩展库

G=nx.Graph()                         #定义网路图

cnxn = pyodbc.connect('DRIVER={SQLServer};SERVER=192.168.212.231;DATABASE=ptestNet;UID=sa;PWD=123456')

                                     #连接函数,此处服务器必须设为IP

cursor = cnxn.cursor()              #创建游标,可理解为执行连接

forrow in cursor.execute("select * from point"):

#执行SQL语句并在循环语句中调用结果集

  G.add_node(row.ID)              #给网络图加点,我的ID为点索引字段

forrowt in cursor.execute("select * from Line"):

#执行SQL语句并在循环语句中调用结果集  

   G.add_edge(rowt.EID,rowt.SID)  #给网络图加边,EIDSID分别为起始点字段

           

nx.draw(G)                           #绘制网络图G

plt.show()                           #显示网络图G

结果如图所示





https://blog.sciencenet.cn/blog-888144-673912.html


下一篇:K29改造DIY
收藏 IP: 121.28.69.*| 热度|

1 曾新林

该博文允许注册用户评论 请点击登录 评论 (5 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 20:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部