메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

우아한 사이파이

수학, 과학, 엔지니어링을 위한 파이썬 데이터 분석 라이브러리 SciPy

한빛미디어

집필서

판매중

  • 저자 : 스테판 판데르발트 , 해리엇 대시나우
  • 번역 : 최길우
  • 출간 : 2018-06-01
  • 페이지 : 304 쪽
  • ISBN : 9791162240748
  • 물류코드 :10074
  • 초급 초중급 중급 중고급 고급
4.5점 (11명)
좋아요 : 0

사이파이를 활용해서 수치 계산과 데이터 분석 및 예측하기

사이파이는 통계, 신호 처리, 이미지 처리 및 함수 최적화에 사용되는 파이썬 데이터 과학 핵심 라이브러리다. 이 책은 파이썬을 사용하는 과학자를 대상으로 사이파이의 기본 사용법과 관련 라이브러리를 다룰 뿐만 아니라 실제 현업에서 사용하는 읽기 쉬운 우아한 코드를 제공한다. 유전자 발현 분석, 생존율・사망률 예측, 이미지 분석・필터링・등록, 실전 레이더 전파 데이터 분석・정보 변형, 스트리밍 데이터셋 처리 문제를 사이파이, 넘파이, 팬더스, 사이킷-이미지 등으로 해결한다. 

 

이 책의 주목표는 독자가 넘파이와 사이파이 라이브러리를 효율적으로 다루는 것이다. 사이파이 라이브러리를 사용하여 효율적으로 과학적 문제를 분석하면서, 우아한 코드를 작성하는 노력이 가치 있다는 느낌이 들길 바란다.

 

상세이미지733.jpg

 

스테판 판데르발트 저자

스테판 판데르발트

캘리포니아 버클리 대학교 데이터과학연구소 조교 연구원이다. 남아프리카공화국 스텔렌보스 대학교 응용수학 수석 강사다. 10년 이상 오픈 소스 과학 소프트웨어 개발에 참여해왔고, 워크숍과 콘퍼런스에서 파이썬을 가르치는 것을 좋아한다. 사이킷-이미지(scikit-image) 창시자이고, 넘파이, 사이파이, cesium-ml의 컨트리뷰터다.

해리엇 대시나우 저자

해리엇 대시나우

생물정보학자로서 머독 칠드런스 리서치, 멜버른 대학교 생화학과, 빅토리안 생명 과학 컴퓨터 기관(VLSCI)에서 근무했다. 맬버른 대학교에서 심리학 학사, 유전학 및 생화학 학사, 생물정보학 석사를 취득했고 현재는 박사 과정을 밟고 있다. 유전체학, 소프트웨어 카펜트리, 파이썬, R, 유닉스, 깃 버전 관리 같은 분야에서 IT 스킬 워크숍을 조직하고 가르친다.

최길우 역자

최길우

CDN과 웹, 미디어, 보안 등 클라우드 솔루션을 제공하는 아카마이에서 솔루션즈 아키텍트로 근무했다. 현재는 채팅 API 및 SDK를 제공하는 센드버드에서 솔루션즈 엔지니어로 근무하며, 아시아 지역 고객의 기술 지원을 담당한다. 한빛미디어에서 『고전 컴퓨터 알고리즘 인 파이썬』(2019), 『파이썬 자료구조와 알고리즘』(2019), 『우아한 사이파이』(2018), 『처음 시작하는 파이썬(1판)』(2015), 『Head First C#(3판)』(2015)을 우리말로 옮겼다. 

CHAPTER 0 들어가며

0.1 왜 ‘사이파이’인가? 

0.2 사이파이 생태계 

0.3 대혼란 : 파이썬 2 vs 파이썬 3 

0.4 사이파이 생태계와 커뮤니티 

0.5 도움받기 

0.6 파이썬 설치하기 

0.7 사이파이의 세계로 

 

CHAPTER 1 우아한 넘파이 : 파이썬 과학 기초

1.1 유전자 발현 데이터 

1.2 넘파이 N차원 배열 

__1.2.1 왜 파이썬 리스트 대신 ndarray를 사용할까? 

__1.2.2 벡터화 

__1.2.3 브로드캐스팅 

1.3 유전자 발현 데이터셋 

__1.3.1 팬더스로 데이터 읽기 

1.4 정규화 

__1.4.1 샘플 간 비교 

__1.4.2 샘플 간 공간 크기 정규화 

__1.4.3 유전자 간 비교 

__1.4.4 샘플과 유전자의 정규화 : RPKM 

1.5 정리 

 

CHAPTER 2 넘파이와 사이파이의 분위수 정규화

2.1 데이터 가져오기 

2.2 개체 간 유전자 발현 분포의 차이 

2.3 이중 군집화 

2.4 군집 시각화 

2.5 생존율 예측 

__2.5.1 추가 작업 : TCGA의 환자 군집 사용하기 

__2.5.2 추가 작업 : TCGA 군집 재현하기 

 

CHAPTER 3 이미지 지역망 : ndimage

3.1 이미지는 넘파이 배열일 뿐이다 

__3.1.1 연습문제 : 격자 오버레이 추가 

3.2 신호 처리 필터 

3.3 이미지 필터링(2차원 필터) 

3.4 제네릭 필터 : 근접값의 임의 함수 

__3.4.1 연습문제 : 콘웨이의 생명 게임 

__3.4.2 연습문제 : 소벨 필터 코드 리팩토링 

3.5 그래프와 NetworkX 라이브러리 

__3.5.1 연습문제 : 사이파이 곡선 맞춤 

3.6 지역 근접 그래프 

3.7 우아한 ndimage : 지역 근접 그래프에서 호랑이 추출하기 

3.8 평균 색상 분할 

 

