카테고리 보관물: Python

PyCon 2017

스크린샷 2017-05-22 오후 12.01.28

지난 주 캘리포니아 구글 마운틴뷰에서 구글 IO 2017이 열렸습니다. 많은 사람들의 관심이 구글 IO에 집중될 때 바로 그 위 오레건 주에서는 파이콘 2017이 같이 시작됐습니다. ^^ 파이콘이 구글 IO처럼 라이브 스트림되지는 못하지만 벌써 유투브에 튜토리얼과 토크 동영상이 올라왔습니다! 파이콘 유투브 채널에서 데이터 사이언스와 관련있는 것을 추려 보았습니다. (파이콘 코리아 2017도 8월에 열립니다)

Python 3.6 Out!

지난 주에 파이썬 3.6 버전이 릴리즈되었습니다. 아나콘다 패키지들도 대부분 파이썬 3.6에 맞춰져 준비되었으니 파이썬 3.6 버전을 써볼 수 있을 것 같습니다. 다만 텐서플로우나 아나콘다에서 제공하지 않는 라이브러리들은 아직 3.6 버전과 호환되지 않을 수 있습니다. 그러므로 파이썬 3.6 을 테스트하려면 콘다 환경을 따로 만들어서 사용해 보는 것이 좋습니다.

$conda create -n python36 python=3.6
$source activate python36

파이썬 3.6에서 눈에 띠는 변경사항을 정리하였습니다.

1. 포맷 문자열

f 로 시작하는 문자열은 중괄호 안에 대치할 변수 이름을 넣을 수 있습니다. 문자열 평가는 한번만 일어 납니다. 변수 이름뒤에 이전과 동일하게 포맷팅 옵션을 쓸 수 있습니다.

>>> name = "철수"
>>> s = f"내 이름은 {name}입니다."
>>> s
'내 이름은 철수입니다.'
>>> name = "영희"
>>> s
'내 이름은 철수입니다.'
>>> val = 1.23456789
>>> f"{val:.3f}"
'1.235'

2. 숫자 밑줄 표현

가독성을 위해 숫자를 사용할 때 밑줄 문자를 써서 천 단위를 표시할 수 있습니다.

>>> 1_000_000_000
1000000000
>>> 0x_FF_FF_FF
4294967295

3. Path 오브젝트 활용

pathlib.Path 오브젝트를 open 함수에 직접 넣을 수 있고 os 와 os.path 하위의 함수들에서도 사용할 수 있습니다.

>>> import pathlib
>>> with open(pathlib.Path("README")) as f:
... 
>>> import os.path
>>> os.path.splitext(pathlib.Path("some_file.txt"))
('some_file', '.txt')
>>> os.path.join("/a/b", pathlib.Path("c"))
'/a/b/c'
>>> import os
>>> os.fspath(pathlib.Path("some_file.txt"))
'some_file.txt'

4. **kwargs 파라미터 순서 유지

**kwargs 로 넘어온 딕셔너리가 입력 파라메타의 순서대로 소팅됩니다.

>>> def myfunc(a, b, **kwargs):
        print(kwargs)
>>> myfunc(1,2, t=1, y=2, u=3, i=4)
{'t': 1, 'y': 2, 'u': 3, 'i': 4}
>>> myfunc(1,2, i=1, u=2, y=3, t=4)
{'i': 1, 'u': 2, 'y': 3, 't': 4}

5. secrete 모듈 추가

암호 생성에 필요한 난수를 위해 random 이나 os.urandom 대신 권장되는 secrete 모듈이 추가되었습니다.

>>> import secrets
>>> secrets.randbelow(100)
>>> 41
>>> secrets.token_hex(16)
>>> '3d7975470f64cbca981c07209c0cbcc4'
>>> secrets.token_urlsafe(16)
>>> 'ZLIS3TVPH301LwuPzwFEjg'

6. http.client 가 HTTP chunked 인코딩을 지원합니다.

7. json.loads, json.load 함수가 문자열 외에 bytes, bytearray 도 지원합니다.

