반응형

파이썬의 pandas는 이제 필수적으로 알아야 하는 라이브러리가 되었다고 생각한다. 금융 쪽 뿐만 아니라 웹 스크래핑을 통해 데이터를 확보하고 그 자료를 딥러닝 등으로 분석하기 전 전처리에 유용하게 사용할 수 있는 도구로써도 유용하다고 본다.

우선적으로 Pandas DataFrame에서 사용할 수 있는 가장 기본적인 기능에 대해서 정리해 보고자 한다.

이번 글에서는 DataFrame에서 각 열과 컬럼(행)의 이름을 변경하는 것부터 해보자.

>>> import pandas as pd # pandas 라이브러리를 읽어들인다

>>> movies = pd.read_csv('movie.csv', index_col = 'movie_title') # csv파일을 읽어들이면서, 컬럼 중에서 인덱스로 만들 컬럼을 선택한다.

아래와 같이 딕셔너리로 된 대체 인덱스 및 컬럼으로 대입할 변수를 만듭니다.

>>> idx_rename = {'Avatar' : 'Ratava', 'Spectre' : 'Ertceps'}

>>> col_rename = {'director_name' : 'Director Name', 'num_critic_for_reviews' : 'Critical Reviews'}

rename 메서드를 사용해서, 인덱스와 컬럼에 딕셔너리를 전달합니다.

>>> movie_rename = movie.rename(index=idx_rename, columns=col_rename)

>>> movie_rename.head() # DataFrame 형태의 변수에 담긴 상위 열 데이터 일부(5개)를 조회합니다. 

(Source : Pandas Cookbook 깃헙)

앞으로도 짧게 파이썬 관련 유용한 정보를 정리해 보려고 합니다.

 

반응형
반응형
불확실성이 확대되고 미래가 어둡다고 생각되는 2019년이다. 

삶이 녹록치 않음을 느끼는 연령대가 40~50대가 아닐까? 
특히 IMF 전에 취직한 후 현재까지 회사라는 울타리에서 잘 지내다가 정년퇴직, 명퇴 등을 당한 40~50대는 무슨 일을 어떻게 해야할지 막막할 수 있을 것이다.
하지만, 변하는 세상만을 탓하고 있을 필요는 없다고 생각한다. 
이제 스스로 변해야 할 때가 되었다고 믿는다. 
그리고 변화된 나 자신을 만들어 내기 위한 첫걸음이 파이썬이 되길 바란다.   

난 40대 후반 인문학도로 세상의 빠른 흐름에 발 맞추기 위해 파이썬으로 데이터 분석에 도전하려고 하고 있다. 

그 이유는 무엇일까? 
  
디지털 시대로 전환하는 격변의 시대를 대비하기 위해서는 데이터 분석이 꼭 필요하게 되었기 때문이다. 늦은 나이란 없다고 생각한다. 그리고 파이썬은 친근하게 다가갈 수 있다. 그리고 바로 바로 답을 구할 수 있기 때문에, 날마다 꾸준히 도전한다면 본인의 역량을 일취월장시킬 수 있을 것이다.

젊은 친구들 뿐만 아니라 명예퇴직 대상이 된 40대 이상의 중장년층의 실직이 사회적 이슈가 되고 있다. 그만큼 사회 변화가 빠르게 이루어지고 있다고 본다. 
 
위기의 40대, 일자리 불안 커지고 소득은 급감, 막막한 50대, 졸라매도 ‘가난한 노후’ 속수무책이라는 인터넷 기사도 나온다. 
가장 큰 문제는 노후 대책이 전무한 경우가 50%에 육박한다는 것이다. 
40대 이상의 인문학 전공자들은 더욱 설자리가 없기에, 스스로 포기하는 경우도 생긴다.

자포자기하지 말자! 

파이썬과 함께 한다면 40~50대 인문학도도 데이터를 취득하고 분석할 수 있는 역량을 갖춰 사회에 유용한 정보를 제공할 수 있다는 것을 많은 사람들에게 보여주고 싶다.


반응형
반응형

index는 Series 또는 DataFrame에서 값을 찾기 위한 최적화된 도구라고 할 수 있다. 관계형 데이터베이스의 key와 많이 비슷하다고 이해하면 좋을 것 같다.

index 객체는 변경할 수 없다는 특징을 갖고 있다. 

또한, pandas에서 데이터 값들을 검색할 때는 index를 통해 검색하는 것이 컬럼을 가지고 검색하는 것보다 5배 정도 속도가 빠르다

* jupyter notebook에서 %timeit을 사용해 실행 속도를 시뮬레이션할 수 있음.


그렇기 때문에 pandas를 많이 사용하는 경우, index를 목적에 맞게 잘 생성하고 검색하는 데 이용할 수 있도록 할 필요가 있다.

그럼 먼저 pandas index 유형을 정리해 보도록 하자.

 

pandas index 유형

1. Int64Index 

정수 값을 위한 특정 Index로, 64비트 정수형의 불변하는 배열로 되어 있음. 

2. RangeIndex

Int64Index를 최적화한 Index로 최근에 추가됨. (start, stop, step) 특정 정수 값에서 시작하고 끝낼 수 있으며, 간격을 정할 수 있는 정수 기반 Index임. 

3. IntervalIndex

0.0~0.5와 같은 간격 인터벌을 Index로 사용할 수 있음.

4. DatetimeIndex 

나노초 타임스탬프를 저장함.
다음 code는 전체 5시간을 한시간 간격으로 된 index를 생성함.

4. PeriodIndex

년, 월, 날과 같은 기간 데이터를 위한 특정 Index임.

