0. Intro to Google Colab

 

Colab은 구글이 왜 구글인지를 알려주는 멋진 녀석입니다.

머신러닝을 처음 입문할 때 첫 난관은 다름이 아니라 개발환경을 구축하는 것입니다.

 

어마어마한 하드웨어의 가격은 물론이며, Cuda와 같이 생소한 녀석들과 다양한 파이썬 라이브러리들을 만나야 하죠.

 

Colab은 이러한 문제를 해결해주었습니다. "주피터 노트북"을 사용해보신 분들이라면 Colab에 접속하는 순간 친근한 느낌을 받을 수 있으실 겁니다. 왜냐하면 주피터 개발진들이 참여하여 만든거니까요~ ㅎㅎ

 

1. Colab 시작하기

Colab은 주피터 서버와 유사하지만 몇가지 알고가야할 부분이 있습니다.

 

  • 최대 12시간까지만 작업이 가능합니다.
    • Learning 상태로 방치해두면 중간에 커널이 죽은것을 보실수도 있습니다. 따라서 중간중간 weight와 loss를 저장하는 코드를 넣어야합니다.
  • 하드웨어 가속기(GPU/TPU)를 제공합니다.
    • [수정 -> 노트 설정] 또는 [런타임 -> 런타임 유형 변경] 에서 설정 
    • 암호화 화폐 채굴등을 수행할 경우 서비스 차단이 이루어 질 수 있습니다.
    • TPU는 머신러닝을 위해 Google에서 자체적으로 제작한 하드웨어로 GPU보다 월등한 성능을 보인다고합니다.
    • 실제 GPU와 TPU 차이를 테스트해본 적은 없으며, Keras 라이브러리는 TPU를 자동으로 잡지 못하기 때문에 별도 코드를 추가해줘야합니다.
    • GPU의 경우 약 14.6GB의 크기를 제공합니다.
  • 구글 드라이브와 연동이 가능합니다.
    • 파일을 직접 업로드하여 사용하는 것보다 구글 드라이브에 파일을 업로드하고 연동하는 것이 빠릅니다.
    • 코랩에 작성된 코드들은 모두 구글 드라이브에 저장됩니다.

 

2. Colab 알아보기

  • 단축키 설정하기 : [도구 -> 단축키]에서 원하는 단축키로 설정이 가능합니다.
  • 테마 : [도구 -> 환경설정]에서 "Dark"모드로 변경이 가능합니다.
  • Github 백업하기 : [파일 -> Github에 사본 저장]을 통해 Github와 연동하여 사본을 저장할 수 있습니다.
  • 입력효과 넣기 : [도구 -> 환경설정 -> 기타]에서 파워레벨을 설정에 따라 입력시 불꽃이 튀기는 효과를 줄 수 있습니다.
  • 리눅스 OS 버전 : Ubuntu 18.04를 사용중입니다.(현재 19년 7월 기준)

 

  • 하드웨어 사양 (CPU, RAM, DISK)

 

  • GPU 사양

'머신러닝 > 데이터 전처리' 카테고리의 다른 글

