Sunday, February 25, 2018

오픈소스에 기여하는 방법

이번에는 오픈소스에 기여하는 방법을 자세히 안내해드리겠습니다.
제가 사랑하는 패키지 librosa에 제가 했던 PR을 예로 들죠.

WHY?

1. 오픈소스 소프트웨어 발전에 기여하므로 기분이 좋다
2. Git을 중심으로 여럿이서 개발하는 작업 흐름을 배운다 (유닛테스트, 문서화,..)
3. 여럿이서 개발할때 지켜야할 룰을 배운다. (코딩 컨벤션)
4. 학계, 업계의 사람들과 소통하며 인맥을 쌓는다.
5. 해당 버전의 소프트웨어가 인용되면 인용수가 올라간다. (개이득)

WHY NOT?

1. 어떻게 하는지 모른다.
2. 안해도 아무도 뭐라고 안함.
3. 귀찮다. 바쁘다.
4. 영어로 소통해야하므로 부담스럽다.

Pull Request?

줄여서 PR이라고 하죠. Pull해달라고 요청하는건데요, 다시말하면 내가 이런저런걸 고쳤으니 이걸 받아들여달라고 요청하는겁니다.

절차

정해진 방법이 있는건 아니지만 아래 과정을 참고하시죠.
- Issue 보드에서 새로운 기능이나 버그에 대해 논의하고 패키지 주인장과 공감대를 형성한다.
- 깃헙에서 해당 패키지를 Fork하고 그걸 clone한다. 
- Fork한 패키지에서 Branch를 하나 만든다
- Branch에서 버그를 고치든지, 새로운 기능을 추가하든지하고 이걸 Push한다.
(주의사항: 각 PR은 1가지 내용만 담고있어야합니다. 예를들어 버그 2개를 한번에 고치는 PR은 가급적 피하고 나눠서 해야합니다. 그래야 패키지 관리하는 입장에서 편리합니다.)
- Push한 내용을 PR한다
- 한번에 받아들여질수도 있지만 주인장이 원하는 요구사항이 있으면 이를 따른다. (예: 문서화 추가, 예제 추가, 테스트코드 수정 등..)
- 최종적으로 PR이 Merge된다. 끝!

예제

제 PR을 보시면 처음에 #647로 논의를 하고, 이에따라 첫번째 PR을 날렸습니다. 그런데 여기에는 유닛테스트가 잘 되어있지 않아서 이에대해 논의했고, 기존 코드와의 일관성을 위해 API에 대해서도 논의했네요. 테스트 방법과 코드 세부사항을 좀 더 논의했고 최종적으로 Merge가 되었습니다.


다소 귀찮지만 하다보면 굉장히 뿌듯하고 재미있습니다. 배우는것도 많구요. 특히 학교에서만 있으면 협업하며 개발하는 방법을 경험하기 어려우니 꼭 한번쯤 해보시길 권합니다. 

Thursday, February 8, 2018

<처음 배우는 데이터 과학> 한빛소프트 판매 시작





제가 번역한 책 <처음 배우는 데이터 과학>이 곧 출간됩니다.  
초보자용 데이터 과학 입문서로 광범위한 내용을 쉽게 다룹니다. 재미있게 읽어주세요.


----------
목차를 첨부합니다. 좀 길군요.


CHAPTER 1 데이터 과학 유니콘이 되자!
1.1 데이터 과학자는 단지 연봉이 높은 통계학자일 뿐이다?
1.2 왜 파이썬을 쓰나요?
1.3 한마디 더

[Part 1 데이터 과학 필수 요소]

CHAPTER 2 큰 그림으로 보는 데이터 과학
2.1 문제 파악
2.2 데이터 분석 및 이해 - 기초
2.3 데이터 분석 및 이해 - 전처리
2.4 데이터 분석 및 이해 - 데이터 탐험
2.5 특징값 추출
2.6 모델 수집 및 분석
2.7 결과 정리 및 발표
2.8 코드 배포
2.9 반복 작업
2.10 주요 용어

CHAPTER 3 프로그래밍 언어
3.1 왜 프로그래밍 언어를 사용해야 하나요? 다른 대안은 없나요?
3.2 데이터 과학에서 사용하는 프로그래밍 언어
3.3 파이썬 속성 코스
3.4 문자열 데이터
3.5 함수 정의하기
3.6 파이썬의 공학용 라이브러리
3.7 개발 환경 및 라이브러리 소개
3.8 파이썬 관련 문서 및 참고 자료
3.9 더 알아보기
3.10 주요 용어