8. random.choices 함수가 추가 되어 한개 이상의 아이템을 무작위로 선택해 리턴할 수 있습니다.

이외에도 많은 사항이 변경되었습니다. 주목할 만한 내용이 발견되면 업데이트 하겠습니다.

TensorFlow API Changes

텐서플로우 v0.12 버전이 릴리즈되면서 파이썬 API 가 일부 변경되었습니다. 혼돈을 줄 수 있는 것들을 바로 잡고 또 가능하면 NumPy 와 일관성을 가지게 하려는 것 같습니다. 이런 API 변경은 앞으로도 조금 더 발생할 수 있을 것으로 예상됩니다. 아직 1.0 버전이 언제 나올지 알 수는 없지만 1.0 이후에는 하위 버전 호환성에 대해 더 엄격하게 관리할 것이라 합니다. 관련된 내용은 구글 그룹스에 올린 구글 브레인팀의 애드류 셀(Andrew Selle)의 포스팅과 텐서플로우 깃허브의 릴리즈 노트의 ‘Breaking Changes to the API’ 섹션을 참고하세요.

  • tf.pack / tf.unpack –> tf.stack / tf.unstack
    • v0.12: stack/unstack 추가, pack/unpack 은 stack/unstack 을 단순 wrapping
    • master: pack/unpack 에 deprecated 메세지 추가
  • tf.concat(concat_dim, values) –> tf.concat_v2(values, axis)
    • v0.12: concat_v2 추가
    • master: concat 에 deprecated 메세지 추가
  • tf.split(split_dim, num_splits, value) –> tf.split(value, num_or_size_splits, axis)
    • v0.12: split_v(value, size_splits, split_dim) 추가
    • master: split(value, num_or_size_splits, axis) 로 변경
  • tf.sparse_split(split_dim, num_split, sp_input) –> tf.sparse_split(sp_input, num_split, axis)
    • master: sparse_split(sp_input, num_split, axis) 로 변경
  • tf.reverse(tensor, dims) –> tf.reverse(tensor, axis)
    • v0.12: reverse_v2(tensor, axis) 추가
    • master: reverse 가 바뀌고, v1.0 이후 reverse_v2 가 deprecated 될 예정
  • tf.round –> banker’s rounding
    • v0.12: 파이썬의 banker’s rounding 으로 변경, 짝수로 반올림/내림
  • dimension, dim, ~indices, ~dim, ~axes 키워드 파라미터 –> axis 로 통일
    • v0.12: 기존 파라미터와 axis 모두 유지, 향후 기존 파라미터 삭제 예정
    • tf.argmax: dimension –> axis
      tf.argmin: dimension –> axis
      tf.count_nonzero: reduction_indices –> axis
      tf.expand_dims: dim –> axis
      tf.reduce_all: reduction_indices –> axis
      tf.reduce_any: reduction_indices –> axis
      tf.reduce_join: reduction_indices –> axis
      tf.reduce_logsumexp: reduction_indices –> axis
      tf.reduce_max: reduction_indices –> axis
      tf.reduce_mean: reduction_indices –> axis
      tf.reduce_min: reduction_indices –> axis
      tf.reduce_prod: reduction_indices –> axis
      tf.reduce_sum: reduction_indices –> axis
      tf.reverse_sequence: batch_dim –> batch_axis, seq_dim –> seq_axis
      tf.sparse_concat: concat_dim –> axis
      tf.sparse_reduce_sum: reduction_axes –> axis
      tf.sparse_reduce_sum_sparse: reduction_axes –> axis
      tf.sparse_split: split_dim –> axis
  • tf.listdiff –> tf.setdiff1d
    • v0.12: setdiff1d 추가
    • master: listdiff 에 deprecated 메세지 추가
  • tf.select –> tf.where
    • v0.12: where 추가
    • master: select 삭제
  • tf.inv –> tf.reciprocal
    • v0.12: inv –> reciprocal 이름 변경
  • tf.SparseTensor.shape –> tf.SparseTensor.dense_shape
    • master: shape –> dense_shape 이름변경
  • tf.SparseTensorValue.shape –> tf.SparseTensorValue.dense_shape
    • master: shape –> dense_shape 이름 변경
  • all_variables –> global_variables , initialize_all_variables -> global_variables_initializer , initialize_local_variables -> local_variables_initializer
    • v0.12: 이름 변경 및 deprecated 메세지 추가
  • zeros_initializer –> 함수 리턴으로 변경
    • master: ones_initializer 와 동일한 리턴 형식으로 변경

