GeoPython Tutorial
python安装和基本语法
day 1 a.m.

王帅

课程大纲
# geopython-tutorial
课程大纲如下,
## day1 a.m.
- Slide: https://slides.com/sshuair/python-basic
- Notebook: [./day1_am/python_basic.ipynb](day1_am/python_basic.ipynb)
1. python安装
- 科学发行版选择(anaconda、 python 3.5+)
- 包库安装(pip、 conda、 windows难以安装的包库解决方法)
- IDLE选择(pycharm、jupyter-lab 、vscode、spider、)
2. Python基础语法讲解
- 数据类型
- 函数
- 面向对象
- 文件读写
## day1 p.m.
- Slide: https://slides.com/cbjing/python-scientific-computing
- Notebook: [./day1_pm/python-scientific-computing](day1_pm/python-scientific-computing.ipynb)
1. 科学计算常用库讲解
- numpy、scipy、matplotlib
2. 地理相关库详解
- fiona、shapely、geopandas
3. 实战
- 写一个文本读写、并处理的工具。
- 利用geopandas和shapely读取矢量数据并做空间操作。
## day2 a.m.
- Slide: https://slides.com/cbjing/python-imagery
- Notebook: [./day2_am/day2_am.ipynb](day2_am/day2_am.ipynb)
1. 遥感影像数据读写
- RasterIO、GDAL
2. 遥感影像数据基本处理
- 影像金字塔建立
- 合并
- 栅格计算
- 色彩调整
- 裁剪
- ...
## day2 p.m.
- Notebook: [./day2_pm/machine_learning/house-price.ipynb](./day2_pm/machine_learning/house-price.ipynb)
- Notebook: [./day2_pm/neural_networks.ipynb](./day2_pm/neural_networks.ipynb)
1. 机器学习讲解
- 以随机森林为例子,结合sklearn讲解房价预测
2. 深度学习讲解
- 讲解基本CNN原理,简单介绍手写数字识别demo

Python安装
1. 官方版本
- 解释器和标准库
- 下载地址:https://www.python.org/downloads/
2. 科学发行版
- 解释器和标准库
- 包含各种常用的科学计算包库(numpy、scipy...)
- 更强大的第三方包库配置工具
- 下载地址:https://www.anaconda.com/download/
Python3
Python2
2020年官方停止对python2的支持

