Story 1. Cloud, A programmable Resource Management
1
A programmable Resource Management
- programmable : Virtualization, Automation
- Elastic (Scale-out)
- Available (HA)
- Resilient (회복성)
- Resource : computing, Networ, Pass, DB … -> service
- Management : platform
DevOps : 기존에는 개발과 운영에 주안점이 있었다면 요즘은… DevSecOps -> AIDevSecOps -> MLOps -> NoOps … FinOps : 관리비용최적화(안쓸때는 끄는 등 최소과금 형태로 관리)
향후에는 AWS -> 부채가 심하다, 서비스가 너무 세분화되어있다. vs Azure -> 아직까지는 워크로드가 AWS로부터 많이 넘어오지 않았음
연속형 변수 요약
(1) 중심(center) : 평균, 중위수, 절사평균 - 중위수와 절사폄균은 극단치의 영향을 덜 받으므로 평균의 단점을 보완한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
apt = pd.read_excel('data/아파트_실거래가_서울.xlsx')
apt.shape # data frame의 행열의 수
apt.columns
# 변수명 변경
apt.rename(columns = {'전용면적(㎡)' : '면적', '거래금액(만원)' : '가격'}, inplace = True)
apt.columns
apt.head()
# 평균
apt.가격.mean()
# 중위수
apt.가격.median()
# 기초통계량
tb = apt.단가.describe()
from scipy import stats
stats.trim_mean(apt.단가, 0.2) # 절사평균의 경우는 pandas에서 지원하지 않으므로 scipy 로 계산한다.
(2) 산포도(spread) : 범위, 분산, 표준편차, 사분위수 - 산포도는 그 값 자체보다는 비슷한 그룹과의 비교를 통해 크고 작음을 판단할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 표준편차
apt.단가.std()
# 범위 (최대값 - 최소값)
tb['max'] - tb['min']
# 사분위수 범위
Q1 = tb['25%']
Q3 = tb['75%']
IQR = Q3 - Q1
print('IQR = ', IQR) # IQR(InterQuartile Range)값 자체만으로 spread를 판단하기는 어렵고 비교군 간의 IQR값을 본다.
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
print("lower : ", lower, "upper : ", upper)
tf = apt.단가.between(lower,upper) # outlier 범주 밖의 값들
outliers = apt.loc[~tf, :] # outlier 범주 밖의 반전이므로 outlier 에 해당하는 값들의 범위
outliers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 실제 사용예시 : 구별로 단가의 중심, 산포도를 계산하고 비교
apt.groupby('구').단가.describe()
apt.groupby('구').단가.median()
apt.groupby('구').단가.median().sort_values()
apt.groupby('구').단가.median().sort_values(ascending = False)
apt.groupby('구').단가.std().sort_values()
# 용산구 자료만 추출
s = apt[apt.구 == '용산구']
s_tb = s.단가.describe()
Q1 = s_tb['25%']
Q3 = s_tb['75%']
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
tf = s.단가.between(lower,upper)
outliers = s.loc[~tf, :]
outliers
(3) 왜도(skewness) - 평균과의 거리의 세제곱이 포함됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pandas as pd
apt = pd.read_excel('data/아파트_실거래가_서울.xlsx')
apt.columns
apt.rename(columns = {'전용면적(㎡)' : '면적', '거래금액(만원)' : '가격'}, inplace = True) # inplace: 자료에 변경점을 반영한다.
apt['단가'] = apt.가격 / apt.면적
# 왜도
# 왜도 값이 양수(1.446649)이므로 오른쪽으로 긴 꼬리를 가진 분포임을 유추할 수 있음
apt.단가.skew()
# 왜도의 값이 가장 작은 경우인 중구의 경우 왜도 값이 음수이므로 왼쪽으로 긴 꼬리를 가진 분포임을 유추할 수 있음
# 왜도의 값이 가장 큰 경우인 노원구의 경우 왜도 값이 양수이므로 오른쪽으로 긴 꼬리를 가진 분포임을 유추할 수 있음
apt.groupby('구').단가.skew().sort_values()
(4) 첨도(kurtosis) - 평균과의 거리의 네제곱이 포함됨 - 정규분포를 기준으로 하며, 정규분포의 첨도는 0으로 한다.
1
2
3
4
5
6
7
8
9
# 첨도 값이 양수이므로 정규분포에 비해서 두꺼운 꼬리를 가진 분포임을 할 수 있음
apt.단가.kurtosis()
# 중구의 경우 첨도 값이 양수이고 절대값이 크므로 더 두꺼운 꼬리를 가진 분포임을 할 수 있음
apt.단가[apt.구 =='중구'].kurtosis()
# 금천구의 경우 첨도 값이 0에 가까우므로 정규분포와 비슷한 정도의 꼬리 분포를 가지고 있음을 알 수 있음
apt.단가[apt.구 =='금천구'].kurtosis()
(5) 상관계수(correlation coefficient) - 두 변수와의 선형관계의 강도와 방향을 나타냄(일반적으로 피어슨 상관계수) - 두 변수의 공분산(covariance)을 각각의 표준편차의 곱으로 나눈 값 - 두 변수의 값이 아닌 순위(rank)에 관심이 있다면 스피어만 상관계수, 켄달 타우 등을 고려한다.
1
2
3
4
5
6
7
8
9
10
11
# 0.7014737005275267 -> 상관계수가 0.7 ($70\%$)이므로 가격과 면적은 상당히 높은 양의 상관관계를 가지고 있는 것으로 보임.
# 상관관계는 어짜피 -1 ~ 1 사잇값
apt['가격'].corr(apt['면적'])
# 예시 : y값이 x로부터 계산되어 서로 연관되어 있지만 계산된 상관계수는 0 : 비선형 관계를 반영하지 못함
import numpy as np
x = pd.Series(np.arange(-20, 21))
y = x ** 2 # 비선형임.
x.corr(y)