반응형

Scrapy 기초

Scrapy는 2008년에 처음 0.7버전으로 공개되었다고 합니다. 

그만큼 오랫동안 사용되어 왔고, 안정성을 갖추고 있다고 알려져 있습니다. 웹 스크래핑을 본격적으로 하는 경우에 있어, Scrapy를 사용하는 것이 성능상 매우 큰 이점을 갖게 될 것입니다.

빠르고 안정적인 성능 외에도 스크래피의 장점을 들어보자면, 일단 깨진 HTML을 이해합니다.

Scrapy에서 직접 BeautifulSoup 또는 lxml을 사용할 수 있습니다. 하지만 스크래피는 XPath 인터페이스인 selectors를 제공하고, 이것으로 깨진 HTML 코드와 혼란스러운 인코딩을 효율적으로 수행할 수 있게 해줍니다.

Scrapy는 본래 웹 스크래핑을 위해 디자인 되었지만, API를 사용해서 데이터를 추출하거나 일반적인 웹 크롤러 목적으로도 사용할 수 있습니다.

* 보통 크롤링과 스크래핑을 혼용하지만, 웹 크롤링은 모든 데이터를 가져오는 것으로, 웹 스크래핑은 특정 데이터만 추출하는 것으로 구분할 수 있습니다.

Scrapy 라이브러리를 제대로 배우기 위해서는 많은 시간과 노력이 필요할 것입니다. 이번 정리에서는 기본적으로 크롤링을 하는 방법을 알아보도록 할 것입니다.  

1) 새로운 Scrapy 프로젝트 생성

2) 추출할 아이템 정의

3) 사이트를 크롤링하고 아이템을 추출하기 위해 스파이더 작성

4) 추출된 아이템을 저장하기 위해 아이템 파이프라인 작성

(이미 Scrapy가 설치되어 있다고 가정하겠습니다. 전 제 맥에서 pip install scrapy로 설치했습니다)


1. 새로운 Scrapy 프로젝트 생성

스크래핑을 시작하기 전에, 가장 먼저 해야 할 일은 새로운 Scrapy 프로젝트를 설정하는 것입니다. 

파이썬을 실행하고, 아래 코드를 입력합니다.

>>> scrapy start project tutorial

이것은 다음 콘텐츠를 가진 tutorial 디렉토리를 생성할 것입니다.


tutorial/

    scrapy.cfg # 설정 파일을 배치


    tutorial/ # 프로젝트의 파이썬 모듈, 여기에서 당신 코드를 임포트할 것입니다.

        __init__.py


        items.py # 프로젝트 아이템 파일

        pipelines.py # 프로젝트 파이프라인 파일

        settings.py # 프로젝트 설정 파일

        spiders/ # 나중에 당신의 스파이더들이 들어갈 디렉토리

        __init__.py

        ...


2. 아이템 정의

아이템은 스크랩한 데이터를 싫은 콘테이너라고 할 수 있습니다. 이것은 파이썬 딕셔너리처럼 동작합니다. 아이템은 scrapy.item 클래스를 생성함으로써 선언됩니다. 그리고 ORM과 매우 유사하게 scrapy.Field 오브젝트로 속성이 정의됩니다. 

예를 들자면, 우리가 어떤 사이트의 타이틀, url, 사이트 설명을 캡처하고 싶다면, 우리는 이 세가지 데이터를 위해 필드를 각각 정의해야 합니다. 

앞에서 생성된 items.py 파일을 다음과 같이 에디트합니다.

import scrape


class DmozItem(scrape.Item):

    title = scrape.Field()

    link = scrape.Field()

    desc = scrapy.Field()


3. 스파이더 작성

스파이더는 작성자가 직접 정의하는 클래스입니다. 

Scrapy는 도메인 또는 그룹 도메인에서 정보를 스크랩하기 위해 사용합니다. 

제일 먼저 다운로드할 URLs의 첫번째 리스트를 정의합니다. 

그리고 아이템을 추출하기 위해 어떻게 페이지 콘텐츠를 읽어들일지 정의합니다.

그럼 스파이더를 생성해 보도록 하겠습니다.

import scrapy


class Dmozspider(scrapy.Spider):

    name = “dmoz”

    allowed_domains = [“dmoz.org”]

    start_urls = [

http://www.dmoz.org/Computers/Programming/Languages/Python/Books/“,

http://www.domz.org/Computers/Programming/Languages/Python/Resources/“

    ]

    

    def parse(self, response):

        filename = response.url.split(“/“)[-2] + ‘.html’

        with open(filename, ‘wb’) as f:

            f.write(response.body)