CHAPTER 4 주파수와 고속 푸리에 변환

4.1 주파수 

4.2 새소리 스펙트로그램 

4.3 푸리에 변환 역사 

4.4 푸리에 변환 구현 

4.5 이산 푸리에 변환 길이 선택하기 

4.6 기타 이산 푸리에 변환 개념 

__4.6.1 주파수와 순서 

__4.6.2 윈도윙 

4.7 실전 레이더 데이터 분석 

__4.7.1 주파수 영역의 신호 속성 

__4.7.2 윈도우 적용하기 

__4.7.3 레이더 이미지 

__4.7.4 기타 고속 푸리에 변환 응용 

__4.7.5 기타 참고 자료 

__4.7.6 연습문제 : 이미지 합성곱 

 

CHAPTER 5 희소행렬과 혼동행렬

5.1 혼동행렬 

__5.1.1 연습문제 : 혼동행렬의 계산 복잡성 

__5.1.2 연습문제 : 혼동행렬을 계산하는 대체 알고리즘 

__5.1.3 연습문제 : 다중 혼동행렬 계산 

5.2 scipy.sparse 데이터 형식 

__5.2.1 COO 형식 

__5.2.2 연습문제 : COO 형식 표현 

__5.2.3 CSR 형식 

5.3 희소행렬 애플리케이션 : 이미지 변환 

__5.3.1 연습문제 : 이미지 회전 

5.4 (다시) 혼동행렬 

__5.4.1 연습문제 : 메모리 사용량 줄이기 

5.5 분할과 혼동행렬 

5.6 정보 이론 요약 

__5.6.1 연습문제 : 조건부 엔트로피 계산 

5.7 분할의 정보 이론 : 정보 변형 

5.8 희소행렬을 위한 넘파이 배열 

5.9 정보 변형 사용하기 

 

CHAPTER 6 사이파이 선형대수학

6.1 선형대수학 기초 

6.2 그래프의 라플라시안 행렬 

__6.2.1 연습문제 : 회전 행렬 

6.3 뇌 데이터와 라플라시안 

__6.3.1 연습문제 : 유사도 보기 

__6.3.2 도전 과제 : 희소행렬과 선형대수학 

6.4 페이지랭크 알고리즘 : 평판과 중요도를 위한 선형대수학 

__6.4.1 연습문제 : 댕글링(Dangling) 노드 처리 

__6.4.2 연습문제 : 함수 비교 

6.5 마치며 

 

CHAPTER 7 사이파이 함수 최적화

7.1 사이파이 최적화 모듈 : scipy.optimize 

__7.1.1 예제 : 이미지 이동 최적화 계산 

7.2 이미지 등록 최적화 

7.3 국소 최저치 피하기와 배싱 호핑 

__7.3.1 연습문제 : 정렬 함수 수정 

7.4 무엇이 최선인가? : 적합한 목적함수 선택 

 

CHAPTER 8 빅데이터와 Toolz 라이브러리

8.1 스트리밍과 yield 

8.2 Toolz 스트리밍 라이브러리 소개 

8.3 k-mer 계산과 오류 수정 

8.4 커링 : 스트리밍의 묘미 

8.5 k-mer 계산 계속하기

__8.5.1 연습문제 : 스트리밍 데이터와 PCA 

8.6 게놈의 마르코프 모델 

__8.6.1 연습문제 : 온라인 압축풀기 

 

에필로그 

부록 : 연습문제 정답 

★ 왜 ‘사이파이’인가?

넘파이와 사이파이 라이브러리는 파이썬 과학 생태계의 핵심이다. 사이파이 소프트웨어 라이러리는 통계, 신호 처리, 이미지 처리 및 함수 최적화와 같은 과학 데이터 처리에 사용하는 일련의 함수를 제공한다. 사이파이는 파이썬 숫자 배열 계산 라이브러리인 넘파이를 기반으로 한다. 지난 몇 년 동안 넘파이와 사이파이 기반 앱과 라이브러리 생태계는 천문학, 생물학, 기상학 및 기후 과학, 재료 과학 등 다양한 분야에 걸쳐 급격히 성장해왔다.

 

★ 이 책에서 다루는 수학, 과학, 엔지니어링 주요 패키지 소개

- 사이파이(SciPy) : 신호의 처리, 통합 및 최적화, 그리고 통계와 같은 분야에 사용되는 효율적인 수치 알고리즘의 모음이다. 사용자 친화적인 인터페이스를 제공한다.

- 넘파이(NumPy) : 파이썬에서 기초 과학을 다루는 넘파이는 효율적인 수치 배열과 선형대수, 난수 및 푸리에 변환을 포함한 광범위한 수치 계산을 제공한다. 넘파이의 가장 강력한 기능은 N 차원 배열(ndarry)이다. 이러한 자료 구조는 숫자를 효율적으로 저장하고, 다차원의 그리드(grid )를 정의한다.

- 맷플롯립(Matplotlib) : 2차원 및 기본적인 3차원 그래프를 그리는 강력한 패키지다. 

- 아이파이썬(IPython) : 데이터와 테스트 로직을 적용하여 그 결과를 쉽고 빠르게 얻을 수 있는 파이썬의 대화식 인터프리터 인터페이스다.

- 주피터 노트북(Jupyter notebook) : 브라우저에서 코드, 텍스트, 수식 및 대화식 위젯을 결합한 풍부한 문서를 만들 수 있다. 실제로 이 책에서 사용하는 코드를 주피터 노트북으로 변환하여 실행했다(이 책의 모든 예제가 올바르게 작동한다). 주피턴는 아이파이썬의 확장으로 시작했지만, 현재는 사이썬(Cython), 줄리아(Julia), R, 옥타브(Octave), 배시(Bash), 펄(Perl ), 루비(Ruby)를 비롯한 여러 언어를 지원한다.

