Recent Posts
Tags
- 난생처음 R코딩&데이터 분석 저서
- 파이썬
- Ai
- PY4E
- r
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- 인공지능기초다지기
- boostcoures
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- boostcourse
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- SQL
- Oracle
- 네이버부스트캠프
- 오라클
- DB
- 기초다지기
- 정보처리기사
- 부스트코스
- 빅데이터분석기사
- 코딩테스트
- AI 플랫폼을 활용한 데이터 분석
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 빅분기
- Machine Learning
- 이기적
- 프로그래머스
- 코딩테스트 python
- 데이터베이스
- python
- Today
- Total
매일공부
Python 데이터 분석 라이브러리 - Pandas 본문
Python Modeling library
- NumPy 라이브러리
: 동일한 데이터 유형의 값을 저장하는 고성능 다차원 배열 개체
: 배열 및 벡터화에 대한 수학 연산이 용이 - SciPy 라이브러리
: NumPy 배열 객체를 기반 Matplotlib(시각화), Pandas(데이터정제) 및 SymPy와 같은 도구를 포함하는 스택의 일부
: 선형 대수, 보간, 최적화, 통합 및 통계와 같은 효율적인 수학 루틴을위한 모듈이 포함 - Matplotlib : 2D 시각화
- Seaborn : 고급 기능을 갖춘 Matplotlib의 확장 > 높은 수준의 추상화, 다중 플롯 그리드 제공
- Scikit-learn : 온갖 머신러닝 라이브러리가 있는 기계학습 라이브러리
- TensorFlow : 이미지 분류에 최적화되어 있는 라이브러리 > 대규모 신경망 만들 수 있도록 도와줌
- Keras : 층 신경망 코드를 빌드하고 학습하기위한 TensorFlow의 고수준 API
- Statsmodels : 기술 통계를위한 쉬운 계산과 통계 모델에 대한 추정 및 추론을 제공(선형 회귀, 상관 관계, OLS)
- Plotly : 데이터를 클라우드 서버로 보내는 추가 기능도 제공(기본차트, 과학)
Pandas 라이브러리
- 데이터 랭글링 또는 정리를위한 완벽한 도구
- 데이터 랭글링
: 다양한 data 소스를 통합&엑세스&분석할 수 있도록 정리하는 프로세스
: 원천데이터를 시각화하고 머신러닝 또는 딥러닝으로 모델링 하기 위한 input data로 만들기 위한 사전 준비 과정의 데이터 정체작업 - 빠르고 쉬운 데이터 조작, 읽기, 집계 및 시각화
- R의 dataframe 데이터 타입을 참고
- CSV파일 불러오기가 편리함
> 서로 다른 여러 가지 소스(json, csv, xml, rdbms, txt, excel 등)으로부터 데이터를 "공통의 포맷"으로 정리 - 판다스 설치 : $ pip install pandas
- 판다스 사용 : import pandas as pd
- 데이터 > 시계열(series) or 표(table)의 형태
- 시리즈(Series) 클래스와 데이터프레임(DataFrame) 클래스를 제공
- 문자, 논리형, 숫자 모든 데이터타입이 들어갈 수 있음
시리즈(Series) 클래스
- Series = 값(value; numpy의 1차원 배열) + 인덱스(index; 각 데이터의 의미 표시)
- data 자체 = 값(value)
- 인덱스(index)
- 문자열, 날짜, 시간, 정수 등도 가능
- 지정X = 0부터 시작하는 정수값 자동 지정
- list와 tuple 변환 > 정수형 위치 인덱스 자동 지정 - .name 속성 : Serise data에 이름 부여
- .index.name 속성 : Serise index에 이름 부여
- type(시리즈 변수) : <class 'pandas.core.series.Series'>
- 벡터화 연산 가능 > 연산 자체는 Series의 값에만 적용 > index 값 변함X
>> numpy처럼 vectoring가능 - 배열인덱싱(s[1]) OR 인덱스 라벨(s["부산" / "2"]) 이용한 indexing / slicing 가능
- 자료순서 변경, 특정 자료만 선택 가능
- 문자열 라벨로 슬라이싱 s["부산" : "대구"] = end 값도 포함
- 영문 문자열 라벨 값 => 온점( . )으로 인덱스 접근 가능 >> s0.a
Series vs Dict
- Series = 인덱스 라벨 값을 키(key)로 가지는 딕셔너리 자료형
- in 연산, itmes 메서드 사용 가능
- 데이터 순서 보장X
- 순서 지정 > 인덱스를 리스트로 지정
- (Serise1 - Serise2) => 연산하는 경우, 같은 인덱스 data 대해서만 차이 구함
- .notnull() : NaN이 아니면 True / NaN이면 False
- NaN > float 자료형에서만 가능 > 연산 결과에 NaN 있으면 모두 float 자료형 됨
- 데이터 갱신&추가 : s["대구"] = 1.41
- 데이터 삭제 : del 명령어
데이터프레임(DataFrame) 클래스
- 2차원 객체 생성 > 2차원 벡터 또는 행렬(matrix)
- 행과 열 구조> 테이블 형식의 데이터 (tabular, rectangular grid 등으로 불림)
- 공통 인덱스를 가지는 열 시리즈(column series)를 딕셔너리로 묶어놓은 것
- 각 열(column)마다 자료형이 다를 수 있음
- dataframe의 3요소 - 컬럼(column), 데이터(row), 인덱스(index)
- dict > DataFrame 변환 : pd.Dataframe(2차원 배열, index=행, column=열 이름 배열)
- 행 인덱스 수정 : pd.Dataframe객체.index=새로운 행 인덱스 배열
- 열 인덱스 수정 : pd.Dataframe객체.column=새로운 열 이름 배열
- 행과 열 각각 이름 지정
.index.name = 행 이름
.columns.name = 열 이름 - 열(Series) 단위 > 데이터 갱신, 추가, 삭제(del) 가능
- dataframe객체.컬럼라벨인덱스 사용 가능 ex)print(df.지역)
- 열 인덱싱
- 열 라벨(column label) 값 하나만 넣으면 > 시리즈 객체 반환
- 열 인덱스 = 문자열 라벨
> 정수인덱스X(열 인덱싱 불가)
> 라벨 인덱싱 > 열 Series 반환
> 라벨 List 인덱싱 > 열 Dataframe 반환
> 정수 인덱싱 slice > 행 Dataframe 반환 - 행 인덱싱
- 항상 슬라이싱(slicing)
- 라벨(문자) 인덱스도 라벨 슬라이싱 가능
- 라벨(문자) 인덱스 = start~end까지(end포함)
Dataframe 데이터 확인
- .rank : 순위 반환 https://ponyozzang.tistory.com/612
- .ndim : 차원 반환(Dataframe은 2차원으로 2 반환)
- .shape : 데이터 (행, 열) 크기 반환
- .info() : 데이터에 대한 전반적인 정보 출력 > null 존재여부 확인 가능
- .head(self, n=5) : 상단 5개(기본값) 데이터 출력 > 내부에 숫자 지정 가능
- .tail(self, n=5) : 하단 5개(기본값) 데이터 출력 > 내부에 숫자 지정 가능
- .describe() : 요약 통계량 출력(최소, 최대, 각 사분위 값 등 알 수 있음)
Dataframe 속성을 활용한 행/열 인덱스 확인(접근)
- .index[] : 지정한 인덱스 값 확인
- .columns[] : 지정한 열 값 확인
- .values[][] : 지정한 values 값 확인
Dataframe 속성을 활용한 행/열 인덱스 변경&추가
- Dataframe객체.rename(columns={'기존값':'변경값'}, inplace={'기존값':'변경값},index={'기존값':'변경값})
: 기존 행/열을 새로운 값으로 수정&추가 - 지정한 값을 변경값으로 수정 & 변경값으로 전체 행/열 추가
- Dataframe객체[기존값] = 변경값
- Dataframe객체.loc[기존값] = 변경값
Dataframe 인덱스 설정 및 제거 & 재정의
- .set_index() : 기존의 행 인덱스 제거 > 데이터 열 중 하나를 인덱스로
- .reset_index(name=, inplace=, drop=)
: 기존의 행 인덱스 제거 > 인덱스를 데이터 열로 추가
: 행 인덱스를 기본 정수 인덱스로 변경
: drop=True 기존 인덱스 삭제 - Dataframe객체.reindex() = index 재정의(0부터 새롭게 지정)
> 추가되는 부분은 모두 NaN값
> 추가되는 부분을 채우려면 (fill_value=채울값) 사용
Dataframe 컬럼, 로우 인덱스 추가
- Dataframe객체.append() = row 추가
Dataframe 삭제
- Dataframe객체.drop(인덱스|배열, axis=, inplace=)
> 0 = 행 // 1 = 열 삭제한 새로운 객체 반환
> 여러개의 행과 열 삭제 > 리스트 입력
> inplace=True : 원본 객체 직접 변경 - del
- Dataframe객체.drop_duplicates(subset=, keep=) : unique한 값 1개만 남기고 중복된 row 제거
> subset = 처리할 열
> keep = 중복데이터 발견이 어떤 데이터를 남길지 결정
('fritst'=처음 남기고 삭제 || 'last'=마지막 남기고 남기고 || False=전부 삭제)
인덱서(indexer) 속성
- loc
- 라벨값 기반의 2차원 인덱싱
- 범위 끝 포함 범위 지정 가능
- df.loc[행 인덱싱값]
- df.loc[행 인덱싱값, 열 인덱싱값]
>> 행 인덱싱 값 = 정수 or 행 인덱스데이터
>> 열 인덱싱 값 = 라벨 문자열
- loc 인덱서가 없는 경우 : 인덱싱 불가능 - loc 인덱싱 값
= 인덱스데이터
= 인덱스데이터 슬라이스
= 인덱스데이터 리스트
= 같은 행 인덱스를 가지는 불리언 시리즈 (행 인덱싱의 경우)
= 또는 위의 값들을 반환하는 함수 - iloc
- 정수형 위치 인덱스(integer position) > 순서를 나타내는 정수(integer) 인덱스만 받음
- 순서를 나타내는 정수 기반의 2차원 인덱싱
- 범위 끝 제외 범위 지정 가능
- df.iloc[행 인덱싱값]
df.iloc[행 인덱싱값, 열 인덱싱값] - indexer 속성 : https://bit.ly/3Cz2jE4
Dataframe 데이터 조작
- .count() : 각 열마다 데이터 개수 반환, NaN 값 제외 > 누락값 찾을 때 용이
- .value_counts()
: Series - 각각의 값이 나온 횟수 셀 수 있음
: Dataframe - 각 열마다 별도 적용(메서드 없음)
Dataframe 데이터 정렬
- DataFrame객체.sort_index() = 행인덱스 값 기준 정렬
DataFrame객체.sort_index(axis=1) = 열 인덱스 값 기준 정렬 - DataFrame객체.sort_values() : 특정 열 값 기준 정렬, NaN 값은 가장 마지막
> (by=인수) 정렬 기준 열 지정, 인수 = 리스트 : 첫번째 열 기준 정렬 후, 다음 열은 동일값 정렬 - (ascending=False) 내림차순 정렬
Dataframe 통계함수
- .sum() : 열 기준으로 합계 / .sum(axis=1) : 행 기준으로 합계
- .idxmin() : .min()의 index 반환
- .idxmax() : .max()의 index 반환
- .mean() : 평균
- .median() : 중앙값
- .unique() : 유일값 확인
Dataframe 행이나 열 단위 복잡한 연산 처리
- .apply()
: 행 또는 열을 받는 함수를 전달하면 각 열(또는 행) 데이터에 함수를 반복 적용
: (axis=0 or 생략) 열에 적용 / (axis=1) 행에 적용
: 각 열에 대해 어떤 값이 얼마나 사용되어나 > value_counts 함수를 사용 - .isnull() = 결측치(NaN) 이면 True
.dropna(subset=['열이름']) = 결측치(NaN) 데이터 삭제
.fillna(채울값, inplace=) = NaN 값을 원하는 값으로 채울 때 사용 - .astype() = 전체 데이터의 자료형 변경
- .cut()
- 실수 값을 크기 기준 > Categorical 클래스 객체 반환
-cut(데이터, bins, labels=)
>> bins : 카테고리를 나누는 기준값
>> labels= : 경계선 이름
- 영역을 넘는 값 > NaN 처리
- Categorical 클래스 객체
> 카테고리categories 속성 = 라벨 문자열 가짐
> codes 속성 = 정수로 인코딩한 카테고리 값 가짐 - .qcut()
- 실수 값을 크기 기준 > 카테고리 값으로 변환
- 구간 경계선을 지정X > 데이터 개수가 같도록 지정한 수의 구간으로 나눔
Dataframe 행과 열을 서로 맞바꿈(전치)
- DataFrame객체.T = 전치(transpose) 행렬 반환
- DataFrame객체.transpose()
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.
'Programming > Python' 카테고리의 다른 글
[Python] Pandas를 활용한 데이터 수집 (0) | 2022.09.02 |
---|---|
Python Pandas 차집합&대칭차집합 구하기 (0) | 2022.08.29 |
Numerical Python - numpy (0) | 2022.08.26 |
[python] 파이썬 주사위 예제; list, set (0) | 2022.08.21 |
[python] 파이썬 list & 자료구조 예제 (0) | 2022.08.21 |
Comments