위의 예를 보면, scrapy.Spider를 서브 클래스로 받았습니다. 그리고 몇가지 속성을 정의했다는 것을 알 수 있습니다.

- name : 스파이더를 알아보게 하는 용도로 씁니다. 그래서 고유한 이름을 써야 합니다. 즉, 다른 스파이더와 동일한 이름을 설정할 수 없습니다.

- start_urls : 스파이더가 크롤링을 시작하는 URLs입니다. 다운로드한 첫번째 페이지는 여기부터 시작합니다. 하위 URLs는 여기 시작 URLs에 포함된 데이터에서 생성될 것입니다.

- parse() : 각 시작 URL의 다운로드한 Response 객체와 함께 불러오는 스파이더의 메서드입니다. 

그럼, 위에 작성한 스파이더를 동작시키기 위해, 프로젝트 최상위 디렉토리에서 다음 명령어를 실행합니다. 

>>> scrapy crawl dmoz

위 명령어는 우리가 추가한 dmoz 이름을 가진 스파이더를 실행합니다. 이것은 'dmoz.org' 도메인에 몇가지 request를 보낼 것입니다. 아래와 유사한 output을 받게 될 것입니다.

2014-01-23 18:13:07-0400 [scrapy] INFO: Scrapy started (bot: tutorial)

2014-01-23 18:13:07-0400 [scrapy] INFO: Optional features available: ...

2014-01-23 18:13:07-0400 [scrapy] INFO: Overridden settings: {}

2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled extensions: ...

2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled downloader middlewares: ...

2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled spider middlewares: ...

2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled item pipelines: ...

2014-01-23 18:13:07-0400 [scrapy] INFO: Spider opened

2014-01-23 18:13:08-0400 [scrapy] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/2014-01-23 18:13:09-0400 [scrapy] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/2014-01-23 18:13:09-0400 [scrapy] INFO: Closing spider (finished)

 

3-1. Selectors 소개 

웹 페이지에서 데이터를 추출하기 위해서는 몇가지 방법이 있습니다. 

Scrapy에서는 Scrapy Selectors라고 불리는 XPath 또는 CSS에 기반한 메커니즘을 사용합니다. 

XPath 표현과 그 의미를 다음 사례를 통해 기본적으로 이해할 수 있습니다.

  • /html/head/title: HTML 문서의 <head> 요소 안의 <title>요소를 선택하세요.
  • /html/head/title/text(): 앞에서 언급한 <title> 내부의 텍스트를 선택하세요.
  • //td: 모든 <td> 요소를 선택하세요.
  • //div[@class=“mine”]: class=“mine”속성을 포함한 모든 div요소를 선택하세요.

위 사례는 XPath의 간단한 예제일 뿐입니다. 실제로 더 파워풀하게 사용이 가능합니다. 

CSS와 XPath로 작업하기 위해, Scrapy는 Selector 클래스를 제공하고 response로부터 무엇을 선택할 것이지에 대한 편리한 단축키를 제공합니다.

- Selectors는 4가지 기본 메서드를 가지고 있습니다.

  • xpath() :  인수로 주어진 xpath에서 선택된 각 노드를 대표하는 selectors 리스트를 돌려줍니다
  • css() : 인수로 주어진 CSS에서 선택된 각 노드를 대표하는 selectors 리스트를 돌려줍니다
  • extract() : 선택된 데이터와 함께 유니코드 string을 돌려줍니다
  • re() : 인수로 주어진 정규 표현식을 적용해서 추출한 유니코드 string을 돌려줍니다

4. 스크랩한 데이터 저장 

스크랩한 데이터를 저장하는 가장 간단한 방법은 크롤링할 때 저장형태를 포함한 다음 명령어를 쓰는 것입니다. 

>>> scrapy crawl dmoz -o dmoz.json

위 명령어는 모든 스크랩한 데이터들을 포함한 json 형태의 dmoz.json파일을 생성합니다.

Scrapy는 기존 파일을 덮어쓰지 않고, 파일에 데이터를 추가합니다. 


위 예제 및 설명은 www.scrapy.org의 공식 문서를 참고해서 작성했습니다.



반응형

'파이썬으로 할 수 있는 일 > 크롤링' 카테고리의 다른 글

최근의 웹 스크래핑에 대해  (0) 2023.10.20
반응형

BeautifulSoup으로 웹 크롤링


웹 페이지 html은 태그, 요소, 속성 등의 구성요소를 사용해 구조적으로 웹페이지를 표시합니다. 

