기본 콘텐츠로 건너뛰기

11월, 2017의 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

데이터의 진수 변환

컴퓨터는 기본적으로 0과 1만을 인식합니다. 다시말하면 on/off만을 인식하는 것이지요. 이는 숫자 체계에서 2진수와 같습니다. 그러나 사람들은 10진수 체계에 익숙해져 있기 때문에 입력하는 데이터는 컴입장에서는 2진수로 변환하여야 합니다. 진수간의 변환은 어려운 것이 아닐지라도 상당히 번거로운 작업입니다. 그러나 파이썬은 이 변환된 값을 반환하는 함수들을 제공합니다. 이 방식에 대해 알아보면 다음과 같습니다. 기본적으로 파이썬에서 각 진수의 표현은 다음과 같습니다. 2진수 : 0b 8진수 : 0o 16진수 : 0x 또한 다음 함수들을 10진수인 값을 각 진수로 변환하는 함수입니다. 각 함수의 결과는 문자형이라는 것에 주의하여야 합니다. 2진수 : bin() 8진수 : oct() 16진수 : hex()  In [1]: type(15) Out[1]: int  In [2]: x2=bin(15)  In [3]: x2 Out[3]: '0b1111' In [4]: 1*2**3+1*2**2+1*2**1+1*2**0 Out[4]: 15 In [5]: type(x2) Out[5]: str In [6]: oct(15) Out[6]: '0o17' In [7]: 1*8**1+7*8**0 Out[7]: 15 In [8]: hex(15) Out[8]: '0xf' 16진수는 다음과 같이 구성된다.  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f 그러므로 15는 f 코드 [2]부터 10진수를 다른 진수 값으로 변환하였다. 그러나 이 결과는 모두 문자열이다. 이 값들을 다시 정수형으로 변환시키기 위해서는 int(객체, 진수형) 함수를 사용한다. In [9]: int(x2, 2) Out[9]: 15 In [10]: int(oct(15), 8) Out[10]: 15 In [11]: int(hex(15), 16) Out[11

datetime 객체(ing)

datetime 클래스  datetime 클래스는 date 클래스 와 유사하지만 시간, 분, 초, 마이크로초, tzinfo의 정보를 담을 수 있는 차이가 있다.  datetime.datetime(year, month, day,  [ ,  hour [ ,  minute [ ,  second [ ,  microsecond [ ,  tzinfo ] ] ] ] ] 위 클래스 구조에서 보는 것과 같이 매개변수 year, month, day는 필수적으로 전달해야 하는 매개변수인데 반해 hour이하의 매개변수는 생략가능하다.  또한 각 인수는 정수형으로 다음의 범위를 가진다.  - 1 <= year M= 9999 - 1<= month <= 12 - 1<= day <= 각 월의 마지막 일 (28, 29, 30, 31) - 0<= hour <24 - 0<= minute < 60 - 0<= microsecond < 1000000 datetime 클래스 메소드  datetime.today() ; 현재 date를 나타낸다. (컴퓨터에 지정된 지역 시간 기준) In [1]: from datetime import * In [2]: datetime.today() Out[2]: datetime.datetime(2017, 11, 28, 23, 30, 20, 492179) 코드 [4]과 [5]에서 나타낸 것과 같은 결과를 보인다.  특히 코드 [4]의 time.time()은 모듈 time의 클래스 메소드이다.  In [3]: import time In [4]: datetime.fromtimestamp(time.time()) Out[4]: datetime.datetime(2017, 11, 28, 23, 32, 18, 585437) datetime.now([tz]) ; 지정된 지역시간대 정보를 기준으로 현재의 날짜 정보를 반환

대상값이 속하는 구간 나타내기(ing)

기준 구간에서 대상값이 속하는 구간을 나타낼 필요가 있다. 단지 구간을 표시하기 위해 pd.cut() 함수를 사용하면 된다. 그러나 이 함수는 기준 구간을 별도로 객체화 할 수 없다. 이 경우 다음 함수를 사용할 수 있다. pd.Intereval(left, right, closed='right') 이 함수는  left< value <= right 즉, (left, right]로 결과를 반환하는 함수이다. 위 결과 중 '(': 개구간(open interval)  '[': 폐구간(closed interval) 이 함수의 인수중 closed는 폐구간의 위치를 설정하는 것으로 그 인수는 다음과 같다. 'left;, ;right', 'both', 'neither'을 선택할 수 있고 기본값은 'right'이다. In [1]: a=np.random.randint(1, 100, 5) 예로 사용할 데이터를 만들기 위해 임의의 수를 추출했다. 그 객체는 코드 [2]와 같다. In [2]: a Out[2]: array([14, 26, 46, 76, 53]) 코드 [2]의 결과를 기준으로 기준이 되는 10개의 구간을 생성하기 위해 각 구간의 값들을 linspace() 함수를 사용하여 추출하였다. 이 함수는 지정한 구간에 일정한 길이로 지정한 수 만큼을 생성한다. In [3]:a_int=np.linspace(min(a)-1, max(a)+1, 10) In [4]: a_int Out[4]: array([ 13.        ,  20.11111111,  27.22222222,  34.33333333,         41.44444444,  48.55555556,  55.66666667,  62.77777778,         69.88888889,  77.        ]) 위의 결과에 객체 a의 각 원소가 어느 위치에 속하는 가를

date 객체

date 클래스 date 클래그 객체는 year, month, day를 나타낸다. datetime.date(year, month, day) 위함수의 인수는 정수형이다. 다음은 각 인수의 범위를 나타낸다. 범위를 나타내기 위해 date클래스의 속성 max (최대), min (최소)를 사용한다. In [1]: from datetime import * In [2]: date.max #최대값 Out[2]: datetime.date(9999, 12, 31) In [3]: date.min #최소값 Out[3]: datetime.date(1, 1, 1) - 1 <= year M= 9999 - 1<= month <= 12 - 1<= day <= 각 월의 마지막 일 (28, 29, 30, 31) today()메소드는 현재 date를 나타낸다.  In [1]: date.today() Out[1]: datetime.date(2017, 11, 26) 코드 1은 date.fromtimestamp(time.time())과 같은 결과를 반환한다. 이 코드에서 time.time()은 패키지 time의 클래스를 사용하는 것이다.  In [2]: import time In [3]: date.fromtimestamp(time.time()) Out[3]: datetime.date(2017, 11, 26) date.fromtimestamp(timestamp); 1970년 1월 1일 00:00:00을 기준으로 경과한 시간을 초로 환산하여 정수로 나타내는 POSIX에 대응하는 지역 date(year, month, day)를 반환한다. 그러므로 위 함수의 매개변수인 timestamp는 기준점으로 부터 경과한 초를 의미한다. 다음은 기준년과 현재 year의 차이를 초로 계산하여 인수로 전달하면 그 차이에 대응하는 일자를 나타낸다. In [4]: x=2017-1970 In [5

timedelta 객체

1. timedelta 객체 timedelta 객체는 두개의 dates, times사이의 차이 또는 기간을 나타낸다. datetime.timedelta() 모든 인수는 옵션이고 기본은 0이다. 인수값은 int, float 형이다. 단지 days, seconds 그리고  microseconds는 내부적으로 저장된다. 인수값은 다음과 같이 단위가 강제변환된다. 1usec=1000 msec 1 min  = 60 sec 1 hr= 3600 sec 1 week = 7days 이 클래스는 두 값들의 차이를 나타내는데 그 차이를 계산할 수 있는 범위는 다음과 같다. - 0 <= microseconds < 1000000 - 0<=seconds < 3600*24=86400 - -999999999 <= days <= 999999999 위에서 timedelta 클래스에서 계산할 수 있는 범위의 종류는 days, seconds, microseconds이다. 이것은 시간, 분은 모두 초로 환산하여 계산한다는 것을 의미한다. >>> timedelta(hours=-5) datetime.timedelta(-1, 68400) >>> 24*3600-5*3600  68400 5시간 이전을 의미한다. 시간단위로 인수를 전달했지만 결과는 초로 환산되어 반환된다. >>> timedelta(minutes=50) datetime.timedelta(0, 3000) 분으로 인수를 전달할 경우도 역시 마찬가지로 초로 환산하여 결과를 반환한다. 이것은 이 클래스가 가지는 속성의 days, seconds, microseconds라는 것을 의미하는 것이다. 다음을 보자. In [1]: from datetime import * In [2]: d=timedelta(microseconds=-1) In [3]: [d.days, d.seconds, d.microseconds]

datetime module의 개요

1. Introduction  datetime 모듈은 날짜와 시간의 관련된 조정을 할 수 있는 많은 클래스를 제공한다. 이 모듈에서 기준이 되는 year의 범위는 다음과 같다. In [1]: import datetime In [2]: datetime.MINYEAR Out[2]: 1 In [3]: datetime.MAXYEAR Out[3]: 9999 시간의 범위를  알아보기 위해 datetime 모듈의 time 클래스를 사용한다. In [4]: datetime.time.min Out[4]: datetime.time(0, 0) In [5]: datetime.time.max Out[5]: datetime.time(23, 59, 59, 999999) 위에서 나타낸 것과 같이 datetime 모듈의 경우 5개의 클래스를 포함한다. 1) datetime.date ;   날짜를 다루는 클래스로 year, month, day 의 속성 을 가진다. 속성 은 클래스에 전달하는 인수값을 각각의 인덱스 또는 매개변수 이름에 매칭하여 반환시켜주는 일종의 함수이다. 그러므로 속성은 그 자체의 매개변수를 별도로 가지지 않는다. 2) datetime. time; 시간을 다루는 클래스로 1일을 24*60*60 초로 계산한다. 속성으로는 hour, minute, second, microsecond, tzinfo  tzinfo는 지역시간대 정보(time zone information) 값이다. 3.)datetime.datetime ; 시간과 날짜를 합한 정보를 다루는 클래스이다. 속성으로는 위의 각 클래스에 속하는 모든것을 포함한다. 즉, year, month, day, hour, minute, second, microsecond, tzinfo 4) datetime.timdelta; 두 date, time 또는 datetime의 instance들 사이의 차이를 마이크로초의 resolution의 수준에서 반환하는 클래스

