1. 파이썬 활용:
이미지 처리와 데이터 분석
정보기술 시대에 유익한 파이썬 프로그래밍 – 제 8 강
동양미래대학교
2015.7
최용 <sk8er.choi@gmail.com>
2. 주제
• Anaconda
• IPython
• NumPy
• PIL(Python Image Library) & Pillow
• pandas: Python을 위한 데이터 분석 도구
• matplotlib: 차트
3. Anaconda
데이터 분석, 과학 컴퓨팅 등을 위한 Python 배포본
https://store.continuum.io/cshop/anaconda/
4. Anaconda 제품군
• Anaconda
• Python과 conda 패키지 관리자
• 100개 이상의 패키지 포함.
• conda install 명령으로 패키지 추가 설치 가능
• Miniconda
• Python과 conda 패키지 관리자로 구성.
• conda install 명령으로 패키지 설치 가능
• Anaconda Server
• 기업 환경의 배포, 패키지 관리, 라이선스, 기술 지원 솔루션
• 유료
5. Anaconda에 포함된 주요 Python 패키지
• beautiful-soup: HTML과 XML 파일로부터 데이터 추출
• Cython: CPython 확장 모듈을 손쉽게 생성하도록 고안된 컴파일 언어
• IPython: 대화식 컴퓨팅 환경
• matplotlib: 2D 플로팅 라이브러리
• NLTK: 자연어 처리 플랫폼
• NumPy: 과학 컴퓨팅을 위한 패키지
• pandas: 데이터 분석 도구
• Pillow: Python Image Library의 fork
• …
• http://docs.continuum.io/anaconda/pkg-docs.html
6. Anaconda 다운로드와 설치
• http://continuum.io/downloads
I WANT PYTHON 3.4
Windows 64-Bit Python 3.4 Graphical Installer
• Anaconda3-2.3.0-Windows-x86_64.exe 실행
7. conda – conda 관리
• conda 버전 확인
> conda --version
• conda 업데이트
> conda update conda
http://conda.pydata.org/docs/test-drive.html
8. conda – 환경 관리
• 환경 생성
> conda create --name dongyang python=3
• 환경 확인
> conda info --envs
• 환경 활성화
> activate dongyang
• 특정 환경에 대하여 패키지 확인, 설치, 삭제 (현재 활성화된 환경이 디폴트)
> conda list -n dongyang
> conda install -n dongyang matplotlib
> conda remove -n dongyang somepkg
• 환경 비활성화
> deactivate
• 환경 삭제
> conda remove -n dongyang --all
11. IPython
Python을 대화식으로 사용함에 있어 편리한 기능을 제공
• 강력한 Python Shell
• 웹 기반의 대화식 notebook
• 데이터 시각화 지원
• 인터프리터를 프로젝트에 임베드할 수 있음
• 고성능의 라이브러리
12. IPython 설치와 실행
• 환경 활성화
> activate dongyang
• ipython 설치
[dongyang] > conda install ipython
• ipython 실행
[dongyang] > ipython
13. IPython 기능
• 프롬프트 번호, 색상 표시
• 자동 indent
In [1]: class C:
...: pass
...:
• Code assist
In [2]: import pa
parallelmagic parser pathlib
• Built-in magic commands
• 현재 디렉터리 확인
In [3]: %pwd
• 디렉터리 이동
In [4]: %cd 'D:'
In [5]: %cd summer_python
• 디렉터리 생성
In [6]: %mkdir lecture08
In [7]: %cd lecture08
• 파일 목록
In [8]: %ls
• 파일 편집
In [9]: %edit test.py
• OS 명령 실행 (! 뒤에 명령 입력)
In [10]: !del test.py
In [11]: today = !date /t
In [12]: today
Out[12]: ['2015-07-24 ']
Tab
14. IPython QtConsole
• GUI 콘솔
• 그림
• 여러 줄 편집, 구문 강조
• 그래픽 calltip
• 설치
[dongyang] > conda install ipython-qtconsole
• 실행
[dongyang] > ipython qtconsole
16. IPython Notebook
• 웹 브라우저에서 사용하는
대화식 컴퓨팅 환경
• Python 코드 실행, HTML 문서, 수식, 도표를
한 화면에서 사용
• 입력과 출력을 저장할 수 있어, 인터프리터의
사용 내역을 쉽게 재연할 수 있음
• 설치
[dongyang] > conda install ipython-notebook
• 실행
[dongyang] > ipython notebook
18. NumPy
• 다차원의 숫자 배열을 Python에서 효율적으로 처리하기 위한
모듈
• ndarray (n-dimensional array) 자료구조를 사용
• 참고 자료
• http://www.numpy.org/
• http://kestrel.nmt.edu/~raymond/software/python_notes/paper003.html
• 엘리 브레설트 저, 이성주 역,
<데이터/수치 분석을 위한 파이썬 라이브러리 SciPy와 NumPy>
26. PIL & Pillow
• PIL(Python Image Library)
• Pillow: PIL의 fork
• 이미지의 썸네일을 만들고, 형식을 변환하고, 크기를 바꾸는 등의 일들을
자동으로 처리하는 스크립트를 작성할 수 있음
• 설치
[dongyang] > conda search pil
[dongyang] > conda install pillow
• 참고 자료
• http://effbot.org/imagingbook/
• http://pillow.readthedocs.org/
• <예제 중심의 Python 3> 159 ~ 179 페이지
27. PIL.Image – open, show, save
from PIL import Image
im = Image.open('./EXID.jpg')
im.show()
im.save('EXID.png')
사진: wikimedia.org
28. PIL.Image
• copy(): 복사
• thumbnail(): 썸네일 생성
• resize(): 크기 변경
• rotate():회전
• transpose()
• FLIP_LEFT_RIGHT, FLIP_TOP_BOTTOM
• ROTATE_90, ROTATE_180, ROTATE_270
• eval(): 밝기, 색상 조정
• convert(): 모드 변경
http://effbot.org/imagingbook/image.htm
imout = im.transpose(Image.FLIP_LEFT_RIGHT)
imout.show()
30. PIL.ImageDraw
In [1]: from PIL import Image, ImageDraw
In [2]: SIZE = 256
In [3]: im = Image.new("L", (SIZE, SIZE))
In [4]: d = ImageDraw.Draw(im)
In [5]: for x in range(SIZE):
...: for y in range(SIZE):
...: d.point((x,y), 0)
...:
In [6]: im.show()
31. PIL.ImageDraw
In [7]: for x in range(SIZE):
for y in range(SIZE):
d.point((x,y), x)
....:
In [8]: im.show()
32. PIL.ImageDraw
In [9]: r = 100
In [10]: for x in range(SIZE):
for y in range(SIZE):
inner = (x - SIZE / 2) ** 2 + (y - SIZE / 2) ** 2 <= r ** 2
d.point((x,y), inner * 255)
....:
In [11]: im.show()
36. pandas – Series
In [1]: import pandas as pd
In [2]: s = pd.Series([3770, 4000, 4110, 4320, 4580, 4860, 5210, 5580],
...: index=list(range(2008, 2016)))
In [3]: s
Out[3]:
2008 3770
2009 4000
2010 4110
2011 4320
2012 4580
2013 4860
2014 5210
2015 5580
dtype: int64
http://www.index.go.kr/potal/main/EachDtlPageDetail.do?idx_cd=1492
37. pandas – Series
In [4]: 2015 in s
Out[4]: True
In [5]: 2016 in s
Out[5]: False
In [6]: s[2015]
Out[6]: 5580
In [7]: s * 2
Out[7]:
2008 7540
2009 8000
2010 8220
2011 8640
2012 9160
2013 9720
2014 10420
2015 11160
dtype: int64
38. pandas – DataFrame 생성(dict로부터)
In [1]: import pandas as pd
In [2]: d = {'Sales': [5.35, 17.04, 13.61], 'Operating Income': [0.37, 0.41, 0.56]}
In [3]: pd.DataFrame(d, index=['롯데리아', '맥도날드', '버거킹'])
Out[3]:
Operating Income Sales
롯데리아 0.37 5.35
맥도날드 0.41 17.04
버거킹 0.56 13.61
In [4]: pd.DataFrame(d, index=['롯데리아', '맥도날드', '버거킹'],
....: columns=['Sales', 'Operating Income'])
Out[4]:
Sales Operating Income
롯데리아 5.35 0.37
맥도날드 17.04 0.41
버거킹 13.61 0.56
http://www.joseilbo.co.kr/news/htmls/2015/03/20150306250881.
html
39. pandas – DataFrame 생성(CSV), 슬라이싱, 컬럼 선택
In [1]: import pandas as pd
In [2]: file = 'https://github.com/sk8erchoi/csv-files/raw/master/minimum_wages.csv'
In [3]: df = pd.read_csv(file, parse_dates=True)
In [4]: df['2014-01-01':]
Out[4]:
Min wage Rise rate Influ factor Appl laborers Benef laborers
2014-01-01 5210 7.2 14.5 17734 2565
2015-01-01 5580 7.1 14.6 18240 2668
2016-01-01 6030 NaN NaN NaN NaN
In [5]: df['Min wage']['2014-01-01':]
Out[5]:
2014-01-01 5210
2015-01-01 5580
2016-01-01 6030
Name: Min wage, dtype: int64
40. pandas – plot
In [6]: df['Min wage']['2010-01-01':].plot()
Out[6]: <matplotlib.axes._subplots.AxesSubplot at 0x108705208>
In [7]: import matplotlib.pyplot as plt
In [8]: plt.show()
최저임금 http://www.index.go.kr/potal/main/EachDtlPageDetail.do?idx_cd=1492
41. pandas – 복수의 컬럼 선택, 정렬
In [1]: import pandas as pd
In [2]: file = "https://raw.githubusercontent.com/sk8erchoi/csv-files/master/college
_reg_fee_2015.csv"
In [3]: df = pd.read_csv(file)
In [4]: df[['Name', 'Avg']][:3]
Out[4]:
Name Avg
0 ICT폴리텍대학 2200
1 가톨릭상지대학교 5504
2 강동대학교 5725
In [5]: df[['Name', 'Avg']].sort(['Avg'], ascending=False).head(3)
Out[5]:
Name Avg
72 서울예술대학교 8101
18 계원예술대학교 7564
61 백제예술대학교 7486 • 2015년 전문대학 등록금 현황 http://khei-khei.tistory.com/1430
42. pandas – DataReader
• Google, Yahoo 등에서 제공하는 데이터를 받아올 수 있음
In [1]: from datetime import datetime
In [2]: import pandas.io.data as web
In [3]: start, end = datetime(2015, 7, 17), datetime(2015, 7, 23)
In [4]: samsungcnt = web.DataReader("000830.KS", "yahoo", start, end)
In [5]: samsungcnt
Out[5]:
Open High Low Close Volume Adj Close
Date
2015-07-17 70800 71800 61700 62100 14469100 62100
2015-07-20 61300 62200 59600 60000 4525300 60000
2015-07-21 60600 61100 59000 59200 2181400 59200
2015-07-22 59200 60400 59100 60100 2107200 60100
2015-07-23 59800 60100 58900 59100 1458300 59100
http://pandas.pydata.org/pandas-docs/stable/remote_data.html
https://wikidocs.net/1913
44. matplotlib
• 2D, 3D 플로팅 라이브러리
• LaTeX 형식의 라벨과 텍스트 사용 가능
• 그림(figure) 내의 각 요소를 제어할 수 있음
• 여러 형식으로 저장(PNG, PDF, SVG, …)
• 대화식 혹은 일괄 작업 방식으로 사용할 수 있음
• MATLAB 방식 또는 객체 지향 방식으로 사용
45. pylab vs. matplotlib.pyplot
pylab:
MATLAB과 유사
from pylab import *
plot([1,2,3,4])
ylabel('some numbers')
show()
matplotlib.pyplot:
객체 지향
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
http://matplotlib.org/users/pyplot_tutorial.html
46. matplotlib.pyplot – line style, axis
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()
선 스타일
• ro: 붉은 원
• b-: 파란 실선
• r--: 붉은 점선
• bs: 파란 사각형
• g^: 녹색 삼각형
47. matplotlib.pyplot – scatter
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y)
plt.show()
48. matplotlib.pyplot – figure, axes
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5, 10)
y = x ** 2
fig = plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])
axes1.plot(x, y, 'r')
axes1.set_xlabel('x')
axes1.set_ylabel('y')
axes1.set_title('title')
axes2.plot(y, x, 'g')
axes2.set_xlabel('y')
axes2.set_ylabel('x')
axes2.set_title('insert title')
fig.show()
http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb
49. matplotlib.pyplot – subplots, step, bar
import matplotlib.pyplot as plt
import numpy as np
n = np.array([0, 1, 2, 3, 4, 5])
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].step(n, n**2, lw=2)
axes[0].set_title("step")
axes[1].bar(n, n**2, align="center", width=0.5, alpha=0.5)
axes[1].set_title("bar")
plt.show()
50. More
• Polar
• Histogram
• Colormap
• Contour
• 3D (Surface, Wireframe)
• 참고 자료
• Beginner’s Guide http://matplotlib.org/users/beginner.html
• http://nbviewer.ipython.org/github/jrjohansson/scientific-python-
lectures/blob/master/Lecture-4-Matplotlib.ipynb