이런 구조화된 문서를 효율적으로 파싱해서 원하는 정보를 찾을 수 있는데, 파이썬 기본 모듈을 사용해도 되지만, Beautifulsoup을 사용하면 더욱 손쉽게 파싱할 수 있습니다.   


1. BeautifulSoup4 설치

파이썬에 기본 설치되는 라이브러리가 아니기 때문에, BeautifulSoup은 별도로 설치해야 합니다.

명령어는 다음과 같습니다.

(리눅스) sudo apt-get install python-bs4

(맥) pip install beautifulsoup4 또는 easy_install beautifulsoup4


2. virtualenv 환경에 대해

라이브러리를 프로젝트 단위로 구분해서 관리하면, 나중에 환경폴더 전체를 다른 컴퓨터로 옮기기가 매우 쉽습니다. 따라서, virtualenv 가상 환경을 사용하는 것이 매우 편리하다는 점을 언급하고 싶습니다. 

pyenv와 virtualenv는 구글링해 보면 설정하는 법이 나와 있으니 참고하면 될 것 입니다.


3. 기본 사용 예제

>>> from urllib.request import urlopen

>>> from bs4 import BeautifulSoup

>>> html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")

>>> soup = BeautifulSoup(html, 'html.parser')

>>> nameList = soup.find_all('span', {'class':'green'})

>>> for name in nameList:

             print(name.get_text())

jupyter notebook에서 실행해본 결과!


위 사용 예제(참조:파이썬으로 웹 크롤러 만들기)에서, 몇가지 주석을 달아봅니다. 

먼저, {'class':'green'}은 class_ = 'green'으로 변경해서 사용할 수 있습니다. class가 예약어이기 때문에, class_로 표시해야 제대로 처리됩니다.

get_text()는 현재 문서에서 모든 태그를 제거하고 텍스트만 들어 있는 문자열을 반환합니다. 

예를 들어, 하이퍼링크, 문단, 기타 태그가 여럿 들어 있는 텍스트 블록에 사용하면 태그 없는 텍스트만 남기 때문에, 가장 마지막에 원하는 텍스트를 얻을 때 사용하는 것이 좋습니다.

BeautifulSoup를 사용해서 웹페이지를 크롤링하다 보니, re도 많이 사용해야 하더군요. 그리고, 웹페이지 구조를 파악하는 것도 익숙해져야 하구요. 


가끔 웹페이지 크롤링한 예제를 올려보도록 하겠습니다. 

참고) https://www.crummy.com/software/BeautifulSoup/bs4/doc/




반응형
반응형

파이썬에서 CSV파일 읽고 쓰기

파이썬에서 파일로 된 데이터를 처리하는 일은 매우 빈번하게 일어난다. 그 중에서 CSV형태가 가장 일반적일 것이다.  

파이썬 공식 문서에는 CSV(Comma Separated Values)라 불리는 포멧은 스프레드시트와 데이터베이스에서 가장 많이 임포트(import)하고 엑스포트(export)하는 포멧이라고 정의되어 있다.

공식 문서에 나와 있는 CSV에 대해 간략히 정리해 보면 아래와 같다.

물론 앞으로 계속 발전하면서 업데이트 되겠지만 말이다.

'CSV 표준'이라는 것은 사실 없다고 할 수 있다. 즉, 이 포멧은 서로 다른 어플리케이션에서 읽고 쓰는 방식을 통해 기능적으로 미묘한 차이를 갖는다고 할 수 있다. 

이러한 차이점들은 다양한 소스들로부터 CSV 파일을 처리하는 것을 어렵게?(귀찮게) 만든다. 

하지만, 경계기호(delimiters)와 인용 부호가 다르더라도, 전체 포멧은 단일 모듈로 쓰거나 읽을 때 충분히 유사하게 동작하기 때문에 기본적으로 읽고 쓰는 것은 매우 유사하다고 생각한다. 

csv 모듈은 CSV 포멧에서 표 데이터를 읽고 쓰기 위한 클래스를 실행한다. 쉽게 말하자면, 엑셀에서 사용하는 스프레드시트 형태의 포멧으로 처리된다고 생각하면 된다.

csv 모듈의 reader와 writer 객체는 순차적으로 읽기와 쓰기를 행한다. 

또한, DictReader와 DictWriter 클래스를 사용해 딕셔너리 폼에서 데이터를 읽고 쓸 수 있다. 