Date 데이터의 조정

Date 클래스 문자열을 날짜 인덱스로 변환 일일 주가자료를 주중자료로 변환 시간 데이터 수열 생성 Date 데이터의 조정 Date 클래스 날짜는 date 클래스를 사용하여 조정할 수 있습니다. 이 클래스는 year, month, day 의 속성을 가지고 있다. 또한 요일은 메소드 weekday() 에 의해 확인할 수 있으며 0 ~ 6 사이의 정수를 반환합니다. 각 수치는 다음과 같이 요일을 대표한다. 0:월요일, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일요일 오늘의 날짜를 나타내기 위해서는 today() 메소드를 사용합니다. import datetime today=datetime.date.today() today datetime.date(2022, 3, 11) today.year 2022 today.month 3 today.day 11 today.weekday() 4 print(today) 2022-03-11 date.ctime() 은 날짜를 나타내는 문자열을 반환합니다 today.ctime() 'Fri Mar 11 00:00:00 2022' 문자열을 날짜 인덱스로 변환 다음과 같이 날짜 타입인 문자열인 경우 분석을 위해서는 date 형식으로 변환하여야 합니다. x="2010. 10. 11 오후 3:30:00" type(x) str x에서 '오후'를 제거하고 숫자 형식의 문자만을 date 형식으로 변환합니다. 이 변환은 str객체.replace() 와 pandas.to_dateTime() 메소드를 사용할 수 있습니다. 또한 문자열에서 특정부분만을 변환하기 위해서 str객체.split() 메소드를 사용할 수 있습니다. x="2010. 10. 11 오후 3:30:00" type(x) str x1=x.replace("오후", "") x1 '