CHAPTER 4 데이터 먼징 : 문자열 다루기, 정규표현식, 데이터 정리하기
4.1 생애 최악의 데이터셋
4.2 실수를 예방하는 방법
4.3 데이터 자체의 문제
4.4 데이터 형식 문제
4.5 데이터 형식 정리 예제
4.6 정규표현식
4.7 실제 현장 이야기
4.8 더 알아보기
4.9 주요 용어

CHAPTER 5 시각화와 대푯값
5.1 파이썬의 시각화 도구
5.2 아이리스 데이터셋
5.3 원형 차트
5.4 막대그래프
5.5 히스토그램
5.6 평균, 표준편차, 중간값, 백분위
5.7 상자그림
5.8 산포도
5.9 산포도와 로그 축
5.10 산포 행렬
5.11 히트맵
5.12 상관관계
5.13 안스콤 쿼텟 데이터셋과 대푯값의 한계
5.14 시계열 데이터
5.15 더 알아보기
5.16 주요 용어

CHAPTER 6 머신러닝 개론
6.1 역사적 맥락
6.2 지도학습과 비지도학습
6.3 학습 데이터, 시험 데이터, 과적합
6.4 더 알아보기
6.5 주요 용어

CHAPTER 7 특징값 추출
7.1 일반 특징값
7.2 데이터 표본 여러 개의 대푯값
7.3 복잡한 특징값
7.4 어떤 특징값을 예측할지 결정하기

CHAPTER 8 머신러닝과 분류
8.1 분류기란?
8.2 현실적인 고려사항
8.3 이진 분류와 다범주 분류
8.4 예제 코드
8.5 다양한 분류기의 특징
8.6 분류기 평가하기
8.7 분류 기준값 정하기
8.8 더 알아보기
8.9 주요 용어

CHAPTER 9 의사소통과 문서화
9.1 일반적인 원칙
9.2 슬라이드 작성
9.3 보고서 작성
9.4 발표하기
9.5 코드 문서 작성하기
9.6 더 알아보기
9.7 주요 용어

[Part 2 데이터 과학 확장팩]

CHAPTER 10 비지도학습 : 군집화와 차원 축소
10.1 고차원의 저주
10.2 아이겐페이스와 차원 축소 예제
10.3 주성분 분석
10.4 스크리 도표와 차원 이해하기
10.5 요인 분석
10.6 주성분 분석의 한계
10.7 군집화
10.8 더 알아보기
10.9 주요 용어

CHAPTER 11 회귀
11.1 당뇨 진행 상황 예측 예제
11.2 최소제곱법
11.3 비선형 커브피팅
11.4 커브피팅 평가 : R2과 상관관계
11.5 오차의 상관관계
11.6 선형 회귀
11.7 라소 회귀와 특징값 선정
11.8 더 알아보기
11.9 주요 용어

CHAPTER 12 데이터 인코딩과 파일 형식
12.1 일반적인 데이터 형식
12.2 CSV 파일
12.3 JSON 파일
12.4 XML 파일
12.5 HTML 파일
12.6 Tar 묶음 파일
12.7 Gzip 파일
12.8 Zip 파일
12.9 이미지 파일 형식
12.10 바이트 데이터
12.11 정수형
12.12 실수형
12.13 텍스트 데이터
12.14 더 알아보기
12.15 주요 용어

CHAPTER 13 빅데이터
13.1 빅데이터가 정확히 뭔가요?
13.2 하둡과 하둡 파일시스템
13.3 HDFS 사용하기
13.4 파이스파크 예제 코드
13.5 스파크 둘러보기
13.6 스파크 연산
13.7 파이스파크를 실행하는 두 가지 방법
13.8 스파크 설정하기
13.9 파이스파크 : 더 깊이 살펴보기
13.10 스파크 : 팁과 주의사항
13.11 맵리듀스 패러다임
13.12 성능 개선을 위한 고려사항
13.13 더 알아보기
13.14 주요 용어

CHAPTER 14 데이터베이스
14.1 관계형 데이터베이스와 MySQL
14.2 키-값 저장소
14.3 와이드 컬럼 저장소
14.4 문서 저장소
14.5 더 알아보기
14.6 주요 용어

CHAPTER 15 좋은 프로그래밍 습관 기르기
15.1 코딩 스타일
15.2 버전 관리와 깃
15.3 테스트 코드
15.4 테스트 주도 개발 방법론
15.5 애자일 방법론
15.6 더 알아보기
15.7 주요 용어

