赞
踩
python是GISer工作和学习中的好工具,因为快速算法原型、人工智能研发、处理数据、处理流程自动化都在使用python。我对工具的了解的基本原则是大胆尝试,小心求证。2012年接触到python,是因为arcgis 10.0把VBScript废掉用python来替代,后期在图书馆看到有不少学习python的同学,而且诸如GoAgent、 Google App Engine这些工具也用了Python,所以,这门语言有市场。
而且实际用了一下,比较符合我的认知习惯,比较容易学习,语法简明易于理解,同期我也接触过不少脚本语言,MATLAB、php、js、vbs,还有后来的R,都远不及python优雅和简明。开发效率比较高,可扩展性好,无论是作为别的平台的扩展还是自身扩展都比较简单。
随着16年AlphaGo掀起的人工智能热潮,tensorflow等使用python开发的人工智能框架把python推上风口,学校也教授《Python 空间数据处理(Geoprocessing With Python)》,随着对gdal的python接口的深入学习越发着迷于python各方面的优良性能,Python的运行效率自然比不上C++,但是各种开源工具包的获取和安装都很简单,基本上只要有pip就可以整合了,可能这就是之前Perl、Ruby这些语言比较火的原因吧,只是这些语言的语法太诡异,应用也有局限。
多年的深入学习,对python的了解也渐趋全面起来,系统记录自己走过的路、趟过的坑。
首先,python的本质是工具和arcgis、envi、ecognition等软件的本质是一致的。Python的基本内容很简单,但是高级内容庞杂,因此,不需要求全责备,面面俱到,把学习目标控制在自己需要的范围即可。
它和计算机沟通的方式是语言,而不是图形交互。不像ArcGIS、ENVI那样所见即所得,但是它更灵活,在熟悉语法的情况下,可以更好地定制操作,实现自动化,减少劳动的时间。利用Python和Arcpy可以实现ArcGIS操作的成千上万次的重复。
作为一门语言(计算机),计算机语言的词汇很少,也很多,少的是关键字,只有几十个,多的是变量名、函数名这些自定义的词汇。记住关键字和语法是最基本的。语法的最基本是让计算机执行操作,以及控制这些操作的以何种方式执行,仅此而已。最基本的操作就是数学运算、逻辑运算,控制方法无非顺序、条件、循环。其他内容无非是为了实现这些关键功能,结合语言的概念(词、句、段、篇),便于程序员编写代码。引入语言的概念,就是避免直接编写机器语言,机器语言看似毫无意义的0、1序列让开发者忘记写代码的初衷,以近似自然语言的方式完成代码的功能。另一方面,因为需要进行数学、逻辑的运算,所以又引入一些数学的概念(整型、浮点型、声明、变量、参数、函数、操作符、表达式等)。把这些概念和语言里面的具体实现对应起来,就可以在编写代码的时候找到合适的工具实现功能。
Python是一门解释型的计算机脚本语言,所有的高级编程语言最后还是要转换成CPU能理解的机器语言。解释型是从程序转变成机器语言的方式来说的,Python是通过解释器转换后变成了机器语言,开发者只要编写完程序,用解释器解释就可以执行程序。对比C、C++语言,简单易学,几乎不用思考就能够上手,输出hello,world,无需过多的储备知识。开发者不需要知道解释器是什么,怎么让解释器执行Python文件,但是C就要求开发者知道自己用了什么编译器,不同编译器的实现有什么区别,在不同操作系统下编译出来的可执行程序格式也不同,等等。Python开发者只要打上:python helloworld.py,程序就运行了。计算机脚本语言,一般可以认为这是一门弱类型的语言,想想C里面的long、short、int、float、double、char等等,以及每个变量声明时都必须声明它的类型,函数也是,但Python不需要,也不允许你声明变量类型,它会在解释的时候根据上下文自行判断。
便于适配现有平台,许多高级语言的发展时间比较短,自身的生态不健全,如果可以快速借用现有平台,开发者就可以快速地迁移到这个平台,减轻技术栈迁移的成本(时间、精力)。生产力得到较大提升,至少在某些方面拥有远超之前平台的效率。Python运行速度相对于C之类的编译型语言比较慢,但是这个短板不会成为瓶颈问题,且不说cython的效率接近于C,其高效的扩展接口,可以直接调用C、Fotran编写程序库执行高效代码。
GISer学Python除了掌握Python本身的核心语法,需要掌握一些常用的空间信息开发工具库,后文会列出。gis专业的方向也就那么些,我了解的就是空间数据处理(区划图、分布图)、空间信息系统建设(空间数据云、数据库以及各种系统)、空间分析算法(数据分析-行为模式、分布规律、地统计分析,地理理论推导-空间分析)、数字地图制图(地理要素表达、色彩、投影)、地理环境仿真模拟(建模-高精度曲面模型、DEM、DTM)。除了仿真模拟这一块,Python基本上都有比较可靠的工具。
学习的方法主要是自学和参加学校的课程,如果要参加课程可以尽量现在网络上找一些教学视频看一下,了解一下教学质量和教学方式。路线思路如下图:
通过网上查找和实践证明,学习一门语言高效的方法是看书和编码。这里核心概念主要是编程中的基础内容,比如计算机的组成结构,最起码要熟知存储单元、计算单元、显示设备、网络设备。了解一点操作系统的知识,至少知道操作系统的基本作用和功能,如内存管理、文件管理、设备管理(显示、网络)。了解计算机和操作系统的关系,操作系统和程序的关系。有了这些基础,然后掌握了语法,勤快练习,很快就可以掌握语言的使用方法。应用Python处理常见的问题,诸如批处理,文本文件的读写操作,批量修改文件名,用arcpy处理数据。进而处理更为复杂的问题,比如平台相关的程序调用,如何使用第三方库做数据爬虫,处理表格数据,画科学图例;再进一步,利用Python做一些专业性比较强的工作,如建一个地理信息共享的站点,设计一套处理数据的框架。如果有机会,试着实现一个自己在研究中设计的模型并开放给其他用户使用,比如斯坦福生物系木材环境研究院的Natural Capital Project利用Python实现了一套计算生态系统服务评估与权衡的模型InVEST、斯坦福的AI实验室基于Tensorflow开发了用于分类点云的神经网络PointNet、台湾国立清华大学的杨炫恭实现了基于语义分割图像的神经网络ICNet,或者实现自定义的数据读写工具,如针对h5的工具包h5py。
一下从自学的角度来说一下学习的资源。
LiveLessons.Python.Fundamentals 这个视频教程是Core Python programming作者录的,用英语讲的。
网上好像有个*甲鱼的对于无编程基础的学者非常友好。
其他的,好像马*兵的运维培训教程不错。
Core Python,本书第一和第二版都是基于Python 2讲解Python语法的,现在大多数的开发者都已经迁移到Python 3了,可以看看Learning Python(Mark lutz)。这本书的精华在于作者从解释器的角度来解释这门语言,讲解得比较全面,范例也很简单,估计略做修改,Python 3也可以运行,其他的入门书我没看过,也就听过一些,入门选经典就没错。这本书还有第三版,但是相对于第二版14章以后的扩充,第三版有Python 3的示例代码,也有实战案例。
Fluent Python,这本书我通读过,每一章节的代码都运行过一遍,这本书从程序员的角度分析了Python的程序要怎么写才能在实际使用的时候少出问题,详细分析了语法设施的区别,主题划分也很科学。第一部分是数据表达相关的,第二部分是流程控制相关的,第三部分是面向对象编程范式相关的,每一个主题都非常深入,很多内容在我个人的开发实践中都没有遇到过。最重要的是提供了Python编程的风格,让代码更加pythonic,而不是Python版的C或者Java。
Python Geospatial Development:勾勒了Python在地理信息开发中应用的大致图景,囊括了所有常用的地理信息开发库的Python版本。一般地理信息工具库都是C++或者Java实现的。这本书的实战案例也很宏达,但作者举重若轻,将一个要素编辑的功能通过webGIS的形式实现了。
Django 实战:目前最新最前沿的web开发实战讲解,作者事无巨细,将其搭建个人博客的经验分享出来,我才得以窥探Python在web开发过程中的全部应用点,了解一个站点从开发到部署的整个过程。
python帮助文档:语法、标准库的百科全书。
Python for arcgis:arcpy最好的一本书,不管是熟悉程度还是写代码的习惯都是极好的。
以上这些书都有源码和网站支持的,读的时候最好自己配置一下环境
运行一下代码,如果可以直接改动代码做应用就更好了。
以下是我在开发中常用的各个领域的
Django,web框架,类似spring,asp.net,PHP之类的。针对地理信息的实现叫GeoDjango。
mapnik,地图制图工具,配色,符合样式等等
SQLAlchemy,数据映射工具,直接把Python类映射成数据库表格了,linq,entity framework类似,专门针对地理数据的实现叫GeoSQLAlchemy
ckan,数据发布的网站框架,类似WordPress
flask,和Django差不多,但是更轻,可定制性更强,适合高手玩,一般用Django就可以了。
gdal,空间数据抽象库,一般会自带ogr,其实shapely,Fiona这些基本都是从它这衍生出来的。
opencv-python:计算机视觉库OpenCV的Python实现。
PIL:图片处理,注意:图片,不包括影像
beautifulsoup:爬虫工具,没怎么用过
jieba:中文分词工具
Scikit-learn:基于scipy,只用过回归模型
tensorflow:提供了大量人工神经网络的数据结构和基础设施,很多人工神经网络的概念在这个库都有对应的数据结构。
h5py,h5文件的处理工具
gdal,空间数据的处理工具
psysgopg,postgresql数据库的Python客户端
numpy,数值计算工具
scipy,科学计算工具,不知道和numpy怎么区分,也没用过
xlrd,Excel文档读取工具
xlwt,Excel文档写出
pandas 表格数据处理工具,针对地理信息的实现叫GeoPandas
arcpy:arcgis toolbox的Python接口,
matplotlib:科学图表工具
pyqt,Qt的Python接口
tk/tcl:tcl界面,Python 2的IDLE就是基于这个实现的。
venv,virtualenvwrapper,virtualenvwrapper-win:虚拟Python环境工具,有点类似虚拟机的概念,不过这个工具只虚拟一个Python环境。虚拟环境和原先安装的,其他的虚拟环境互不干扰。
Jupyterlab, 前身是ipython notebook,文学编程利器,可以在写书的同时加入代码,可以执行Python、C#等编程语言的代码并在页面上输出结果。
pyinstaller:把Python程序打包成安装包分发到其他电脑上安装,它会把所有py程序依赖的库都打包到一个文件里,主程序可以编译成exe,只需运行exe即可运行原来的py程序了。
Core Python Programming
Chun, Wesley J
Publisher: Prentice Hall
Year: 2006 Edition: 2nd Edition
Language: English Pages (biblio\tech): 1100\1137
ISBN: 0132269937, 9780132269933 ID: 2864615
http://111.90.145.72/get.php?md5=e3d086738ae3de60e5a75a9add32cedb&key=NZU3Y72BKMD8CIWQ
流畅的Python
代码:https://github.com/fluentpython
1、在python.org下载Python解释器的安装包,目前最新的Python2是2.7.18,最新的Python3是3.9.2。
2、开发和执行Python程序。
a、使用文本编辑器编辑Python脚本,用vim、notepad++、ultraEdit、sublimetext、atom这些编辑器。然后用命令行执行py脚本。Python **.py
b、使用成熟的收费的ide,类似 idea、pycharm、visual studio等。
c、使用免费的IDE,Visual Studio Code, Spyder等。
如果习惯于vs开发工具的,推荐Visual Studio Code,稍微配置一下就行。安装magicPython,Python、Python for VSCode等插件即可。
有兴趣继续了解《GISer技术练级攻略》的请一键三连。
参考资料
程序员技术练级攻略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。