[Day 22] Section 1 Review
2022. 2. 22. 17:31ㆍAI/Codestates
728x90
반응형
Summary
- 데이터셋을 불러오기 위한 단계
- Description을 통해 데이터셋에 대한 정보를 파악합니다
- 행과 열의 수
- 열에 헤더가 있는지 ( "데이터 이름"이 있는지? )
- 결측 데이터 ( Missing Data )가 있는지 확인
- 원본형태를 확인하기
- pandas.read_csv를 사용하여 데이터셋 불러오기를 시도하고, 오류가 있다면 원인에 대해 조사하기
- Description을 통해 데이터셋에 대한 정보를 파악합니다
- EDA(Exploratory Data Analysis) 탐색적 자료 분석
- EDA란? 데이터 분석에 있어서 매우 중요한 조기분석단계를 의미하면
- 시각화 같은 도구를 통해서 패턴을 발견하거나
- 데이터 특이성을 확인하거나
- 통계와 그래픽 ( 혹은 시각적 표현 )을 통해서 가설을 검증하는 과정등을 포함합니다.
- EDA의 방법
- Graphic : 차트 혹은 그림
- Non-Graphic : Summary statistics
- EDA의 "타겟" ( 데이터 )
- Univariate
- Multi - variate
- EDA란? 데이터 분석에 있어서 매우 중요한 조기분석단계를 의미하면
-
df = df.transpose() # 행과 열 바꾸기 # transpose()를 할 경우 첫번째 row가 인덱스 값으로 바뀌게되므로 제거해줘야 함. df.rename(columns = df.iloc[0], inplace = True) df = df.drop(df.index[0])
- 엑셀 파일 시트가 여러 개인 경우
-
import pandas as pd # sheet_name = "시트 순서 index" pd.read_excel("주소", sheet_name = 0)
-
- 데이터 크기 확인
- ( 행, 열 ) 값 확인 하기
df.shape
- 결측치 ( NaN 값 또는 None 값 ) 대체 및 제거
- df = df.fillna(0)
- 결측치가 있는 행 제거
df.dropna(axis = 0)
- 결측치가 있는 열 제거
df.dropna(axis = 0)
- 결측치 인덱스 상 앞 데이터로 대체
df.fillna(method = "ffill")
- 결측치 인덱스 상 뒤 데이터로 대체
df.fillna(method = "bffill")
- ( 행, 열 ) 값 확인 하기
- Feature Engineering
: 도메인 지식과 창의석을 바탕으로, 데이터셋에 존재하는 Feature들을 재조합하여 새로운 Feature을 만드는것.
ex) BMI - Tidy
- NaN ( Not A Number ) -> float 형
- Type 알아보기
df.dtypes
- apply 사용법
- apply안에 들어갈 함수를 선언
- column에 apply 적용
- ex)
df["자본"].apply(toInt)
- 데이터 합치기
- concat
- ex) pd.concat([x, y]) -> column으로 합쳐짐
- ex) pd.concat([x, y], axis = 1) -> row로 합쳐짐
- merge
- Inner-Join : 두 데이터간의 중복된 요소만을 Join
- Outer-Join : 모든 데이터들을 Join
- Left-Join : 왼쪽 데이터셋을 기준으로 Join
- Right-Join : 오른쪽 데이터셋을 기준으로 Join
- concat
- Conditioning
- to_numberic() 함수로 numberic형으로 변환
- Groupby
-
-> df 변수에서 "테마" feature을 기준으로 평균 값 구하기df.groupby("테마").mean()
-
- Tidy data
-
-> df 변수에서 "survived"를 기준으로 "adult_male", "alone"에 대해 var의 이름은 "variable" 이고 value의 이름은 "Value"로 저장해서 melt함df.melt(id_vars= "survived", value_vars= ["adult_male", "alone"], var_name= "variable", value_name="Value")
-
- Tidy data -> Wide data
-
-> index에 "survived" 데이터를 column에 "variable" 데이터들의 평균 값을 table 형태로 출력df_tidy.pivot_table(index = "survived", columns= "variable",aggfunc="mean")
-
- 미분 ( Derivative )
- 미분이란? 작을 미(微) 와 나눌 분(分) 으로 작게 나눈다는 뜻
- Δx를 점점 0에 가깝게 해서 순간의 변화량을 측정 하고자 하는것이 더 구체적인 목표
- 미분 공식 w / Python
- Numberical Method
: 실제로 0으로 나눌 수는 없기 때문에 0에 매우 근사한 값을 사용, 보통 1e - 5을 사용한다. - 𝑓(𝑥) = 상수 → 𝑓′(𝑥) = 0
- 𝑓(𝑥)=𝑎𝑥𝑛 → 𝑓′(𝑥)=𝑎𝑛𝑥(𝑛−1) --> Power Rule
- 𝑓(𝑥)=𝑒𝑥 → 𝑓′(𝑥)=𝑒𝑥
- 𝑓(𝑥)=𝑙𝑛𝑥 → 𝑓′(𝑥)=1 / 𝑥 --> 자연로그 중요 ✮✮✮
- Numberical Method
- 경사 하강법 ( Gradient Desent )
: 오차 함수인 𝜀을 최소화 하는 a, b를 찾을 수 있는 최적화 알고리즘 중의 하나 - 그래프 색 입히기 ( 색 확인 )
plt.plot(data_for_graph["biden_online_multiple"], color='#c93e51')
- 그래프 제목 설정 ( title() 함수 사용 )
plt.title("Biden's Ukraine-related media bump is fading")
- 기술 통계치 ( Descriptive Statistics ) : 데이터를 설명하는 값 ( 혹은 통계치 )들
-
df.count() df.mean() df.std()
-
- 추리 통계치 ( Inferetial Statistics )
- ex) Population, Parameter, Statistic 등
- Effective Sampling
- Simple Randim Sampling : 모집단에서 Sampling을 무작위로 하는 방법
-
# Simple Random data = pd.DataFrame(np.random.randint(1,101,20), columns = ["samples"]) data
-
- Systematic Sampling : 모집단에서 Sampling을 할 때 규칙을 가지고 추출하는 방법
-
# systematic sampling (1~5까지 먼저 랜덤한 숫자 하나를 뽑고 5씩 늘여가는 규칙) samples = np.array(range(np.random.randint(1,5), 101, 5)) data_2 = pd.DataFrame(samples, columns = ["samples"]) data_2
-
- Stratified Random Sampling : 모집단을 미리 여러그룹으로 나누고, 그 그룹별로 무작위 추출을 수행하는 방법
-
# Stratified random sampling data = [i for i in range(1,101)] data_divided = [] data_list = [] # 1~10, 11~20 이런 형태로 10개의 그룹으로 나누기 for i in range(10): data_divided.append(data[0:10]) del data[0:10] # 그룹별로 2개씩 뽑아 data_list에 list형으로 저장 for j in data_divided: data_list.append(list(np.random.choice(j, 2))) # sum() 을 이용해 2차원 배열은 1차원 배열로 바꾼 후 DataFrame형으로 변환 data_3 = pd.DataFrame(sum(data_list, []), columns =["samples"]) data_3
-
- Cluster Sampling : 모집단을 미리 여러 그룹으로 나누고, 이후 특정 그룹을 무작위로 선택하는 방법
-
# cluster sampling data = np.arange(1,101) remain = np.random.randint(0,4) data_4 = pd.DataFrame(list(data[data % 5 == remain]), columns = ["samples"]) data_4
-
- Simple Randim Sampling : 모집단에서 Sampling을 무작위로 하는 방법
- 가설검증 : 주어진 상황에 대해서 하고자 하는 주장이 맞는지 아닌지를 판정하는 과정
- Student T - Test
- One Sample T - Test : 1개의 Sample 값들의 평균이 특정값과 동일한지 비교
-
from scipy import stats pv1 = stats.ttest_1samp(epop_tree, 400).pvalue
-
- Two Sample T - Test : 2개의 Sample 값들의 평균이 서로 동일한지 비교
-
from scipy import stats pv3 = stats.ttest_ind(zelkova_tree, kingcherry_tree).pvalue
-
- One Sample T - Test : 1개의 Sample 값들의 평균이 특정값과 동일한지 비교
- P - Value : 주어진 가설에 대해서 " 얼마나 근거가 있는지 " 에 대한 값으로 0과 1 사이의 값으로 Scale한 지표
- P - Value > 0.05 : 귀무가설을 기각하지 못한다. 귀무가설을 채택한다.
- P - Value <= 0.05 : 귀무가설을 기각. 즉, 대립가설을 채택한다.
- T - Test +
- 독립성 : 두 그룹이 연결되어 있는 ( Paired ) 쌍인지
- 정규성 : 데이터가 정규성을 나타나는지
- 등분산성 : 두 그룹이 어느정도 유사한 수준의 분산 값을 가지는지
- X^2 Test
- One Sample X^2 Test
-
from scipy.stats import chisquare chi1 = chisquare(df_sum, axis=None)
-
- Two Sample X^2 Test
-
from scipy.stats import chi2_contingency chi2_contingency(df)
-
- One Sample X^2 Test
- 자유도 ( Degrees Of Freedom ) : 해당 Parameter를 결정짓기 위한 독립적으로 정해질 수 있는 값의 수
- ANOVA ( One - Way ) : 2개 이상 그룹의 평균에 차이가 있는지를 가설검정하는 방법
-
from scipy.stats import f_oneway f_oneway(df_new['A'],df_new['B'],df_new['C'],df_new['D'])
-
- 1종 오류는 귀무가설이 실제로 참이지만, 이에 불구하고 귀무가설을 기각하는 오류이다. 즉, 실제 음성인 것을 양성으로 판정하는 경우이다. 거짓 양성 또는 알파 오류( α error )라고도 한다.
- 2종 오류는 귀무가설이 실제로 거짓이지만, 이에 불구하고 귀무가설을 채택하는 오류이다. 즉, 실제 양성인 것을 음성으로 판정하는 경우이다. 거짓 음성 또는 베타 오류( β error )라고도 한다.
- Many Samples
- 큰 수의 법칙 (Law Of Large Number ) : Sample 데이터의 수가 커질수록, Sample의 통계치는 점점 모집단의 모수와 같아진다.
-
#큰 수의 법칙 import numpy as np import pandas as pd pop = df_2['초미세먼지(㎍/㎥)'] large_numbers =[] for i in np.arange(5,740,5): s = np.random.choice(pop, i) large_numbers.append(s.var()) large_numbers mean_y = np.mean(large_numbers) (pd .DataFrame(large_numbers) .plot .line(color = '#343740') .axhline(y = mean_y, color = 'red') )
-
- 중심극한정리 ( Central Limit Teorem, CLT ) : Sample 데이터의 수가 많아질수록, Sample의 평균은 정규분포에 근사값으로 나타난다
-
#중심극한정리 import numpy as np import pandas as pd clt=[] pop = df_2['초미세먼지(㎍/㎥)'] size = [2, 10, 100, 500, 1000] for i in size: for j in np.arange(2,744,2): c = np.random.choice(pop,i) clt_mean = c.mean() clt.append(clt_mean) pd.DataFrame(clt).hist(color = '#698af5')
-
- 큰 수의 법칙 (Law Of Large Number ) : Sample 데이터의 수가 커질수록, Sample의 통계치는 점점 모집단의 모수와 같아진다.
- 신뢰도 : 신뢰도가 95%라는 의미는 표본을 100번 뽑았을 때 95번은 신뢰구간 내에 모집단의 평균이 포함된다.
- 이유불충분의 원리 ( = 무관심의 원칙, The Princilpe Of Insufficient Reason ) : 다른 사건보다는 하나의 사건을 기대할 만한 어떤 이유가 없는 경우에는 가능한 모든 사건에도 동일한 확률을 할당해야 한다는 원칙
- 총 확률의 법칙 ( The Raw Of Total Probability ) : A라는 특정 확률 변수에 대해, 모든 가능한 이벤트의 총 확률은 1이다.
- 조건부 확률 ( The Raw Of Conditional Probability ) : 주어진 사건이 일어났다는 가정 하에 다른 한 사건이 일어날 확률
- 베이지안 이론 ( Bayesian Theorem )
-
P(B) = P(B|A)*P(A) + P(B|notA)*P(notA) P(A|B) = P(B|A)*P(A) / P(B) # 베이지안 정리 P(A|B) = P(B|A)*P(A) / P(B|A)*P(A) + P(B|notA)*P(notA)
- TPR ( = 민감도, True Positive Rate = True Accept Rate) : 1인 케이스에 대해 1로 잘 예측한 비율
- FPR ( = 1 - 특이도, False Positive Rate = False Accept Rate ) : 0인 케이스에 대해 1로 잘못 예측한 비율
-
- Data Structure
- 1D : List
- 2D : Pandas의 DataFrame, 2차원 List, 2차원 Array, 2차원 Matrix 등
- Dimensionality Reduction : PCA, SVD
- 사이즈가 큰 데이터 셋을 사이즈가 작은 부분으로 나누는 작업 ( 일반적으로 시각화나 다른 모델링을 위해서 사용 )
- 스칼라, 벡터
- 스칼라 : 단일 숫자
- 벡터 : 크기와 방향을 가지는 값
- 벡터의 크기 : 모든 원소의 제곱을 더한 후 루트를 씌운 값
- 벡터의 내적 : 각 구성요소를 곱한 뒤 더한 값
- 매트릭스 ( Matrix ) : 행과 열을 통해 배치되어 있는 숫자들
- Dimesionality : 매트릭스의 행과 열의 숫자를 차원 이라 표현
- Determinant : 모든 정사각 매트릭스가 갖는 속성
-
import numpy as np np.linalg.det(m)
- 행렬식이 0인 경우 ( = 특이( Singular ) 매트릭스 ) : 역행렬이 존재하지 않는다.
-> 매트릭스의 행과 열이 선형의 의존관계가 있는 경우
-
- Inverse : 역행렬을 계산하는 방법은 여러가지가 있으면 행렬의 역수와 같이 표현 할 수 있다
-
import numpy as np np.linalg.inv(m)
-
- 분산 ( Variance ) : 데이터가 얼마나 퍼져 있는지
- 표준 편차 ( Standard Deviation ) : 분산 값에 루트를 씌여준 값
- 공분산 ( Covariance ) : 1개의 변수 값이 변화 할때 다른 변수가 어떠한 연관성을 나타내며 변하는지를 측정하는 것
- 상관 계수 ( Correlation Coefficient ) : 공분산의 Scale 조절
- 수직성 ( Orthogonality ) : 벡터 혹은 매트릭스가 서로 수직으로 있는 상태
- Span : 주어진 두 벡터의 ( 합이나 차와 같은 ) 조합으로 만들 수 있는 모든 가능한 벡터의 집합
- ex) 선, 평면 등
- Rank : 매트릭스의 열을 이루고 있는 벡터들로 만들 수 있는 ( Span ) 공간의 차원
- 고유벡터 ( Eigenvector ) : Transformation에 영향을 받지 않는 회전축, ( 혹은 벡터 ) 을 공간의 고유벡터 라고 부름.
- 고유값 ( Eigenvalue ) : 고유벡터가 변화하는 특정 스칼라 값
- Dimension Reduction
- PCA ( Principal Component Analysis )
- 고차원 데이터를 효과적으로 분석하기 위한 기법
- 낮은 차원으로 차원축소
- 고차원 데이터를 효과적으로 시각화 + Clustering
- 원래 고차원 데이터의 정보 ( 분산 ) 를 최대한 유지하는 벡터를 찾고, 해당 벡터에 대해 데이터를 ( Linear ) Projection
- PCA의 특징
- 데이터에 대해 독립적인 축을 찾는데 사용할 수 있음
- 데이터의 분포가 정규성을 띄지 않는 경우 적용이 어려움
-> 이 경우는 커널 PCA를 사용 가능 - 분류 / 예측 문제에 대해서 데이터의 라벨을 고려하지 않기 때문에 효과적 분리가 어려움
-> 이 경우는 PLS 사용 가능
- PCA ( Principal Component Analysis )
- Machine Learning ( 개요 )
- 지도 학습 ( Supervised Learning ) : Supervised Learning은 트레이닝 데이터에 라벨 ( 답 ) 이 있을 때 사용할 수 있음.
- 분류 ( Classificantion ) : 분류 알고리즘은 주어진 데이터의 카테고리 혹은 클래스 예측을 위해 사용
- 회귀 ( Prediction ) : 회귀 알고리즘은 Continuous 한 데이터를 바탕으로 결과를 예측하기 위해 사용
- 비지도 학습 ( Unsupervised Learning )
- 클러스터링 ( Clustering ) : 데이터의 연관된 Feature를 바탕으로 유사한 그룹을 생성
- 차원축소 ( Dimensionality Redution ) : 높은 차원을 갖는 데이터셋을 사용하여 Feature Selection / Feature Extraction 등을 통해 차원을 줄이는 방법
- 연관 규칙 학습 ( Association Rule Learning ) : 데이터셋의 Feature들의 관계를 발견하는 방법 ( Feature - Output이 아닌 Feature - Feature )
- 강화 학습 (Reinforcement Learning ) : 머신러닝의 한 형태로, 기계가 좋은 행동에 대해서는 보상, 그렇지 않은 행동에는 처벌 이라는 피드백을 통해서 행동에 대해 학습해 나가는 형태
- 지도 학습 ( Supervised Learning ) : Supervised Learning은 트레이닝 데이터에 라벨 ( 답 ) 이 있을 때 사용할 수 있음.
- Clustering : Unsupervised Learning Algorithm의 한 종류
- 목적 : Clustering이 대답할 수 있는 질문은 주어진 데이터들이 얼마나, 어떻게 유사한지 이다. 그러나 동시에 정답을 보장하지 않는다 는 이슈가 있어서 production의 수준 혹은 예측을 위한 모델링에 쓰이기보다는 EDA를 위한 방법으로써 많이 쓰임.
- 종류 :
- Hierarchical
- Agglomerative : 개별 포인트에서 시작 후 점점 크게 합쳐감.
- Divisive : 한 개의 큰 Cluster에서 시작 후 점점 작은 Cluster로 나눠감.
- Point Assignment : 시작시에 Cluster의 수를 접한 다음, 데이터들을 하나씩 Cluster에 배정시킴
- Hierarchical
- Similarity
- Euclidean -> 일반적으로 많이 쓰임
- Cosine
- Jaccard
- Edit Distance
- Etc.
- K - Mean Clustering
- 과정 : N - 차원의 데이터에 대해서
- K개의 랜덤한 데이터를 Cluster의 중심점으로 설정
- 해당 Cluster에 근접해 있는 데이터를 Cluster로 할당
- 변경된 Cluster에 대해서 중심점을 새로 계산
Cluster에 유의미한 변화가 없을 때까지 2-3을 반복
- 과정 : N - 차원의 데이터에 대해서
728x90
반응형
'AI > Codestates' 카테고리의 다른 글
[Day 24] Multiple Regression (0) | 2022.02.23 |
---|---|
[Day 23] Simple Regression (0) | 2022.02.22 |
[Day 16 ~ Day 21] Section 1 Project (0) | 2022.02.22 |
[Day 15] Sprint Review (0) | 2022.02.10 |
[Day 14] Clustering (0) | 2022.02.09 |