반응형

13.1 pandas와 모델 코드의 인터페이스

모델 개발 

특징을 선택하고 추출하는 피처 엔지니어링인데 원시 데이터셋으로부터 모델링에서 유용할 수 있는 정보를 추출하는 변환이나 분석 과정을 일컫는다.

.values속성

.columns 

loc 을 이용해서 values속성에 접근하기 바란다.

'category'컬럼을 더미값으로 치환하고 싶다면 더미값을 생성하고 'category'컬럼을 삭제한 다음 결과와 합쳐야한다.

 

13.2 Patsy를 이용해서 모델 생성하기

Pasty는 통계모델 (특히 선형 모델)을 위한 파이썬 라이브러리이며 R이나 S통계 프로그래밍 언어에서 사용하는 수식 문법과 비슷한 형식의 문자열 기반 '수식 문법'을 제공한다.

Pasty는 통계 모델에서 선형 모델을 잘 지원하므로 이해를 돕기 위해 주요 기능 중 일부만 살펴

Pasty의 수식 문법은 다음과 같은 특수한 형태의 문자열이다.

y ~ x0 + x1

배열을 설계

patsy.dmatrices함수

최소자승회귀분석 numpy.linalg.lstsq같은 알고리즘

 

13.2.1 Pasty용법으로 데이터 변환하기

표준화 평균 0, 분산 1와 센터링 (평균값을 뺌)

홀드-아웃: 신규 데이터가 나중에 관측되는 경우다. 

센터링이나 표준화 같은 변환을 적용하는 경우 새로운 데이터에 기반하여 예측하기 위한 용도로 모델을 사용한다염 주의해야 한다.

 

13.2.2 범주형 데이터와 Patsy

비산술 데이터는 여러 가지 형태의 모델 설계 배열로 변환될 수 있다.

ANOVA analysis of variance(분산분석) 모델에서

 

13.3 statsmodels소개

다양한 종류의 통계 모델 피팅, 통계 테스트 수행 그리고 데이터 탐색과 시각화를 위한 파이썬 라이브러리다.

statsmodels는 좀 더 '전통적인' 빈도주의적 통계 메서드를 포함하고 있다.

 

13.3.1 선형 모델 예측하기

선형회귀 모델

최소제곱부터 ols

반복재가중 최소제곱 IRLS

 

13.3.2 시계열 처리 예측

시계열 분석을 위한 모델에는 자동회귀 처리, 칼만 필터링과 다른 상태 공간 모델 그리고 다변 자동회귀 모델 등이 있다.

AR모델을 피팅할 때는 포함시켜야 할 지연항을 얼마나 두어야 하는지 알지 못하므로 적당히 큰 값으로 모델을 피팅한다.

 

13.4 scikit-learn소개

scikit-learn은 표준적은 지도 학습과 비지도 학습 메서드를 포함하고 있으며 모델 선택, 평가  , 데이터 변형, 데이터 적재, 모델 유지 및 기타 작업을 위한 도구들을 제공한다.

statsmodels나 scikit-learn라입러리는 일반적으로 누락된 데이터를 처리하지 못하므로 데이터셋에 빠진 값이 있는지 살펴본다.

isnull().sum()

fillna()

 

LogisticRegression모델을 이용 

 

교차검증 

cross_val_score

반응형
반응형

12.1.3 Categorical연산

임의의 숫자 데이터를 pandas.qcut함수

pandas.cut함수

import numpy as np; import pandas as pd
np.random.seed(12345)

draws = np.random.randn(1000)
print(draws[:5])

bins = pd.qcut(draws,4)
print(bins)
bins = pd.qcut(draws,4,labels=['Q1','Q2','Q3','Q4'])
print(bins)

categorical을 이용한 성능 개선

bins = pd.Series(bins, name='quartile')

results = (pd.Series(draws).groupby(bins).agg(['count','min','max']).reset_index())
print(results)
N = 10000000

