alpyrithm_알파이리즘

DAY1. Data Analysis Basic & Pandas Basic 본문

SM공부/Data Mining & Machine Learning

DAY1. Data Analysis Basic & Pandas Basic

알파이 2020. 7. 20. 13:12

 

Summary

  • Data Analysis의 이해
  • Data Analysis 기본 구조
  • Pandas 주요 데이터 구조

 

 

 

 

 

 

 

Main

1. Data Analysis의 이해

  • 반복적인 프로세스
  • 기업/사회에서 발생하는 실제 문제를 분석하고 최적화된 솔루션을 도출하여 새로운 가치를 창출하는 것
  • Data Collection(데이터 수집), Data Wrangling(데이터 준비), EDA(탐색적 데이터 분석) 및 Drawing Conclusion(결론 도출)의 과정으로 이루어짐
  • 유용한 정보를 발굴하고 결론 내용을 알리며 의사결정을 지원하는 것을 목표로 데이터를 정리, 변환, 모델링하는 과정

 

 

 

참고 자료 : Hands-On Data Analysis with Pandas

참고 자료 : Hands-On Data Analysis with Pandas

 

 

 

 

 

 

 

 

 

2. Data Analysis 기본 구조

  • Data Collection(데이터 수집)
    • 모든 데이터 분석을 위한 첫 번째 단계
    • 분석에 필요한 데이터의 종류, 형태, 발생 주기, 수집 기간 및 방법 등 데이터의 특성을 명확히 파악하고 정의하는 것
    • 조사하거나 분석할 대상을 결정할 때 분석에 유용한 어떤 종류의 데이터를 수집해야 하는지에 대해 고려
    • 결론을 내리는 데 도움이 되는 데이터를 수집하고 있는지 확인하는 것이 중요
      • 예를 들어, 온도가 낮을 때 핫초콜릿 판매가 더 높은지 확인하려는 경우 매일 핫초콜릿 판매량과 온도에 대한 데이터 수집 필요
      • 사람들이 핫초콜릿을 얻기 위해 얼마나 멀리 여행했는지 보는 것이 흥미로울 수 있지만 분석과 관련이 없음
  • Data Wrangling(데이터 준비)
    • 데이터를 준비하고 분석에 사용할 수 있는 형식으로 가져오는 프로세스
    • 데이터의 현실은 데이터가 더러워서 사용하기 전에 청소(준비)가 필요
    • 데이터에서 발생할 수 있는 몇 가지 문제들
      • 인적 오류
        • 1000 대신 100을 입력하거나 오타를 입력하는 등 데이터가 잘못 기록된 경우.
        • 서울시, 서울과 같이 기록된 동일한 항목의 여러 버전이 있는 경우
      • 컴퓨터 오류
        • 한동안 항목을 기록하지 않은 경우(데이터 누락)
        • 예상치 못한 값
          • 데이터를 기록한 사람이 사용하기로 결정하지 못했던 값들
        • 불완전한 정보
          • 선택적인 질문이 있는 설문 조사의 경우 모든 사람이 대답하지는 않기 때문에 데이터가 누락된 경우
        • 필드의 관련성
          • 종종 데이터가 분석을 위한 일부 프로세스의 결과물로 수집되거나 생성된 경우, 사용 가능한 상태가 되려면 정리가 필요
        • 데이터 형식
          • 데이터가 분석에 도움이 되지 않는 형식으로 기록될 수 있으므로 데이터를 재구성해야 함
        • 데이터 기록 프로세스의 구성 오류
          • 새로운 데이터 포인트를 수집해야 하나?
          • 잘못 구성된 추적기 및 웹훅, 웹 크롤러와 같은 소스에서 가져온 데이터에 필드가 누락되었거나 잘못된 순서로 전달되는 케이스 발생
    • 데이터 확인을 통하여 발견된 결측치나 이상치에 대한 적절한 처리를 통해 데이터 품질을 보강하는 작업
    • 분석 결과의 신뢰성 향상을 위한 사전 작업으로 중요
  • Exploratory Data Analysis(EDA)
    • EDA 과정 동안 시각화 및 요약 통계를 사용하여 데이터를 더 잘 이해할 수 있음
    • 데이터에 따라, 시간에 따라 관심 변수가 어떻게 진화했는지, 각 범주에 속하는 관측치 수를 비교하고, 이상 값을 찾고, 연속 및 이산 변수의 분포를 살펴볼 수 있음
    • 다양한 시각화, 통계 분석을 이용하여 데이터의 패턴, 특성 및 변수 간의 관계 파악 등 데이터를 종합적으로 이해하는 과정
    • 그래프와 정보를 통합한 인포그래픽스(info-graphics)
    • 데이터의 전체적인 분포 모습 이해
    • 데이터 간의 상호 연관성 확인
  • Drawing Conclusion(결론 도출)
    • 분석을 위해 데이터를 수집하고 정리한 후 철저한 EDA를 수행한 후 결론을 도출하는 단계
    • 이 단계에서 EDA의 결과를 요약하고 다음의 질문들을 통해 단계로의 진행을 결정
      • 데이터를 시각화할 때 패턴이나 관계가 발견되었나?
      • 데이터는 어떻게 배포되는가?
      • 데이터는 우리가 가진 질문에 답하거나 조사 중인 문제에 대한 통찰력을 제공하는 데 도움이 되는가?
      • 새로운 또는 추가 데이터를 수집해야 하나?

 

 

 

 

 

 

 

 

 

 

 