이 외에도 tf.nn.sparse_softmax_cross_entropy_with_logits, tf.nn.softmax_cross_entropy_with_logits, tf.nn.sigmoid_cross_entropy_with_logits 의 파라미터 순서가 바뀔 예정이라고 합니다.(아마도 널리 통용되는 크로스 엔트로피 공식의 기호와 순서가 반대여서 그런 것 같습니다)

(업데이트)

  • v0.12: TensorFlowEstimator() 가 삭제되었습니다. 대신 Estimator() 가 권장됩니다.

Python for Data Analysis 2nd Ed.

rc_cat판다스(pandas) 라이브러리를 만든 웨스 맥키니(Wes Mckinney)의 ‘Python for Data Analysis‘의 2판이 준비되고 있습니다. 아직 절반도 채 못 쓰여졌지만 이북(ebook) 형태로 미리 구매하여 보실 수 있습니다. 2판은 조금 분량이 늘어나고 웨스의 전공 분야인 금융 어플리케이션에 대한 사례가 빠졌습니다. 대신 고급 판다스, 통계 모델과 사이킷런(scikit-learn)이 한 챕터씩 추가되었습니다. 그리고 표지의 두더지 사진이 반대 방향으로 바뀌었네요! 🙂

 

rc_cat1비슷한 성격의 또 하나의 데이터 과학 책인 ‘Python Data Science Handbook‘ 곧 출간될 예정입니다. 이 책은 워싱톤 대학의 연구원인 제이크 반더플라스(Jake VanderPlas)가 썼습니다. Python for Data Analysis 보다 조금 볼륨이 작고 겹치는 부분이 많이 있습니다. 총 6개 장으로 구성되어 있고 파이썬, IPython, 넘파이, 판다스, 맷플롯립, 사이킷런에 대해 한 챕터씩 할애하고 있습니다.

Pycon APAC 2016에 텐서플로우 세션이 네개!

올해 파이콘 KR은 파이콘 APAC으로 열리게 되어 국내외 발표자들이 함께 참여하게 됩니다. 파이썬과 머신러닝 분야가 밀접하다 보니 텐서플로우 세션도 한개쯤 생기지 않을까 예상했었는데요. 무려 네개의 세션이 열릴 예정입니다. @.@

이중에 3개는 영어로 한 세션은 한국어로 진행됩니다. 파이콘 티겟 가격은 5만원으로 비용이 부담이 될 경우엔 재정 지원 프로그램을 이용할 수 있습니다.

파이콘 APAC 2016은 8월 13일(토)부터 15일(월)까지 강남 코엑스에서 열립니다. 아직 상세한 스케줄은 나오지 않았지만 전체 프로그램 목록은 확인할 수 있습니다.

(업데이트) 파이콘 APAC 2016의 전체 세션의 녹화 동영상이 공개되었습니다. 파이콘 APAC 2016 스케줄 목록에서 확인할 수 있습니다.

Top 19 Free Python eBooks

아티클 추천 서비스를 해주는 Myridge에서 19개의 파이썬 무료 이북 리스트를 선정했습니다. 모두 아마존에서 높은 평점을 받는 좋은 책인 것은 물론 무료로 읽을 수 있으므로 더할 나위 없습니다.

초보자

  1. Python Programming: An Introduction to Computer Science 2nd Edition (Zohn Zelle)
  2. Python Crash Course: A Hands-On, Project-Based Introduction to Programming (Eric Matthes)
  3. Python Pocket Reference, 5th Edition (Mark Lutz)
  4. Python Practice Book: free ebook to learn practical programming with Python (Anand Chitipothu)
  5. Learning Python 5th Edition (updated for 3.3 and 2.7) (Mark Lutz)
  6. Learn Python the Hard Way: A Very Simple Introduction to the Terrifyingly Beautiful World of Computers and Code (3rd Edition) (Zed A. Shaw)

