SlideShare una empresa de Scribd logo
1 de 45
웃으면서 PYTHON
공간정보 다루기
강의 : 김지윤
(aliasgis@gmail.com)
1. 설치해 봅시다 .
• 필요한 것은 다 설치해봅시다 .
https://www.python.org/downloads/
-> 3.4 버전
-numpy, scipy,matplotlib 를 설치해봅시다 .
(1)OS 가 윈도우라는 전제 하에
- http://www.lfd.uci.edu/~gohlke/pythonlibs/
(2)버전에 맞는 라이브러리를 받아보십다 .
(3)설치해 보십다 .
Dos Command 를 실행 -> pip 명령어를 수행 합니다 .
2. Why Python?
• 일단 쉽다 .
• 쉬운만큼 쓰기도 쉽다 .
• 하나 개발해 놓으면 다른 플랫폼에서도 적용이 가능하다 .
-> Web, PC, Smart Phone App 등
• 라이브러리가 많다 .-> 내가 직접 알고리즘을 개발할일이
많지않다 .
• 써드 파티언어로 인기가 많다 .
-> QGIS(PyQGIS), ArcGIS(ArcPy)
3. 기초문법 (1)
• 데이터 출력하기
>>> GeoScience = {"GPS", "GIS", "RS","LBS"}
>>> print(GeoScience)
{'RS', 'GIS', 'GPS', 'LBS'}
예제 1. 각자연구실 식구들 이름을 찍어봅시다 .
3. 기초문법 (2)
• 변수 사용법
>>> type(7000)
<class 'int'>
>>> type(3.14444)
<class 'float'>
>>> type(' 하하 망했다 ')
<class 'str'>
>>>
3. 기초문법 (3)
• 프로그램 제어하기 ( if ~ else)
>> price = 7000
>> if price < 1000: bid = 1
elif price >= 1000 and price < 5000: bid = 5
elif price >= 5000 and price < 10000: bid = 10
elif price >= 10000 and price < 50000: bid = 50
elif price >= 50000 and price < 100000: bid = 100
elif price >= 100000 and price < 500000: bid = 500
elif price >= 500000: bid = 1000
>> bid
3. 기초문법 (4)
• for 문과 range
Range
예 ) range(1,10)
list(range(1,10))
>>> for i in range(0, 11):
print(i)
>>> interest_stocks = ["Naver", "Samsung", "SK Hynix"]
>>> for company in interest_stocks:
print(company)
// 리스트 와 튜플 의 차이
>>> interest_stocks = ("Naver", "Samsung", "SK Hynix")
>>> for company in interest_stocks:
print("%s: Buy 10" % company)
3. 기초문법 (5)
• for 문과 Dictionary
- 데이터를 필드 와 값으로 구분하는 경우
예 )
interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30}
for company, stock_num in interest_stocks.items():
print("%s: Buy %s" % (company, stock_num))
3. 기초문법 (6)
• 함수를 써봅시다 .
def print_ntime(n):
for i in range(n):
print(“ 서울시립대 공간정보공학과 ")
 실행
Print_ntime(3)
3. 기초문법 (7)
• 이미있는 라이브러리를 쓰고자 할 때
- Import 라이브러리 명을 씀
- 도대체 라이브러리를 왜쓰는 건가 ?
1)이미있는 기능인대 왜 또 짜…
2) 애인 영희 보러가야 하는데 시간도 없어
3) 내가 다알고리즘을 알지만 조금 구현하는데 자신없어
4) 기타 ( 손이 가려워서… .)
간단한 차트 그리기
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(0, 1, 500)
>>> y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
>>> fig, ax = plt.subplots()
>>> ax.fill(x, y, zorder=10)
>>> ax.grid(True, zorder=5)
>>> plt.show()
from mpl_toolkits.mplot3d import
axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contourf(X, Y, Z,
cmap=cm.coolwarm)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
# 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors,
alpha=0.5)
plt.show()
간단한 지도 사용하기
1. 일단 라이브러리를 설치 합시다 .(pyproj, BasemapTOOLKIT)
http://www.lfd.uci.edu/~gohlke/pythonlibs/
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
resolut ion = 'h', area_thresh = 0.1,
llcrnrlon=-136.25, llcrnrlat=56.0,
urcrnrlon=-134.25, urcrnrlat=57.75)
map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()
plt.show()
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
resolut ion = 'h', area_thresh = 0.1,
llcrnrlon=-136.25, llcrnrlat=56.0,
urcrnrlon=-134.25, urcrnrlat=57.75)
map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()
lon = -135.3318
lat = 57.0799
x,y = map(lon, lat)
map.plot(x, y, 'bo', markersize=24)
plt.show()
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
resolut ion = 'h', area_thresh = 0.1,
llcrnrlon=-136.25, llcrnrlat=56.0,
urcrnrlon=-134.25, urcrnrlat=57.75)
map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()
lons = [-135.3318, -134.8331, -134.6572]
lats = [57.0799, 57.0894, 56.2399]
x,y = map(lons, lats)
map.plot(x, y, 'bo', markersize=18)
labels = ['Sitka', 'Baranof Warm Springs', 'Port Alexander']
for label, xpt, ypt in zip(labels, x, y):
plt.text(xpt+10000, ypt+5000, label)
plt.show()
이시간에는
• QGIS 에서 PYTHON 쓰기
• folium 으로 OSM 지도 사용하기
• PYSAL 라이브러리로 공간데이터 분석해보기
1. Folium
• 설치방법
- pip install folium
• 무엇에 쓰는 물건이고… ?
- 인터넷지도 즉 html 형태의 지도가 생성이 가능
• 예제 1
>>map_osm = folium.Map(location=[37.567871,126.97783],zoom_start=17,tiles='StamenTerrain')
>>> map_osm.save('map3.html')
>>> map_osm = folium.Map(location=[37.567871,126.97783],zoom_start=17,tiles='StamenToner')
>>> map_osm.save('map4.html')
• >>> map_osm = folium.Map(location=[37.566345, 126.9779893], zoom_start=17)
• >>> folium.Marker([37.566345, 126.977873],popup=' 서울시청 ').add_to(map_osm)
• >>> folium.Marker([37.56588345, 126.975473],popup=' 덕수중 ').add_to(map_osm)
• >>> map_osm.save('map5.html'')
• 예제 2. HeatMap
>>> import folium
>>> import numpy as np
>>> data2 = (np.random.normal(size=(100, 3)) *
np.array([[1, 1, 1]]) +
np.array([[37, 126.45341, 1]])).tolist()
>>> from folium.plugins import HeatMap
>>> m = folium.Map([37., 126.45341], tiles='stamentoner', zoom_start=6)
>>> HeatMap(data2).add_to(m)
>>>m.Save(‘HeatMap.html’)
조별과제후보 1
• Python Folium 으로 자기가 잘가는 곳을 찍어오기
(10 개이상 )
- 반드시 html 과 코드를 내야함
PYSAL 라이브러리
• 넌 대체 머하는 넘이냐… ?
- 공간데이터 내부구조를 분석할 수 있음
- 공간데이터 파일을 읽고 쓰기가 가능함
- SHP, CSV, LOTUS,WKT 파일 등을 핸들링이 가능함
- 고급 공간분석알고리즘을 아무렇지 않게 사용할 수있다 .
- ArcGIS, PyQGIS 도 요놈을 씀
- 분명 잘 익혀두면 좋은 날이 올까 ?
파일읽기
*. Shp 파일 해석해보기
>>>db = pysal.open('admin_sid.dbf')
>>. db.header
['SID_CD', 'SID_NM', 'POP2007', 'POP2008', 'Shape_Leng', 'Shape_Area']
>>> db.field_spec
[('C', 10, 0), ('C', 20, 0), ('F', 19, 11), ('F', 19, 11), ('F', 19, 11), ('F', 19, 11)]
>>> import pysal
>>> shp = pysal.open('admin_sid.shp')
>>> len(shp)
1
import pysal as ps
f = shapefile.Reader("admin_sid")
f.bbox
[179101.84250000026, 436263.77749999985,
216151.0915000001, 466550.22389999963]
f.numRecords
f.fields
[('DeletionFlag', 'C', 1, 0), ['SID_CD', 'C', 10, 0], ['SID_NM', 'C',
20, 0], ['POP2007', 'F', 19, 11], ['POP2008', 'F', 19, 11],
['Shape_Leng', 'F', 19, 11], ['Shape_Area', 'F', 19, 11]]
Shp File 의 공간가중치구하기
- 공간가중치 라 함은 공간 상의 인접성을 구하여 인접된 도형에 대한 거리기반
분석임
 w=pysal.weights.Rook.from_shapefile('admin_emd.shp')
 w.n
 W.histogram
>>> w = pysal.weights.Queen.from_shapefile('admin_sgg.shp')
>>> w.n
25
>>> w.histogram
[(2, 3), (3, 5), (4, 4), (5, 5), (6, 6), (7, 2)]
>>>
조별과제 후보 2
Pysal 로 지적도 SHP File 분석하기
PyQgis 맛보기
플러그인 메뉴 > 파이썬콘솔 메뉴실행
여기서 잠깐 Qt 가 먼가요 ..?
1. 일단 레이어를 부르세
from qgis.core import *
wb = QgsVectorLayer('c:/Seoul/admin_sid.shp', 'test', 'ogr')
QgsMapLayerRegistry.instance().addMapLayer(wb)
from qgis.core import *
raster = QgsRasterLayer('c:/seoul_raster/landsat.tif', 'landsat')
QgsMapLayerRegistry.instance().addMapLayer(raster)
raster.width(), raster.height()
(1773, 1428)
raster.bandCount()
3
raster.metadata()
u'<p class="glossy">ub4dcub77cuc774ubc84</p>n<p>GDAL
provider</p>nGTiff<br>GeoTIFF<p class="glossy">ub370uc774ud130uc14b
uc124uba85</p>n<p>c:/seoul_raster/landsat.tif</p>n<p
class="glossy">ubc34ub4dc
1</p>n<tr><p>nSTATISTICS_MAXIMUM=255</p>n<p>nSTATISTICS_MEA
N=115.2659212021</p>n<p>nSTATISTICS_MINIMUM=0</p>n<p>nSTATIS
TICS_STDDEV=74.58091813766</p>n</tr><p class="glossy">ubc34ub4dc
2</p>n<tr><p>nSTATISTICS_MAXIMUM=255</p>n<p>nSTATISTICS_MEA
N=121.37074164127</p>n<p>nSTATISTICS_MINIMUM=0</p>n<p>
영상을 분류해 보십다 .
# 소스 파일과 레이어 이름 정의
srcFile = "c:/seoul_raster/landsat.tif" # source file
lyrName = "landsat" # layer name
# 레이어 생성
from qgis.core import QgsRasterLayer
rasterLyr = QgsRasterLayer(srcFile, lyrName)
# 목록에 레이어 추가
# QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)
from PyQt4 import QtGui
i = []
i.append(QgsColorRampShader.ColorRampItem(0, QtGui.QColor('#000000'), '0'))
i.append(QgsColorRampShader.ColorRampItem(6, QtGui.QColor('#ffffff'), ''))
i.append(QgsColorRampShader.ColorRampItem(36, QtGui.QColor('#c4baa4'), ''))
i.append(QgsColorRampShader.ColorRampItem(36.5, QtGui.QColor('#b4966c'), '0.1'))
i.append(QgsColorRampShader.ColorRampItem(97.1, QtGui.QColor('#a4824c'), ''))
i.append(QgsColorRampShader.ColorRampItem(97.6, QtGui.QColor('#94723c'), ''))
i.append(QgsColorRampShader.ColorRampItem(128, QtGui.QColor('#7c9e2c'), '0.2'))
i.append(QgsColorRampShader.ColorRampItem(160, QtGui.QColor('#94b614'), ''))
i.append(QgsColorRampShader.ColorRampItem(190, QtGui.QColor('#74aa04'), '0.3'))
i.append(QgsColorRampShader.ColorRampItem(219, QtGui.QColor('#64a204'), ''))
i.append(QgsColorRampShader.ColorRampItem(241, QtGui.QColor('#549604'), '0.4'))
c.setColorRampItemList(i)
s = QgsRasterShader()
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(rasterLyr.dataProvider(), 1, s)
rasterLyr.setRenderer(ps)
# 목록에 레이어 추가
QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])
심화 학습 -> 이게 먼 심화 학습
• Ndvi 를 구해 봅시다 .( 그래도 함 해보세요 )
근데 Ndvi ( 식생지수 ) 가 머죠 ?
인공위성이나 항공기를 이용하여 관측한 다중 분광대 영상 자료는 지상의
대상물이 각 파장대별로 독특한 특성을 나타내므로 이 특성을 이용하면 원
하는 정보를 추출해 낼 수 있다 . 특히 , Landsat 등 지상관측 위성의 주 관
심 범위인 육지 표면의 영상 자료는 95% 이상이 토양과 식생에 관한 정보
를 포함하고 있으므로 이 영상 자료를 이용하면 지표면의 식생 분포나 식
생 밀집도를 추정하는 것이 가능
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from qgis.analysis import *
rasterName ="landsat"
raster = QgsRasterLayer("c:/seoul_raster/landsat.tif", rasterName)
ir = QgsRasterCalculatorEntry()
r = QgsRasterCalculatorEntry()
ir.raster = raster
r.raster = raster
ir.bandNumber = 2
r.bandNumber = 1
ir.ref = rasterName + "@2"
r.ref = rasterName + "@1"
reference = (ir.ref, r.ref, ir.ref, r.ref)
exp = "1.0 * (%s - %s) / 1.0 + (%s + %s)" % reference
output = "c:/seoul_raster/ndvi.tif"
e = raster.extent()
w = raster.width()
h = raster.height()
entries = [ir, r]
ndvi = QgsRasterCalculator(exp, output, "GTiff", e,w,h, entries)
ndvi.processCalculation()
0
lyr = QgsRasterLayer(output, "NDVI")
QgsMapLayerRegistry.instance().addMapLayer(lyr)
<qgis._core.QgsRasterLayer object at 0x0B0F55D0>
조별과제 후보
논문 : Otsu, N., 1979. A threshold selection method from gray-level
histogram. IEEE Transactions on Systems, Man, and Cybernetics 9, 62–66.
PDF: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4310076
제공된 서울시립대영상에서 ndvi 혹은 오츠 임계치를 구해봅시다 .
웃으면서Python

