alpyrithm_알파이리즘

DAY2. Data Analysis Basic & Pandas Basic 본문

SM공부/Data Mining & Machine Learning

DAY2. Data Analysis Basic & Pandas Basic

알파이 2020. 7. 23. 09:52

Summary

  • Pandas 데이터 프레임 훈련(Macro)
    • 파일, SQL 쿼리에서 데이터 프레임 만들기
    • DataFrame 검사 및 요약 통계
  • Pandas 데이터 프레임 훈련(Micro)
    • Selection(선택)
    • Slicing(슬라이싱)
    • Indexing(인덱싱)
    • Filtering(필터링)

 

 

 

 

 

 

 

 

 

 

Main

Pandas 데이터 프레임 훈련

  • Series의 활용
    • pandas.Series class는 NumPy 배열과 같이 단일 유형의 데이터 배열에 대한 데이터 구조를 제공
    • 1차원 표현은 스프레드 시트에서 row로 생각할 수 있으며, 각 row의 이름을 가지고 있고 여기서 데이터는 (같은 변수를 측정하기 때문에) 같은 유형
    • pandas.Series
      • One-dimensional ndarray with axis labels 
      • 결과값 중 왼쪽 숫자 : 원래 데이터 세트의 column 번호에 해당(0부터 시작, 1씩 오프셋)
        • 행 번호는 Index 객체 구성
      • column 번호 옆의 실제 column 값
        • 데이터를 나타내는 문자열
      • 장소 유형 개체 이름 옆 dtype : object는 Series의 데이터 타입이 객체임을 말함
        • 문자열은 Pandas에서 객체로 분류
      • Series 객체의 속성에 액세스하기 위해 <Series_object>.<attribute_name> 형식의 속성 표기법을 사용
    • Serires 정리 - 속성 : 반환값
      • name : Series 객체의 이름
      • dtype : Series 객체의 데이터 타입
      • shape : (row로 이루어진) Series 객체의 차원
      • index : Series 객체의 index 객체
      • values : Numpy array의 Series 객체 내 데이터 값
  • Index의 활용
    • Index 클래스를 추가하면 Series 클래스가 NumPy 배열보다 훨씬 강력해지고 Index 클래스는 행 레이블을 제공하여 행별로 선택 가능
    • Index 유형에 따라 Column 번호, 날짜 또는 Column을 선택하기 위한 문자열을 제공, 데이터에서 항목을 식별하는 데 중요한 역할
    • Index 속성을 통해 Index 객체에 액세스
    • pandas.Series.index
      • the index(axis labels) of the Series
      • return : RangeIndex(start = num1, stop = num2, step = num3)
        • 인덱스 num1에서 시작하는 RangeIndex로 마지막 인덱스가 num2보다 작다.
        • step은 인덱스가 num3씩 떨어져 있음을 나타내며, 해당 범위에 모든 정수가 있음
      • 기본 인덱스는 RangeIndex이지만, 인덱스 변경 가능
      • Column 번호 또는 날짜(시간)의 Index 객체로 작업하는 경우 존재
    • Index 정리 - 속성 : 반환값
      • name : Index 객체의 이름
      • dtype : Index 객체의 데이터 타입
      • shape : (row로 이루어진) Index 객체의 차원
      • index : Index 객체의 index 객체
      • values : Numpy array의 Index 객체 내 데이터 값
      • is_unique : Index 객체가 모두 고유값을 갖고 있는지 여부
    • NumPy와 Pandas는 모두 산술 연산을 지원하며 요소별로 수행
    • Pandas를 사용하면 요소 별 산술이 Index가 일치하는 값에서만 수행
    • numpy.linspace()
      • evenly spaced numbers over a specified interval
      • ndarray that num equally spaced samples in the closed interval
      • parameters
        • start : the starting value of the sequence
        • stop : the end value of the sequence
        • num : (optional) number of samples to generate
  • DataFrame 활용
    • Series 클래스를 사용하면 기본적으로 스프레드 시트의 row가 있던 데이터는 모두 같은 유형으로 DataFrame 클래스는 Series 클래스 기반
    • 스프레드 시트 전체를 나타내는 것으로 생각하면 되는데, 각각 고유한 데이터 유형을 가진 많은 row를 가질 수 있다. 샘플 데이터로 NumPy 표현 중 하나를 DataFrame 객체로 변경
    • pandas.DataFrame
      • Two-dimensional, size-mutable, potentially heterogeneous tabular data
      • labeled axes(rows, columns)
    • DataFrame 정리 - 속성 : 반환값
      • dtypes : 각 column의 데이터 타입
      • shape : (row, column으로 이루어진) DataFrame 객체의 차원
      • index : DataFrame 객체의 index 객체
      • values : Numpy array DataFrame 객체 내 데이터 값
      • columns : DataFrame 객체 내 Index 객체의 column
    • CSV 파일로 DataFrame 만들기
      • 데이터 덤프는 텍스트 파일(.txt) 또는 CSV 파일(.csv) 형식으로 제공, Pandas는 다양한 유형의 파일을 읽을 수 있는 방법 제공
      • pandas.read_csv() 함수 사용하여 파일 읽을 수 있음
        • read a comma-separated values(csv) file into DataFrame
      • 파일을 읽기 전에 항상 파일을 먼저 검사해야 하며, 구분 기호를 지정하기 위해 sep와 같은 추가 인수를 전달해야 하거나 header row가 없는 경우 row 이름을 제공하기 위한 작업을 해야 함
      • Pandas 파라미터 정리 - 속성 : 반환값
        • sep : 구분자 지정
        • header : row 이름이 있는 column 이름
        • index_col : 인덱스로 사용할 column
        • usecols : 읽을 column 지정
        • dtype : row의 데이터 타입
        • converters : 데이터가 특정 column으로 변환되도록 지정
        • skiprows : 건너뛸 row
        • nrows : 한 번에 읽을 row 수(비트 단위로 파일 읽기 위해 skiprows와 결합 사용)
        • parse_dates : 날짜가 포함된 row의 데이터를 날짜/시간 객체로 자동 구문 분석
        • chunksize : 파일을 청크로 읽기
        • compression : 미리 추출하지 않고 압축 파일을 읽기
        • encoding : 파일 인코딩 지정
      • 파일 읽기와 마찬가지로 Series 및 DataFrames에는 Excel(to_excel()) 및 JSON 파일(to_json())에 데이터를 쓰는 메서드 존재
      • Pandas 함수를 사용하여 데이터를 읽는 동안 메서드를 사용하여 데이터를 작성하고, reading function은 우리가 작업하고자 하는 Pandas 객체를 생성하며, write 메서드는 팬더 객체를 사용하여 얻음
    • DB(SQL Lite)를 통한 데이터 프레임 만들기
      • Pandas는 데이터베이스를 포함한 다른 많은 데이터 소스에서 읽고 쓸 수 있는 기능을 제공
      • 추가 패키지 설치 없이도 Pandas는 SQLite 데이터베이스와 상호작용 가능
      • 다른 DB feature와 interaction 하려면 SQLAlchemy 패키지를 설치해야 하는데, Python 표준 라이브러리에서 sqlite3 모듈을 사용하여 데이터베이스와 연결 후, 연 다음 pd.read_sql() 함수를 사용하여 데이터베이스를 query 하거나 DataFrame 객체에서 to_sql() 메서드를 사용하여 데이터 베이스와 연동
      • 데이터베이스에서 읽기 전에 먼저 데이터베이스에 writing을 진행
      • 데이터 프레임에서 to_sql()을 호출하여 쓸 테이블, 사용할 DB 연결 및 테이블이 이미 존재하는지 처리하는 방법을 알려주는 것을 이용
      • Query(쿼리)
        • 데이터베이스를 쿼리하는 것은 데이터베이스를 작성하는 것만큼 쉬움
        • SQL(Structuered Query Language)에 대한 지식이 필요하나 간단히 작성 가능
        • 전체 테이블에 대한 데이터베이스를 Query SQL 쿼리를 작성할 때 먼저 선택할 열을 지정. 이 경우 모두 row이므로 "SELECT *"를 작성
        • 데이터를 선택하기 위해 테이블을 "FROM data명"을 추가
        • SELECT (Column) FROM (Table)
        • 실제로 데이터베이스를 쿼리하기 위해 pd.read_sql()함수를 사용하여 쿼리와 데이터베이스 연결

 

 

 