3. Pandas 주요 데이터 구조

  • Python에는 튜플, 목록 및 사전과 같은 여러 데이터 구조가 이미 있음
  • Pandas는 데이터 작업을 용이하게 하기 위해 Series와 DafaFrame의 두 가지 주요 구조 제공
  • Series 및 DataFrame 데이터 구조에는 각각 다른 Pandas 데이터 구조가 포함되어 있지만, Pandas 데이터 구조를 이해하려면 Pandas가 빌드하는 n차원 Array를 제공하는 NumPy도 살펴볼 필요가 있음
  • 클래스 자체를 참조하지 않는 한 DataFrame 객체를 데이터 프레임으로, Series 객체를 Series로, Index 객체를 Index로 각각 참조
  • Data Structure은 Python 클래스로 작성.
    • 실제로 하나를 만들 때 이를 객체 혹은 인스턴스라고 하며, 일부 작업은 객체 자체 메서드를 사용하여 수행할 수 있는 반면, 다른 작업에서는 객체를 일부 함수에 대한 인수로 전달
  • Pandas 함수를 사용하여 CSV 파일을 DataFrame 클래스의 개체로 읽지만 열을 삭제하거나 요약 통계 계산과 같은 작업을 수행하기 위해서는 DataFrame 개체의 메서드를 사용
    • Pandas를 사용하면 객체의 속성에 액세스 가능
    • 이때, 메서드나 함수처럼 액션을 생성하지는 않지만, 대신 차원, 열 이름, 데이터 형식 및 비어 있는지 여부와 같은 Pandas 개체에 대한 정보가 제공됨

 

 

 

  • Numpy 사용법 익히기
    • np.genfromtxt
      • Load data from a text file, with missing values handled as specified
      • 텍스트 파일 읽는 함수
      • parameter
        • delimiter : str, int, or sequence, optional
          • 배열의 요소를 나누어 입력하기 위한 구분문자를 입력받는 파라미터
          • 기본값은 None으로 탭과 스페이스 같은 빈 공간을 나눈다.
        • autostrip : bool, optional
          • 스페이스와 같은 공간을 자동으로 없애버리는 기능을 가진 파라미터
          • 기본값은 False(거짓)
          • 문자열 등의 자료형을 넣을 경우 유용
        • comments : str, optional
          • 텍스트 파일에 주석이 포함되어 있는 경우, 주석을 제거하는 기능을 가진 파라미터
          • 기본값은 None
          • 주석에 해당하는 문자(열)(ex - #)을 입력하면 된다.
        • skip_header & skip footer : int, optional
          • 파일 전후단에 필요 없는 데이터가 있을 경우 필터링하는 파라미터
          • 해당 변수들은 정수 입력으로 해당되는 라인까지 제거
        • usecols : sequence, optional
          • 사용하고자 하는 열을 선택하는 파라미터
          • 정수 혹은 시퀀스 입력
        • names : {None, True, str, sequence}, optional
          • 열의 인덱스에 이름을 부여할 수 있는 파라미터
          • True인 경우 텍스트의 첫 번째 줄에서 names를 가져오는 파라미터
        • defaultfmt : str, optional
          • 열 이름을 입력하고자 하고, 열 이름을 정해진 형식에 맞춰 입력하고자 할 때 사용하는 파라미터
          • 문자열 형태로 입력
          • 기본값은 'f%i'
          • %i 대신 %02i로 입력할 경우 2자리 수로 입력
        • converters : variable, optional
          • 특별한 양식의 데이터 형식(예 : 날짜[yyyy/mm/dd], 퍼센트[xx%] 등)에서 데이터를 추출할 때 사용하는 파라미터
        • missing_values : variable, optional
          • 기본적으로 빈 문자열은 누락된 것으로 여겨 누락되거나 유효하지 않은 데이터를 표현하기 위해 특수한 문자열(예 : N/A, ??? 등)과 같은 복잡한 문자열을 고려하는 파라미터
        • filling_values : variable, optional
          • 데이터가 누락되었다는 것을 표시하는 파라미터
          • 누락된 데이터 위치에 채우는 기본값은 자료형에 따라 다름
        • usemask : bool, optional
          • usemask 변수를 True로 설정하면 불린마스크(boolean mask)를 구성하여 누락된 데이터의 발생을 추적하는 파라미터
          • usemask를 True로 설정하면 MaskedArray가 출력으로 나오며 누락됐으면 True 아니면 False를 출력
    • data.shape : array 차원
      • tuple 형태 - (int, (int))
    • data.dtype : array 포함된 데이터 유형
      • type, size, byte order of the data
      • type
        • int
        • bool
        • float
        • complex
        • bytes
        • str
      • byte order
        • > : big-endian
        • < : little-endian
      • array-protocol type
        • ? : boolena
        • b : (signed) byte
        • B : unsigned byte
        • i : (signed) integer
        • u : unsigned integer
        • f : floating-point
        • c : complex-floating point
        • m : timedelta
        • M : datetime
        • O : (Python) objects
        • S, a : zero-terminated bytes (not recommended)
        • U : Unicode string
        • V : raw data (void)
      • 예시
        • np.dtype('i4') : 32-bit signed integer
        • np.dtype('f8') : 64-bit floating-point number
        • np.dtype('c16') : 128-bit complex floating-point number
        • np.dtype('a25') : 25-length zero-terminated bytes
        • np.dtype('U25') : 25-character string
    • data.dtype.names
      • ordered list of field names
      • None if there are no fileds
      • 예시
        • np.dtype([('name', np.str_, 16), ('grades', np.float64_, (2, ))])
        • dt.names    # ('name', 'grades')
    • argmax(a, axis=None, out=None) : 차원에 따라 가장 큰 값의 인덱스 반환
      • returns the indices of the maximum values along an axis
      • parameters
        • a : array_like
        • axis : int, optional
        • out : array, optional
      • 예시
        • a = array([[10, 11, 12], [13, 14, 15]])
        • np.argmax(a)     # 5
        • np.argmax(a, axis=0)   # array([1, 1, 1])
        • np.argmax(a, axis=1)   # array([2, 2])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'SM공부 > Data Mining & Machine Learning' 카테고리의 다른 글

DAY6. Supervised Learning III  (0) 2020.07.27
DAY5. Supervised Learning II  (0) 2020.07.26
DAY4. Supervised Learning I  (0) 2020.07.25
DAY3. Dimension Reduction - PCA  (0) 2020.07.24
DAY2. Data Analysis Basic & Pandas Basic  (0) 2020.07.23
Comments