숙련자

  1. Python Cookbook: free ebook for advanced programmers (David Beazley)
  2. Test-Driven Development with Python (Harry Percival)
  3. High Performance Python: Practical Performant Programming for Humans 1st Edition (Micha Gorelick & Ian Ozsvald)

데이터 & 머신러닝

  1. Think Complexity: Complexity Science and Computational Modeling 1st Edition (Allen B. Downey)
  2. Python for Data Analysis — Agile Tools for Real World Data(Pandas, NumPy, and Ipython) (Wes McKinney)
  3. Mastering Python for Data Science (Samir Madhavan) (사파리 온라인에 가입해야만 읽을 수 있어 무료라고 보긴 어렵습니다)
  4. Natural Language Processing with Python 1st Edition (Steven Bird, Ewan Klein & Edward Loper)

게임

Making_Games_with_Python_and_Pygame Invent_Your_Own_Games_with_Python

  1. Making Games with Python & Pygame (Al Sweigart)
  2. Invent Your Own Computer Games with Python (Al Sweigart)

그외

  1. Automate the Boring Stuff with Python: Practical Programming for Total Beginners (Al Sweigart)
  2. Python for Biologists: A complete programming course for beginners (Dr. Martin Jones)
  3. Programming the Raspberry Pi: Getting Started with Python 1st Edition (Simon Monk)
  4. Hacking Secret Ciphers with Python: A beginner’s guide to cryptography and computer programming with Python (Al Sweigart)

Deep Learning with Python

deeplearningwithpython-400Keras는 텐서플로우와 Theano를 이용하여 딥러닝 모델을 구축할 수 있는 래퍼(Wrapper) 라이브러리 입니다. Keras, Theano, TensorFlow 를 이용한 딥러닝 책이 새로 출간되었습니다. 이 책의 저자는 machinelearningmastery.com 을 운영하고 있는 Jason Brownlee 입니다.

아마도 이 책은 온라인으로 출간된 ‘First Contact with TensorFlow‘ 다음으로 나온 두번째 텐서플로우 책이 아닌가 싶습니다.

170여 페이지로 구성되어 있으며 PDF 버전으로 구매하실 수 있습니다. 가격은 $37 입니다. 가능하면 조만간 구입하여 읽어보고 리뷰를 올리도록 하겠습니다. 아래는 책에 실린 14개의 레슨과 7개의 프로젝트 목록입니다.

Lessons

Lesson 01: Theano 라이브러리 소개
Lesson 02: TensorFlow 라이브러리 소개
Lesson 03: Keras 라이브러리 소개
Lesson 04: 멀티레이어 퍼셉트론 속성 코스
Lesson 05: Keras를 사용한 첫번째 뉴럴 네트워크
Lesson 06: 딥러닝 모델 성능 평가
Lesson 07: scikit-learn과 함께 Keras 모델 사용하기
Lesson 08: 모델 직렬화(Serialization)
Lesson 09: 훈련과정에서 최적 모델 찾기
Lesson 10: 훈련과정에서 모델 변화 이해하기
Lesson 11: 드롭아웃(Dropout) 정규화(Regularization)로 오퍼피팅 피하기
Lesson 12: 학습속도 스케줄링으로 성능 강화
Lesson 13: 콘볼루션(Convolution) 뉴럴 네트워크 속성 코스
Lesson 14: 이미지 증강(Augmentation)을 이용하여 모델 성능 향상

Projects

Project 01: 클라우드를 사용하여 저렴하게 GPU에서 대규모 모델 개발
Project 02: 꽃의 종(Species)에 대한 다중(Multiclass) 분류
Project 03: 수중음파 탐지 데이터를 이용한 이진 분류
Project 04: 보스톤 주택 가격 회귀분석
Project 05: 손글씨 숫자 인식
Project 06: 사진속의 물체 인식
Project 07: 영화 리뷰를 사용한 감성(Sentiment) 예측