- 팬더스(pandas) : 사용하기 쉬운 패키지 형태로 칼럼 형식의 자료 구조를 빠르게 제공한다. 특히 테이블 혹은 관계형 데이터베이스와 같이 레이블이 있는 데이터셋을 처리하고, 시계열(time series ) 데이터와 슬라이딩 윈도우(sliding window)를 관리하는 데 적합하다. 또한, 데이터 파싱, 정리, 수집하고, 그래프를 그리는 데 편리한 데이터 도구를 제공한다.

- 사이킷-런(scikit-learn) : 머신러닝 알고리즘용 통합 인터페이스를 제공한다.

- 사이킷-이미지(scikit-image) : 사이파이 생태계와 완벽하게 통합하는 이미지 분석 도구를 제공한다.

 

★ 주요 내용

 - 과학 계산에 활용되는 자료구조 넘파이 배열 사용하기

 - 분위수 정규화를 사용하여 측정값이 특정 분포에 맞는지 확인하기

 - 시간 또는 공간 데이터를 주파수 도메인 데이터로 고속 푸리에 변환하기

 - 사이파이 희소 모듈로 이미지 분할화와 희소행렬 문제 해결하기

 - 사이파이 패키지를 사용하여 선형대수학 다루기

 - 사이파이의 최적화 모듈로 이미지를 정렬하고 등록하기

 - 파이썬 데이터 스트리밍 요소와 Toolz 라이브러리로 대규모 데이터셋 처리하기

요즘 핫한 인공지능과 데이터분석... 이 둘은 굉장히 밀접하게 맞물려 돌아가는 것 같다.

소위 머신러닝/딥러닝도 결국에는 방대한 데이터를 기반으로 무언가를 하는 거고, 반대로 요즘은 데이터를 분석하기 위해 머신러닝/딥러닝을 활용하는 경우가 많다 보니 밀접하게 관계된 영역이지 않나 생각한다.


한 일년반전부터 나도 이 분야에 참전을 했다. 맨땅에 헤딩하듯 좌충우돌 하면서 공부하고 연구하며 지금껏 왔는데 뭔가 아쉬운 부분은...


컴퓨터공학 전공에 IT 현업개발자이다 보니 수학에 약점이... 현업 담당자가 아니다 보니 해당 영역의 도메인 지식이나 데이터에 대한 이해가 부족한 부분에 대해 아쉬움이 좀 크다, 뭐 어쩌겠는가 노력 많이 해야지...


책도 보면 전문적인 머신러닝/딥러닝에 대한 내용, 아님 관련 프레임웍을 기반으로 하는 내용에서 데이터 분석 예시를 따라하면 되는 책들까지 버라이어티 하게 나오는데... 그 중간에 양쪽다 걸치면서 맛깔난 책은 그닥 없는듯 해서 항상 아쉬웠다.


"우아한 사이파이"


이 책은 이런 내 갈증을 딱 씼어주는 책인 것 같다, 한빛미디어 리뷰어로 지난달 신청할 때 땡기는 책이 없었는데, 시간 좀 지난 18년도 출간된 책이기도 해서 긴가민가 하며 신청했는데 왠걸 이게 내 입맛에 딱 맞을줄이야...

책이 참 재밌다...

기본적으로 데이터분석 라이브러리인 사이파이에 기초하고 있지만 단순한 문법이나 사용법에 대한 지식 전달이 아닌 과학과 수학에 대한 지식을 사이파이 그리고 다양한 영역의 실데이터를 기반으로 접근함으로써 단순히 머신러닝/딥러닝이나 맹목적인 데이터분석이 아닌 그 사이의 가교 역할을 이 책 한권으로 톡톡히 하도록 쓰여있다.


예를 들면 1장에서는 유전자 발현 데이터를 사용하여 피부암 환자의 사망률을 추정하는 예제를 RPKM정규화 방법을 들어 설명한다.

그리고 여기에 사이파이나 관련된 넘파이 같은 관련 라이브러리의 핵심 또는 중요한 개념과 기능들을 곁들여 준다.

이런 본재료도 맛있지만, 곁들여진 양념의 풍미까지 좋을 줄이야...


이런 형식의 구성이 8장까지 흥미진진하게 이어진다, 너무 마음에 든다.


IT 현업개발자의 강점은 새로운 것이라도 이것저것 필요한 것들 원포인트로 찾아가며 뚝딱뚝딱 만들어 낼 수 있다는 점이 아닐까? 

반대로 어느정도 인사이트를 얻기까지 갖춰진 체계나 세련미는 없을 수 있다, 그래서 가끔 이런 기초와 깊이 그리고 사례가 갖춰진 책을 한번정도 정독하는 것이 좋다고 생각한다.


이 책은 딱 이시점에 내게 정말 필요한 딱 그 책이다!


※ 본 리뷰는 IT 현업개발자로서 한빛미디어 리뷰어로 출판사로부터 제공받아 읽고 작성한 글입니다.

 

파이썬으로 데이터 분석, 시각화, 머신러닝을 다루면서 scipy 를 종종 사용해 오면서 scipy를 사용하는 코드를 볼 때마다 scipy에 대해 좀 더 알고 싶다는 생각을 해오던 중에 이 책을 읽게 되었다.

책 제목 그대로 "우아한 사이파이"는 멋지고 우아하다. 코드 한 두 줄로 그럴 듯한 결과물을 만들어 내기 때문이다.