5. MultiIndex

단일 축에 여러 단계의 색인을 표현하는 계층적 Index 객체


반응형
반응형

Pandas에서 데이터 분석을 하기 위해 가장 많이 사용하는 것이 DataFrame일 것이다. 

Series를 확장한 것이 DataFrame이라고 이해하면 좀 더 쉽게 다가올 것이라 생각한다. 

기본 속성들을 정리해 보도록 하자.

>> import pandas as pd # pandas 라이브러리를 읽어들임

>> import numpy as np # numpy 라이브러리를 읽어들임


>> df = pd.DataFrame(np.arange(1, 6)) # numpy 배열(1에서 5까지)로부터 data frame을 생성함

>> df = pd.DataFrame(np.array([[70, 71], [90,91]]), columns=['Missoula', 'Philadelphia']) # columns 속성을 사용해 컬럼을 특정할 수 있음.

>> len(df) # 열이 얼마인지 확인하기 위해 len() 함수를 사용함.

>> df.shape # shape 속성으로 DataFrame의 치수(2,2)를 확인할 수 있음.


CSV 파일로부터 DataFrame 만들기

>> sp500 = pd.read_csv('data/sp500.csv', index_col = 'Symbol', usecols=[0,2,3,7]) # read_csv 함수로 이미 data폴더에 존재하는 sp500.csv 파일을 읽어들임. index의 컬럼명을 'Symbol'로 특정하고, 컬럼들 중에서 4개(0,2,3,7)의 특정 컬럼을 읽어들임.

>> sp500.head() # head()로 맨 앞 5개 열의 값들을 미리 볼 수 있음.

>> len(sp500) # 전체 열이 얼마인지 알 수 있음.

>> sp500.shape # sp500(DataFrame)의 치수를 확인할 수 있음.

>> sp500.size # size 속성으로 전체 데이터 크기를 알 수 있음(3컬럼* 전체 열의 수)

>> sp500.index # sp500의 index를 볼 수 있음

>> sp500.columns # sp500의 컬럼들의 이름을 확인해 볼 수 있음

* sp500.csv파일 다운로드


DataFrame 내에서 데이터에 접속하기

>> sp500['Sector'].head() # Sector 컬럼의 데이터들을 보여줌

>> type(sp500['Sector']) # type을 통해 각 컬럼의 구조를 알 수 있음(DataFrame의 단일 컬럼은 Series임)

>> sp500[['Price', 'Book Value']].head() # 2개 컬럼명을 통해 2개 컬럼의 앞 5개 열의 값들을 미리 볼 수 있음
>> sp500.Price # 컬럼명에 스페이스(빈칸)를 포함하고 있지 않다면, 콤마와 컬럼명으로 컬럼 데이터를 읽어들일 수 있음


DataFrame의 열 선택하기

>> sp500.loc['MMM'] # .loc[]를 사용해 index 이름으로 각 열을 읽어들일 수 있음
>> sp500.loc[['MMM', 'MSFT']] # 여러 열을 이름 리스트를 사용해 읽어들일 수도 있음
>> sp500.iloc[[0, 2]] # iloc[]를 사용해 위치에 맞는 각 열을 읽어들일 수 있음
 
>> i1 = sp500.index.get_loc('MMM') 
>> i2 = sp500.index.get_loc('A') # index 특정 이름의 위치를 index.get_loc()를 통해 파악한 후 그 값으로 각 열을 읽을 들일 수 있음
>> sp500.iloc[[i1, i2]]

at[]과 iat[]를 사용해 이름 또는 위치로 스칼라 찾기

>> sp500.at['MMM', 'Price'] # index와 컬럼 이름을 모두 사용해 값을 찾아냄 
>> sp500.iat[0, 1] # 열 0, 컬럼1이라는 위치를 사용해 값을 찾아냄

[] 연산자를 사용해 슬라이싱하기

>> sp500[:5] # 처음 5개 열(0~4)을 읽어들임
>> sp500['ABT' : 'ACN'] # ABT 이름부터 ACN 이름까지의 열들을 읽어들임

부울 선택을 사용해 열 선택하기

>> sp500[sp500.Price < 100] # sp500에서 Price 컬럼의 값이 100보다 작은 열들을 선택함

>> r = sp500[(sp500.Price < 10) & (sp500.Price > 6)]['Price'] # Price 컬럼의 값이 10보다 작고 6보다 큰 경우의 Price 컬럼 값들만 선택함

>> r = sp500[(sp500.Sector == 'Health Care') & (sp500.Price > 100.00)][['Price', 'Sector']] # Health Care 섹터에서 Price가 100보다 큰 Price와 Sector 컬럼 값들을 선택함


DataFrame 조작하기

컬럼명 바꾸기

>> newSP500 = sp500.rename(columns={'Book Value' : 'BookValue'}) # 공백이 있던 컬럼명을 rename() 메서드를 사용해 변경함. 단, 이 방법으로는 변경된 컬럼명을 가진 복사본을 돌려줌.

>> sp500.rename(columns = {'Book Value' : 'BookValue'}, inplace=True) # 복사본이 아닌 원본에서 컬럼명을 변경하려면 inplace=True 파라미터를 사용해야 함


[]와 .insert()로 새로운 컬럼 추가하기

>> sp500_copy = sp500.copy() # copy()로 복사본을 만들 수 있음
>> sp500_copy['RoundedPrice'] = sp500.Price.round() # Price 컬럼 값을 반올림한 신규 컬럼 RoundedPrice를 생성함
>> sp500_copy.insert(1, 'RoundedPrice', sp500.Price.round()) # .insert()를 사용해서 동일하게 신규 컬럼을 생성할 수 있음