그럼, reader와 writer, DictReader, DictWriter의 기본적인 사용법을 정리해 보자. (아래 예시는 파이썬 3.5이상을 기준으로 함)


1. csv.reader

>>> import csv

>>> with open('file.csv', 'r') as f:

               reader_csv = csv.reader(f, delimiter=',')

               for row in reader_csv:

                    print (row)


2. csv.writer

>>> import csv

>>> with open('file.csv', 'w') as f:

               writer = csv.writer(f, delimiter=',')

               writer.writerow(['love']*3 + ['banana'])

               writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])


3. csv.DictReader

>>> import csv

>>> with open('names.csv') as f:

               reader = csv.DictReader(f)

               for row in reader:

                    print(row['first_name'], row['last_name'])


4. csv.DictWriter

>>> import csv

>>> with open('names.csv, 'w') as f:

               fieldnames =['first_name', 'last_name']

               writer = csv.DictWriter(f, fieldnames=fieldnames)

               writer.writeheader()

               writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})

               writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})

               writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})


참고) https://docs.python.org/3/library/csv.html


udacity에서 분석해 보았던 titanic-data.csv 파일, 읽고 쓰는게 문제가 아니라 각 필드별로 분석하는게 노가다... 





반응형
반응형

머신러닝(Machine Learning) 기본 개념(Basci Concept)

머신러닝은 주어진 데이터를 훈련시켜(training), 훈련된 지식을 기반으로 새로운 입력(test input)에 대해 적절한 답(test output)을 찾고자 하는 일련의 과정이라고 말할 수 있습니다. 

이때 훈련시키는 데이터가 질문(training input)과 정답(training output)이 모두 주어진 경우가 있고, 질문만 주어진 경우가 있습니다. 전자의 경우를 라벨링(Labeling)이 되어 있다고 말합니다.


1. 지도학습(Supervised Learning)

훈련 데이터에 라벨링이 되어 있는 경우. 

즉, 각 질문(input)에 대해 무엇이 정답(output)인지 훈련데이터가 알고 있는 경우입니다. 

예를 들면 (2, 4) -> (8), (4, 3) -> (12), 이런 식으로 훈련데이터가 주어져 있다는 것입니다.

ex) regression - (x,y)글의 데이터를 가지고 모함수 y=f(x)의 관계를 예측하는 방법

Classification - 각 그룹별 특징을 학습하여 새로운 데이터가 어느 그룹에 속해야 하는지 판단하는 방법


2. 비지도학습(Unsupervised Learning)

데이터만 잔뜩 주어집니다. 

즉 문제는 있는데 답은 없습니다. 

우리가 할 수 있는 건, 문제 유형 정도를 구분할 수 있겠습니다. 

이를 clustering이라고 합니다.  

ex) clustering - 어떠한 데이터끼리 군집으로 묶을 수 있는지 판단하는 방법

Dimension reduction - 독립적인 특징(축)들을 추출해 이를 중심으로 데이터를 압축하는 저차원으로 압축하는 방법


★ 요즘 비지도학습에 PCA(Principle Component Analysis, 주성분 분석) 알고리즘을 적용하고 딥러닝(Deep Learning)+오토엔코더(Autoencoder)로 확대되면서 인공지능 분야를 가장 핫한 분야가 되게 하였습니다.  이 부분은 나중에 정리해 보도록 하겠습니다.


3. 강화학습(Reinforcement Learning)

미리 정답이 주어져 있진 않고, 시행마다 잘한 정도를 보상(reward)하여 줍니다(이는 동물들이 학습하는 방법과 유사).

ex) 엘레베이터 스케쥴링, 컴퓨터 체스, 복잡한 로봇의 제어 등등


4. 그 외 : 일부만 라벨링이 되어 있는 경우도 있고, 정보가 점진적으로(incremental) 주어지는 경우도 있고, 데이터가 너무 많은 경우, 적은 경우 등 다양한 기계학습 문제가 존재합니다.



아래 그림은 scikit-learn(파이썬에서 많이 사용하고 있는 머신러닝 라이브러리) 관련 사이트에서 머신러닝 알고리즘을 한 눈에 볼 수 있도록 맵으로 제시하고 있습니다. 


머신 러닝에 대한 전체 윤곽을 그려볼 수 있어서 앞으로 머신러닝을 배워나가는 길잡이로 알고 있으면 좋습니다. 


