alpyrithm_알파이리즘
DAY2. Data Analysis Basic & Pandas Basic 본문
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 반환
- Selection
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