연결(concatenation)을 사용해 컬럼 추가하기

>> rounded_price = pd.DataFrame({'RoundedPrice' : sp500.Price.round()}) # RoundedPrice 컬럼을 갖고 있는 DataFrame을 생성함
>> concatenated = pd.concat([sp500, rounded_price], axis=1) # y축(axis=1)을 기준으로 해서 두개의 DataFrame을 연결함. 

컬럼 지우기

del 키워드 또는 .pop() 또는 .drop()를 사용해 DataFrame으로부터 컬럼을 삭제할 수 있다. 

>> copy = sp500.copy()
>> del copy['BookValue']

>> copy = sp500.copy()
>> popped = copy.pop('Sector')

>> copy = sp500.copy()
>> afterdrop = copy.drop(['Sector'], axis = 1)



반응형
반응형

Pandas 자료 구조는 Series와 DataFrame을 말한다고 생각하면 된다. 그 정도로 이 두가지에 익숙해지면 pandas를 잘 활용한다고 할 수 있다는 것이다.

1. Series 정의

Series는 pandas의 기본 블록이라고 할 수 있다. 

일련의 객체를 담을 수 있는 1차원 배열과 같은 자료 구조를 나타낸다. 

Series 객체의 문자열 표현은 왼쪽에 색인(index)을 보여주고 오른쪽에 해당 색인의 값(values)을 보여준다. 

즉, Series의 배열과 색인 객체는 각각 values와 index 속성을 통해 얻을 수 있는 것이다.


2. Series 만들기

>> import pandas as pd # 사용할 라이브러리를 불러온다(이미 설치되어 있다고 가정).

>> import numpy as np

Series는 리스트, 딕셔너리, NumPy 함수, 스칼라 값들로부터 만들 수 있다.

>> pd.Series([10, 11, 12, 13, 14])

>> pd.Series(list('abcde'))

>> pd.Series({'Mike': 'Dad', 

'Marcia' : 'Mom',

'Mikael' : 'Son',

'Bleu' : 'Best doggie ever'})

>> pd.Series(np.arange(4, 9))

>> pd.Series(np.linspace(0, 9, 5))


기본적으로 index 속성을 가지고 index를 지정할 수도 있다.

>> s = pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])


3. Series의 속성들

아래 속성들을 가지고 여러 작업을 해 볼 수 있다.

>> s.values # 값을 확인할 수 있다.

>> s.index # 인덱스를 볼 수 있다.

>> len(s) # 아이템 수를 확인할 수 있다.

>> s.size # 위와 동일하게 아이템 수를 확인할 수 있다.

>> s.shape # 아이템 수와 빈값으로 된 두개 값의 튜플로 돌려준다.

>> s.head(n = 3) # 앞의 3열을 미리 볼 수 있다.

>> s.tail(n= 2) # 뒤의 2열을 미리 볼 수 있다.

>> s.take([1, 3]) # 2번째와 4번째 열 등 지정한 특정 열의 아이템을 볼 수 있다(0부터 시작한다).

>> s['a'] # a 레이블의 값을 돌려준다.

>> s.iloc[[0,2]] # 특정 위치의 값을 찾아 돌려준다.

>> s.loc[['a', 'd']] # 특정 레이블의 값을 돌려준다.

  

4. Series를 부분집합으로 나누기

>> s = pd.Series(np.arange(100, 110), index = np.arange(10, 20))

>> s[1:6] # 두번째 값(0부터 시작하기 때문에)부터 5번째 값(맨 마지막 값은 제외)까지 돌려준다.

>> s.iloc[[1, 2, 3, 4, 5]] # 지정한 위치의 값들은 모두 돌려준다.

>> s[1:6:2] # 두번째 값부터 5번째 값 중에서 2씩 건너 뛰어 돌려준다(1, 3, 5번째 값).

>> s[:5] # 첫번째 값부터 네번째 값까지 돌려준다.

>> s[4:] # 다섯번째 값부터 마지막 값까지 돌려준다.

>> s[::-1] # 마지막 값에서 첫번째 값까지 거꾸로 돌려준다.

>> s[-4::] # 마지막 4개 값들을 돌려준다.


일련의 날짜 값들을 가지고 작업할 수 있다.

>> dates = pd.date_range('2018-03-01', '2018-03-06')

>> temps1 = pd.Series([20, 22, 25, 30, 23, 27], index = dates)

>> temps2 = pd.Series([10, 15, 13, 19, 13, 17], index = dates)

온도 값 차이를 아래와 같이 다른 변수에 저장할 수 있다.

>> temp_diffs = temps1 - temps2

평균값도 계산 가능하다.

>> temp_diffs.mean() 


5. 불린(Boolean) 선택으로 자료를 찾기

>> s = pd.Series(np.arange(0, 5), index=list('abcde'))

>> logical_results = s >= 3

>> s[logical_results] # logical_results 값이 참(true)인 열들만 돌려준다.

>> s[(s >= 2) & (s < 5)] # s값이 2보다 크거나 같고 5보다 작은 열들을 돌려준다.

>> (s >=0).all() # 참(true)을 돌려준다.

>> (s < 2).any() # 참(true)을 돌려준다.

>> (s < 2).sum() # 조건에 맞는 값들의 합을 돌려준다.


<Source : Learing Pandas Second Edition, Packt>














반응형
반응형

요즘 데이터 분석 공부를 하면서 pandas를 거의 매번 사용하게 된다. 그만큼 파이썬에서는 필수적인 라이브러리가 되었기 때문이 아닐까 한다. 