draws = pd.Series(np.random.randn(N))
labels = pd.Series(['foo','bar','bax','qux'] * (N //4)) 

categories = labels.astype('category')
print(labels.memory_usage())
print(categories.memory_usage())

12.1.4 Categorical메서드

cat.codes

cat.set_categories()

value_counts()

cat.remove_unused_categories()

 

모델링을 위한 더미값 생성하기

통계나 머신러닝 도구를 사용하다 보면 범주형 데이터를 더미값으로 변환

get_dummies

 

12.2 고급 GroupBy 사용

12.2.1 그룹 변환과 GroupBy 객체 풀어내기

apply

transfrom(lambda x: x.mean())

rank(ascending=False)

 

12.2.2 시계열 그룹 리샘플링

resample

count

pd.TimeGrouper객체

 

12.3 메서드 연결 기법

DataFrame.assign메서드

 

12.3.1 pipe메서드

pipe 메서드 연결을 좀 더 쉽게 쓸 수 있도록 해준다.

pipe를 이용한 유용한 패턴 중 하나는 일련의 연산을 재사용 가능한 함수로 일반화하는 것이다.

 

13. 파이썬 모델링 라이브러리

통계문제

statsmodels와 scikit-learn

반응형

' > python for Data Analysis' 카테고리의 다른 글

14-1. 데이터 분석 예제  (0) 2021.03.01
13-2. 파이썬 모델링 라이브러리  (0) 2021.03.01
11-3. 시계열  (0) 2021.02.21
11-2. 시계열  (0) 2021.02.21
10-3. 데이터 집계와 그룹 연산 11-1. 시계열  (0) 2021.02.19
반응형

11.4 시간대 다루기

시간대를 처리하는 일은 시계열을 다루는 작업 중에서 가장 유쾌하지 않은 부분 중 하나다.

국제표준시 coordinated universal time UTC

 

pytz

pytz에서 시간대 객체를 얻으려면 pytz.timezone을 사용하면 된다.

 

11.4.1 시간대 지역화와 변환

pandas에서 시계열은 시간대를 엄격히 다루지 않는다.

 

지격화 시간으로의 변환은 tz_localize메서드

tz_convert 시간대로 변환 가능

 

11.4.2 시간대를 고려해서 Timestamp객체 다루기

Timestamp

 

11.4.3 다른 시간대 간의 연산

시간대 합치기 +

 

 

11.5 기간과 기간 연산

Period 클래스 

pd.period_range()

 

11.5.1 Period의 번도 변환

기간과 PeriodIndex객체는 asfreq메서드를 통해 다른 빈도로 변환할 수 있다.

 

11.5.2 분기 빈도

Q-JAN 

Q-DEC 202101- 201204

 

11.5.3 타임스탬프와 기간 서로 변환하기

to_period메서드

 

11.5.4 배열로 PeriodIndex 생성하기

PeriodIndex 

 

11.6 리샘플링과 빈도 변환

리샘플링는 시계열의 빈도를 변환하는 과정을 일컫는다.

상위 빈도의 데이터를 하위 빈도로 집계하는 것을 다운 샘플링이라고 하며

반대 과정을 업샘플링이라고 한다.

resample

 

11.6.1 다운샘플링

시계열 데이터를 규칙적인 하위 빈도로 집계하는 일은 특별한 일이 아닌다.

집계할  데이터는 고정 빈도를 가질 필요가 없으며 잘라낸 시계열 조각의 크기를 원하는 빈도로 정의한다.

closed ='right' 시작값을 그룹의 오른쪽에 포함시킨다.

 

OHLC 리샘플링

ohlc()

 

반응형
반응형

11.1.1 문자열을 datetime으로 변환하기

from datetime import datetime
stamp = datetime(2011, 1, 3)
str(stamp)
stamp.strftime('%Y-%m-%d')
from dateutil.parser import parse
parse('2011-01-03')

국제 로케일의 경우 날짜가 월 앞에 오는 경우가 매우 흔하다. dayfirst = True

 

pd.isnull()

 

 

11.2 시계열 기초

datetime객체로 표현하는 타임스탬프로 색인된 Series다.

 

11.2.1 색인 선택 부분 선택

truncate

 

11.2.2 중복된 색인을 갖는 시계열

is_unique 속성을 통해 확인해보면 색인이 유일하지 않음을 알 수 있다.

groupy(level=0)

 

11.3 날짜 범위 빈도 이동

pandas에서 일반적인 시계열은 불규칙적인 것으로 간주된다.

빈도 간 변환이나 리샘플링은 큰 주제이므로 다음에 따도 다루도록 하겠다.

 

11.3.1 날짜 범위 생성하기

pd.date_range

특정 빈도에 따라 지정한 길이만큼의 DatetimeIndex를 생성

date_range 일별 타임스탬프를 생성

pd.date_range('2012-04-02','2012-06-01')

pd.date_range('2012-04-02',periods = 20 )

빈도값 'BM'

pd.date_range('2012-04-02','2012-06-01', freq='BM')

normalize=True 정규화

 

11.3.2 빈도와 날짜 오프셋

기본빈도 base frequency

'M','H'

날짜 오프셋

from pandas.tseries.offsets import Hour, Minute

 

월별 주차

WOM으로 '월별 주차'

 

11.3.3 데이터 시프트

Series와 DataFrame은 색인은 변경하지 않고 데이터를 앞이나 뒤로 느슨한 시프트를 수행하는 shift메서드를 가지고 있다.

shift는 일반적으로 한 시계열 내에서  , 혹은 DataFrame의 컬럼으로 표현할 수 있는 여러 시계열에서의 퍼센트 변화를 계산할 때 흔히 사용하며

 

오프셋만큼 날짜 시프트하기

from pandas.tseries.offsets import Day,MonthEnd

rollforward

rollback

resample 

반응형
반응형

10.3.3 예제: 그룹에 대한 다른 값으로 결측치 채우기

누락된 데이터를 정리할 떄면 어떤 경우에는 dropna를 사용해서 데이터를 살펴보고 걸러내기 도 한다. 

하지만 어떤 경우에는 누락된 값을 고정된 값이나 혹은 데이터로부터 도출된 어떤 값으로 채우고 싶을 떄도 있다.

fillna메서드를 사용하는데 , 누락된 값읖 평균값으로 대체하는 예제:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(6))
s[::2] = np.nan

print(s)

s.fillna(s.mean())

그룹별로 채워 넣고 싶은 값이 다르다고 가정 할 경우 

apply 함수 사용

states = ['Ohio', 'New York','Vermont','Florida','Oregen','Nevada','California','Idaho']
group_key = ['East'] * 4 +['West'] * 4

data = pd.Series(np.random.randn(8), index = states)
print(data)

data[['Vermont','Nevada','Idaho']] = np.nan
print(data)

data.groupby(group_key).mean()
fill_mean = lambda g: g.fillna(g.mean())
data.groupby(group_key).apply(fill_mean)
fill_values = {'East':0.5, 'West':-1}
fill_func = lambda g:g.fillna(fill_values[g.name])
data.groupby(group_key).apply(fill_func)

10.3.4 예제: 랜덤 표본과 순열

Series 의 sample메서드

apply(함수 이름  , n = 4)

def 함수이름(deck, n = 5):

    return deck.sample(n)

 

10.3.5 예제: 그룹 가중 평균과 상관관계

각 연도별로 할 수 도 있다.

get_year = lambda x:x.year

by_year = rets.groupby(get_year)

by_year.apply(spx_corr)

 

10.3.6 예제 : 그룹상의 선형회귀

statsmodel를 사용해서 regress라는 함수를 작성하고 각 데이터 묶음마다 최소제곱으로 회귀를 수행할 수 있따.

 

 

10.4 피벗 테이블과 교차일람표

피벗테이블은 스프레드시트 프로그램과 그 외 다른 데이터 분석 소프트웨어에서 흔히 볼 수 있는 데이터 요약화 도구다.

피벗테이블은 데이터를 하나 이상의 키로 수집해서 어떤 키는 로우에, 어떤 키는 컬럼에 나열해서 데이터를 정렬한다.

margins = True를 넘겨서 부분합을 포함하도록 확장할 수 있는데, 그렇게 하면 All컬럼과 All로우가 추가되어 단일 줄 안에서 그룹 통계를 얻을 수 있다.

집계함수 aggfunc

 

 

10.4.1 교차일람표

교차일람표(또는 교차표)는 그룹 빈도를 계산하기 위한 피벗테이블의 특수한 경우다.

pandas.crosstab

 

11. 시계열

시간상의 여러 지점을 관측하거나 측정할 수 있는 모든 것이 시계열이다.

고정빈도 fixed frequency:

대부분의 시계열은 고정빈도로 표현되는데 데이터가 존재하는 지점이 15초마다, 5분마다, 한달에 한 번 같은 특정 규칙에 따라 고정 간격을 가지게 된다.

 

시계열은 또한 고정된 단위나 시간 혹은 단위들 간의 간격으로 존재하지 않고 불규칙적인 모습으로 표현될 수도 있다.

타임스탬프

기간

간격

시간의 측정값

 

11.1 날짜  시간 자료형  도구

datetimd.datetime

now = datetime.now()

datetime.timedelta

반응형

' > python for Data Analysis' 카테고리의 다른 글

11-3. 시계열  (0) 2021.02.21
11-2. 시계열  (0) 2021.02.21
10-2. 데이터 집계와 그룹 연산  (0) 2021.02.18
09-2. 그래프와 시각화 10-1. 데이터 집계와 그룹 연산  (0) 2021.02.17
09-1. 그래프와 시각화  (0) 2021.02.17
반응형

10.1.3 사전과 Series 에서 그룹핑하기

groupby메서드 

 

10.1.4 함수로 그룹핑하기

이름의 길이별로 그룹을 묶고 싶다면 이름의 길이가 담긴 배열을 만들어 넘기는 대신 len 함수를 넘기면 된다.

groupby(len).sum()

groupby([len. key_list]).min()

 

10.1.5 색인 단계로 그룹핑하기

import pandas as pd
import numpy as np
columns = pd.MultiIndex.from_arrays([['US','US','US','JP','JP'],
                                    [1,3,5,1,3]],
                                   names = ['city','tenor'])

hire_df = pd.DataFrame(np.random.randn(4,5), columns = columns)
hire_df.groupby(level='city', axis=1).count()

 

10.2 데이터 집계

데이터 집계는 배열로 부터 스칼라값을 만들어내는 모든 데이터 변환 작업을 말한다.

최적화된 groupby 메서드

count 그룸에서 NA가 아닌 값의 수를 반환한다.
sum NA가 아닌 값들의 합을 구한다.
mean NA가 아닌 값들의 평균을 구한다.
median NA가 아닌 값들의 산술 중간값을 구한다.
std,var 편항되지 않는 (n-1을 분모로 하는 )표준화와 분산
min,max NA가 아닌 값들의 중 최솟값과 최댓값
prod NA가 아닌 값들의 곱
first,last NA가 아닌 값들 중 첫쨰 값과 마지막 값

quantilte 메서드는 Groupby 만을 위해 구현되지 않았지만 Series 메서드이기 때문에 여기서 사용할 수 있다.

aggregate나 agg메서드에 해당 함수를 넘기면 된다.

describe 같은 메서드는 데이터를 집계하지 않는데도 잘 작동함을 확인 할 수 있다.

 

 

10.2.1 컬럼에 여러 가지 함수 적용하기

aggregate -> agg

 

10.2.2 색인 되지 않은 형태로 집계된 데이터 반환하기

as_index = False 불필요한 계산을 피할 수있다.

 

10.3 Apply: 일반적인 분리-적용-병합

apply()

 

10.3.1 그룹 색인 생략하기

group_keys = False

 

10.3.2 변위치 분석과 버킷 분석

cut : 임의의 데이터 묶음을 cut

qcut 

반응형
반응형

9.2.1 선 그래프

s = pd.Series()

s.plot()

 

Series객체의 색인은 matplotlib에서 그래프를 생성할 때 x축으로 해석되며 use_index= False옵션을 넘겨서 색인을 그래프의 축으로 사용하는 것을 막을 수 있다.

x축의 눈금과 한계는 xticks와 xlim옵션으로 조절할 수있으며

y축 역시 yticks와 ylim옵션으로 조절할 수 있다.

 

DataFrame의 plot메서드는 하나의 서브플릿 안에서 각 컬럼별로 선그래프를 그리고 자동적으로 범례를 생성한다.

df = pd.DataFrame()

df.plot()

 

df.plot.line()과 동일

 

9.2.2 막대 그래프

plot.bar() 수직막대그래프 x눈금

plot.barh() 수평막대그래프 y눈금

 

누적막대그래프는 stacked  = True옵션을 사용해서 생성 , 각 로우의 값들이 하나의 막대에 누적되어 출력된다.

 

seaborn.barplot 메서드의 hue옵션을 이용하면 추가 분류에 따라 나눠 그릴 수 있다.

seaborn.set메서드를 이용

 

9.2.3 히스트그램과 밀도 그래프

Series의 plot.hist메서드

밀도 그래프 plot.ked 

plot.density()

 

sns.distplot메서드를 이용해서 히스트그램과 밀도 그래프를 한 번에 손 쉽게 그릴 수 있다.

양봉분포 bimodal distribution

 

9.2.4 산포도 

sns.replot 메서드를 이용해서 산포도와 선형회귀 곡선을 함께 그릴 수 있다.

pairplot " 짝지은 그래프 또는 선포도 행렬 

 

9.2.5 패싯 그리드와 범주형 데이터 

factorplot은 보여주고자 하는 목적에 어울리는 다른 종류의 그래프도 함께 지원한다.

상자그림 box plot

 

9.3 다른 파이썬 시각화 도구

 

 

10. 데이터 집계와 그룹 연산

데이터셋을 분류하고 각 그룹에 집계나 변형 같은 함수를 적용하는 건 데이터 분석 과정에서 무척 중요한 일이다.

데이터를 불러오고 취합해서 하나의 데이터 집합을 준비하고 나면 그룹 통계를 구하거나 가능하다면 피벗 테이블을 구해서 보고서를 만들거나 시각화하게 된다.

pandas는 데이터 집합을 자연스럽게 나누고 요약할 수 있는 groupby라는 유연한 방법을 제공한다.

 

관계형 데이터베이스와 SQL

 

10.1 GroupBy 메카닉

분리-적용-결합

groupby 

 

10.1.1 그룹간 순회하기

dict(list(df.groupby()))

 

10.1.2 컬럼이나 컬럼의 일부만 선택하기

GroupBy 객체를 컬럼 이름이나 컬럼 이름이 담긴 배열로 색인하면 수집을 위해 해당 컬럼을 선택하게 한다.

반응형
반응형

정보 시각화는 데이터 분석에서 무척 중요한 일 하나다.

시각화는 특잇값을 찾아내거나, 데이터 변형이 필요한지 알아보거나, 모델에 대한 아이디어를 찾기 위한 과정의 일부이기도 하다. 

웹상에서 구현되는 최종목표

matplotlib 2D 그래프를 위한 데스크톱 패키지로, 출판물 수준의 그래프를 만들어내도록 설계되였다.

IPython 셸 IPython 과  matplotlib

seaborn

%matplotlib notebook

 

9.1 matplotlib API 간략하게 살펴보기

import matplotlib.pyplot as plt

import matplotlib.pyplot as plt
%matplotlib notebook

import numpy as np
data = np.arange(10)
print(data)

plt.plot(data)

9.1.1 figure 와 서버플롯

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

plt.plot(np.random.randn(50).cumsum(),'k--')

서브플롯 간의 간격 조절하기

간격 spacing

여백 padding

subplots_ajust 메서드를 사용해서 쉽게 바꿀 수 있다.

subplots_ajust(left = None, bottom = None, right= None, top = None, wspace = None, hspace = None)

wspace , hspace는 서블플롯 간의 간격을 위해 각각 figure의 너비와 높이에 대한 비융을 조절한다.

 

9.1.2 색상 마커 선 스타일

color

마커 

linestyle ="dashed"

plt.legend

 

9.1.3 눈금 라벨 범례

xlim

xticks

xticklables

 

AxesSubplot 객체에 대해 동작 

ax.get_xlim ax.set_xlim

 

 

 

제목 축이름 눈금 눈금 이름 설정하기

set_xticks : 전에 데이터 범위를 따라 눈금을 어디에 배치할 지 지정한다.

set_xticklabels : 다른 눈금 이름을 지정하고 싶을 경우

set_xlabel x축에 이름을 지정하고

set_title 메서드는 서블플롯의 제목을 지정한다.

 

범례 추가하기

레벨 인자를 넘기는 것이다.

ax.legend(loc = 'best')

label = '_nolegend_'

 

9.1.4 주석과 그림 추가하기

text, arrow, annotate함수를 사용해서 추가한다.

text함수는 그래프 내의 주어진 좌표(x,y)에 부가적인 스타일로 글자를 그려준다.

 

9.1.5 그래프를 파일로 저장하기

plt.savefig()

 

9.1.6 matplotlib 설정

plt.rc()

 

9.2 pandas에서 seaborn 으로 그래프 그리기

pandas를 사용하다 보면 로우와 컬럼 라벨을 가진 다양한 컬럼의 데이트를 다루게 된다.

seaborn 은 흔히 사용하는 다양한 시각화 패턴을 쉽게 구현할 수 있도록 도와준다.

반응형

+ Recent posts