CHAPTER 16 자연어 처리
16.1 자연어 처리가 필요한 상황
16.2 언어와 통계
16.3 주식 관련 신문 기사의 감정 분석 예제
16.4 자연어 처리 소프트웨어 및 데이터셋
16.5 토큰화
16.6 BoW 특징값
16.7 단어 빈도와 문서 빈도 역수
16.8 n-그램
16.9 불용어
16.10 표제어 추출과 공통부분 추출
16.11 동의어 처리
16.12 품사 태깅
16.13 그 외 문제들
16.14 자연어 처리 심화과정
16.15 더 알아보기
16.16 주요 용어

CHAPTER 17 시계열 데이터 분석
17.1 위키피디아 조회수 예측 예제
17.2 시계열 데이터 분석 순서
17.3 시계열 데이터와 타임스탬프 데이터 비교
17.4 내삽법과 외삽법
17.5 신호 스무딩
17.6 간단한 데이터 전처리
17.7 추세와 주기성
17.8 윈도 적용
17.9 시계열 데이터의 특징값 추출
17.10 특징값 추출 심화 과정
17.11 푸리에 분석
17.12 시계열 데이터와 특징값
17.13 더 알아보기
17.14 주요 용어

CHAPTER 18 확률
18.1 동전 던지기와 베르누이 확률변수
18.2 다트 던지기와 균등확률변수
18.3 균등분포와 유사난수
18.4 비이산 불연속 확률변수
18.5 표기법, 기댓값, 표준편차
18.6 종속성, 주변확률, 조건부확률
18.7 확률분포의 꼬리
18.8 이항분포
18.9 푸아송 분포
18.10 정규분포
18.11 다차원 정규분포
18.12 지수분포
18.13 로그 정규분포
18.14 엔트로피
18.15 더 알아보기
18.16 주요 용어

CHAPTER 19 통계
19.1 데이터 과학과 통계학
19.2 베이지언과 빈도론자의 비교
19.3 가설검정
19.4 다중 가설검정
19.5 매개변수 추정
19.6 t 검정
19.7 신뢰구간
19.8 베이지안 통계학
19.9 나이브 베이즈
19.10 베이지안 네트워크
19.11 선험적 확률 추정
19.12 더 알아보기
19.13 주요 용어

CHAPTER 20 프로그래밍 언어의 주요 개념
20.1 프로그래밍 방법론
20.2 컴파일과 인터프리팅
20.3 자료형 체계
20.4 더 알아보기
20.5 주요 용어

CHAPTER 21 알고리즘의 성능과 메모리 관리
21.1 예제 코드
21.2 알고리즘의 성능과 빅오표기법
21.3 정렬 알고리즘과 이진검색
21.4 평균복잡도와 분할상환분석
21.5 오버헤드 줄이기, 메모리 관리
21.6 팁 : 수치연산 라이브러리를 이용하자
21.7 팁 : 사용하지 않는 대용량 객체를 삭제한다
21.8 팁 : 가능하면 내장 함수를 사용한다
21.9 팁 : 불필요한 함수 호출을 자제한다
21.10 팁 : 덩치가 큰 객체는 가급적 새로 만들지 않는다
21.11 더 알아보기
21.12 주요 용어

[Part 3 데이터 과학 특수 분야]

CHAPTER 22 컴퓨터 메모리와 자료구조
22.1 가상 메모리
22.2 C 언어 예제
22.3 자료형과 배열
22.4 구조체
22.5 포인터, 스택, 힙
22.6 주요 자료구조
22.7 더 알아보기
22.8 주요 용어

CHAPTER 23 최대 우도 추정과 최적화
23.1 최대 우도 추정
23.2 커브피팅 예제
23.3 로지스틱 회귀 예제
23.4 최적화
23.5 경사 하강법과 볼록 최적화
23.6 볼록 최적화
23.7 확률 경사 하강법
23.8 더 알아보기
23.9 주요 용어

CHAPTER 24 고급 분류기
24.1 라이브러리 선정
24.2 딥러닝 기초
24.3 합성곱신경망
24.4 텐서
24.5 MNIST 숫자 필기 인식
24.6 순환신경망
24.7 베이지안 네트워크
24.8 학습 및 예측
24.9 마르코프 연쇄 몬테카를로 방법
24.10 파이엠시 예제
24.11 더 알아보기
24.12 주요 용어

CHAPTER 25 확률 과정
25.1 마르코프 연쇄
25.2 마르코프 연쇄의 종류
25.3 마르코프 연쇄 몬테카를로
25.4 은닉 마르코프 모델
25.5 비터비 알고리즘
25.6 랜덤워크
25.7 브라운 운동
25.8 ARMA 모델
25.9 연속 마르코프 과정
25.10 푸아송 과정
25.11 더 알아보기
25.12 주요 용어