Más contenido relacionado

La actualidad más candente

이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
zupet
 

La actualidad más candente (20)

PostGIS 시작하기
PostGIS 시작하기PostGIS 시작하기
PostGIS 시작하기
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진
 
QGIS 활용
QGIS 활용QGIS 활용
QGIS 활용
 
오픈소스 공간통계분석 패키지 개발
오픈소스  공간통계분석 패키지 개발오픈소스  공간통계분석 패키지 개발
오픈소스 공간통계분석 패키지 개발
 
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 
[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig[FOSS4G KOREA 2014] Introduce uDig
[FOSS4G KOREA 2014] Introduce uDig
 
Java 기반의 오픈 소스 GIS를 지원하는 국내 공간 DBMS 드라이버 개발
Java 기반의 오픈 소스 GIS를 지원하는 국내 공간 DBMS 드라이버 개발Java 기반의 오픈 소스 GIS를 지원하는 국내 공간 DBMS 드라이버 개발
Java 기반의 오픈 소스 GIS를 지원하는 국내 공간 DBMS 드라이버 개발
 
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
 
[제86회 Open Technet]OGC 표준 기반의 공간자료 분석과 시각화 기술 개발
[제86회 Open Technet]OGC 표준 기반의 공간자료 분석과 시각화 기술 개발[제86회 Open Technet]OGC 표준 기반의 공간자료 분석과 시각화 기술 개발
[제86회 Open Technet]OGC 표준 기반의 공간자료 분석과 시각화 기술 개발
 
[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GIS[FOSS4G] uDig Desktop GIS
[FOSS4G] uDig Desktop GIS
 
윤석준 2015 cuda_contest
윤석준 2015 cuda_contest윤석준 2015 cuda_contest
윤석준 2015 cuda_contest
 
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정
 
1 QGIS intro
1 QGIS intro1 QGIS intro
1 QGIS intro
 
GeoTools와 GeoServer를 이용한 KOPSS Open API의 구현
GeoTools와 GeoServer를 이용한 KOPSS Open API의 구현GeoTools와 GeoServer를 이용한 KOPSS Open API의 구현
GeoTools와 GeoServer를 이용한 KOPSS Open API의 구현
 
오픈소스GIS 개론 과정 - OpenLayers 기초
오픈소스GIS 개론 과정 - OpenLayers 기초오픈소스GIS 개론 과정 - OpenLayers 기초
오픈소스GIS 개론 과정 - OpenLayers 기초
 

Similar a 웃으면서Python

자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
KoChungWook
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
Intae Cho
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
kd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
chl132435
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
SeongHyun Ahn
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
zupet
 

Similar a 웃으면서Python (20)

파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
IPython
IPythonIPython
IPython
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
Pyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlabPyconkr2019 features for using python like matlab
Pyconkr2019 features for using python like matlab
 
Macro for Game
Macro for GameMacro for Game
Macro for Game
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
Python machine learning Ch.4
Python machine learning Ch.4Python machine learning Ch.4
Python machine learning Ch.4
 
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
 
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 10회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 

Más de Jiyoon Kim (9)

Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021Foss4 g kr-workshop_gps_2021
Foss4 g kr-workshop_gps_2021
 
Qgis에서 GPS 연동
Qgis에서 GPS 연동Qgis에서 GPS 연동
Qgis에서 GPS 연동
 
Geo tools Data Transfer
Geo tools Data TransferGeo tools Data Transfer
Geo tools Data Transfer
 
Pyqgis 기초편
Pyqgis 기초편Pyqgis 기초편
Pyqgis 기초편
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatial
 
osgeo 봄 세미나 -R
osgeo 봄 세미나 -Rosgeo 봄 세미나 -R
osgeo 봄 세미나 -R
 
웃는동안 배우는 Qgis
웃는동안 배우는 Qgis웃는동안 배우는 Qgis
웃는동안 배우는 Qgis
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나
 
Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기Vworld api desktop에서 쓰기
Vworld api desktop에서 쓰기
 

웃으면서Python

  • 1. 웃으면서 PYTHON 공간정보 다루기 강의 : 김지윤 (aliasgis@gmail.com)
  • 2. 1. 설치해 봅시다 . • 필요한 것은 다 설치해봅시다 . https://www.python.org/downloads/ -> 3.4 버전 -numpy, scipy,matplotlib 를 설치해봅시다 . (1)OS 가 윈도우라는 전제 하에 - http://www.lfd.uci.edu/~gohlke/pythonlibs/ (2)버전에 맞는 라이브러리를 받아보십다 . (3)설치해 보십다 . Dos Command 를 실행 -> pip 명령어를 수행 합니다 .
  • 3.
  • 4. 2. Why Python? • 일단 쉽다 . • 쉬운만큼 쓰기도 쉽다 . • 하나 개발해 놓으면 다른 플랫폼에서도 적용이 가능하다 . -> Web, PC, Smart Phone App 등 • 라이브러리가 많다 .-> 내가 직접 알고리즘을 개발할일이 많지않다 . • 써드 파티언어로 인기가 많다 . -> QGIS(PyQGIS), ArcGIS(ArcPy)
  • 5. 3. 기초문법 (1) • 데이터 출력하기 >>> GeoScience = {"GPS", "GIS", "RS","LBS"} >>> print(GeoScience) {'RS', 'GIS', 'GPS', 'LBS'} 예제 1. 각자연구실 식구들 이름을 찍어봅시다 .
  • 6. 3. 기초문법 (2) • 변수 사용법 >>> type(7000) <class 'int'> >>> type(3.14444) <class 'float'> >>> type(' 하하 망했다 ') <class 'str'> >>>
  • 7. 3. 기초문법 (3) • 프로그램 제어하기 ( if ~ else) >> price = 7000 >> if price < 1000: bid = 1 elif price >= 1000 and price < 5000: bid = 5 elif price >= 5000 and price < 10000: bid = 10 elif price >= 10000 and price < 50000: bid = 50 elif price >= 50000 and price < 100000: bid = 100 elif price >= 100000 and price < 500000: bid = 500 elif price >= 500000: bid = 1000 >> bid
  • 8. 3. 기초문법 (4) • for 문과 range Range 예 ) range(1,10) list(range(1,10)) >>> for i in range(0, 11): print(i) >>> interest_stocks = ["Naver", "Samsung", "SK Hynix"] >>> for company in interest_stocks: print(company) // 리스트 와 튜플 의 차이 >>> interest_stocks = ("Naver", "Samsung", "SK Hynix") >>> for company in interest_stocks: print("%s: Buy 10" % company)
  • 9. 3. 기초문법 (5) • for 문과 Dictionary - 데이터를 필드 와 값으로 구분하는 경우 예 ) interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30} for company, stock_num in interest_stocks.items(): print("%s: Buy %s" % (company, stock_num))
  • 10. 3. 기초문법 (6) • 함수를 써봅시다 . def print_ntime(n): for i in range(n): print(“ 서울시립대 공간정보공학과 ")  실행 Print_ntime(3)
  • 11. 3. 기초문법 (7) • 이미있는 라이브러리를 쓰고자 할 때 - Import 라이브러리 명을 씀 - 도대체 라이브러리를 왜쓰는 건가 ? 1)이미있는 기능인대 왜 또 짜… 2) 애인 영희 보러가야 하는데 시간도 없어 3) 내가 다알고리즘을 알지만 조금 구현하는데 자신없어 4) 기타 ( 손이 가려워서… .)
  • 12.
  • 13. 간단한 차트 그리기 import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show()
  • 14. >>> import numpy as np >>> import matplotlib.pyplot as plt >>> x = np.linspace(0, 1, 500) >>> y = np.sin(4 * np.pi * x) * np.exp(-5 * x) >>> fig, ax = plt.subplots() >>> ax.fill(x, y, zorder=10) >>> ax.grid(True, zorder=5) >>> plt.show()
  • 15. from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import cm fig = plt.figure() ax = fig.gca(projection='3d') X, Y, Z = axes3d.get_test_data(0.05) cset = ax.contourf(X, Y, Z, cmap=cm.coolwarm) ax.clabel(cset, fontsize=9, inline=1) plt.show()
  • 16. import numpy as np import matplotlib.pyplot as plt N = 50 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radii plt.scatter(x, y, s=area, c=colors, alpha=0.5) plt.show()
  • 17. 간단한 지도 사용하기 1. 일단 라이브러리를 설치 합시다 .(pyproj, BasemapTOOLKIT) http://www.lfd.uci.edu/~gohlke/pythonlibs/
  • 18. from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt import numpy as np map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135, resolut ion = 'h', area_thresh = 0.1, llcrnrlon=-136.25, llcrnrlat=56.0, urcrnrlon=-134.25, urcrnrlat=57.75) map.drawcoastlines() map.drawcountries() map.fillcontinents(color = 'coral') map.drawmapboundary() plt.show()
  • 19. from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt import numpy as np map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135, resolut ion = 'h', area_thresh = 0.1, llcrnrlon=-136.25, llcrnrlat=56.0, urcrnrlon=-134.25, urcrnrlat=57.75) map.drawcoastlines() map.drawcountries() map.fillcontinents(color = 'coral') map.drawmapboundary() lon = -135.3318 lat = 57.0799 x,y = map(lon, lat) map.plot(x, y, 'bo', markersize=24) plt.show()
  • 20. from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt import numpy as np map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135, resolut ion = 'h', area_thresh = 0.1, llcrnrlon=-136.25, llcrnrlat=56.0, urcrnrlon=-134.25, urcrnrlat=57.75) map.drawcoastlines() map.drawcountries() map.fillcontinents(color = 'coral') map.drawmapboundary() lons = [-135.3318, -134.8331, -134.6572] lats = [57.0799, 57.0894, 56.2399] x,y = map(lons, lats) map.plot(x, y, 'bo', markersize=18) labels = ['Sitka', 'Baranof Warm Springs', 'Port Alexander'] for label, xpt, ypt in zip(labels, x, y): plt.text(xpt+10000, ypt+5000, label) plt.show()
  • 21. 이시간에는 • QGIS 에서 PYTHON 쓰기 • folium 으로 OSM 지도 사용하기 • PYSAL 라이브러리로 공간데이터 분석해보기
  • 22. 1. Folium • 설치방법 - pip install folium • 무엇에 쓰는 물건이고… ? - 인터넷지도 즉 html 형태의 지도가 생성이 가능
  • 23. • 예제 1 >>map_osm = folium.Map(location=[37.567871,126.97783],zoom_start=17,tiles='StamenTerrain') >>> map_osm.save('map3.html') >>> map_osm = folium.Map(location=[37.567871,126.97783],zoom_start=17,tiles='StamenToner') >>> map_osm.save('map4.html')
  • 24. • >>> map_osm = folium.Map(location=[37.566345, 126.9779893], zoom_start=17) • >>> folium.Marker([37.566345, 126.977873],popup=' 서울시청 ').add_to(map_osm) • >>> folium.Marker([37.56588345, 126.975473],popup=' 덕수중 ').add_to(map_osm) • >>> map_osm.save('map5.html'')
  • 25. • 예제 2. HeatMap >>> import folium >>> import numpy as np >>> data2 = (np.random.normal(size=(100, 3)) * np.array([[1, 1, 1]]) + np.array([[37, 126.45341, 1]])).tolist() >>> from folium.plugins import HeatMap >>> m = folium.Map([37., 126.45341], tiles='stamentoner', zoom_start=6) >>> HeatMap(data2).add_to(m) >>>m.Save(‘HeatMap.html’)
  • 26. 조별과제후보 1 • Python Folium 으로 자기가 잘가는 곳을 찍어오기 (10 개이상 ) - 반드시 html 과 코드를 내야함
  • 27. PYSAL 라이브러리 • 넌 대체 머하는 넘이냐… ? - 공간데이터 내부구조를 분석할 수 있음 - 공간데이터 파일을 읽고 쓰기가 가능함 - SHP, CSV, LOTUS,WKT 파일 등을 핸들링이 가능함 - 고급 공간분석알고리즘을 아무렇지 않게 사용할 수있다 . - ArcGIS, PyQGIS 도 요놈을 씀 - 분명 잘 익혀두면 좋은 날이 올까 ?
  • 28. 파일읽기 *. Shp 파일 해석해보기 >>>db = pysal.open('admin_sid.dbf') >>. db.header ['SID_CD', 'SID_NM', 'POP2007', 'POP2008', 'Shape_Leng', 'Shape_Area'] >>> db.field_spec [('C', 10, 0), ('C', 20, 0), ('F', 19, 11), ('F', 19, 11), ('F', 19, 11), ('F', 19, 11)] >>> import pysal >>> shp = pysal.open('admin_sid.shp') >>> len(shp) 1
  • 29. import pysal as ps f = shapefile.Reader("admin_sid") f.bbox [179101.84250000026, 436263.77749999985, 216151.0915000001, 466550.22389999963] f.numRecords f.fields [('DeletionFlag', 'C', 1, 0), ['SID_CD', 'C', 10, 0], ['SID_NM', 'C', 20, 0], ['POP2007', 'F', 19, 11], ['POP2008', 'F', 19, 11], ['Shape_Leng', 'F', 19, 11], ['Shape_Area', 'F', 19, 11]]
  • 30. Shp File 의 공간가중치구하기 - 공간가중치 라 함은 공간 상의 인접성을 구하여 인접된 도형에 대한 거리기반 분석임
  • 32. >>> w = pysal.weights.Queen.from_shapefile('admin_sgg.shp') >>> w.n 25 >>> w.histogram [(2, 3), (3, 5), (4, 4), (5, 5), (6, 6), (7, 2)] >>>
  • 33. 조별과제 후보 2 Pysal 로 지적도 SHP File 분석하기
  • 34. PyQgis 맛보기 플러그인 메뉴 > 파이썬콘솔 메뉴실행
  • 35.
  • 36. 여기서 잠깐 Qt 가 먼가요 ..?
  • 37.
  • 38. 1. 일단 레이어를 부르세 from qgis.core import * wb = QgsVectorLayer('c:/Seoul/admin_sid.shp', 'test', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(wb)
  • 39. from qgis.core import * raster = QgsRasterLayer('c:/seoul_raster/landsat.tif', 'landsat') QgsMapLayerRegistry.instance().addMapLayer(raster)
  • 40. raster.width(), raster.height() (1773, 1428) raster.bandCount() 3 raster.metadata() u'<p class="glossy">ub4dcub77cuc774ubc84</p>n<p>GDAL provider</p>nGTiff<br>GeoTIFF<p class="glossy">ub370uc774ud130uc14b uc124uba85</p>n<p>c:/seoul_raster/landsat.tif</p>n<p class="glossy">ubc34ub4dc 1</p>n<tr><p>nSTATISTICS_MAXIMUM=255</p>n<p>nSTATISTICS_MEA N=115.2659212021</p>n<p>nSTATISTICS_MINIMUM=0</p>n<p>nSTATIS TICS_STDDEV=74.58091813766</p>n</tr><p class="glossy">ubc34ub4dc 2</p>n<tr><p>nSTATISTICS_MAXIMUM=255</p>n<p>nSTATISTICS_MEA N=121.37074164127</p>n<p>nSTATISTICS_MINIMUM=0</p>n<p>
  • 41. 영상을 분류해 보십다 . # 소스 파일과 레이어 이름 정의 srcFile = "c:/seoul_raster/landsat.tif" # source file lyrName = "landsat" # layer name # 레이어 생성 from qgis.core import QgsRasterLayer rasterLyr = QgsRasterLayer(srcFile, lyrName) # 목록에 레이어 추가 # QgsMapLayerRegistry.instance().addMapLayers([rasterLyr]) c = QgsColorRampShader() c.setColorRampType(QgsColorRampShader.INTERPOLATED) from PyQt4 import QtGui i = [] i.append(QgsColorRampShader.ColorRampItem(0, QtGui.QColor('#000000'), '0')) i.append(QgsColorRampShader.ColorRampItem(6, QtGui.QColor('#ffffff'), '')) i.append(QgsColorRampShader.ColorRampItem(36, QtGui.QColor('#c4baa4'), '')) i.append(QgsColorRampShader.ColorRampItem(36.5, QtGui.QColor('#b4966c'), '0.1')) i.append(QgsColorRampShader.ColorRampItem(97.1, QtGui.QColor('#a4824c'), '')) i.append(QgsColorRampShader.ColorRampItem(97.6, QtGui.QColor('#94723c'), '')) i.append(QgsColorRampShader.ColorRampItem(128, QtGui.QColor('#7c9e2c'), '0.2')) i.append(QgsColorRampShader.ColorRampItem(160, QtGui.QColor('#94b614'), '')) i.append(QgsColorRampShader.ColorRampItem(190, QtGui.QColor('#74aa04'), '0.3')) i.append(QgsColorRampShader.ColorRampItem(219, QtGui.QColor('#64a204'), '')) i.append(QgsColorRampShader.ColorRampItem(241, QtGui.QColor('#549604'), '0.4')) c.setColorRampItemList(i) s = QgsRasterShader() s.setRasterShaderFunction(c) ps = QgsSingleBandPseudoColorRenderer(rasterLyr.dataProvider(), 1, s) rasterLyr.setRenderer(ps) # 목록에 레이어 추가 QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])
  • 42. 심화 학습 -> 이게 먼 심화 학습 • Ndvi 를 구해 봅시다 .( 그래도 함 해보세요 ) 근데 Ndvi ( 식생지수 ) 가 머죠 ? 인공위성이나 항공기를 이용하여 관측한 다중 분광대 영상 자료는 지상의 대상물이 각 파장대별로 독특한 특성을 나타내므로 이 특성을 이용하면 원 하는 정보를 추출해 낼 수 있다 . 특히 , Landsat 등 지상관측 위성의 주 관 심 범위인 육지 표면의 영상 자료는 95% 이상이 토양과 식생에 관한 정보 를 포함하고 있으므로 이 영상 자료를 이용하면 지표면의 식생 분포나 식 생 밀집도를 추정하는 것이 가능
  • 43. from PyQt4.QtGui import * from PyQt4.QtCore import * from qgis.analysis import * rasterName ="landsat" raster = QgsRasterLayer("c:/seoul_raster/landsat.tif", rasterName) ir = QgsRasterCalculatorEntry() r = QgsRasterCalculatorEntry() ir.raster = raster r.raster = raster ir.bandNumber = 2 r.bandNumber = 1 ir.ref = rasterName + "@2" r.ref = rasterName + "@1" reference = (ir.ref, r.ref, ir.ref, r.ref) exp = "1.0 * (%s - %s) / 1.0 + (%s + %s)" % reference output = "c:/seoul_raster/ndvi.tif" e = raster.extent() w = raster.width() h = raster.height() entries = [ir, r] ndvi = QgsRasterCalculator(exp, output, "GTiff", e,w,h, entries) ndvi.processCalculation() 0 lyr = QgsRasterLayer(output, "NDVI") QgsMapLayerRegistry.instance().addMapLayer(lyr) <qgis._core.QgsRasterLayer object at 0x0B0F55D0>
  • 44. 조별과제 후보 논문 : Otsu, N., 1979. A threshold selection method from gray-level histogram. IEEE Transactions on Systems, Man, and Cybernetics 9, 62–66. PDF: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4310076 제공된 서울시립대영상에서 ndvi 혹은 오츠 임계치를 구해봅시다 .