[Day 22] Section 1 Review

2022. 2. 22. 17:31AI/Codestates

728x90
반응형

Summary

  • 데이터셋을 불러오기 위한 단계
    1.  Description을 통해 데이터셋에 대한 정보를 파악합니다
      • 행과 열의 수 
      • 열에 헤더가 있는지 ( "데이터 이름"이 있는지? )
      • 결측 데이터 ( Missing Data )가 있는지 확인
      • 원본형태를 확인하기
    2. pandas.read_csv를 사용하여 데이터셋 불러오기를 시도하고, 오류가 있다면 원인에 대해 조사하기
  • EDA(Exploratory Data Analysis) 탐색적 자료 분석
    • EDA란? 데이터 분석에 있어서 매우 중요한 조기분석단계를 의미하면
      • 시각화 같은 도구를 통해서 패턴을 발견하거나
      • 데이터 특이성을 확인하거나
      • 통계와 그래픽 ( 혹은 시각적 표현 )을 통해서 가설을 검증하는 과정등을 포함합니다.
    • EDA의 방법
      • Graphic :  차트 혹은 그림
      • Non-Graphic : Summary statistics
    • EDA의 "타겟" ( 데이터 )
      • Univariate
      • Multi - variate
  • 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
  • Conditioning
    • to_numberic() 함수로 numberic형으로 변환
  • Groupby
    • df.groupby("테마").mean()​
       -> df 변수에서 "테마" feature을 기준으로 평균 값 구하기
  • Tidy data
    • df.melt(id_vars= "survived", value_vars= ["adult_male", "alone"], var_name= "variable", value_name="Value")
      -> df 변수에서 "survived"를 기준으로 "adult_male", "alone"에 대해 var의 이름은 "variable" 이고 value의 이름은 "Value"로 저장해서 melt함
  • Tidy data -> Wide data
    • df_tidy.pivot_table(index = "survived", columns= "variable",aggfunc="mean")
      ->  index에 "survived" 데이터를 column에 "variable" 데이터들의 평균 값을 table 형태로 출력
  • 미분 ( Derivative )
    • 미분이란? 작을 미(微) 와 나눌 분(分) 으로 작게 나눈다는 뜻
    • Δx를 점점 0에 가깝게 해서 순간의 변화량을 측정 하고자 하는것이 더 구체적인 목표
  • 미분 공식  w / Python
    • Numberical Method
      : 실제로 0으로 나눌 수는 없기 때문에 0에 매우 근사한 값을 사용, 보통 1e - 5을 사용한다.
    • 𝑓(𝑥) = 상수  𝑓(𝑥) = 0
    • 𝑓(𝑥)=𝑎𝑥𝑛  𝑓(𝑥)=𝑎𝑛𝑥(𝑛1)  --> Power Rule
    • 𝑓(𝑥)=𝑒𝑥  𝑓(𝑥)=𝑒𝑥
    • 𝑓(𝑥)=𝑙𝑛𝑥  𝑓(𝑥)=1 / 𝑥 --> 자연로그 중요 ✮✮✮
  • 경사 하강법 ( 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
    1. Simple Randim Sampling : 모집단에서 Sampling을 무작위로 하는 방법
      • # Simple Random
        data = pd.DataFrame(np.random.randint(1,101,20), columns = ["samples"])
        data
    2. 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
    3. 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
    4. 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
  • 가설검증  : 주어진 상황에 대해서 하고자 하는 주장이 맞는지 아닌지를 판정하는 과정
  • 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
  • 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)
  • 자유도 ( 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')
  • 신뢰도 : 신뢰도가 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 사용 가능
  • 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 ) : 머신러닝의 한 형태로, 기계가 좋은 행동에 대해서는 보상, 그렇지 않은 행동에는 처벌 이라는 피드백을 통해서 행동에 대해 학습해 나가는 형태
  • Clustering : Unsupervised Learning Algorithm의 한 종류
    • 목적 :  Clustering이 대답할 수 있는 질문은 주어진 데이터들이 얼마나, 어떻게 유사한지 이다. 그러나 동시에 정답을 보장하지 않는다 는 이슈가 있어서 production의 수준 혹은 예측을 위한 모델링에 쓰이기보다는 EDA를 위한 방법으로써 많이 쓰임.
    • 종류 :
      • Hierarchical
        • Agglomerative : 개별 포인트에서 시작 후 점점 크게 합쳐감.
        • Divisive : 한 개의 큰 Cluster에서 시작 후 점점 작은 Cluster로 나눠감.
      • Point Assignment : 시작시에 Cluster의 수를 접한 다음, 데이터들을 하나씩 Cluster에 배정시킴
    • Similarity
      • Euclidean -> 일반적으로 많이 쓰임
      • Cosine
      • Jaccard
      • Edit Distance
      • Etc.
  • K - Mean Clustering
    • 과정 : N - 차원의 데이터에 대해서
      1. K개의 랜덤한 데이터를 Cluster의 중심점으로 설정
      2. 해당 Cluster에 근접해 있는 데이터를 Cluster로 할당
      3. 변경된 Cluster에 대해서 중심점을 새로 계산
        Cluster에 유의미한 변화가 없을 때까지 2-3을 반복
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