원본 맵 보기(http://scikit-learn.org/stable/tutorial/machine_learning_map/)


반응형
반응형

Jupyter Notebook이란

Jupyter Notebook은 오픈 소스 웹 애플리케이션으로 라이브 코드, 등식, 시각화와 설명을 위한 텍스트 등을 포함한 문서를 만들고 공유하도록 할 수 있습니다. 

주로 데이터 클리닝과 변형, 수치 시뮬레이션, 통계 모델링, 머신 러닝 등에 사용할 수 있습니다.

Jupyter Notebook은 Python, R, Julia, Scala 등 데이터 과학 분야에서 인기있는 40종의 다양한 프로그래밍 언어를 지원합니다. 또한, 이메일, 드롭박스, 깃허브 등으로 공유할 수 있습니다. 가장 큰 장점은 실시간으로 인터렉티브하게 데이터를 조작하고 시각화할 수 있도록 해준다는 점을 것입니다.

신규 사용자는, Anaconda를 설치하는 것을 권장합니다. Anaconda는 과학적 컴퓨팅과 데이터 사이언스를 위해 필요한 라이브러리들을 대부분 포함하고 있기 때문입니다.

추가적으로 말씀드리자면, python 라이브러리들에 대한 관리를 pyenv와 virtualenv(python 가상 환경)을 사용해서 관리하는 것이 좋습니다.  

 

1. Jupyter Notebook 시작

터미널에서 

>>> jupiter notebook

을 입력하세요.

그러면, 기본 웹 브라우저에서 다음과 같은 Notebook Dashboard가 구동되는 것을 볼 수 있을 것입니다.

위 화면에서 확장자가 .ipynb인 파일을 클릭해 이미 작성된 Notebook을 실행시킬 수 있고, 오른쪽 상단의 New버튼을 눌러 팝업 메뉴에서 python[defalut] 또는 python[conda root]를 선택해서 새로운 Notebook을 열 수도 있습니다.(참고로, 새로운 Notebook을 선택하는 Python[conda root, default, 2, 3]는 anaconda로 실행했을 때와 python에 별도로 jupyter notebook 관련 라이브러리를 설치하고 실행했을 때 조금 다르게 보일 수 있습니다)

반응형

2.  Jupyter Notebook 사용해 보기

새로운 Notebook을 실행하고, 각 셀에 파이썬 코드 및 등식, 설명을 입력합니다.설명 및 등식을 입력하려면, 아래 그림과 같이 상단 가운데 선택 메뉴에서 마크다운(Markdown)을 선택하고 입력하면 됩니다. 다 입력한 후에는 Shift+Enter(또는 Ctrl+Enter)로 실행 명령을 내립니다.

 

3. 단축키

<Command Mode>

- Enter : 에디트 모드(Edit Mode)로 진입- Y : 코드(Code) 셀로 전환- M : 마크다운(Markdown) 셀로 전환- R : Raw NB 셀로 전환- 1~6 : 마크다운 H1~H6- a : 위에 셀 삽입- b : 아래 셀 삽입

<Edit Mode>

- Tab : 코드 자동완성, 들여쓰기- Ctrl+] : 들여쓰기(intent)- Ctrl+[ : 내어쓰기(detent)- Ctrl+a : 전체 선택- Ctrl+z : 실행 취소(undo)- Esc : 커맨드 모드(Command mode)로 진입- Shift+Enter : 셀 실행하고 다음 셀 선택- Ctrl+Enter : 셀 실행- Alt+Enter : 셀 실행하고, 아래 셀 삽입


Jupyter Notebook도 제대로 사용하려면 생각보다 많은 것을 배워나가야 할 것 같네요. 그래도 위에 열거한 

기본적인 사항만 알면 실행하는데 크게 문제는 안되리라 생각합니다. 

 

반응형
반응형

4차 산업혁명 시대의 데이터 사이언티스트(Data Scientist)를 위한 파이썬 라이브러리(Python Library)

요즘 파이썬을 배워서 진출할 수 있는 직업 중에 데이터 사이언티스트가 핫한 것 같다. 4차 산업혁명과 함께 많이들 선호하고 있는 상태가 되었다.

하지만, 언론, 소셜 등에서 너무 많은 관심을 보이는 것이 거품이 될까 우려가 좀 된다. 2000년 초에 인터넷 기업 붐이 엄청나게 일어나고, 갑자기 거품이 꺼졌을 때 처럼 될 것 같아 보이기 때문이다. 


요즘 가장 열광하는 단어는 단연 AI일 것이라고 생각한다. 

그런데, 머신러닝(machine learning), 그 중에서 딥 러닝(deep learning)에 집중하는 것은 인터넷 자체가 혁신을 일으킬 것처럼 말했던 상황을 답습하는 것이 아닐까 하는 생각이 든다.


가장 중요한 것은 고객에게 제공하는 서비스, 제품일 것이다. 그래서 고객의 요구사항(애로사항)을 파악하는 것이 무엇보다 중요할 것이다. 

이런 관점을 갖고, 데이터와 AI의 결합을 바탕으로 고객들이 원하는 서비스(제품)을 만드는 기업 또는 사람이 되어야 한다고 믿는다.


'소프트웨어(데이터)가 모든 세계를 지배하는 세상'이라는 말은 디지털화된 데이터와 그것을 다루는 기술인 AI(그 중에서 머신 러닝)가 보편화된 세상을 말한다고 본다. 인터넷처럼 우리 생활에 스며들 것이기 때문에,  AI를 다루는 것과 데이터를 다루는 것은 기본이 될 것이다. 

앞으로 이것을 통해 어떤 가치를 고객에게 제공하느냐가 중요한 생존의 문제가 될 것이라는 것이다. 

사람들이 필요로 하는 가치(서비스, 제품)을 제공하는 수준까지 가기 위한 여정을 막 시작했다고 생각한다.

 

그럼, 가장 기본이 되는 라이브러리부터 알아보도록 하자.


데이터 사이언티스트들이 파이썬에서 사용하는 라이브러리들은 Numpy, Scipy, Pandas, Scikit-Learn 등이 있다. 


요즘에는 구글의 딥 러닝 라이브러리인 tensorflow의 인기가 높다.

tensorflow에 대해서는 따로 알아보도록 할 것이다.


1. Numpy, Scipy

Numpy와 Scipy는 숫자 및 과학 계산을 수행하기 위한 라이브러리라고 할 수 있다

Numpy는 기본 계산 기능을 가진 다차원 배열과 유용한 선형대수학 함수를 지원한다.

Scipy는 숫자 알고리즘 집합과 신호 처리, 최적화, 통계 등을 포함한 도메인에 특화된 기능을 지원한다.


(참고로, Matplotlib는 데이터 시각화를 위한 많은 툴을 가지고 있다)


2. Pandas

Pandas는 고성능의 데이터 구조와 데이터 분석 툴을 제공한다. 

Pandas의 주요 특징은 통합된 인덱싱과 함께 데이터 조작이 가능한 빠르고 효율적인 DataFrame 객체이다. 

DataFrame 구조는 매우 유연한 방법들로 작업이 가능한 스프레드시트처럼 볼 수 있다.

 재구조화하고, 행과 열을 추가하거나 제거하는 것을 통해 원하는 방식으로 어떤 데이타셋으로든 쉽게 변경할 수 있다. 

또한 데이터셋 간에 계산을 하고, 병합하고, 합류하는 고성능의 기능을 제공한다. 


또한, Pandas는 다른 형태의 포멧(CSV, EXCEL, SQL 데이터베이스, HDF5)으로부터 데이터를 가져오거나 내보낼 수 있는 툴을 가지고 있다. 

많은 경우, 이들 포멧들에 있는 데이터는 완벽하거나 전체적으로 구조화되어 있지 않을 것이다. 그런 경우, Pandas는 빠진 데이터를 핸들링하고 지능적으로 데이터를 정렬할 수 있도록 해준다. 

게다가, Pandas는 편리한 Matplotlib 인터페이스를 제공한다.


3. Scikit-learn

Scikit-learn은 Numpy, Scipy와 Matplotlib로 만들어진 머신 러닝 라이브러리이다.

Scikit-learn은 계층화, 회귀, 클러스터링, 차원 감소, 모델 선택과 전처리 같은 데이터 분석에 필요한 단순하고 효과적인 툴을 제공한다.



PS) 라이브러리별로 첨부한 정리 시트를 제공하는 원본 출처 및 원본 시트를 받고자 하시면 아래 링크를 보시기 바랍니다.


