- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
데이터분석 & 데이터사이언스 데이터 크롤링과 데이터세트 확보
2017.10.01 23:57
김승욱의 데이터 과학자로의 여정 1회
데이터 크롤링과 데이터세트 확보
김승욱
기상청 빅데이터 연구원을 시작으로 프리랜서로 독립해 활동하던 찰나 지인과 식사하다가 엔비티에서 데이터 분석을 맡게 된 우여곡절이 많은 평범한 데이터 분석가이다. 생각보다 많은 사람들이 R을 필요로 하고 데이터 분석에 어려움을 겪고 있다는 것을 알게 되었다. 주로 데이터그램이라는 스터디에서 R로 고통 받고 있는 사람을 돕고 있으며, 밀려드는 카드값을 감당하기 위하여 [R을 R려줘] 집필과 각종 온오프라인에서 R 강의를 하고 있다.
연재 목적
이번 연재를 통해 다른 책에서는 접하기 힘든 내용인 분석의 전체적인 흐름과 문제 해결 전략을 분석 인프라 장비 얘기를 최대한 제외하여 쉽고 담백하게 풀어나가고자 한다. 특히나 여기서 소개하는 내용은 수백 시간의 야근과 특근으로 얻은 노하우의 일부이기에 이 글을 읽는 것만으로도 많은 시간을 아낄 수 있을 것이다.
알파고와 이세돌의 바둑 대결이 끝난 지 2년이 채 지나지 않은 지금, 인공지능과 관련하여 다양한 분야에서 뉴스기사와 연구 결과들이 쏟아져 나오고 있습니다.
인공지능 스피커가 위험 상황을 인지해 신고를 했다는 사건도 있고, 인공지능 챗봇이 갑자기 알 수 없는 언어로 얘기했다는 사건도 있고, 배우지 않은 언어도 학습할 수 있게 하는 제로샷 번역이라는 것도 있습니다. 물론 이 밖에도 사진 한 장으로 3D 구조체를 만드는 기술이나 특정 사람의 60초 길이의 목소리 녹음파일로 그 사람의 목소리를 모방하는 기술 이 개발되는 것을 보면 인공지능이 정말 일상에 가까이 다가왔다는 느낌입니다.
위와 같은 인공지능 관련 기사나 연구 결과를 들여다보면 RNN, CNN, Tensorflow, MXNet, Keras 등 생소한 단어들과 학습 모델을 언급하곤 합니다. 이는 사람으로 따지면 공부 방법과 도구의 차이라고 하면 되겠습니다.
예를 들어 영어단어 20개를 외워야 한다고 합시다. 어떤 사람은 한 단어를 10번씩 쓰는 것을 반복하면서 외우는 반면, 어떤 사람은 20개 단어를 한 번에 써서 20개 단어를 세트로 외웁니다. 일부에서는 단어를 쓰지 않고 눈으로 보고 읽는 것만 반복하며 암기를 하기도 하죠. 그런데 영어를 잘 하려면 듣기, 말하기 또한 잘해야 하지만 일단 단어를 많이 알아야 풍부한 표현을 할 수 있습니다. 영문법에 통달한다고 할지라도 20개의 단어 암기로 영어를 잘하게 되기는 매우 어렵지 않을까요?
영어에 빗대어 설명을 드렸습니다만, 데이터 분석에서도 공부 방법에 대응하는 모델관련 지식도 중요합니다. 하지만 모델을 학습시켜서 조금 더 신뢰할 수 있는 분석 결과를 도출하기 위해서는 학습할 데이터도 상당히 중요합니다.
일단 분석 기법 및 모델과 관련해서는 각종 서적, 논문, 블로그 등 많은 곳의 정보를 참고해 학습할 수 있습니다. 그런데 정작 실습할 데이터가 없어서 곤란한 경우가 참 많습니다. 사실 데이터가 없는 것이 아니라 돈이 되거나 연구에 필요한 데이터 또는 실제 매출 데이터 등 가치가 있는 데이터를 구하기 힘들다는 것이 더 적절하겠습니다.
여기서 포기하기는 이릅니다. 생각보다 많은 데이터가 온 세상에 있습니다. 여기서 저는 “그냥 검색하면 다 나와요.” 라고 하는 대신 목록을 좀 드리고자 합니다.
1.공공 데이터
예전에는 공공 데이터라고 하면 통계청에서 제공하는 통계자료가 거의 대부분이라고 과언이 아니었지만, 이제는 공공의 다양한 자료가 집대성돼 있는 공공데이터포털(data.go.kr)이 존재합니다.

[그림 1] 공공데이터포털 웹페이지
이 밖에도 각 정부 부처 또는 지자체에서 데이터를 제공하는 웹 주소는 다음과 같습니다.
[표 1] 무료 공공 데이터 공개 서비스와 주소