시간의 조절_datetime.time 클래스

datetime 모듈로 부터 time 값의 조정 Time 값들은 time 클래스에 의해 조정됩니다 . 시간은 시간 , 분 , 초 그리고 마이크로 초에 대한 속성을 가집니다 . 그들은 또한 시간 지역대 정보 (time zone information) 를 포함합니다 . Time instance 를 초기화하기 위한 인수들은 선택사항이고 0 이 디폴트 값으로 지정되어 있습니다 . In [1]: import datetime   In [2]: t=datetime.time(1,2,3)   In [3]: t Out[3]: datetime.time(1, 2, 3)   In [4]: t.hour Out[4]: 1 In [5]: t.minute Out[5]: 2 In [6]: t.second Out[6]: 3 In [7]: t.microsecond #microsecond 는 위 클래스에 지정되지 않았으므로 0 이 반환 Out[7]: 0 In [8]: t.tzinfo # 지역대 정보는 입력되지 않아 결과가 없다 . 코드 [2] 의 time 인스턴스 ( 클래스객체 ) 는 날짜에 대한 정보를 포함하지 않습니다 . 이 클래스 즉 , datetime.time 의 범위를 알아보기 위해 min, max 의 클래스 속성을 사용할 수 있습니다 . In [9]: datetime.time.min Out[9]: datetime.time(0, 0) In [10]: datetime.time.max Out[10]: datetime.time(23, 59, 59, 999999) 코드 [9],[10]은 time 클래스에서 조정할 수 있는 time의 범위를 알아볼 수 있습니다. 위의  결과에 의하면 0시 0분 ~ 23시 59분 59초 999999 마이크로초의 범위 내에서 시간을 반환합니다. datetime.time에 전달할 수 있는 인수의 형태는 정수형입니다. In [11]: try:     ...:   