https://www.continuum.io/blog/developer-blog/learning-python-data-science-cheat-sheets



다음 편에는 Jupyter Notebook 환경에 대해 알아보도록 할 예정이다.


그럼 이만...



반응형
반응형

빅 데이터의 시대를 살아가기 위한 플로우 리딩

1만권 독서법

을 보면, 기존의 독서와 조금은 다른 관점이 존재하는 것을 알 수 있습니다. 

빠르게 읽기와 다독이 그 핵심입니다.

제가 생각하는 이 책의 요지는 최고의 한 줄을 찾는 다독법이 정보과잉의 시대에 매우 적합하다는 것입니다. 

처음에는 그래도 정독을 해서 깊이 있는 체계를 머릿속에 넣어야 하는 것이 아닌가 하는 생각이 들었습니다. 

하지만, 다 읽고 돌아보니 우리가 살고 있는 세상에는 엄청난 데이터가 산재해 있고, 지금도 계속해서 기하급수적으로 증가하고 있는데, 이 정보를 효율적으로 흡수할 수 있도록 독서 방식도 바뀌어야 하지 않을까 하는 생각이 들었습니다. 

그런 의미에서 이 책은 우리에게 의미가 있다고 생각합니다.


1. 다독 리듬

리듬감을 갖는다는 것은, 다독을 줄기차게 할 수 있는 동력을 얻자는 의미입니다. 그렇게 하기 위한 구체적인 3가지 방법을 제시하고 있습니다. 