ML with Python

PythonproGramming.netSentDex 의 창업자이자 열혈 파이썬 개발자인 Harrison Kinsley 가 유투브에 새로운 동영상 강좌 커리큘럼 ‘Machine Learning with Python‘ 을 연재하고 있습니다. 4월 부터 시작한 이 시리즈는 대략 이삼일을 넘지 않고 하나씩 추가되고 있습니다. 뉴럴 네트워크, 딥러닝 까지 강의가 진행될 예정입니다. 기왕이면 텐서플로우를 이용해서 뉴럴 네트워크 강좌가 만들어지면 좋겠습니다. 🙂

Harrison Kinsley 는 이십대 중반이라고 프로필을 소개하고 있는데요. 창업해서 운영하고 있는 회사만 몇개나 되네요. 사업 규모의 크기를 떠나서 열정과 노력이 정말 대단한 것 같습니다.

TPOP: Automatic ML

tpot-ml-pipeline

이미지출처: TPOT 도큐먼트

여러 머신러닝 모델을 기반으로 피처 셀렉션(feature selection)과 하이퍼파라메타(hyperparameter) 튜닝을 자동으로 해 주는 머신러닝 자동화 라이브러리 TPOT(깃허브)을 소개해 드립니다. TPOT은 scikit-learn을 기반으로 하고 있는 파이썬 라이브러리입니다. TPOT이 재미있는 점은 자동화 처리를 하는 것 뿐만 아니라 어떻게 모델을 만들었는지를 파이썬 코드로 익스포트(export)시켜 줍니다!

tpot-demo

이미지출처: TPOT 도큐먼트

유사한 툴로는 auto-sklearn(깃허브) 이 있습니다. 아직 두 라이브러리의 장단점이나 성능에 대한 자료는 없습니다.

(추가) 저자가 쓴 TPOT(Tree-based Pipeline Optimization Tool)에 대한 논문 ‘Automating biomedical data science through tree-based pipeline optimization'(1601-07925v1)입니다. 참고하시면 TPOT의 배경 이론을 이해하는 데 도움이 될 것 같습니다.

Kaggle Python Course on DataCamp

kaggle-python-on-datacamp

데이터캠프(DataCamp)의 온라인 코스는 브라우저에서 직접 코딩을 하면서 배울 수 있는 환경을 제공해 주고 있습니다. 초기에는 다른 MOOC의 보조 커리큘럼으로 사용되곤 했었는데 지금은 데이터캠프만의 코스가 많이 생겼습니다. 데이터캠프에는 특히 R과 통계쪽 코스가 많은 특징을 가지고 있습니다.

최근에 독보적인 머신러닝 컴피티션(competition) 사이트인 캐글(Kaggle)과 데이터캠프가 함께 새로운 코스인 ‘Kaggle Python Tutorial on Machine Learning‘을 런칭했습니다. 이 코스는 파이썬을 이용하여 단계별로 머신러닝을 배우도록 도와주며 캐글의 타이타닉(Titanic) 컴피티션에 최종적으로 참여할 수 있습니다.

datacamp-editor

데이터캠프의 전형적인 코스 화면입니다. 왼쪽 패널에는 배경 설명이나 주제에 대한 가이드가 담겨 있고 구체적인 작업지시가(instructions) 있습니다. 오른쪽에는 위에 파이썬 에디터가 있고 아래에는 iPython 쉘이 있어 간단한 테스트 코드를 실행해 볼 수도 있고 에디터의 결과를 출력해 주기도 합니다. 작업지시를 완수하면 다음 단계로 진행하게 됩니다.

코스는 타이타닉 데이터셋을 이용해 의사결정트리(Decision Tree)와 랜덤 포레스트(Random Forest) 알고리즘을 배울 수 있도록 도와줍니다. 그리 길지 않은 코스라 이번 연휴때 참여해 보면 좋을 것 같습니다. 물론 무료입니다. : )