객체에 대한 판단_all, any, bool

all, any, bool all() , any() 는 객체에 대한 판단을 True/False로 반환합니다. all: 객체의 모든 원소가 참일때만 참 any: 객체의 모든 원소가 거짓일 때만 거짓 주의할 점은 두 함수의 대상이 되는 객체는 반복가능한 (iterable) 객체로서 문자열(string), 리스트(list), 터플(turple)등이 대상이 됩니다. 0이 아닌 모든 값은 True로 인식된다. 0이외의 모든 값은 True로 인식됩니다. import numpy as np import pandas as pd x=np.random.randint(0, 10, 7) x[3]=0 x array([3, 4, 2, 0, 6, 8, 8]) all(x), any(x) (False, True) all(x>3) False any(x>3) True 내장함수인 all(), any()는 객체 전체를 판단합니다. 객체의 각 요소에 대한 판단은 bool() 에 의해 실행됩니다. bool() 객체의 각 요소에 대한 True/False를 판단 객체 자체의 판단은 에러발생 bool(x[2]) True [bool(i) for i in x] [True, True, True, False, True, True, True] 다음 함수는 조건에 부합하는 요소의 인덱스를 반환합니다. 이 함수를 적용하여 bool() 결과의 인덱스를 결정할 수 있습니다. np.where(객체, 조건) 객체내에서 조건에 부합하는 요소의 인덱스를 반환합니다. np.where([bool(i)==False for i in x]) (array([3]),)

절대값 구하기

abs() 절대값을 반환하는 내장함수로서 복소수의 경우는 다음과 같은 값을 반환 a+bj : In [1]: [abs(-4.83), abs(3+2j)] Out[1]: [4.83, 3.605551275463989] 이 함수는 사용자 정의함수로 다음과 같이 작성됩니다. def absS(x):     if type(x) != complex:#전달되는 객체의 타입을 알아봅니다.         if x<=0:             y=-1*x         else:             y=x     else:         y=(x.real**2+x.imag**2)**0.5     return(y) 위에서 나타낸 것과 같이 복소수의 절대값은 그것의 크기를 나타냄. 프로그램상에서 이 판단을 위해 if 조건문을 사용. In [2]: x=3+2j In [3]: absS(x) Out[3]: 3.605551275463989

결측치 조정

내용 무한값 처리 결측치와 무한값 처리 기존 값 적용 결측치와 무한값 처리 결측치 무한값 찾기에서 소개한 것과 같이 무한값과 결측치는 데이터 분석에 에러의 요인이 될 수 있습니다. 이들을 처리하는 방법을 알아봅니다. 무한값 처리 import math import numpy as np import pandas as pd x=np.random.rand(4, 3) x array([[0.17140876, 0.37005834, 0.14919173], [0.69883701, 0.40073611, 0.937198 ], [0.21978333, 0.69411595, 0.17695472], [0.91698133, 0.11506327, 0.9352178 ]]) x[1,2]=float("inf") x array([[0.17140876, 0.37005834, 0.14919173], [0.69883701, 0.40073611, inf], [0.21978333, 0.69411595, 0.17695472], [0.91698133, 0.11506327, 0.9352178 ]]) 객체 x에서 무한값의 인덱스를 결정하기 위해 np.isinf() 와 np.where() 함수를 사용할 수 있습니다. infId=np.where(np.isinf(x)) infId (array([1]), array([2])) 위의 결과와 같이 행과 열의 인덱스를 별도로 반환 됩니다. x[infId] array([inf]) np.delete(x, index, axis=None) x: 객체 index: 제거할 행 또는 열 인덱스로 기준축에 따라 행 또는 열이 결정됩니다. axis: 기준 축 객체 x의 무한값의 인덱스는 [1, 2]입니다. 다음 코드는 0축 즉