첫째, 독서 시간을 정해두고,  매일 같은 시간에 읽습니다. 

둘째, 빨리 읽을 만한 책을 중심으로 고릅니다. 

셋째, 어제와 다른 책을 읽는다. 가능하면 하루 안에 한 권을 다 읽을 수 있도록 합니다.


2. 읽어도 금새 잊어버리기 때문에

책을 읽으면서 짧은 인용문을 써두는 것은 흡사 샘플링 작업에 가깝다고 할 수 있습니다. 

이렇게 하면 책을 읽고 나서 바로 망각하는 두뇌의 한계를 극복할 수 있다고 말합니다. 

또한, 직접 손으로 인용문구를 기록하기를 바랍니다. 손으로 쓰면서 내용을 지긋이 음미할 수 있고, 필요한 부분만 인용하게 된다는 것입니다. 

또한 독서 노트에 한 줄 리뷰를 작성하면, 각 책들에 대한 성취 상황을 한 눈에 볼 수 있게 된다는 장점도 들고 있습니다. 

빅데이터의 시대에는 우리가 전부 담기에는 너무 많은 정보가 생산됩니다. 

그렇기 때문에, 정보 자체의 중요성을 간과할 수 있다고 생각합니다. 

정말 중요한 정보를 빠르게 취사선택, 정리하고 구조화하는 것이 우리에게 필요한 역량이 아닐까요? 


3. 어떻게 빨리 읽을까

무엇보다도 '차례' 만큼은 여유를 갖고 정독하도록 권하고 있습니다. 

또한, 구체적으로 빠르게 읽기 위한 4단계를 다음과 같이 말하고 있습니다. 

1단계 : 머리말과 차례를 잘 읽습니다. 차례의 구조를 파악한 후 넘겨 읽을 단위를 결정합니다.

2단계 : 처음과 마지막 다섯 줄만 읽습니다. 문맥을 파악하고 있으면, 중간에 무엇이 있을지 추정할 수 있습니다.

3단계 : 얻고 싶은 바가 무엇인지 목적을 분명히 한 후, 그 키워드를 정해 읽습니다.

4단계 : 속도의 완급을 조절하는 가장 편안한 독서 리듬을 가지고 읽습니다.



4. 읽을 책 찾기

"오늘 읽을 책, 내일 읽을 책을 미리 정해두면 어떻게든 책 읽을 짬을 만들어 보려는 의식이 작용하게 됩니다." 책 5장에 나온 핵심 문장입니다.

플로우 리딩에 의한 300권 독서 계획은 빨리 읽을 수 있는 책(사실, 주장 콘텐츠로 구성)을 하루 한 권씩 읽는 것을 전제로 해야 합니다. 

구체적인 실행은 토요일과 같은 휴일에 하루 한 권 일주일 독서계획을 세우는 것입니다.


이 책은, 독서에 대한 발상을 전환하여 좀 더 편하게 책 읽기를 제안한 점에서 다른 책과 차별점을 갖고 있다고 생각합니다. 

우리에게는 평생을 가도 다 읽지 못할 많은 책들이 주변에 있습니다. 이 중에서 우리가 살아가는데 도움이 될 수 있는 정보를 효율적으로 획득하시기 바랍니다.

오늘 하루도 행복하시길! 



반응형

'도서 리뷰' 카테고리의 다른 글

드로우앤드류의 책 '럭키 드로우'를 읽으며  (0) 2022.02.07
아이디어 불패의 법칙  (0) 2020.05.14
'겟 스마트'를 읽고  (0) 2018.02.02
일독일행을 읽고서  (0) 2016.04.08
하버드 집중력 혁명(Book)  (0) 2015.07.02
반응형