파이썬의 이런 우아한 환경은 넘파이와, 팻플롯립, 판다스, 사이킷런 등과 함께 잘 어울려 있는데 가끔 코드 내부를 보면 scipy 를 종종 볼 수 있었다. 하지만 복잡한 통계 계산을 코드 몇 줄로 멋지게 계산해 주는 걸 볼 때마다 그 내부가 복잡하지 않을까 짐작하곤 했다. 마치 호수를 우아하게 헤엄치는 호수의 발 처럼 말이다. 그래서 scipy가 궁금하면서도 익혀보는 걸 두려워 했었는데 마침 이 책을 통해 그 두려움을 조금이나마 해소해 보고자 했다.

이 책에서는 유전자 분석과 이미지, 신호처리 등을 통해 예제를 설명하고 있다. 쉬운 주제는 아니지만 복잡한 계산을 우아하게 만들어 주는 것은 틀림없다.

책 초반부에 나오는 것처럼 넘파이와 사이파이는 파이썬 과학 생태계의 핵심이다. 복잡한 통계, 신호 처리, 이미지 처리 등 복잡한 계산이 들어가는 곳이면 넘파이와 함께 등장하곤 한다.

이 책을 통해 그동안 사이파이 내부에서 어떤 철학으로 어떤 연산이 이루어지는지 조금이나마 이해하는데 도움이 되었다.

깃헙페이지에 가면 책의 소스코드와 설명을 함께 보면서 코드를 실행해 볼 수 있다.