[Colaboratory] 구글 Colab 사용하기  (1) 2019.07.17
[데이터전처리] 1. Pandas in python  (0) 2019.05.30
  1. update 2019.10.08 22:32

    colab에서 selenium을 사용시
    chromedriver경로가 문제가 있는지 계속 에러가 납니다

    알수있을까요 부탁드립니다
    !apt-get update
    !apt install chromium-chromedriver
    !cp /usr/lib/chromium-browser/chromedriver /usr/bin
    !pip install selenium
    from selenium import webdriver
    options.add_argument('–headless')
    options.add_argument('–no-sandbox')
    options.add_argument('–disable-dev-shm-usage')
    options = webdriver.ChromeOptions()
    driver = webdriver.Chrome('chromedriver' ,options=options)
    driver.get('https://whoer.net/')

    =============================================================
    WebDriverException Traceback (most recent call last)
    <ipython-input-43-85b17a6c99df> in <module>()
    11 chromedriver = '/usr/bin/chromedriver'
    12 #driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
    ---> 13 driver = webdriver.Chrome('chromedriver' ,options=options)
    14
    15

    4 frames
    /usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    240 alert_text = value['alert'].get('text')
    241 raise exception_class(message, screen, stacktrace, alert_text)
    --> 242 raise exception_class(message, screen, stacktrace)
    243
    244 def _value_or_default(self, obj, key, default):

    WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
    (unknown error: DevToolsActivePort file doesn't exist)
    (The process started from chrome location /usr/bin/chromium-browser is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

    이런 에러가 납니다

Pandas 라이브러리에 대한 간단한 소개와 몇 가지 자주 사용되는 기능에 대해서 정리합니다.

 

1. Pandas?

파이썬에서 데이터 전처리를 할 때 가장 많이 사용되는 라이브러리 중 하나입니다.

 

Pandas라이브러리의 기본은 DataFrame이라는 구조에서 시작됩니다.

 

DataFrame(데이터 프레임)은 Excel과 같은 표로 된 형태로 데이터를 관리합니다. 아래 샘플 코드를 봐주세요.

 

import pandas as pd

data = { 'Outlook' : ['Rainy', 'Rainy', 'Overcast', 'Sunny', 'Sunny', 'Sunny', 
                      'Overcast', 'Rainy', 'Rainy','Sunny','Rainy','Overcast', 
                      'Overcast','sunny'
                     ],
         'Temp' : ['Hot','Hot','Hot','Mild','Cool','Cool','Cool','Mild','Cool',
                  'Mild','Mild','Mild','Hot','Mild'],
         'Humidity' : ['High','High','High','High','Normal','Normal','Normal',
                      'High','Normal','Normal','Normal','High','Normal','High'],
        'Windy' : ['False','True','False','False','False','True','True','False',
                  'False','False','True','True','False','True'],
        'Playgolf' : ['No','No','Yes','Yes','Yes','No','Yes','No','Yes','Yes','Yes',
                     'Yes','Yes','No']
}

df = pd.DataFrame(data)

폴더에 쌓인 많은 자료들중 아무 데이터나 갖고 와 봤습니다.

 

위의 코드를 보면, data라고 정의된 부분을 보면, key로 Outlook, Temp, Humidity 등이 설정되어있고, 리스트 형태의 Value들이 존재하는 것을 볼 수 있습니다.

 

그리고 이렇게 만들어진 data를 Pandas에 DataFrame으로 넣어주는데요. 이렇게 만들어진 데이터 Frame을 보면 아래와 같습니다.

 

DataFrame

보게 되면, Dict의 Key에 해당하는 부분이 Column으로 오게 되고, Value에 해당하는 내용들이 순서대로 0~13까지 들어간 것을 볼 수 있습니다.

 

이러한 형태의 데이터를 Pandas의 DataFrame이라고 부릅니다.

 

2. 자주 사용되는 함수들

Pandas에서는 많은 함수들을 제공합니다. DataFrame에 들어있는 데이터들을 쉽고 빠르게 핸들링하기 위함이죠.

 

주의할 점은 동일한 결과를 위한 함수라도 사용방법에 따라서 속도가 수십 배씩 차이가 날 수 있습니다.

 

특히 핸들링하는 데이터의 크기가 수백GB이상이되면 그 차이에 따라서 단 몇 분이면 끝나는 작업이 며칠이나 걸리는 경우도 허다합니다.

 

따라서 많은 기능들을 알고 적절하게 사용하는 게 중요합니다.

 

먼저 원하는 데이터들을 찾아내는 필터링에 대해서 정리하겠습니다.

 

- 특정 Column 선택하기

  • df[ 'Humidity' ] : 특정 Column(Humidity)의 데이터들을 뽑아냅니다.(출력 형태 : Pandas Series)
  • df[[ 'Humidity' ]] : 특정 Column(Humidity)을 뽑아냅니다.(출력형태 : Pandas DataFrame)
  • df[[ 'Humidity, 'Outlook' ]] : 특정 Column들(Humidity, Outlook)을 뽑아냅니다.(출력형태 : Pandas DataFrame)

 

각가의 실행결과

 

- 특정 Row 선택하기(loc, iloc)

DataFrame에서 Index는 DataFrame이 생성됐을 때 기준으로 설정됩니다. 따라서 중간에 Row가 삭제되거나, 새롭게 정렬하는 경우 Index번호가 순서대로 설정되지 않는 경우가 발생합니다.

 

따라서 특정 Row들을 뽑아낼 때, 이 Index로 뽑아내는 경우, 어떤 기준으로 뽑을지에 따라서 두 가지로 나눠집니다.

 

다음과 같이 Outlook Column을 기준으로 새롭게 정렬된 DataFrame은 Index의 순서가 섞여있는 것을 볼 수 있습니다.

df.sort_values('Outlook')

여기서 특정 Row를 선택해보겠습니다.

 

  • df.sort_values('Outlook').loc[3:9] : Index번호가 3인 것부터 9인 것까지 출력합니다.
  • df.sort_values('Outlook').iloc[3:9] : Index번호와 상관없이 3부터 9번 row를 출력합니다.(시작=0)

 

- 정렬(sort_index, sort_values)

  • df.sort_index() : Index 기준으로 정렬을 수행합니다. (중간에 삭제된 Index들이 새로 생기지는 않습니다.)
  • df.sort_values(by) : by에 해당하는 Column의 값을 기준으로 정렬합니다.

 

옵션

ascending = True(기본) / False  :  True는 오름차순, False는 내림차순 정렬입니다.

inplace=True / False(기본)  :  정렬한 결과를 기존 DataFrame에 반영할지 여부입니다.

 

 

- reset_index

기존 DataFrame의 Index를 새로 설정합니다. 기존의 Index는 새로운 Column으로 만들어집니다.

 

drop = True 옵션을 적용할 경우 기존 Index가 새로운 Column으로 만들어지지 않고 삭제됩니다.

 

- T (Transpose)

Index와 Column의 위치를 바꿉니다.

 

실행결과

- astype(type)

특정 Column의 데이터 타입을 변경합니다.

df['Outlook'] = df['Outlook'].astype('str') 과 같이 사용 가능합니다.

주로 숫자 데이터가 문자로 되어있는 경우 int64나 float64로 변환합니다.

 

- dropna

DataFrame에서 특정 값이 비어있는 경우가 있습니다. 사람에 따라서 이것을 Null, NA, NaN, None 등 다양하게 부릅니다.

이러한 데이터는 숫자도, 문자도 아니기 때문에 특정값으로 변형하거나 삭제하는 작업이 필요합니다.

 

dropna는 이러한 값을 삭제해주는 함수입니다.

df.dropna() : 빈 값이 존재하는 Row를 제거합니다.

 

- drop

특정한 Column을 제거하는데 주로 사용됩니다.

df.drop(columns = '컬럼명')의 형태로 자주 사용합니다.

 

- fillna(value)

위에서 언급한 것과 같이 빈 값은 그대로 사용이 불가능하기 때문에, 다른 값으로 변경하거나 제거해야 할 필요가 있다고 말씀드렸습니다.

fillna(Value)는 이러한 빈 값을 특정한 Value로 대체하는 역할을 합니다.

 

- isnull

또또, 이 녀석은 데이터에 빈 값이 존재하는지 확인하는 용도로 사용됩니다.

빈 값은 True로 아닌 값은 False를 반환합니다.

따라서 보통 이것만 사용되는 경우는 거의 없고, 저는 주로 특정 컬럼에 빈 값이 몇 개나 있는지 등의 용도로 사용합니다.

 

df.isnull().sum()

 

sum은 원래는 컬럼별로 숫자들을 더해주는 역할을 하는데 컴퓨터에서 False = 0, True = 1로 값을 다루는 경우가 많다보니 위와같이 사용할 경우 컬럼별로 빈 값의 개수를 반환해주게 됩니다.

 

x는 Null값만 존재하는 Column

- info

가장 중요한 녀석인데, 뒤늦게 나왔네요.

DataFrame의 정보를 요점 정리해서 보여줍니다.

위와 같이 각 컬럼에 대해서 Null 값의 개수와, 데이터 타입 등의 정보를 알려줍니다.

데이터를 불러오고 가장 먼저 사용하는 기능이며, 전처리가 끝난 후 최종적으로 확인하는 데 사용되는 기능이기도 합니다.

 

- columns

DataFrame의 Column 이름을 확인하거나 재정의할 경우 사용됩니다.

df.columns : 칼럼들의 이름 확인

df.columns = ['col1', 'col2' ~] : 컬럼명 재정의

 

- pd.concat( [ A , B ] )

DataFrame에 적용되는 기능이 아니라 pandas에 붙는 녀석임을 주의하시기 바랍니다.

이 기능은 둘 이상의 데이터를 연결하는 데 사용합니다.

여기서의 연결방식은 A데이터 아래에 B데이터를 붙이는 것으로 두 개의 DataFrame이 동일한 Column들을 갖고 있다는 가정에서 Row가 늘어나는 형태로 데이터가 늘어가게 됩니다.

 

- pd.merge( left, right, how='inner', on=None, left_on=None, right_on=None ~ )

정말 중요한 기능이어서 옵션들까지 몇 개 적었습니다.

SQL에서 Join을 생각하셔도 좋습니다. 실행 형태는 아래와 같습니다.

 

pd.merge( A, B ) : A와 B 두 개의 DataFrame에서 동일한 이름의 Column을 기준으로 병합합니다.

여기서의 병합은 A의 Column옆에 B의 Column을 추가하는 경우를 말합니다.

 

pd.merge( A, B, how='left' ) : how에는 left, right, inner의 3가지 경우가 사용됩니다.

left = A DataFrame은 그대로 둔 상태로 B를 붙입니다. 이때 맵핑되는 값이 없으면 Null 값이 생깁니다.

right = B를 기준으로 합칩니다.(위와 반대)

inner = 위의 결과 중 하나에서 null값이 존재하는 row를 제거한 형태입니다.

 

상세한 내용은 여기를 참고하세요.

 

https://datascienceschool.net/view-notebook/7002e92653434bc88c8c026c3449d27b/

 

Data Science School

Data Science School is an open space!

datascienceschool.net

 

 

일단 중요한 기능들은 이런 것들이 있습니다.

 

unstack이나 groupby 등 여러 가지 녀석들이 있지만, 이런 것들은 나중에 작업하면서 다시 다루겠습니다.

'머신러닝 > 데이터 전처리' 카테고리의 다른 글

[Colaboratory] 구글 Colab 사용하기  (1) 2019.07.17
[데이터전처리] 1. Pandas in python  (0) 2019.05.30

+ Recent posts