xwMOOC 기계학습
파이썬기반 기계학습 툴체인(toolchain)
학습목표
- 명령라인 인터페이스의 강력함을 살펴본다.
- 유닉스 명령라인 인터페이스를 통해 데이터 분석을 실시한다.
명령라인 인터페이스 강력함 시연
결국에 모두 실패하고, 직지(http://www.jikji.org/)에서 수작업으로 .txt
파일을 생성하여 .txt
파일을 웹에 올려 curl
명령어를 통해 바로 다운로드 받게 소설데이터를 준비했다. 소설 데이터는 B사감과 러브레터 라 고등학교 인문계에서 필독서로 아주 오래전에 읽었던 기억이 난다. 영화로도 만들어지고, TV에서도 방영되었던 것으로 기억된다.
curl
명령어를 통해 https://raw.githubusercontent.com/statkclee/ml/gh-pages/data/B사감과_러브레터.txt 파일을 다운로드 한다.grep
명령어로 정규표현식 패턴을 넣어 단어를 각 행별로 추출하여 쭉 정리해 나간다.sort
명령어로 오름차순으로 정리한다.unique
명령어로 중복을 제거하고-c
인자플래그를 넣어 중복수를 센다.sort
명령어로 단어갯수를 내림차순으로 정리한다.head
명령어로 가장 빈도가 높은 단어 5개를 추출한다.
$ curl -s https://raw.githubusercontent.com/statkclee/ml/gh-pages/data/B%EC%82%AC%EA%B0%90%EA%B3%BC_%EB%9F%AC%EB%B8%8C%EB%A0%88%ED%84%B0.txt | \
grep -oE '\w+' | \
sort | \
uniq -c | \
sort -nr | \
head -n 5
138 처음
132 직지에
65 러브레터
47 때
26 여학교에서
만약 두도시 이야기(A Tale of Two Cities)에서 가장 많은 단어를 분석하고자 하는 경우 http://www.gutenberg.org/cache/epub/98/pg98.txt을 인자로 바꿔 넣으면 된다.
$ curl -s http://www.gutenberg.org/cache/epub/98/pg98.txt | \
grep -oE '\w+' | \
sort | \
uniq -c | \
sort -nr | \
head -n 5
7577 the
4921 and
4103 of
3601 to
2864 a
명령라인 데이터 분석 3 4
명령라인 인터페이스를 사용하면, 애자일(Agile), 다른 기술과 증강(Augmenting)이 가능하며, 확장성(Scalable)이 크며, 연장가능(Extensible)하며, 어디서나 사용(Ubiquitous)되는 장점을 갖는다.
유닉스는 텍스트(Text) 가 어디서나 사용되는 인터페이스로, 각 개별 구성요소는 한가지 작업만 매우 잘 처리하게 설계되었고, 복잡하고 난이도가 있는 작업은 한가지 작업만 잘 처리하는 것을 파이프와 필터 로 자동화하고, 그리고 쉘스크립트 를 통해 추상화한다.
1. 데이터 가져오기
데이터를 가져오는 방식은 결국 텍스트로 유닉스/리눅스 환경으로 불러와야만 된다. csvkit 에 in2csv
, csvcut
, csvlook
, sql2csv
, csvsql
이 포함되어 있다.
sudo pip install csvkit
명령어로 설치한다.
- 로컬 파일:
cp
복사, 원격파일 복사:scp
복사 - 압축파일:
tar
,unzip
,unrar
명령어로 압축된 파일을 푼다.- 압축파일 확장자:
.tar.gz
,.zip
,.rar
- 압축파일 푸는 종결자
unpack
- 압축파일 확장자:
- 스프레드쉬트: in2csv는 표형식 엑셀 데이터를 받아
csv
파일로 변환.$ in2csv ne_1033_data.xlsx | csvcut -c county,item_name,quantity | csvlook | head
- 데이터베이스: sql2csv
sql2csv --db 'sqlite:///iris.db' --query 'SELECT * FROM iris where petal_length > 6.5' | csvlook
- 인터넷: curl을 활용하여 인터넷 자원을 긁어온다.
curl -s http://www.gutenberg.org/files/13693/13693-t/13693-t.tex -o number-theory.txt
- API: curl 물론, API 토큰, 비밀키 등을 설정하거나 일일 이용한도가 있을 수도 있다. 특히, curlicue를 활용하여 트위터 데이터를 바로 가져와서 활용할 수 있다. 자세한 사항은 Create Your Own Dataset Consuming Twitter API 블로그를 참조한다.
- RANDOM USER GENERATOR,
curl -s http://api.randomuser.me | jq '.'
- RANDOM USER GENERATOR,
2. 데이터 정제
2.1 행 뽑아내기
- 행 위치정보를 기반으로 해서 행 절대번호를 활용하여 추출한다.
head
,sed
,awk
- 패턴을 주고 연관된 행만 추출한다.
grep
명령어에 정규표현식으로 패턴을 담아 매칭되는 것만 뽑아낸다.- 사용례:
grep -i session paper.txt
- 무작위로 행을 추출한다.
shuf
명령어를 사용한다.- 사용례:
shuf -n 10 data.csv
2.2. 값 추출
기본적인 값추출 전략은 grep
명령어로 행을 뽑아내고, cut
명령어로 구분자를 두거나 고정된 열위치에 해당하는 열에서 값을 추출한다. cut
명령어로 열을 쪼개는데 구분자로 ,
를 사용하고 뽑아내는 열로 -f
인자를 두고 3번째 행이후 모두를 지정한다.
$ `grep -i session paper.txt | cut -d ',' -f3-`
$ `grep -i session paper.txt | cut -c 7-`
2.3. 값 바꾸기
값을 바꾸거나 삭제할 때 사용하는 명령어가 tr
로 translate
번역의 약자다.
공백 `을
*`로 바꾼다.
$ echo 'We Love Data Science!' | tr ' ' '*'
We*Love*Data*Science!