elegant-scipy/elegant-scipy: 1st Edition of Elegant SciPy (O'Reilly Publishers)

링크 클릭만으로 책에 쓰인 이미지와 원서의 설명을 볼 수 있으니 책과 함께 볼 수 있다.

넘파이와 함께 빠른 연산을 위해 꼭 쓰이는 사이파이만을 다룬책이 많지 않은데 이 책으로 사이파이를 정리해 볼 수 있었다.

최근 TIOBE가 발표한 프로그래밍 언어 순위에서 파이썬이 2위를 차지했다. 그동안 프로그래밍 언어는 C와 Java가 1,2위를 서로 주고 받는 양상이었는데, 근소한 차이기는 하지만, Java가 3위를 차지하고 파이썬이 2위로 올라선 것이다. 파이썬의 약진은 가히 파죽지세라 할 수 있다. 2002년의 자료에서는 파이썬은 Javascript, PHP 보다도 낮은 7위를 기록했는데, 점차 상승하다 2018년부터 급격히 점유율을 높이고 있는 형국이다.

002.png

 

003.png

 


 이러한 파이썬의 기세는 최근 인공지능 및 머신러닝의 활황과 무관치않다. 이전부터도 파이썬 특유의 간결함과 편리함으로 전문전인 프로그래머 뿐 아니라 수학, 과학 분야의 연구자들의 사랑을 받아 왔다. 최근 파이썬의 인기는 더 많은 사용자를 불러들이는 기폭제가 되었다.


 파이썬의 인기는 파이썬이 가진 언어로서의 장점 – 솔직하게 말하면 언어로서의 장점이 단점에 비해 월등하다고 하긴 어렵지만 – 뿐 아니라, 파이썬이 사용할 수 있는 광대한 라이브러리와 손쉬운 사용에 있다고 할 수 있다. 이렇게 다양한 파이썬 생태계에서 사이파이는 과학분야의 핵심이라 할 수 있다. 사이파이 소프트웨어 라이브러리는 통계, 신호처리, 이미지 처리 및 함수 최적화와 같은 과학 데이터 처리와 관련된 다양한 함수를 제공한다. 그 기반에는 파이썬 숫자 배열 계산 라이브러리인 넘파이(NumPy)가 있다.

 

001.png


 ‘우아한 사이파이 (Elegant SciPy)’는 파이썬 과학 생태계의 핵심인 사이파이를 자세하게 소개하고 있다. 이 책은 일반 과학자 및 데이터 과학자를 대상으로 하는데, 어느 정도 파이썬에 대한 기초 지식을 가지고 있다고 가정하고 있다. 또한, 다른 프로그래밍 서적과 다르게 라이브러리의 기능과 기초 사용법보다는 실제 도메인에서 어떻게 적용하는지에 초점을 맞추고 있다. 그렇다보니 이 책을 제대로 이해하기 위해서는 프로그래밍 지식에 더불어 수학 및 과학에 대한 지식이 필요하다.


 이 책은 크게 9개의 챕터로 구성되어 있다. 책의 시작 부분인 들어가기에서는 사이파이에 대한 소개 및 환경 설정 방법을 설명한다. 이어 넘파이를 사용한 파이썬 과학 기초, 넘파이와 사이파이의 분위수 정규화를 통해 기초적인 내용을 다룬다. 기초를 탄탄히 한 후, 이미지 지역망 (ndimage), 주파수와 고속 푸리에 변환, 희소행렬과 혼동행렬, 사이파이 선형 대수학, 최적화에 대한 내용을 소개하고, 마지막으로 빅데이터 처리를 위한 Toolz 라이브러리 사용법을 안내한다.


 이 책은 파이썬, 그리고 사이파이를 이용하여 어떻게 하면 현실의 문제를 효과적으로 풀 수 있는지, 즉 어떻게 하면 보다 우아한 코드로 문제를 해결할 수 있는지에 대한 영감을 주고 있다. 책에서 들고 있는 예제가 다소 생소할 수 있지만, 관련된 도메인 지식을 짧게 나마 소개하고 있어 새로운 분야에 대해 알아볼 수 있는 좋은 계기가 되기도 한다. 이 책은 수학, 과학 분야의 전문가 뿐 아니라 수학과 과학에 관심을 가진 일반인에게 많은 도움이 될 것이다.

 

 

 

 

 

 

 

 

 

 

사실 Scipy는 문서화가 매우 잘 되어있는 라이브러리에 속한다. 그 말은 Scipy 라이브러리를 찾아보면 그 구현체에 대한 설명과 수식, 튜토리얼까지 모두 갖추어져 있기 때문에, 이 라이브러리를 사용하기 위해 책을 찾아보는 것 보다 문서를 보는 것이 더 도움이 될 수 있다는 이야기이다. (아무래도 책은 2차 가공이 되어 있기 때문에 라이브러리를 개발한 사람의 의도가 왜곡될 여지가 존재한다.)
 
이 책에서 다루는 내용 중 일부인 Optimization에 대한 Scipy 문서를 보면 Rosenbrock Function에 대하여 최소값을 구하는 방법에 대한 구현과 Simplex Method에 대한 설명이 잘 기술되어 있다.(https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html) 그래서 지금까지 연구나 프로젝트를 하면서 문서만 보면서 FFT나 Optimization 등 Scipy의 API를 이용하는데 아무런 문제가 없었기에, 최소한 Scipy라는 라이브러리에 대해서는 책을 통해 사용하는 방법을 익히는 것은 의미가 없지 않을까 라는 생각을 했었다.
 
이 책을 읽기 전 까지는.
 
 사실 이 책을 통해서 Scipy를 더 잘 쓰게 되었다 보다는 엔지니어적인 관점에서 "Scipy를 이용하여" 문제를 해결할 수 있게 되었다라고 표현하는 것이 더 맞을 것 같다. 왜냐하면 이 책은 Scipy의 각 함수에 대한 자세한 설명을 해주지 않는다. 단지 주어진 문제에 대한 공학적 해결 방법을 제시하고, numpy와 scipy를 이용하여 해결해 버리기 때문이다. 예를 들어 달 착륙 사진의 노이즈 제거하는 문제를 보면, Fast Fourier Transform과 스펙트럼 분석, Inversed Fast Fourier Transform을 통해 간단히 노이즈를 제거한다. 이는 전공의 한계로 배우지 못했던 엔지니어적인 문제 해결 방법론들에 대한 갈증을 풀어주는 부분임과 동시에 Scipy가 공학자들에게 충분한 솔루션이 될 수 있음을 느끼게 해주는 부분이었다. 
 
나 또한 현재 Scipy를 활용하여 연구를 진행하고 있는데, 기능적 한계는 전혀 느낄 수 없었고 오히려 데이터 핸들링 및 머신 러닝/딥러닝 환경(Numpy, Pandas, Pytorch, Scikit-learn)과 쉽게 연동할 수 있기 때문에 데이터의 중요성이 강조되어 가는 시대에 전통적인 공학 솔루션들(매트랩 등)에 비해 Scipy 환경이 경쟁력을 가지지 않을까 하는 생각이 든다.

 

본 책은 한빛미디어로부터 제공받았으며 책 이외의 요구사항이나 보수를 제공받지 않았습니다.

이 책은 수학, 과학 그리고 특정 엔지니어링을 전공하지 않은 일반인들에게도 사이파이에 대한 접근을 보다 쉽게 부담없이 할 수 있도록 해 준다. 물론, 관련분야에서 연구하는 분들에게도 파이썬 언어를 사용해서 산출물을 만들고 논문을 작성하고 관련 데이터를 분석하는데, 사이파이 라이브러리를 이해하고 사용할 수 있도록 해 준다. 이 책을 접하면서 제일 먼저 들었던 생각은 사실 '사이파이'보다 '우아한'이었다. 제목에 '우아한'이라는 단어가 들어가는 것은 문학책 소설책이 아닌 엔지니어책에서는 처음 보았기 때문이다. 전에 보았던 어떤 책은 코딩이라는 단어 앞에 '아름다운(beautiful)' 이라는 단어를 사용한 것을 본 적이 있었다. 이 책을 읽으면 결국 '우아한'이라는 단어는 결국 'rich'단어와 앞서 언급한 'beautiful', 그리고 'creative'와 더 나아가 'smart'까지.  이러한 단어들을 아우를 수 있는 한 개의 단어를 저자는 '우아한'이라고 결정했을 것으로 이해했다. 이 책을 통해 수학, 과학, 엔지니어링을 위한 파이썬 라이브러리를 통해 사이파이의 세계에 빠져보자.

20201122_172439.jpg

 

 

 

사이파이는 데이터 사이언스를 하는 사람이라면 꼭 알아야하는 라이브러리 중 하나입니다.

보통 넘파이를 많이 공부하지만 scipy도 수학적인 연산을 다루는 라이브러리이기에 꼭 알아야합니다. 

딥러닝 관련 수학 공부를 하면서 scipy로 해당 부분에 대한 계산이나 연산 문제를 공부하는 것도 굉장히 좋습니다. 

 

국내에 사이파이를 다룬 책은 많지 않습니다. 

이 책에서는 딥러닝의 각 분야에서 알아야하는 이론적인 부분들을 사이파이로 잘 풀어놓았습니다.

예를 들어, 4장에서는 푸리에 변환을 다루는데 '음성' 쪽을 공부하는 분이라면 푸리에 변환을 기본적으로 공부하셨을 겁니다.

 

5장에서 다루는 희소행렬과 혼동행렬은 딥러닝을 위해서 기본적으로 알아야하는 부분들입니다. 

추천 시스템이나 문서 간 유사도를 구하는 이론 및 예제를 해보았다면, 이 부분의 중요성을 잘 알 것입니다. 

6장에서는 선형대수학을 다루는데, 저자는 선형대수학 개념이 잘 잡혀있다라는 전제 하에 다룹니다. 

라플라시안 과 페이지 랭크 알고리즘을 코드로로 구현합니다.  (선형대수학의 기초를 실습하는 챕터가 아닙니다.)

 

사이파이 대한 더 많은 예제와 코드는 이 책을 시작으로 본인의 수학 지식을 늘리면서 함께 구글링하면 될 것 같습니다.

이 책에서 다루는 수학적인 지식이 대학에서 배우는 수학 지식이 받쳐주지 않는다면 어려울 수도 있습니다. 

문과생이라면 더더욱 그렇겠죠.

 

실용적인 예제가 많고, 딥러닝을 탄탄하게 공부하고 싶다면(=딥러닝 수학을 공부하면서)

이 책도 한 번쯤 봐야할 거라고 생각합니다. 

어려운 만큼 그만큼 본인의 깊이는 깊어질테니깐요.

 

이상 리뷰를 마치겠습니다 :)