물론 위 목록이 전부는 아닙니다. 하지만 공공데이터포털 사이트만 돌아다녀도 상당히 많은 종류의 데이터를 볼 수 있습니다.
이렇게 정책과 제도가 만들어지면서 정부기관뿐 아니라 지방자치단체에서도 정보공개가 활발해지고 있어 데이터 분석을 하려는 사람이나 공공 데이터로 사업을 하려고 하는 사람에게는 가뭄의 단비라고나 할까요?
하지만 데이터가 부실한 경우도 많습니다. 예를 들어 OO시 OO구의 응급 의료원 위치가 있는 경우 사진 한 장으로 된 데이터를 추출하기 어려운 경우라든가, 동식물 생태 관련 자료가 행정 구역별로 드문드문 있어 전체적인 분석이 어려운 경우, 도로교통 정보에서 정확한 위경도 좌표가 아닌 OO지점으로부터 15km 지점으로 되어 있는 등 자료의 서식, 양, 품질 등 문제로 데이터 분석을 하기에는 아직도 아쉬운 자료가 많은 것이 현실입니다.
2.민간 데이터
이제 좀 더 재미있는 데이터가 어떤 것이 있는지 살펴보도록 합시다. 여기서 주로 소개드릴 데이터는 거의 해외 데이터 분석 대회에서 제공되는 데이터입니다. 일부 국가에서는 이전부터 데이터 분석 대회가 활발하게 이루어져 다양한 분야의 데이터를 손쉽게 접할 수 있습니다. 1Mb도 채 되지 않는 데이터부터 100Gb가 넘는 큰 데이터까지 크기도 다양합니다.

[표 2] 해외의 데이터 분석 대회 및 연결 주소
대부분의 데이터 분석 대회는 기업 또는 단체에서 특정 문제를 해결하기 위하여 외부에 공개하는 것이므로 난이도에 따라 큰 상금이 걸려있기도 하고, 때에 따라서는 순위권 안에 들어갈 경우 해당 기업의 채용 기회까지 주어집니다. 예를 들어 Kaggle 홈페이지를 보여드리겠습니다.

[그림 2] 주요 데이터 분석대회와 상금
9월 첫 째 주 기준으로 보면 지금 가장 상금이 크게 걸려있는 대회가 150만 달러네요. 한화로 약 16억 8000만 원입니다. 이정도 상금이면 데이터 분석 공부에 대한 동기부여가 팍팍 되지 않을까요?
아쉽게도 국내 대회를 소개드리지 않는 이유는 제 경험상 대회 마감 이후에 데이터 제? 대회의 경우는 마감 이후에도 제공하는 곳이 많습니다. 특히 Kaggle의 경우는 일부 사용자만 접근할 수 있는 비공개 대회를 제외하면 언제든지 해당 데이터를 다운로드할 수 있습니다.
그런데 해당 데이터를 활용함에 앞서 주의해야 할 점이 있습니다. 개인이 다운받아서 공부하는 목적은 큰 문제가 되지 않지만 상업적인 활용의 경우 저작권 등의 법적 문제가 있을 수 있으니 특히 상업적으로 사용하려면 데이터 제공 기업이나 단체의 담당자와 협의하는 것이 좋습니다.
3. Toy 데이터
앞에서 언급한 데이터 이외에도 구석구석 숨어 있는 데이터들이 많습니다. 데이터 분석 연습을 할 때 많이 활용되는 작은 크기의 데이터인 일명 toy 데이터를 소개드리고자 합니다. 이런 데이터는 데이터 분석 관련 서적을 출판하는 출판사 홈페이지에서도 다운받을 수 있고, 상당히 유명한 데이터는 검색으로도 손쉽게 얻을 수 있습니다.
검색 사이트에서 Boston Housing data, Toyota Corolla data, Iris data를 입력해보세요. 엑셀 파일이나 csv 확장자로 되어있는 자료들이 많이 있습니다. 운이 좋다면 이런 자료들을 모아놓은 웹페이지를 발견하실 수도 있겠죠?
예를 들어 통계 분석 언어인 R의 경우는 해당 언어에서 제공하는 기본 데이터세트 100개가 넘습니다.