어제부터 지하철에서 일독일행이라는 책을 읽고 있다. 

독서에 대해서는 어느 정도 자신감이 붙어 있었는데, 이 책을 보다 보니, 내가 혹시 책만 읽는 바보가 아닌가 하는 생각이 들었다. 읽기만 하고 그 다음 내 것으로 만드는 일을 하지 않는 그런 바보 말이다. 저자의 뚝심과 실행력, 그리고 이룩한 일을 보면서 내 자신을 돌아보게 된다. 난 너무 겁이 많고, 안일하게 살고 있다는 것이다. 

내 나이가 45살이다. 이미 새로운 일을 하기에는 늦었다는 주변 반응이 내 발목을 잡는다. 무엇보다도 내 스스로가 발목을 잡는다. 과연 내가 새로운 일을 할 수 있을까? 안정적인 직장을 뿌리치고 나갈 수 있을까? 아니면 이 자리에서 일을 해가면서 새로운 일을 찾아보는 것은 어떨까? 이렇게 어중간한 상태로 15년 이상을 살아온 것은 아닐까 자문해 본다. 내가 가고 있는 길이 내게 맞지 않음을 잘 알면서 편하다는 이유로 서서히 변화해 가고 있다는 위로로 시간을 계속 보낸 것은 아닌가 싶다.

이 책의 가장 핵심은 '성경을 천 번 만 번 읽으면 뭐하나? 그렇게 행동하지 않는다면 차라리 읽지 않는 편이 낫다'라고 한 배우고 익혀서 실행하라는 것이라고 생각한다. 책만 읽는 바보가 되지 말고, 본인에게 필요한 문장을 뽑아, 가장 잘 보이는 곳에 적어두라고 말한다. 사람은 망각의 동물이기 때문에 매일 보고 또 보라고 한다. 그리고, 자신의 실천 지침을 만들어서 매일 지침을 잘 수행하고 있는지 체크해서 습관화하는 것이 중요하다고 말한다.

그래서, 오랜만에 블로그에 글을 남긴다. 이 책의 저자가 강조한 실천을 하는 것이다. 나도 매일 블로그에 글을 하나라도 쓰자고 다짐했건만, 그걸 실행하는 것이 생각처럼 되지 않았다. 그래서, 꽤 오랫동안 블로그를 방치해 왔었다.

오늘 다시 쓰는 것을 시작한다. 파이썬을 공부하면서 슬럼프에 빠지고 안개 속을 헤매는 것 같은 느낌을 지우기 위해서라도 공부한 것을 정리하고 하루 하루 실천한 것을 내 것으로 만들기 위해 블로깅을 하도록 하자.

< 뇌 과학자 김대식 교수>가 한 말도 책에 나온다.

"책을 읽을 때는 가능하면 펜을 들고 여백에 메모를 하는 게 좋다. 책에 담긴 것은 남의 생각이고, 읽기만 하면 그 생각에 세뇌당하는 꼴이지만, 내가 생각하고 뭔가 주석을 달면, 즉 글을 쓰면 그 지식은 내 것이 된다. 내가 다시 한 번 소화하고 처리하는 과정에서 가장 좋은 방법은 글을 쓰는 것이라고 알려져 있다."

책을 읽어서 내 것으로 만드는 것을 치열하게 다시 하도록 하자. 

무너진 자신감을 회복하기 위해서 내 자신을 다시 한번 담금질 하는 것이다. 어제 서울대 데이타 과학 센터 홈페이지에 들어 갔었다. 그곳에서 공부하는 학생들이 무척 부럽고, 한 편으로 내 자신이 무척 초라해 보였다. 무엇 하나 제대로 내 것으로 만든 것이 없는 것 같아, 자괴감마저 들었었다. 스스로에게 자심감을 불러 일으켜 주기 위해 내가 하고 있는 일에 집중하는 것이 어떤 일보다 더 필요하기에, 지금 글을 쓰고, 실천하도록 하자.

하나 더, 너무 삶의 여유없이 지내는 것이 아닌가 싶다. 시간에 쫓기듯이 살아가고 있다. 집중력도 떨어지고, 이 나이가 되도록 성취한 것이 보잘 것 없이 느껴진다. 내 자신에 대한 느낌을 훌훌 털어버리고, 실행하는 것에 더 힘을 쏟아 붓자.

늦었다고 생각할 때가 바로 적기라고 생각한다. 지금 이 순간을 살아가는 것이 내게 가장 중요하다. 힘들 때마다 잊지 않기를...

반응형

+ Recent posts