IMG_8623.JPG

사이파이는 최적화 함수 때문에 관심을 갖기 시작했습니다.

 

사이파이에 대해 막연하게 수학과 과학을 위한 라이브러리라고만 알고 있었는데,

이 책을 보니 신호 처리, 오디오와 비디오 처리가 가능한 라이브러리 입니다.

 

오디오와 비디오 신호를 처리함에 있어서 필요한 주파수 도메인으로의 변환, 스펙트로그램, 고속 푸리에 변환은

현업에 많은 도움이 될 것 같습니다. 

 

그리고 사이파이를 이용한 선형대수학 부분은 유사도 처리 및 페이지랭킹 알고리즘 등 실용적인 예제가 많이 있습니다.

 

또한 사이파이를 이용해서 처리할 수 있는 최적화 알고리즘은 넓은 과학문제에 최적화를 적용할 수 있습니다.

 

IMG_8622.JPG

 

 

이 책의 저자들은 생물학을 연구하는 석박사들이라고 합니다.

생물학의 백그라운드 지식이 없어서 많은 부분을 이해하기 어려웠지만, 중간 중간에 나온 여러가지 예제는 다른 분야에 쉽게 응용할 수 있으리라 생각됩니다.

 

2018년도에 출간된 책이지만, 여러모로 지금 하고 있는 업무에 도움이 되는 사이파이에 대해 실용적인 응용이 가능한 예제를 제공해주는 책 입니다.

 

 

보통 데이터 사이언스를 통하여 파이썬으로 프로그래밍을 하게 되면 여러 가지 라이브러리를 통하여 데이터를 가공하거나 혹은 치환하게 됩니다.

 

SciPy와 NumPy는 수치적 배열과 고급 데이터 분석에서 없어서는 안 될 파이썬 패키지입니다.

 

SciPy는 NumPy 배열 프레임워크를 기반으로 만들어져 적분, 상미분방정식 특수 함수, 최적화를 비롯한 다양한 고급 수학 함수들을 제공하여 과학적 프로그래밍을 완전히 다른 수준에서 수행할 수 있습니다.

 

보통 우리가 많이 실습하는 데이터는 텍스트 데이터, 이미지 데이터를 사용하여 실습을 진행합니다. 하지만 책에서는 시계열 데이터를 통하여 주파수를 분석할 수 있습니다. 또한 레이더 데이터같은 경우에는 이산 푸리에 변환을 통하여 어떤 주파수 혹은 음이 나오게 되는지 확인할 수 있습니다.

책에서 좋았던 장점은 게놈의 마르코프 모델 실습을 통하여서 마르코프 모델에 대한 이해도를 높일 수 있다는 점이 좋았던 것 같습니다. 기존의 통계학 수업에서 수식으로 배웠던 것보다 실습을 통하여서 개념을 이해할 수 있던 점이 실용적인 것 같습니다.

 

마지막으로 책에서의 실습을 통하여 Scipy 라이브러리를 보다 폭 넓고 자유자재로 사용하는 것이 최종 목표입니다.

마지막으로 좋은 책 제공과 기회를 주신 한빛미디어 담당자 분들께 감사 드립니다. 12월에도 내용이 탄탄한 도서를 읽고 빨리 리뷰를 남기고 싶습니다.

"우아한 사이파이"라니. IT 관련 책 이름 치고는 뭔가 어색해보였습니다. 번역 과정에서의 과욕이 아닌가 싶었는데, 원서 제목 자체가 "Elegant SciPy"입니다. 저자는 서문에서 왜 "우아한"인가를 설명해주고 있습니다.

 

A good piece of code just feels right. When you look at it, its intent is clear, it is often concise (but not so concise as to be obscure), and it is efficient at executing the task at hand. For the authors, the joy of analyzing elegant code lies in the lessons hidden within, and the way it inspires us to be creative in how we approach new coding problems.

번역은 다음과 같습니다.

 

훌륭한 코드는 마음을 편하게 한다. 의도가 명확하고 간결하며 효율적이다. 우아한 코드를 분석하는 일은 즐거울 뿐 아니라 내공까지 쌓인다. 그리고 새로운 코딩 문제에 창의적으로 접근하는데 영감을 준다.

저자의 생각은 이런 겁니다. 이미 파이썬, 넘파이, 사이파이를 설명하는 콘텐츠는 차고 넘쳐납니다. 저자가 이 책을 쓰지 않더라도 사이파이를 공부할 수 있는 공간은 쉽게 찾을 수 있습니다. 커뮤니티를 기반으로 성장하고 있기 때문에 그렇겠지요. 하지만 저자는 그냥 매뉴얼대로 뭔가를 사용하는 방식이 전파되는 것을 원하지 않습니다. 뭔가 완벽함을 추구하는 아름다움을 코드에서 만나기를 바라는 것이라고 합니다. 그렇기 때문에 우아한이라는 단어가 이 책에서 중요한 자리를 차지하고 있습니다.

 

* 배달의 민족으로 알려진 "우아한 형제들" 회사명에도 Elegant 라는 의미가 담겨져있다고 합니다. 코드에서도 우아한~을 찾고 있는지는 모르겠네요.