Pandas 데이터 프레임 훈련(Micro)

  • Data Subset(데이터의 하위 집합)에 대한 작업 및 분석 수행이 필요
  • 특정 row나 column만 전체적으로 선택하거나 특정 기준을 충족하는 경우와 같이 데이터와 분리할 수 있는 여러 유형의 하위 집합이 있는 경우(대부분의 경우) 데이터의 하위 집합을 얻으려면 Pandas를 사용하여 Selection, Slicing, Indexing, Filtering에 익숙해져야 함
    • Selection
      • 전체 열 가져오기 가능, 특정 column 가져오기 가능
      • 한 번에 하나의 열만 선택 가능
      • 특정 단어로 시작하는 모든 row를 제목 및 시간 row와 함께 선택 가능
      • List comprehension 기법을 통해 데이터 프레임의 각 열을 살펴보고 이름이 특정 단어로 시작된 열만 유지도 가능
      • 리스트를 통해 데이터 프레임에서 실제 row selection 선택 실행 가능
      • data.column명
      • data['column명']
    • Slicing
      • 데이터 프레임에서 특정 Column(Slice)을 추출하기 위해 Slicing 사용
      • DataFrame Slicing은 tuple과 같은 다른 Python 객체 Licing과 유사하게 작동
      • Case
        • 100 : 103 슬라이스를 지정하면 100, 101, 102 행이 다시 나타나며, chaining으로 행과 열 선택을 결합 가능
        • 먼저 모든 column의 제목 및 시간 row을 선택한 다음, index 100, 101, 102를 가진 column을 가져올 수 있음
      • data[num1:num2]
    • Indexing
      • 열 선택과 행 슬라이싱을 쉽게 결합할 수 있으나 그 과정이 길고 복잡해지는 경우 발생
      • Pandas의 Indexing은 원하는 행과 열을 모두 선택할 수 있는 데이터의 값을 업데이트 하기 위해 선택 및 Slicing 기법인 Chaining을 이용하면 Pandas가 제대로 작동하지 않는 경우 발생
        • Chaining을 이용한 title 소문자 변환 시도 이상 발생
        • Pandas Indexing은 원하는 행과 열을 모두 선택할 수 있는 one method 처리 방법으로, loc[], iloc[]을 사용하여 각각 레이블 기반 또는 정수 기반 조회를 사용하여 DataFrame을 subset 처리 가능
        • 모든 인덱싱 적용할 때 먼저 column indexer를 제공한 다음, row indexer에 쉼표를 구분하여 df.loc[row_indexer, column_indexer]와 같이 사용
        • loc을 사용하면 이 작업에 대해 Pandas warning이 발생하지 않음
        • iloc[]은 최종 index를 배제함
        • at[], iat[]는 스칼라 값에 매칭 되는 indexing을 할 때도 속도 빠름
    • Filtering
      • 일부 기준을 충족하는 데이터만 사용하기 원할 때 필요
      • Pandas는 Boolean Mask와 특별한 방법을 포함한 이와 관련한 몇 가지 옵션을 제공함
      • Boolean Mask 부울 마스크를 사용하면 일부 값에 대해 데이터를 테스트하고 True/False 값으로 채워진 것을 제외하고 동일한 모양의 구조를 다시 획득 가능함
      • loc[]과 함께 부울 마스크도 처리 가능
      • boolean Mask를 결합하려면 각 조건을 괄호로 묶고 AND 연산자(&)나 OR 연산자(|) 모두 사용 가능
      • 어느 규모, 특정 값과 특정 값 사이 데이터를 반환하기 위해서는 Pandas에서 between() 메서드 사용 가능
      • data.column명  조건
        • True / False 반환

 

 

 

 

 

 

 

 

 

 

 

 

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
DAY1. Data Analysis Basic & Pandas Basic  (0) 2020.07.20
Comments