Python运行方式
1. mac & linux
- 打开终端
2. windows
- 打开cmd(快捷键:windos + R)
✘ ~ > python
Python 3.5.2 |Anaconda custom (x86_64)| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello world!')
hello world!
>>> 100*12
1200
>>> import math
>>> math.sqrt(25)
5.0
>>> import sys
>>> sys.path
['', '/Users/sshuair/anaconda3/lib/python35.zip', '/Users/sshuair/anaconda3/lib/python3.5',
'/Users/sshuair/anaconda3/lib/python3.5/plat-darwin', '/Users/sshuair/anaconda3/lib/python3.5/lib-dynload',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages', '/Users/sshuair/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/aeosa', '/Users/sshuair/anaconda3/lib/python3.5/site-packages/dask-0.17.0-py3.5.egg', '/Users/sshuair/deep-learning/torchvision-enhance', '/Users/sshuair/GIS/coord-convert', '/Users/sshuair/imagery/geohey-imagery/g_imagery', '/Users/sshuair/imagery/rio-tiler/rio_tiler', '/Users/sshuair/anaconda3/lib/python3.5/site-packages/gbdx_auth-0.2.4-py2.7.egg', '/usr/local/opt/opencv3/lib/python3.5/site-packages', '/Users/sshuair/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg', '/Users/sshuair/deep-learning/tensorflow/models/research/slim', '/Users/sshuair/deep-learning/tensorflow/models/research']
>>>~ > python run_from_file.py
hello world!
12*10=120
25的开方等于: 5.0
IDLE选择
1. 重量级:PyCharm
4. 骨灰级玩家:terminal + vim
3. 科学玩家:jupyter notebook



第三方库的安装
1. conda
2. pip
✘ ~ conda install requests
Solving environment: done
## Package Plan ##
environment location: /Users/sshuair/anaconda3
added / updated specs:
- requests
The following packages will be downloaded:
package | build
---------------------------|-----------------
glob2-0.6 | py35hdef87b6_0 17 KB defaults
openssl-1.0.2o | h26aff7b_0 3.4 MB defaults
certifi-2018.4.16 | py35_0 142 KB defaults
pysocks-1.6.8 | py35_0 22 KB defaults
urllib3-1.22 | py35he002d57_0 156 KB defaults
chardet-3.0.4 | py35h16a84c2_1 190 KB defaults
conda-verify-2.0.0 | py35h2ddbee6_0 21 KB defaults
conda-4.5.4 | py35_0 1.0 MB defaults
pycosat-0.6.3 | py35h745f8c1_0 107 KB defaults
cytoolz-0.9.0.1 | py35h1de35cc_0 342 KB defaults
idna-2.6 | py35h01aacb0_1 123 KB defaults
requests-2.18.4 | py35h0d65e6b_1 92 KB defaults
setuptools-39.1.0 | py35_0 563 KB defaults
conda-build-3.10.2 | py35_0 431 KB defaults
ca-certificates-2018.03.07 | 0 124 KB defaults
------------------------------------------------------------
Total: 6.7 MB
The following NEW packages will be INSTALLED:
ca-certificates: 2018.03.07-0 defaults
certifi: 2018.4.16-py35_0 defaults
chardet: 3.0.4-py35h16a84c2_1 defaults
conda-verify: 2.0.0-py35h2ddbee6_0 defaults
glob2: 0.6-py35hdef87b6_0 defaults
pysocks: 1.6.8-py35_0 defaults
urllib3: 1.22-py35he002d57_0 defaults
The following packages will be UPDATED:
conda: 4.5.2-py35_0 conda-forge --> 4.5.4-py35_0 defaults
conda-build: 2.0.2-py35_0 defaults --> 3.10.2-py35_0 defaults
cytoolz: 0.8.0-py35_0 defaults --> 0.9.0.1-py35h1de35cc_0 defaults
idna: 2.1-py35_0 defaults --> 2.6-py35h01aacb0_1 defaults
openssl: 1.0.2j-0 defaults --> 1.0.2o-h26aff7b_0 defaults
pycosat: 0.6.1-py35_1 defaults --> 0.6.3-py35h745f8c1_0 defaults
requests: 2.13.0-py35_0 defaults --> 2.18.4-py35h0d65e6b_1 defaults
setuptools: 27.2.0-py35_0 defaults --> 39.1.0-py35_0 defaults
Proceed ([y]/n)?2. 源码安装
如何解决安装速度慢的问题:替换默认镜像源
https://mirrors.tuna.tsinghua.edu.cn/
- conda install [package]
- 完美解决包括之间互相依赖
- 地理包库的最佳安装选择
- pip install [package]
- 最早的python包库管理方案
- 包库数量众多
- python setup.py install
windows 下复杂库的安装:http://www.lfd.uci.edu/~gohlke/pythonlibs/

第三方库的安装



Python基本语法
基本数据类型
- 数字
- 字符串
- 布尔值
- 列表(list)
- 元组(tuple)
- 字典(dict)
- 集合(set)

条件判断&迭代
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')条件判断
迭代
# 列表循环
list_institute = ['地理所', '遥感所', '湖泊所']
for item in list_institute:
print(item)
函数
1. 函数的定义
def my_abs(x):
if x>=0:
return x
else:
return -x
my_abs(-10)2. 函数的参数
- 位置参数
- 默认参数
- 可变参数
- 关键字参数

函数-高级特性
1.列表生成式
# 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
In [1]: lc = [x * x for x in range(1, 11)]
...: lc
...:
Out[1]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 元素过滤
In [2]: [x * x for x in range(1, 11) if x % 2 == 0]
Out[2]: [4, 16, 36, 64, 100]2. 生成器
In [3]: # 生成器定义
...: g = (x * x for x in range(10))
...: g
...:
Out[3]: <generator object <genexpr> at 0x106346f10>
In [4]: next(g)
Out[4]: 03. map函数
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])4. 匿名函数
f = lambda x: x * x
list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
模块
1. 标准库(python官方自带)
2. 第三方库(第三发开发者)
安装方法:
pip install [packagename]
conda install [packagename]
import requests
rsponse = requests.get('http://www.baidu.com')
rsponse.contentIn [6]: import math
In [7]: math.sqrt(123)
Out[7]: 11.090536506409418
In [8]: math.cos(1)
Out[8]: 0.5403023058681398
In [9]: import sys
In [10]: sys.path
Out[10]:
['',
'/Users/sshuair/anaconda3/bin',
'/Users/sshuair/anaconda3/lib/python35.zip',
'/Users/sshuair/anaconda3/lib/python3.5',
'/Users/sshuair/anaconda3/lib/python3.5/plat-darwin',
'/Users/sshuair/anaconda3/lib/python3.5/lib-dynload',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/aeosa',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/dask-0.17.0-py3.5.egg',
'/Users/sshuair/deep-learning/torchvision-enhance',
'/Users/sshuair/GIS/coord-convert',
'/Users/sshuair/imagery/geohey-imagery/g_imagery',
'/Users/sshuair/imagery/rio-tiler/rio_tiler',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/gbdx_auth-0.2.4-py2.7.egg',
'/usr/local/opt/opencv3/lib/python3.5/site-packages',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg',
'/Users/sshuair/deep-learning/tensorflow/models/research/slim',
'/Users/sshuair/deep-learning/tensorflow/models/research',
'/Users/sshuair/anaconda3/lib/python3.5/site-packages/IPython/extensions',
'/Users/sshuair/.ipython']
面向对象
1. 类的定义
class Student():
pass
# 实例化类
tom = Student()2. 类的初始化
In [11]: class Student(object):
...: def __init__(self, name):
...: self.name = name
...: tom = Student('tom')
...: tom.name
...:
Out[11]: 'tom'3. 类的方法
In [12]: class Student(object):
...: def __init__(self, name, score):
...: self.name = name
...: self.score = score
...:
...: def get_grade(self):
...: if self.score >= 90:
...: return 'A'
...: elif self.score >= 60:
...: return 'B'
...: else:
...: return 'C'
...:
In [13]: jake = Student('jake', 90)
...: jake.get_grade()
...:
Out[13]: 'A'
1
文件读写
1. 文本文件
# 读文件
with open('point.txt', 'r') as f:
content = f.readlines()
# processing code
content
#['X,Y,fid\n',
# '116.108215926863,39.7334285851988,0\n',
# '116.109210003139,39.7333587447276,1\n',
#......
# 写文件
with open('out_fn.csv', 'w') as f:
for item in content:
f.write(item)2. 图像文件
from PIL import Image
img = Image.open('image.jpg')
img
img.save('out.jpg')python-basic
By Shuai Wang
python-basic
python安装和基础语法
- 1,020