https://estimastory.com/2013/05/31/woowa/

 

이 책의 원본은 깃허브에 공개되어있다고 합니다. 영어에 익숙하다면 책을 구입하지 않고 깃허브에 있는 자료를 받아보아도 되겠네~ 라고 생각했는데, 깃허브에 공개된 콘텐츠와 책은 좀 다릅니다. 깃허브에 올려진 내용은 편집되지 않은 상태의 거친 콘텐츠입니다. 아마 텍스트 교정이나 이미지 편집을 전혀 하지 않은 상태가 아닌가 싶습니다.

 

예를 들어 1장에서 분자생물학을 설명하는 이미지가 등장하는데 깃허브에는 이런 그림이 있구요.

download.png

https://github.com/elegant-scipy/elegant-scipy/blob/master/markdown/ch1.markdown

 

같은 그림이 사파리 온라인(오라일리 이북 사이트)에서는 이런 그림으로 바뀌었습니다. 사파리 온라인에서는 1장을 미리보기할 수 있어서 확인해볼 수 있었습니다. 번역서에서는 아래 그림을 번역해서 제공하고 있습니다. 뭐 원본 이미지도 나름 매력있습니다. 다만 글씨를 못알아볼 수도 있고, 내용을 모르면 그림 자체를 이해하기 힘들수도 있습니다. 

 

download (1).png

https://www.safaribooksonline.com/library/view/elegant-scipy/9781491922927/ch01.html

 

번역서에서는 코드 내 주석 부분을 다 번역해놓아서~ 살짝 애매한 부분이 있습니다. 이게 주석인지 코드의 일부인지가 잘 보이지 않습니다. 물론 실제 코드에서는 코드 하일라이트 처리를 해주기 때문에 명확하게 이 부분이 주석이라는 것을 알 수 있지만 책에서는 그런 부분이 잘 드러나지 않습니다. 물론 대부분의 경우 책을 보고 코드를 입력하는 일은 없을테니깐 큰 문제는 아닙니다.

 

저자 또는 역자가 올려놓은 코드를 확인하고 테스트해볼 수 있습니다. 역자가 검증한 코드가 좀 더 최신이라고 할 수 있으니 역자의 코드를 참고하는 것이 더 좋겠네요.

https://github.com/AstinCHOI/elegant-scipy

 

첫 번째 챕터가 너무 어려운 주제라 난감할 수 있습니다. 코드는 둘째치고 내용 자체를 이해하기가 쉽지 않습니다. 역자도 깃허브에 그런 고충을 올려놓았더군요. 이게 순서가 있는것이 아니라서 첫 챕터가 어렵다면 다음 챕터부터 시작해도 괜찮습니다. 이미지 처리 같은 것은 그나마 어떤 일을 하려는 것인지는 이해할 수 있으니깐요.

 

 요근래 나는 조직이 변경되었다. 예전의 나를 소개할때는 통신 소프트웨어 엔지니어라고 소개되었는데, 이제는 하는 업무가 딥러닝/강화학습 적용쪽으로 변경되었다. 그러면서 개발환경도 이전의 C언어로 짜던 것이 이제는 Python으로 외부 라이브러리도 내 입맛대로 가져다쓰고 개발하고 있다. 아무래도 딥러닝/강화학습을 하려다보니 주어진 dataset을 처리할 기회가 많아지고, 이를 다룰 패키지인 numpy나 pandas, matplotlib에 대한 활용 케이스가 많아졌다. 특히 요근래에는 시각화 관련해서 공부도 좀 하고 있었다. (찾아보니까 보통 matplotlib을 쓰긴 하지만, 사용자에 따라서는 seaborn을 사용하기도 하고, bokeh 같은 걸 쓰기도 한다. 좀더 찾아보니까 시각화 라이브러리인 d3.js를 활용한 케이스도 많은거 같다..)

 사실 집에 예전 리뷰를 한다고 받았었던 "파이썬 라이브러리를 활용한 데이터 분석"(한빛 미디어) 책이 이런 데이터 처리와 관련해서 잘 설명되어 있다. 흔히 numpy, pandas, matplotlib 관련해서 처음 입문하는 사람한테는 간단하게 응용해볼 수 예제와 설명들이 들어있는 책이고, 무엇보다 두껍다. 그런데 인터넷을 통해서 많이 샘플 코드를 찾아보고, 좀 현업에 응용해보고자 하는 사람이라면 그 책으로는 갈증을 해소하기에 조금 부족할 것이다. 그래서 현업에 좀 응용해보려면 혼자서 고민을 해봐야 되는 측면이 있다. 지금 소개할 책이 어쩌면 그런 책일 듯하다.

