5.3 기술 통계 계산과 요약
pandas 객체의 수학,통계 메서드 대부분은 하나의 Series나 DataFrame의 로우나 컬럼에서 단일 값(합,평균 등)을 구하는 축소(reduction)혹은 요약 통계(summary statistics)에 속한다. 계산 시 NaN데이터를 제외하도록 설계됨
df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
[np.nan, np.nan], [0.75, -1.3]],
index=['a', 'b', 'c', 'd'],
columns=['one', 'two'])
DataFrame의 sum 메서드를 호출하면 각 로우의 합을 담은 Series를 반환한다. axis=1을 넘기면 각 컬럼의 합을 반환한다.
df.sum()
#one 9.25
#two -5.80
#dtype: float64
df.sum(axis='columns')
#a 1.40
#b 2.60
#c 0.00
#d -0.55
#dtype: float64
skipna옵션을 False로 주면 NaN값을 포함하여 계산한다.
idxmin, idxmax 메서드는 최솟값 혹은 최댓값을 가지는 색인값을 반환한다.
df.idxmax()
#one b
#two d
#dtype: object
df.idxmax(axis=1)
#a one
#b one
#c NaN
#d one
#dtype: object
cumsum 메서드는 누산 값을 반환한다.
describe메서드는 한 번에 여러 통계 결과를 보여준다. (axis 정해주지 못함)
5.3.1 상광관계와 공분산
AAPL(apple), IBM, MSFT(microsoft), GOOG(google)의 주식가격 price와 시가총액 volume의 날짜별 DataFrame을 생각해보자.
a와 b의 공분산이란 a가 증가할 때 b가 증가 혹은 감소하는 경향이 있는지, 두 a,b의 변화가 무관한지에 대한 정보를 갖는 변수다. 단위의 크기에 따라 값이 천차만별이다.
상관계수란 공분산을 보완하기 위한 개념이다.
-1~1값을 갖으며 1에 가까울수록 같이 증가, 0에 가까울수록 무관하다는 의미가 있다.
returns를 날짜의 변화에 따른 주식가격의 변동(퍼센트 변화율)이라고 하면 다음과 같다.
returns = price.pct_change()
마이크로소프트와 IBM의 퍼센트변화율의 상관계수,
마이크로스프트와 google의 퍼센트변화율의 상관계수는 다음과 같다.
returns.MSFT.corr(returns.IBM)
#0.5932757131783176
returns.MSFT.corr(returns.GOOG)
#0.7820240206528357
DataFrame의 corrwith 메서드를 사용하면 다른 Series나 DataFrame과의 상관관계를 계산한다.
Series를 넘기면 각 컬럼에 대해 계산한 상관관계를 담고 있는 Series를 반환한다.
returns.corrwith(returns.IBM)
#AAPL 0.527319
#IBM 1.000000
#MSFT 0.593276
#GOOG 0.542109
#dtype: float64
DataFrame을 넘기면 맞아딸어지는 컬럼 이름에 대한 상관관계를 계산한다.
시가총액의 퍼센트 변화율에 대한 상관관계
returns.corrwith(volume)
#AAPL -0.132944
#IBM -0.105303
#MSFT -0.061838
#GOOG -0.147565
#dtype: float64
axis=1 옵션을 넘기면 각 컬럼에 대한 상관관계와 공분산을 계싼한다. 모든 경우 데이터는 상관관계를 계산하기 전에 색인의 이름순으로 정렬된다.
5.3.2 유일값, 값 세기, 멤버십
1차원 Series의 정보를 추출하는 메서드
Series의 unique 메서드는 중복값을 제거하고 유일값만 담고 있는 array를 반환한다.
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
obj.unique()
#array(['c', 'a', 'd', 'b'], dtype=object)
value_counts 메서드는 값의 도수를 계산하여 Series 객체를 반환한다.
obj.value_counts()
#a 3
#c 3
#b 2
#d 1
#dtype: int64
value_counts에서 반환하는 Series는 담고 있는 값(도수)을 내림차순으로 정렬한다. pandas의 최상위 메서디이므로 어떤 순차 자료구조에서도 사용할 수 있다. sort옵션에 False를 넘기면 값이 정렬되지 않은 채로 반환된다.
pd.value_counts(obj.values, sort=False)
#c 3
#a 3
#d 1
#b 2
#dtype: int64
isin 메서드는 어떤 값이 Series에 존재하는지 나타내는 불리언 Series를 반환하는데, Series나 DataFrame의 컬럼에서 값을 골라내고 싶을 때 유용하게 사용할 수 있다.
obj
#0 c
#1 a
#2 d
#3 a
#4 a
#5 b
#6 b
#7 c
#8 c
#dtype: object
mask
#0 True
#1 False
#2 False
#3 False
#4 False
#5 True
#6 True
#7 True
#8 True
#dtype: bool
obj[mask]
#0 c
#5 b
#6 b
#7 c
#8 c
#dtype: object
Index객체의 get_indexer메서드는 여러 값이 들어 있는 배열에서 유일한 값의 색인 배열을 구할 수 있다.
to_match = pd.Series(['c', 'a', 'b', 'b', 'c', 'a'])
unique_vals = pd.Series(['c', 'b', 'a'])
pd.Index(unique_vals).get_indexer(to_match)
#array([0, 2, 1, 1, 0, 2], dtype=int64)
DataFrame의 여러 컬럼에 대해 히스토그램을 구해야 하는 경우가 있다.
data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],
'Qu2': [2, 3, 1, 2, 3],
'Qu3': [1, 5, 2, 4, 4]})
result = data.apply(pd.value_counts).fillna(0)
result결과를 보면, data상 qu1에서 1,2,3,4,5가 각각 1회 0회 2회 2회 0회등장했음을 알 수 있다.
이 정보로 나중에 matplotlib등을 사용해서 히스토그램으로 시각화 할 수 있다.
'ML&DATA > python for data analysis' 카테고리의 다른 글
pandas - (데이터 정제 및 준비) (0) | 2020.07.22 |
---|---|
pandas - (데이터 로딩과 저장, 파일 형식) (0) | 2020.07.21 |
pandas - (재색인, 중복 색인 등 핵심 기능) (0) | 2020.07.20 |
pandas - (Series, DataFrame, Index) (0) | 2020.07.19 |
numpy 기본 : 배열과 벡터 연산 (0) | 2020.07.19 |