[그림 3] R에서 제공하는 기본 데이터세트
R말고도 데이터 분석 및 개발 언어인 파이썬이나 각종 데이터 분석 프로그램인 SAS, SPSS 같은 프로그램에도 다양한 데이터가 내장돼 있습니다. 특히나 파이썬의 경우 웹페이지(http://scikit-learn.org/stable/datasets/index.html#toy-datasets)에도 잘 정리돼 있으니 한 번 살펴보시는 것도 좋겠습니다.
4. 웹 데이터
앞에서 많은 것을 소개드렸습니다만 연구자나 마케팅 담당자라면 아직도 부족하다고 느낄지도 모르겠습니다. 통신사 또는 신용카드사 데이터 등은 획득하기에 시간과 비용이 많이 들기 때문이죠. 어떤 연구나 분석 결과를 보면 SNS를 분석했다는 것도 있고, 어떤 사이트의 뉴스기사 또는 게시물의 댓글을 분석했다는 것도 있습니다. 그럼 그 SNS 데이터나 댓글 데이터는 어디서 가져오는 것일까요?
직접 웹페이지를 돌아다니며 손으로 일일이 데이터를 모은다는 것은 거의 불가능에 가깝습니다. 이런 특정 서비스의 데이터를 획득하는 이상적인 경우는 해당 서비스 제공자를 통해서 받고자 하는 데이터의 적절한 대가를 지불하고 받아오는 것입니다.
하지만 많은 사람들이 담당자와의 협의나 비용, 시간 등의 여러 문제로 인하여 대안을 택합니다. 바로 자동 데이터 수집 코드를 작성하여 데이터를 일괄 또는 순차적으로 내려 받는 것이죠. 다음의 R 예제를 보겠습니다.

[그림 4] R을 활용한 네이버 실시간 검색어 크롤링 예제
코드 3줄만으로 네이버의 실시간 검색어 1~20위를 가져왔습니다. 이렇게 웹 페이지에서 내가 원하는 텍스트 또는 각종 미디어 자료를 추출하여 다운받는 것을 크롤링(crawling) 또는 스크래핑(scraping)이라고 합니다. 이런 기능은 R만 되는 것이 아니고 파이썬, 루비(Ruby) 등 다양한 프로그래밍 언어에서 지원합니다. 특히나 크롤링은 파이썬이 꽤 강력하다는 소문이 자자합니다.
이쯤 되면 크롤링 관련 공부 의지가 불타오를지도 모르겠습니다. 하지만 크롤링에 앞서 유의하셔야 할 점이 있습니다. 네이버를 포함하여 각종 웹 서비스와 SNS는 여러분에게 공짜로 제공되는 것이 아닙니다.
보통 이런 서비스는 꽤 많은 부분의 수입을 광고로 충당합니다. 그런데 위 예제처럼 크롤링을 한다면 광고를 일절 보지 않고 원하는 정보만 쏙 빼오므로 서비스 제공자 입장에서는 어떻게 보면 손해입니다. 그리고 이런 몇 단어만 빼오는 것이 아니라 수백 수천 개의 이미지 또는 동영상을 내려 받는 경우는 시스템에 부하를 주게 됩니다. 서비스 제공측은 추가적인 통신 비용과 서비스 인프라 유지비용이 발생하게 됩니다.
사실 위와 같은 내용을 알고 있기에 이 글을 쓰면서 실시간 검색 정보를 가져오는 코드를 실행한 후 양심상 관심 있는 영어 관련 광고와 마케팅 교육 광고를 클릭해 살펴봤습니다. 사실 제가 이렇게까지 한 이유는 해당 사이트의 robot.txt라는 문서의 내용을 확인하였기 때문입니다. 해당 문서는 크롤링 프로그램 또는 봇이 해당 서비스의 정보 수집 범위를 명시합니다. 네이버의 경우를 살펴보면 다음과 같이 나옵니다.

[그림 5] 봇의 접근 허용을 제한하는 네이버 정책(https://www.naver.com/robots.txt)
뭔가 알듯말듯한 내용이 있습니다만, 해석하자면 “사이트의 모든 내용에 대하여 봇의 접근을 허용하지 않겠다”는 것입니다. 이 robot.txt는 있는 곳도 있고 없는 곳도 있습니다. 공부 목적을 위해서 위와 같이 텍스트 몇 개, 그림 몇 장 정도는 괜찮겠지만 크롤링하는 자료의 양이 많을 경우 robot.txt를 확인하시거나 서비스 담당자와 꼭 협의하길 바랍니다.
이번에는 다양한 자료를 제공하는 곳도 알아보았고 웹에서 직접 데이터를 가져오는 방법에 대해서도 알아보았습니다. 그런데 막상 분석을 하려면 데이터를 살펴보고 서식 통일이나 누락된 값을 처리하는 등 분석 이전에 수많은 작업이 선행돼야 합니다. 그 사전작업 이전에는 다양한 형식의 데이터를 온전하게 잘 불러오는 것도 중요합니다. 다음에는 분석을 시작할 수 있도록 데이터 형식별로 온전하게 잘 불러오는 방법에 대하여 알아보도록 하겠습니다. (다음 회에 계속)
경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86058 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78586 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95311 |
| 6 | 데이터 분석의 3단계 프로세스 | 졸리운_곰 | 2017.11.08 | 1656 |
| » |
데이터 크롤링과 데이터세트 확보
| 졸리운_곰 | 2017.10.01 | 1622 |
| 4 |
elasticsearch로 로그 검색 시스템 만들기
| 졸리운_곰 | 2017.08.10 | 1627 |
| 3 | Neo4J - 그래프 데이터베이스 | 졸리운_곰 | 2017.05.14 | 3615 |
| 2 |
[DB] neo4j를 정리하자
| 졸리운_곰 | 2017.05.14 | 1786 |
| 1 |
Neo4j 소개
| 졸리운_곰 | 2017.05.14 | 1493 |