우선 Scipy를 모르는 사람에게 잠깐 소개하자면 Scipy는 Open source 형태로 개발되고 있는 수학/과학 연산을 위한 패키지 set이다. 조금 두루뭉실하지만, 아마 데이터처리를 공부하거나, 현업에서 활용하는 사람이라면 이미 이 scipy를 다 쓰고 있다. 앞에서도 소개한 numpy, pandas, matplotlib들이 모두 이 scipy 패키지에 포함되서 유지/관리되며, 배포되고 있다. 참고로 scipy 구성 요소는 다음과 같이 되어 있다.

 - numpy : 고차원 배열 데이터 연산을 위한 패키지
 - pandas : 다량의 데이터를 처리하기 위한 구조 및 처리
 - matplotlib : 시각화 패키지
 - IPython : Interactive console 제공 (유저에게 데이터 처리를 할 수 있는 여지를 부여함)
 - Sympy : Symbolic 수학 연산 
 - Scipy : 과학/수학 관련 연산에 필요한 기능 제공

 그래서 책 제목에도 표현되어 있다시피 Scipy내 API들을 활용해서 다양한 예제를 다루는 책이다. (사실 scipy라고 명시는 되어 있지만, 예제를 살펴보면 sklearn 같은 다른 패키지를 활용한 예제들도 있다.)

 이 책의 특징이라고 한다면, 무엇보다 책 내에서 언급되고 있는 예제들의 주제나 수준이 여타 데이터처리 책들에 비하면 좀 생소하다는 점이다. 아마 저자의 전공 주제가 책에도 영향을 미쳤겠지만, 책 처음부터 나오는 예제가 DNA 처리와 관련된 내용이다.

 처음에는 내가 책을 잘못 선택한 건 줄 알았다. 아무래도 컴퓨터 서적이다보니 뭔가 다른 주제를 다루더라도, 통계적 이해를 돕기위한 주제로 특이할 줄 알았는데, 책의 첫장부터 DNA내 염기서열의 분석을 어떤 방식으로 하는지에 대해서 설명한다. 좀 의아할 수 있는데, 이 책의 진행방식이 이런 거였다. 처음에 해당 분야에서 답을 구하는 방식에 대해서 언급하고, 그걸 scipy 패키지를 활용해서 해결하기 위한 방안을 소개하는 서술 구조로 되어 있는 것이다. 갑자기 DNA니, 염기서열이니 하는 말이 나와서 생뚱맞을 수도 있는데, 어쩌면 scipy를 "잘" 활용하는 방법을 설명하는 방법으로 좋은 접근이었던 것 같다. (사실 생뚱맞았다는 말이 나와서 그런데, 개인적으로 데이터 처리를 하는 입장에서도 해당 분야에 대한 어느정도의 domain knowledge가 필요한거 같다. 아무래도 그런 기반지식이 조금 갖춰져야 뭔가 처리를 하고 딥러닝이나 강화학습를 미지의 분야에 적용하고자 할때도 그만한 성과가 나오기 때문이다. 기반지식없이는 잘못된 결과가 나와도 이게 잘못된건지, 아니면 뭐가 부족한 건지를 파악하기가 매우 어렵다..) 

 그 외에도 좀 특이한 예제를 소개하자면 음성 데이터를 Fast Fourier Transform과 같은 후처리를 하는 과정에 대해서도 소개되어 있는데, 사실 나도 이런 음성처리 같은건 matlab에서 강점을 가지고 있었던 걸로 알았다. 그런데 이렇게 scipy내의 패키지를 활요해서 음성을 추출하고, 결과를 시각화하는 작업까지 할수 있는 것을 보니, 좀 신기하다는 생각이 들었다. 몰랐던 기능을 상기시켜주는 내용이랄까.. 

 그런데 읽다보니 기타 데이터 분석 책과 비교했을 때 조금 아쉬운 점들도 눈에 띄였다. 우선 이 책의 범주를 굳이 나누자면 데이터 분석 관련책이라기 보다는 데이터 분석을 할 때 Scipy를 어떻게 활용할 수 있을까를 알려주는 설명서 같은 느낌이 들었다. 그러다보니 책을 읽고 나서도 뭔가 지식을 알게됬다기 보다는 이런 상황에서 scipy관련 API는 뭘쓰면 되겠구나 라는 테크닉을 알려주는 책이란 느낌이 좀 강했다. 그리고 추가로 책의 상당 부분이 코드로 되어있고, 이에 대한 설명이 조금 부족하다.(의도된 건지는 모르겠지만, 초반 코드에는 line by line 별로 주석이 잘 달려있지만, 후반부 코드에는 주석없이 본문 내용으로 기능을 유추해야 한다.) 물론 숙련자라면 이 책만큼이나 원하는 기능을 생소한 예제를 통해서 숙지할 수 있을 기회를 얻을 수 있는 심플한 책이 될 수도 있겠지만, 자칫 의도된 바와 다르게 이책은 그냥 scipy 패키지의 codebook 정도라고 느낄 여지가 조금 있는 것 같다.

 그럼에도 이 책이 다른 데이터 분석 관련 책에 비해서 가지는 차별점은 앞에서 소개한 바와 같이 scipy를 활용하는 insight를 제공하는 거라고 생각한다. 뭔가 domain knowledge가 부족한 분야에서도 어떤 접근 방식이 필요하고, 그 방식을 실현하는데 scipy를 사용하는 방법을 묘사했다. 그래도 책의 내용이 다루는 주제 특성상 처음 scipy를 쓰는 사람보다는 어느정도 해당 패키지에 좀 익숙하고,그걸 좀 "우아"하게 써보고 싶은 사람한테는 조금이나마 도움이 될 책이지 않을까 싶다.

 참고:

 - 원서 github : https://github.com/elegant-scipy/elegant-scipy
 - binder : https://mybinder.org/v2/gh/elegant-scipy/notebooks/master?filepath=index.ipynb
 - 역자 github : https://github.com/AstinCHOI/elegant-scipy

( 참고로 위 github에 jupyter notebook으로 예제가 제공되기 때문에 해당 환경이 갖춰져있으면 책에 다뤄졌던 내용들을 바로 실습해볼 수 있다.)

 

 

- 포스트에서 언급되는 "우아한 사이파이" 는 한빛미디어에서 지원을 받았으며, 이에 대한 개인적인 느낌을 작성한 것임을 알려드립니다. -

출처: http://talkingaboutme.tistory.com/892 [자신에 대한 고찰]

프로그래밍 공부를 위해서는

 

같은 책을 여러번 보고

 

자신의 프로그래밍 공부 노트를 만들어 보는 것이 좋습니다.

 

우아한 사이파이는 파이썬 입문을 잘 마치고 볼 수 있는 좋은 책입니다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
우아한 사이파이
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
우아한 사이파이
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
우아한 사이파이
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실