그럼 가장 기본이 되는 데이터 읽는 방법부터 정리해 보도록 하자.

pandas에서는 위와 같은 명령어를 통해 다양한 파일 형태를 읽어들이고, 쓸 수 있다.

그럼 먼저 가장 많이 사용하는 CSV 파일 읽어들이기를 중심으로 정리해 보도록 하겠다.

 

1. CSV와 텍스트 파일들

보통 데이터는 일반적으로 표 형식으로 사용한다. 한 행에 있는 값이 쉼표로 구분되면 CSV(쉼표로 구분된 값)형식이 된다. 이 형식은 아마 가장 잘 알려져 있고 가장 많이 사용하는 형식일 것이다.

다른 표 형식의 데이터는 공백이나 탭으로 구분할 수도 있으며 일반적으로 다양한 유형의 텍스트 파일(일반적으로 .txt 확장명)에 포함되어 있다. 

이 유형의 파일은 가장 일반적인 데이터 소스이며 쉽게 기록하고 해석할 수 있다.

이와 관련하여 pandas는 이 유형의 파에에 대해 특정 기능 세트를 제공한다.

- read_csv

- read_table

 

2. CSV 또는 텍스트 파일에서 데이터 읽기

>> import pandas as pd

S&P500 지수 데이터를 읽어온다(investing 사이트에서 추출).

각 필드는 심볼과 회사 이름, 사업분야, 사업세부분야로 구분되어 있는 CSV 파일이다(이는 기존에 추출해서 저장함. 어떤 CSV파일이든 상관없음).

>> csv_file = pd.read_csv('data/sp500.csv', names = ['symbol', 'name', 'sector', 'industry'])

여기서 읽어들인 데이터의 컬럼들의 헤더명을 설정하기 위해 names=[]을 사용한다.

>> csv_file

알수도 있지만, CSV 파일에서 데이터를 읽어들이는 다른 방법이 있다. CSV파일은 같은 열의 값이 쉼표로 구분된 표로 만들어진 데이터다. CSV파일은 텍스트 파일로 간주되므로 read_table()함수를 사용할 수도 있다(구분기호를 지정하여).

반응형

>> pd.read_table('data/sp500.csv', sep=',')

위 예에서, 모든 컬럼의 헤더 이름을 names=[]로 정의했다. 만약, 정의하지 않고 그냥 읽어들이면 첫번째 열이 컬럼의 헤더 이름이 된다. 그렇기 때문에 첫번째 열을 헤더로 설정하지 않기 위해서 names=[]로 정의하던지, 컬럼 수를 파악하기 어려울땐 header=None을 사용해서 컬럼들에 0으로 시작하는 기본 이름을 할당해야 한다. 또 하나 주어진 컬럼을 인덱스로 변환해서 계층형 인덱스로 할당하기 위해서는, read_csv()에 index_col 옵션을 추가함으로써 수행할 수 있다.

3. 텍스트 파일을 읽기 위해 RegExp 사용하기

콤마와 세미콜론으로 분리된 경우 말고, 다른 구분기호를 사용한 데이터를 읽어들여야 할 경우도 있다. 이 경우 정규표현식이 우리에게 도움이 된다. 사실 sep 옵션을 사용하여 read_table() 암수에서 정규표현식을 지정할 수 있다.

[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식들은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식이다.

<정규표현식 출처 : 점프 투 파이썬 https://wikidocs.net/4308>

skiprows 옵션을 사용하면 원하는 모든 행을 제외할 수 있다. 이 옵션을 사용할 때 주의할 사항이 있다. 첫번째부터 다섯 줄을 제외시키려면 skiprow=5라고 써야 하지만, 다섯번째 줄만 제외하려면 skiprows =[5]라고 써야 한다.

 

4. 텍스트 파일에서 일부분만 읽어들이기

대용량 파일을 처리하거나 이러한 파일의 일부에만 관심이 있는 경우 파일을 부분(청크)으로 읽어야 한다. 이는 반복을 적용하기 위한 것이고 전체 파일을 파싱하는데 관심이 없기 때문이다. 

예를 들어, 파일의 일부분만 읽으려는 경우 구문 분석을 할 줄수를 명시적으로 지정할 수 있다.

>> pd.read_csv('test.csv', skiprows=[2], nrows=3, header=None)

       0    1    2    3      4

0     1    5    2    3   cat

1     2    7    8    5   dog

2     2    2    8    3 duck

nrows 옵션은 읽을 파일의 행 수를 말한다. 대용량 파일을 읽는 데 유용하다.

 

<Source : Python Data Analytics, Apress>

 

 

반응형
반응형

pandas로 데이터 분석을 실행함에 있어, 어떻게 절차를 구분하는 것이 좋을지 정리해 놓은 글이 있어 번역해 보았다. 

특히 Pandas로 실행하고 있기 때문에 향후 pandas의 각 기능에 대해 정리해 보려고 한다.

먼저, 오늘은 데이터에서 필요한 정보를 만들어내는 7단계에 대해 간략히 정리하도록 하겠다.

데이터 분석 프로세스




1. 개념화(Ideation)

첫단계는 알아내고 싶은 것이 무엇인지 밝히는 것이다. 

이것은 우리가 하고 싶은 것이 무엇인지 생각해 보고 증명하기 위한 개념화에 대한 것이다. 개념은 일반적으로 지식을 바탕으로 결정을 내리기 위해 사용할 수 있는 데이터 패턴에 대한 가설과 관련이 있다. 

이러한 결정은 비즈니스 차원에서 이루어 지지만 과학 및 연구 분야에서도 발생한다. 

그럼 데이터를 통해 우리가 내리는 결정의 종류는 어떤 것이 있을까? 다음과 같은 것을 많이 요청한다고 본다.

- 어떤 일이 왜 일어났는가?

- 과거 데이터를 사용해서 미래를 예측할 수 있는가?

- 앞으로 어떻게 운영을 최적화할 수 있을까?

위 목록이 개념화를 정의하려는 노력에 있어 많은 부분을 차지할 것이라 생각한다. 

위와 같은 질문에 대한 답변을 얻기 위해 문제와 관련된 데이터를 수집하고 이해해야 하는 것이다. 여기에는 어떤 데이터가 조사될 것인지, 연구의 이점이 무엇인지, 데이터를 어떻게 얻을 것인지, 성공 기준이 무엇인지, 최종적으로 정보가 어떻게 전달될 것인지를 정의해야 하는 지를 포함한다.

Pandas 자체는 개념을 보조하기 위한 도구를 제공하지는 않는다. 그러나 Pandas 사용에 대한 이해와 기술을 습득하면 Pandas가 아이디어를 공식화하는 데 어떻게 도움을 주는지 자연스럽게 알게될 것이다.


2. 검색(Retrieval)

아이디어가 있으면 가설을 뒷받침할 데이터를 찾아야 한다. 

이 데이터는 조직 내에서 또는 외부 데이터 공급자로부터 가져올 수 있다. 이 데이터는 일반적으로 보관된 데이터로 제공되거나 실시간으로 제공될 수 있다.

데이터를 작성했거나 조직 내에서 가져온 경우에도 원시 데이터는 종종 매우 불완전하다. 원시 데이터는 데이터가 혼란스럽거나 다양한 형식일 수 있으며 오류가 있을 수 있음을 의미한다. 분석 지원과 관련하여 불완전할 수 있으며 수동으로 개선해야 할 수도 있다.

세상에는 무료 데이터가 아주 많다. 많은 데이터는 무료가 아니며 실제로는 상당한 금액의 비용을 요구한다. 일부는 공개 API에서 무료로 사용할 수 있으며 다른 일부는 구독으로 사용할 수도 있다. 비용을 지불한 데이터는 종종 더 클린하지만 종종 그렇지 않을 수도 있음을 알아야 한다.

데이터가 불완전하거나 클린할 경우 모두 pandas는 다양한 출처의 데이터를 검색할 수 있는 견고하고 사용하기 쉬운 도구 집합을 제공하며 다양한 형식을 지원한다. pandas는 데이터를 검색할 뿐만 아니라 다른 툴이나 프로그래밍 언어에서 필요할 수 있는 복잡한 코딩을 수동으로 생성할 필요없이 pandas 데이터 구조를 통해 데이터의 초기 구조화 기능을 제공한다.


3. 준비(Preparation)

준비 중에 원시 데이터를 탐색할 준비가 된다. 이 준비 과정은 매우 흥미로운 과정이다. 데이터가 품질과 관련된 문제로 가득차 있는 경우가 매우 빈번하기 때문이다. 이러한 품질 문제를 처리하는 데 많은 시간을 할애할 가능성이 높다(종종 매우 아까운 시간).

왜 시간을 많이 할애해야 할까?

- 데이터가 단순히 잘못되어 있다

- 데이터 세트의 일부가 누락되어 있다

- 분석에 적합한 측정 값을 사용하여 데이터가 표현되지 않았다

- 데이터가 분석에 적합하지 않은 형식이다

- 데이터가 분석에 적합하지 않은 세부 수준에 있다

- 필요한 모든 필드가 단일 소스에서 제공되는 것이 아니다

- 데이터 표현이 공급자에 따라 다르다


4. 탐색(Exploration)

탐색에는 대화식으로 데이터를 작은 여러 조각들로 분해한 후 다양한 시각으로 볼 수 있게 함으로써 신속하게 살펴보는 것을 포함한다. 

탐색은 다음과 같은 다양한 테스크를 포함한다.

- 변수가 서로 어떻게 관련되어 있는지 조사

- 데이터 배포 방법 결정

- 특이점 찾아서 제외시키기

- 빠른 시각화 만들기

- 보다 영구적으로 상세한 모델링 프로세스를 지원할 수 있도록 새로운 데이터 표현이나 모델을 신속하게 생성

탐색은 pandas의 위대한 강점 중 하나다. 탐색은 대부분의 프로그래밍 언어에서 수행할 수 있지만 pandas가 얼마나 탐색적 노력을 수월하게 하는지가 관건일 것이다.

IPython 및 / 또는 Jupyter 노트북의 REPL (read-eval-print-loop) 특성과 함께 사용하면 pandas는 매우 자유로운 탐색 환경을 만든다. pandas 구문의 표현력을 통해 복잡한 데이터 조작 구조를 간략하게 설명할 수 있으며 데이터를 처리할 때 수행한 모든 작업 결과가 즉각적인 검사를 통해 표시될 수 있다. 이를 통해 프로그램을 다시 컴파일하여 재실행하지 않고 방금 수행한 작업의 유효성을 신속하게 판별할 수 있다.


5. 모델링(Modeling)

모델링 단계에서 탐색 중에 발견된 발견을 공식화하여 데이터 내에 포함된 원하는 의미를 얻는 데 필요한 단계와 데이터 구조를 명시적으로 설명한다. 이 모델은 원시 데이터에서 정보와 결론까지 얻을 수 있는 코드 단계 뿐 아니라 두 데이터 구조의 조합이다.

모델링 프로세스는 데이터 탐색을 통해 분석을 지원하는 데 필요한 변수를 선택하고 분석 프로세스에 대한 입력 변수를 구성한다. 모델을 실행하며 모델이 원래의 가정을 얼마나 잘 지원하는지를 결정하는지 확인하는 반복 프로세스라고 할 수 있다. 데이터 구조의 공식 모델링을 포함할 수 있지만 통계, 기계 학습 및 운영 연구와 같은 다양한 분석 도메인의 기술을 결합할 수도 있다.

이를 촉진하기 위해 pandas는 광범위한 데이터 모델링 기능을 제공한다. 데이터 탐색으로부터 한발 더 나아가, DataFrame에서 데이터 모델을 형식화하고, 이 모델들을 간결하게 만들어 주는 절차를 확보해 주는 단계라고 할 수 있다. 파이썬 기반을 통해, 처음부터 마지막 프로세스까지 자동화하는 프로그램을 생성하는 파워를 사용할 수 있다. 즉, 작성한 모델은 실행 가능한 것이다.

분석적 관점에서 pandas는 다양한 유형의 문제에 대한 목표를 달성할 수 있는 기술 통계에 대한 통합 지원과 같은 몇 가지 기능을 제공한다. 그리고 pandas는 파이썬 기분이기 때문에 고급 분석 기능이 필요하다면 광범위한 파이썬 라이브러리와 쉽게 통합될 수 있다.


6. 프리젠테이션(Presentation)

이 프로세스의 마지막에서 두번째 단계는 결과를 다른 사람들에게, 일반적으로 보고서나 프리젠테이션 형태로 제시하는 것이다. 설득력있고 철저한 솔루션 설명을 만들고 싶을 때, 바로 이용할 수 있다. 

Jupyter Notebook은 pandas 분석을 위한 프리젠테이션을 작성하는 강력한 도구다. 이 노트북은 코드를 실행하고 응용 프로그램의 여러 지점에서 주석을 달고 실행을 설명하기 위한 다양한 마크다운 기능을 제공한다. 또한 이 도구는 코드, 스타일이 지정된 텍스트, 그래픽과 함께 시각적으로 풍부한 매우 효과적인 실행 가능한 프리젠테이션을 만들 수 있다.


7. 재생산(Reproduction)

중요한 연구는 연구를 공유하고 재현할 수 있게 만들어야 한다. 다른 연구자가 실혐과 결과를 재현할 수 없다면 어떤 것을 증명하지 못했다고 할 수 있기 때문이다.

다행스럽게도 pandas와 파이썬을 사용함으로써 분석을 쉽게 재현할 수 있다. pandas 코드를 구동하는 파이썬 코드와 데이터를 공유함으로써 가능하다.

또한, Jupyter Notebook은 다른 사람들과 쉽게 공유할 수 있는 방법으로 코드와 응용 프로그램을 패키징하는 편리한 방법을 제공한다.


<Source : Learning pandas Second Edition, Packt>


반응형
반응형

대략 8개월만에 블로그 글을 쓰다 보니, 무엇부터 써야 할지 두렵기도 하고 어색하기도 합니다. 하지만, 앞으로 꾸준히 쓰는게 목표이기 때문에, 조금 말이 어색하고 사람들이 동의하기 어려운 내용일지라도 쓰려고 합니다.

파이썬을 공부하다가 최근 3~4개월은 업무가 바뀌어서 거의 손을 못대고 있었습니다. 앞으로는 파이썬으로 할 수 있는 일, 내가 하는 일을 중심으로 블로깅을 해나가려 합니다. 이제 업이 바뀌었기 때문이다. 직장에서 시키는 일을 처리하는 입장에서, 앞으로의 살아갈 때 필요한 생업을 준비하기 위한 입장이 되었습니다. 그래서, 오늘이 아닌, 미래를 먼저 대비하는 사람이 되도록 노력하렵니다.

미래를 더 많이 생각하면서 살아가는 사람으로 살기 위해, 새로운 기술과 트렌드, 그리고 내가 앞으로 해야 할 일들에 대해 고민하게 됩니다. 그래서, 난 앞으로 살아가는데 도움이 될만한 책들을 많이 읽으려고 노력합니다.


'겟 스마트'의 저자는 '브라이언 트레이시'라고 부자가 되는 방법에 대해 많은 글과 강연을 한 유명인입니다. 그의 과거 글들을 봤었기 때문에 부담없이 책을 선택했고, 가볍게 읽을 수 있었습니다. 내가 다른 책에서도 읽었던 내용들이 다수 겹치기는 했지만, 내가 체득하기만 하면 살아가는데 많은 도움을 줄 수 있는 내용들이었습니다. 


아래에 제가 읽으면서 마음에 와닿는 문구들을 정리해 보았습니다. 

짧은 clip같은 글들로 나뉘어 있지만, 전체적인 맥락을 이어서 생각해 보는 것이 더 좋을 것 같습니다. 


<시간 전망>

사회, 경제적 성취 수준이 높은 사람일수록 전망하는 기간을 길게 가지고 갔다. 


<장기 전망>

오늘날 무려 70%의 성인이 그달 벌어 그달 먹고산다. 

5년이나 10년, 심지어 더 먼 미래를 예견하는 장기 전망을 활용하면 당신이 현재 생각하고 행동하는 방식이 바뀐다.


<확률의 법칙> 

성공은 확률의 문제다. 

당신이 성공한 사람들과 조직이 하는 대로 더 많이 따라 한다면 당신도 적절한 시기에 적절한 일을 해서 성공할 확률이 높아진다고 한다. 


<제1의 규칙>

부자들이 하는 공통된 조언은 '돈을 잃지 마라'이다. 일과 인생에서 당신의 목표도 틀림없이 '돈을 잃지 말자'일 것이다. 

결정을 내리기 전에 정보를 더 많이 모을수록, 당신이 바라는 성공으로 이어질 올바른 결정을 내릴 확률이 높다. 


<목표는 삶의 전환점이다>

단지 3%만이 매일 자신이 하는 일에 관해 분명하고 구체적이며 명시된 목표를 갖고 있다. 나머지 97%에게는 희망과 꿈, 소원과 환상은 있지만, 목표는 없다. 그리고 그들이 그 차이를 모른다는 것이 가장 큰 비극앋.

"돈을 잃지 마라." 성공이라는 관점에서 봤을 때도 비슷하다. 우리는 "시간을 잃지 말아야 한다."

당신에게 분명하고 구체적인 목표가 있고, 그 목표를 성취할 명확한 계획이 있으며, 매일 계획에 맞춰 노력한다면, 엄청난 시간을 절약할 수 있다. 


<주의결핍 사회>

한 번에 하나에만 집중하는 능력은 빠르게 움직이고 요동치는 이 시대에 가장 필요한 정신적 능력이라고 한다.


<당신이 정말로 원하는 것>

당신이 실천할 성공 원칙은 '생각을 종이에 옮겨라'이다. 당신이 원하는 것을 종이에 쓰는 행도잉 목표를 성취할 가능성을 급격히 높여준다.


<실패의 두려움>

사람들은 대부분 정말로 하고 싶은 일을 자제한다. 그것을 할 여유가 없거나, 그것을 성취할 시간이나 재능, 자원이 충분치 않다고 생각하기 때문이다.


<목표 설정 과정>

당신이 누구이고, 정말로 무엇을 원하는지를 분명히 생각하는 능력은 당신이 많은 목표를 성취하며 살아가는 데 가장 중요하다. 목표를 작은 부분으로 잘게 나눈다면 어떤 목표든 성취할 수 있다. 당신이 목표를 성취하기 위해 할 수 있다고 생각하는 모든 것을 적어라.


<당신의 목표를 생각하라>

'당신의 하루 중 대부분이 당신의 생각대로 된다'라는 위대한 진리를 기억하라. 매일 아침 일어날 때마다 당신의 목표를 생각하라. 온종일 목표를 생각하라. 저녁에 당신의 목표에 진전이 있었는지 돌아봐라. 


<시작했다면 계속 밀어붙여라>

성공한 사람들은 가치가 더 높은 일을 위해 더 많은 시간을 보낸다. 반면 보통 사람들은 가치가 낮은 활동을 하느라 대부분의 시간을 허비한다.


<3의 법칙의 필연적 결과>

일을 더 적게 하라. 당신은 해야 할 일을 절대 모두 해낼 수 없다. 따라서 삶을 통제할 수 있는 유일한 방법은 가치가 낮은 일을 하지 않는 것이다. 

더 중요한 일을 하라. 당신에게 가장 중요한 세 가지 업무 중 하나 이상을 하라.

당신에게 가장 중요한 업무들을 하는 데 더 많은 시간을 써라. 할 수 있다면 온종일 그 일을 하라.

가장 중요한 업무라면 더 잘하라. 성공하기 위해서는 꾸준한 학습과 자기 발전이 필수적이라지만, 어떤 영역에서 어떻게 해야 하는가? 가장 중요한 업무들을 처리할 때 원하는 결과를 더 잘 성취하라.


<결과에 집중하라>

큰 업무를 작은 일로 쪼개서 그것만 처리하라. 이렇게 하면 큰 프로젝트를 시작할 수 있고, 미루는 습관도 사라질 것이다.

주요 업무의 일부분만 골라서 그것만 당장 끝내겠다고 결심하라.

자신에게 보상하라. 목록에 있는 하위 업무 중 하나를 끝내면 커피 한 잔이나 짧은 휴식과 같은 구체적인 보상을 자신에게 해주어라.

10분 단위로 일해라. 전체 업무를 어떻게 끝내나 걱정하지 말고, 일단 시작해서 10분간 전력을 다해 일하겠다고 결심해라.

매일 아침 가장 중요한 업무부터 우선 시작하고 끝내는 습관이 당신의 삶을 바꾼다. 업무를 완수하면 자연이 선물한 '행복해지는 약' 엔도르핀이 뇌에서 방출된다. 


<너그럽게 용서하고 잊어라>

당신은 부모님이 당신을 기르며 했던 모든 실수를 용서해야 한다. 그것들을 완전히 놓아버려야 한다. 

당신은 자신이 저지른 모든 실수에 대해 자신을 용서함으로써 스스로 자유로워져야 한다.

당신이 완전히 긍정적인 사람이 되고 싶다면 삶에서 당신이 해야 할 가장 중요한 일은 과거를 놓아버리고 햇빛을 향해 서는 것이다. 완전히 긍정적인 사람이 되어라.


<해결해야 하기 때문에 문제인 것이다>

창의적인 사고를 하는 사람이 세계를 지배한다. 그들은 중요한 목표를 성취하는 더 빠르고, 더 쉽고, 더 나은 방법을 계속 찾고 있다. 그들은 지속적이고 무한한 발전을 실행한다. 

반대로 기계적 생각은 경직되고 융통성이 없다. '내가 하자는 대로 하거나 아니면 떠나라'는 사고방식이다.


<천재들의 세 가지 태도>

당신이 삶에서 마주하는 어떤 상황이든 완전히 새롭고 다른 접근법에 마음을 더 열수록, 컴포트존에서 벗어나 통찰력과 아이디어를 얻을 확률이 높고, 독창적인 사고를 할 수 있다.

천재들은 성급하게 결론을 내리지 않고 자료를 점점 더 많이 모으면서 문제의 모든 면을 신중하게 고려한다. 모든 천재는 문제 해결과 의사결정에 체계적 접근을 사용한다.


<정의가 해결책을 결정한다>

분명한 척도와 기준을 세워라. 당신이 바라는 결과를 수량화하라. 규칙은 이렇다. 

"당신이 사업에서 성공하고 싶다면, 모든 일에 기준을 세워라. 당신이 부자가 되고 싶다면, 모든 일에 경제적 기준을 세워라."

일을 끝낼 마감과 준 마감기한을 정하라.


<해결책을 생각하라>

무슨 이유에서든 첫번째 해결책이 효과가 없을 경우를 위해 대비책이나 대안, 즉 플랜 B를 만들어라.

당신이 아이디어를 행동으로 옮겨라.

빨리 움직여라. 긴박감을 조성하라. 뭔가를 하라. 무엇이든 하라.


<가장 강력한 질문>

사람들은 대부분 천성적으로 자신의 문제를 외부의 힘과 다른 사람 탓으로 돌리는 경향이 있다. 탁월하게 생각하는 살마들의 특징은 어떤 문제나 어려움이 닥쳐도 온전히 자신의 책임으로 받아들이고, 목표 성취의 속도를 제한하는 요소가 무엇인지 자기 내면을 돌여다본다는 것이다. 


<기초적인 질문을 하라>

기업가의 생각을 하는 사람은 항상 자발적으로 더 많은 책임을 맡는다. 계속 더 많이 기여할 일을 생각한다. 자신의 기술을 꾸준히 업그레이드하고, 새로운 것을 배우며, 자신의 회사에 더 소중한 사람이 될 방법을 찾는다.

명료성, 몰입력, 집중력이라는 세 가지 비결을 기억하라.


<계속 질문하라>

어떤 사업에서든 기업가는 항상 이런 비판적 요소를 생각한다. 그들은 자신이 틀릴 가능성과 결과를 얻어낼 더 나은 방법이 있을 가능성을 항상 기꺼이 받아들인다. 

기업가의 생각을 하려면 당신은 항상 고객을 생각해야 한다. 당신은 고객에게 제공할 새롭고, 다르고, 더 좋고, 빠르고, 비용이 덜 드는 방법을 찾아 고객이 정말로 원하고 필요한 것을 점점 더 많이 주어야 한다. 


<당신의 생각을 다시 프로그래밍하라>

경제적 성공으로 가는 사다리는 지식과 기술이다. 빈손으로 시작해서 경제적으로 성공하려면 자신을 가치있고 꼭 필요한 사람으로 만들 새로운 기술을 완전히 새로 배우고, 개발하고, 실행해야 한다. 


<제한 요소를 극복하는 법>

얼마나 많은 사람이 자신의 삶이 엄청난 성공으로 바뀔 중요한 전환점을 불과 몇발짝 남겨둔 시점에서 포기하고 그만두는지 모른다. 끈기와 투지는 당신이 모든 경제적 목표를 성취할 수 있음을 보증하는 결정적 요소다.

<새로운 습과을 개발하라>

한층 더 노력하라. 당신이 얻는 것보다 훨씬 많이 기꺼이 투자하라. 남들보다 더 나아가는 길에는 어떤 걸림돌도 없을 것이다. 


<당신이 좋아하는 일을 하라>

당신이 즐기고, 마음이 끌리며, 에너지를 얻고, 행복해지는 일을 하라.

당신이 좋아하는 일을 하는 것이 비결이다.


<시간을 잘 사용하라>

대부분의 백만장자는 매우 목표지향적이다. 그들에게는 항상 생각하고 연구하는 중요하고 분명한 큰 목표가 있다.

백만장자들은 목표마다 기준을, 특히 경제적 기준을 세우고 마감기한도 세운다. 

백만장자들은 매우 생산적이고, 자신의 시간을 잘 사용한다. 그들은 하루하루를 미리 계획한다.


<모든 일을 궁금해하라>

하루에 두세 시간씩 읽고, 배우고, 듣는다. 그들은 경영서와 기사의 요약본을 구독해서 일고 듣는다.


<건강과 에너지를 유지하라>

질문을 많이 하고, 잘 들으며, 심지어 필기도 한다. 성공에 다가서고 더 많은 돈을 버는 데 유용한 아이디어는 누구나 생각해 낼 수 있음을 잘 알기 때문이다.

체중 감소를 위한 규칙은 '덜 먹고 더 운동하는 것'이다. 부자들은 영양가있는 음식을 먹고 물을 많이 마신다.


<계산된 위험 감수>

업무를 월등히 잘하는 사람들은 하룻밤 평균 8.46시간을 잔다고 한다. 그는 최고의 성과를 내려면 열심히 일해야 하고, 그러려면 많은 에너지가 필요하다는 것을 발견했다.

일주일에 평균 200분 이상, 하루에 약 30분 이상 운동한다. 그들은 매일 아침 일어나서 운동한다. 이동할 때 더 자주 걷고, 엘리베이터보다는 계산을 더 자주 이용하며, 항상 몸을 움직일 기회를 찾는다.


꾸준함이 재능을 이긴다! 

반응형

+ Recent posts