목차
AI 데이터 분석 과정
- 데이터 수집
- 오픈 데이터 API, 웹 크롤링, 파일 읽기, DB 엑세스
- 데이터 전처리 : 넘파이**,** 판다스 활용
- 데이터 클린징**,** 데이터 연결과 병합**,** 데이터 재구조화
- 데이터 분석/응용
- 데이터 시각화(맷플롯립 활용), 기계학습
데이터 클린징
• 편향 없이 명확하고 깨끗한 데이터를 확보하는 작업
- 데이터 클린징 작업
- 결측 데이터 처리
- 결측 데이터 확인
- 결측 데이터 대체/제거 [평균 대체법]
- 결측 데이터 반영 확인
- 결측 데이터 처리
- 이상 데이터 처리
- 이상 데이터 확인
- 이상 데이터 대체/제거
- 이상 데이터 처리 확인
- 중복 데이터 처리
- 중복 데이터 확인
- 중복 데이터 처리(유일한 1개 키만 남기고 나머지 중복 제거)
결측 데이터
- 결측값(Missing data)
- 데이터 누락값
- 결측값이 있는 상태로 분석하게 되면 변수간의 관계가 왜곡
- 분석의 정확성이 떨어짐
- 판다스에서는 결측값을 'NaN(Not a Number)' 으로 표기
- 'None'도 결측값을 의미
- 결측값을 처리 방법
- 제거(Deletion)
- 결측값을 포함한 행, 열을 삭제하는 것
- 대체(Imputation)
- 결측값을 다른 값(예, 대표값인 평균)으로 변환하는 방법
- 제거(Deletion)
결측 데이터 확인
- 판다스 isnull() 메소드 = isna() 메소드
- 결측 데이터이면 True값을 반환
- 유효한 데이터가 존재하면 False를 반환
- 판다스 notnull() 메소드
- 유효한 데이터가 존재하면 True를 반환
- 누락 데이터면 False를 반환
두 메소드를 사용하면 모든 값에 대해 True, False로 바뀐다.
실습 평균 풍속 결측치 출력
# 평균 풍속 결측치 출력
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather[ weather['평균풍속'].isna() == True ] # null 데이터만 가지고 있는 행만 추출해줘
결측치 개수 확인
- 판다스 결측치 개수 확인 함수
- 칼럼별(행방향) 결측값 개수 구하기
- df.isnull().sum() == df.isnull().sum(0)
- 행(row) 단위(열방향)로 결측값 개수 구하기
- df.isnull().sum(1)
- 행(row) 단위(열방향)로 실제값 개수 구하기
- df.notnull().sum(1)
행방향은 0 , 열방향은 1
결측치 제거, 대체
- 결측치 제거 메소드
- 행 삭제
- df.dropna(axis=0)
- 열 삭제
- df.dropna(axis=1)
- df.dropna()
- 행 삭제
- 결측치 대체 메소드
- 결측값을 특정 값으로 채우기
- df.fillna(0)
- 결측값을 특정 문자열로 채우기
- df.fillna(‘ ‘)
- 결측값을 변수별 평균으로 대체
- df.fillna(df.mean())
- 결측값을 특정 값으로 채우기
실습. 결측치 데이터 삭제
- weather. dropna(axis=0, how=“any”, inplace=True)
- axis=0 → 결측치를 포함하는 행 삭제
- how=“any” → 하나의 칼럼이라도 NaN이면 행 삭제
- inplace=True → 현재 데이터프레임에 변경 적용
# 결측치 데이터 삭제
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather.dropna(axis = 0, how="any", inplace=True)
weather[ weather['평균풍속'].isna() == True]
# 결측치를 포함하는 행, 하나의 컬럼이라도 NaN이면 행 삭제, 현재 데이터 프레임에 적용
실습. 결측치 데이터 대체
- weather. fillna(0, inplace=True)
- 0 → 결측치를 0으로 대체
- inplace=True → 현재 데이터프레임에 변경 적용
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather.fillna(0, inplace = True)
weather[ weather['평균풍속'] == 0.0 ]
# 결측치를 0으로 대체
실습. 결측치 데이터 대체
- 평균값으로 결측치를 대체
- weather['최대풍속'].fillna(weather['최대풍속'].mean(), inplace=True)
- weather['평균풍속'].fillna(weather['평균풍속'].mean(), inplace=True)
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather['최대풍속'].fillna(weather['최대풍속'].mean(), inplace=True)
weather['평균풍속'].fillna(weather['평균풍속'].mean(), inplace=True)
weather[ weather['일시'] == '2012-02-11' ]
이상 데이터
- 정상에서 벗어난 데이터를 이상치(Outlier)
- 이상탐지(Anomaly Detection)
- 이상한(비정상적인) 데이터를 검출하는 것
- 이상데이터 처리 방법
- 이상데이터 확인
- 이상데이터 결측 대체/제거
- 이상데이터 반영 확인
⬆️⬆️⬆️ 이상데이터
이상데이터 시각화
- 박스(Box)
- 25%(Q1) ~75%(Q3) 까지 값
- 수염 (whiskers)
- 박스의 각 모서리(Q1, Q3)로 부터 1.5배 내에 있는 가장 멀리 떨어진 데이터 점까지 이어져 있는 것
- 이상치(Outlier)
- 수염(whiskers)보다 바깥쪽 데이터
이상 데이터 처리 방법
- 단순 삭제
- 이상값이 논리적 에러 에 의해서 발생한 경우 해당 관측치를 삭제
- 단순 오타나, 주관식 설문 등의 비현실 적인 응답, 데이터 처리 과정에서의 오류 등의 경우에 사용
- 다른 값으로 대체
- 데이터의 개수가 작은 경우
- 관측치를 삭제하는 대신 다른 값(평균 등)으로 대체
- 변수화
- 자연발생적인 이상값의 경우
- 리샘플링
- 해당 이상값을 분리해서 모델을 만드는 방법
- 케이스분리 분석
- 자연 발생한 이상값에 별다른 특이점이 발견되지 않는다면, 단순 제외 보다는 분석 케이스를 분리하여 분석
중복 데이터 처리
- 데이터를 수집하는 과정 중 또는 데이터를 병합하는 단계에서 오류 등으로 인해 데이터가 중복 발생
- 특히, 유일한 키(key) 값을 관리해야 하는 경우 중복(Duplicates)데이터가 발생하면 분석에 영향을 끼칠 수 있음
- 데이터 분석 전에 중복 데이터를 확인하고 처리하는 데이터 클린징 작업 필요
- 판다스 중복 데이터 처리 메소드
- 중복 데이터 확인
- df.duplicated()
- 중복값 삭제
- df.drop_duplicates()
- 중복 데이터 확인
중복 데이터 확인
- 중복이 있으면 처음이나 끝에 무엇을 남길지 확인
- df.duplicated([칼럼명], keep=‘first’)
- keep='first' → default
- 중복값이 있으면 첫번째 값을 duplicated 여부를 False로 반환
- 나머지 중복값에 대해서는 True를 반환
- keep=‘last’
- keep=False
- 처음이나 끝값인지 여부는 고려를 안하고 중복이면 무조건 True를 반환
- keep='first' → default
# 데이터 중복 확인
import pandas as pd
data = {'key1':['a', 'b', 'b', 'c', 'c'],
'key2':['v', 'w', 'w', 'x', 'y'],
'col':[1, 2, 3, 4, 5]}
df = pd.DataFrame(data, columns=['key1', 'key2', 'col'])
print(df.duplicated(['key1']))
print('------------------------------')
print(df.duplicated(['key1','key2']))
실습 . 데이터 중복 제거
# 데이터 중복 제거
import pandas as pd
data = {'key1':['a', 'b', 'b', 'c', 'c'],
'key2':['v', 'w', 'w', 'x', 'y'],
'col':[1, 2, 3, 4, 5]}
df = pd.DataFrame(data, columns=['key1', 'key2', 'col'])
print(df.duplicated(['key1']))
df.drop_duplicates(['key1'], keep='first')
데이터 연결 중요
- 데이터프레임을 행과 열로 위/아래로 결합하는 방법
- 인덱스 값 중복에 주의 필요
- 판다스 데이터프레임 연결 메소드
- df.concat()
- df.append()
axis 0 이면 행을 확장
axis 1 이면 열을 확장
데이터프레임 연결
- pd.concat(df_list, axis=0, join=‘outer’) 함수
- df_list → 합칠 데이터프레임의 리스트
- axis = 0 → 행방향 연결(행 확장), 칼럼 조인
- join=‘outer’ → 칼럼들의 합집합 (cf. inner : 칼럼들의 교집합)
axis 여부에 따라서 어떻게 되는지 확인!!!! 시험문제나
그룹 분석
- 분석 대상 변수를 그룹별로 데이터를 집계하여 진행하는 분석
- 특정한 조건에 맞는 데이터가 하나 이상 데이터 그룹을 이루는 경우 자주 사용
- 그룹 분석은 대부분 ‘범주형 변수’ 가 그룹 연산의 기준
- 일반적으로 범주형과 연속형이 결합된 경우 그룹 분석 진행
그룹 분석 절차
- 몇몇 기준(범주형)에 따라 여러 그룹으로 데이터를분할(splitting)
- 예) 반별 그룹
- 각 그룹에 독립적으로 함수를적용(applying)
- 예) 반별 평균
- 결과물들을 하나의 데이터 구조로결합(combining)
- 예) 반별 평균결합
- 그룹 평균 : means = weather.groupby('month').mean()
- 그룹 합계 : sums = weather.groupby('month’).sum()
# 그룹 평균과 합계 import pandas as pd weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv', encoding='CP949') weather['month'] = pd.DatetimeIndex(weather['일시']).month means = weather.groupby('month').mean() print(means)
import pandas as pd import matplotlib.pyplot as plt import datetime as dt weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv', encoding='CP949') weather['month'] = pd.DatetimeIndex(weather['일시']).month means = weather.groupby('month').mean() means['평균풍속'].plot() plt.show()
- 실습. 월 평균 풍속 그래프
- 그룹 평균과 합계
필터링 - 논리 인덱싱 사용
• 데이터프레임 열벡터에 논리 연산을 적용하여 필터링을 위한 논리 배열 생성
import pandas as pd
import datetime as dt
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather['month'] = pd.DatetimeIndex(weather['일시']).month
weather[ weather['최대풍속'] >= 10.0]
데이터정렬 - 판다스 데이터프레임 정렬 메소
- df.sort_values(열이름, ascending=True, inplace=True)
- 열이름 → 정렬 기준
- 정렬 기준으로 [열이름 리스트] 지정 가능
- ascending=True → 오름 차순 정렬
- inplace=True → 현재 데이터프레임 정렬
- 열이름 → 정렬 기준
데이터 재구조화
- Reshaping이라고 함
- 분석 과정에서 원본 데이터의 구조가 분석 기법에 맞지 않아 행과 열의 위치를 바꾸는 경우
- 특정 요인에 따라 집계 해서 구조를 변경하는 경우
• 판다스 재구조화 관련 기능
피봇 테이블(Pivot table)
- 많은 양의 데이터에서 필요한 자료만을 뽑아 새롭게 테이터를 재구성하는 기능
- 피봇 테이블을 사용하면 사용자가 원하는 대로 데이터를 정렬하고 필터링 가능
- 판다스는 피봇테이블 관련 메소드
- df.pivot(index, columns, values)
- 첫번째 인수 행 인덱스로 사용할 열 이름, 두번째 인수 열 인덱스로 사용할 열 이름, 세번째 인수 데이터로 사용할 열 이름
- 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐 놓은 표(데이터프레임) 반환
# 피봇 테이블
import pandas as pd
df_1 = pd.DataFrame({'item': ['ring0', 'ring0', 'ring1', 'ring1'],
'type': ['Gold', 'Silver', 'Gold', 'Bronze'],
'price': [20000, 10000, 50000, 30000]})
df_2 = df_1.pivot(index='item', columns='type', values='price')
# index 행으로 지정
print(df_2)
AI 데이터 분석 과정
- 데이터 수집
- 오픈 데이터 API, 웹 크롤링, 파일 읽기, DB 엑세스
- 데이터 전처리 : 넘파이**,** 판다스 활용
- 데이터 클린징**,** 데이터 연결과 병합**,** 데이터 재구조화
- 데이터 분석/응용
- 데이터 시각화(맷플롯립 활용), 기계학습
데이터 클린징
• 편향 없이 명확하고 깨끗한 데이터를 확보하는 작업
- 데이터 클린징 작업
- 결측 데이터 처리
- 결측 데이터 확인
- 결측 데이터 대체/제거 [평균 대체법]
- 결측 데이터 반영 확인
- 결측 데이터 처리
- 이상 데이터 처리
- 이상 데이터 확인
- 이상 데이터 대체/제거
- 이상 데이터 처리 확인
- 중복 데이터 처리
- 중복 데이터 확인
- 중복 데이터 처리(유일한 1개 키만 남기고 나머지 중복 제거)
결측 데이터
- 결측값(Missing data)
- 데이터 누락값
- 결측값이 있는 상태로 분석하게 되면 변수간의 관계가 왜곡
- 분석의 정확성이 떨어짐
- 판다스에서는 결측값을 'NaN(Not a Number)' 으로 표기
- 'None'도 결측값을 의미
- 결측값을 처리 방법
- 제거(Deletion)
- 결측값을 포함한 행, 열을 삭제하는 것
- 대체(Imputation)
- 결측값을 다른 값(예, 대표값인 평균)으로 변환하는 방법
- 제거(Deletion)
결측 데이터 확인
- 판다스 isnull() 메소드 = isna() 메소드
- 결측 데이터이면 True값을 반환
- 유효한 데이터가 존재하면 False를 반환
- 판다스 notnull() 메소드
- 유효한 데이터가 존재하면 True를 반환
- 누락 데이터면 False를 반환
두 메소드를 사용하면 모든 값에 대해 True, False로 바뀐다.
실습 평균 풍속 결측치 출력
# 평균 풍속 결측치 출력
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather[ weather['평균풍속'].isna() == True ] # null 데이터만 가지고 있는 행만 추출해줘
결측치 개수 확인
- 판다스 결측치 개수 확인 함수
- 칼럼별(행방향) 결측값 개수 구하기
- df.isnull().sum() == df.isnull().sum(0)
- 행(row) 단위(열방향)로 결측값 개수 구하기
- df.isnull().sum(1)
- 행(row) 단위(열방향)로 실제값 개수 구하기
- df.notnull().sum(1)
행방향은 0 , 열방향은 1
결측치 제거, 대체
- 결측치 제거 메소드
- 행 삭제
- df.dropna(axis=0)
- 열 삭제
- df.dropna(axis=1)
- df.dropna()
- 행 삭제
- 결측치 대체 메소드
- 결측값을 특정 값으로 채우기
- df.fillna(0)
- 결측값을 특정 문자열로 채우기
- df.fillna(‘ ‘)
- 결측값을 변수별 평균으로 대체
- df.fillna(df.mean())
- 결측값을 특정 값으로 채우기
실습. 결측치 데이터 삭제
- weather. dropna(axis=0, how=“any”, inplace=True)
- axis=0 → 결측치를 포함하는 행 삭제
- how=“any” → 하나의 칼럼이라도 NaN이면 행 삭제
- inplace=True → 현재 데이터프레임에 변경 적용
# 결측치 데이터 삭제
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather.dropna(axis = 0, how="any", inplace=True)
weather[ weather['평균풍속'].isna() == True]
# 결측치를 포함하는 행, 하나의 컬럼이라도 NaN이면 행 삭제, 현재 데이터 프레임에 적용
실습. 결측치 데이터 대체
- weather. fillna(0, inplace=True)
- 0 → 결측치를 0으로 대체
- inplace=True → 현재 데이터프레임에 변경 적용
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather.fillna(0, inplace = True)
weather[ weather['평균풍속'] == 0.0 ]
# 결측치를 0으로 대체
실습. 결측치 데이터 대체
- 평균값으로 결측치를 대체
- weather['최대풍속'].fillna(weather['최대풍속'].mean(), inplace=True)
- weather['평균풍속'].fillna(weather['평균풍속'].mean(), inplace=True)
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather['최대풍속'].fillna(weather['최대풍속'].mean(), inplace=True)
weather['평균풍속'].fillna(weather['평균풍속'].mean(), inplace=True)
weather[ weather['일시'] == '2012-02-11' ]
이상 데이터
- 정상에서 벗어난 데이터를 이상치(Outlier)
- 이상탐지(Anomaly Detection)
- 이상한(비정상적인) 데이터를 검출하는 것
- 이상데이터 처리 방법
- 이상데이터 확인
- 이상데이터 결측 대체/제거
- 이상데이터 반영 확인
⬆️⬆️⬆️ 이상데이터
이상데이터 시각화
- 박스(Box)
- 25%(Q1) ~75%(Q3) 까지 값
- 수염 (whiskers)
- 박스의 각 모서리(Q1, Q3)로 부터 1.5배 내에 있는 가장 멀리 떨어진 데이터 점까지 이어져 있는 것
- 이상치(Outlier)
- 수염(whiskers)보다 바깥쪽 데이터
이상 데이터 처리 방법
- 단순 삭제
- 이상값이 논리적 에러 에 의해서 발생한 경우 해당 관측치를 삭제
- 단순 오타나, 주관식 설문 등의 비현실 적인 응답, 데이터 처리 과정에서의 오류 등의 경우에 사용
- 다른 값으로 대체
- 데이터의 개수가 작은 경우
- 관측치를 삭제하는 대신 다른 값(평균 등)으로 대체
- 변수화
- 자연발생적인 이상값의 경우
- 리샘플링
- 해당 이상값을 분리해서 모델을 만드는 방법
- 케이스분리 분석
- 자연 발생한 이상값에 별다른 특이점이 발견되지 않는다면, 단순 제외 보다는 분석 케이스를 분리하여 분석
중복 데이터 처리
- 데이터를 수집하는 과정 중 또는 데이터를 병합하는 단계에서 오류 등으로 인해 데이터가 중복 발생
- 특히, 유일한 키(key) 값을 관리해야 하는 경우 중복(Duplicates)데이터가 발생하면 분석에 영향을 끼칠 수 있음
- 데이터 분석 전에 중복 데이터를 확인하고 처리하는 데이터 클린징 작업 필요
- 판다스 중복 데이터 처리 메소드
- 중복 데이터 확인
- df.duplicated()
- 중복값 삭제
- df.drop_duplicates()
- 중복 데이터 확인
중복 데이터 확인
- 중복이 있으면 처음이나 끝에 무엇을 남길지 확인
- df.duplicated([칼럼명], keep=‘first’)
- keep='first' → default
- 중복값이 있으면 첫번째 값을 duplicated 여부를 False로 반환
- 나머지 중복값에 대해서는 True를 반환
- keep=‘last’
- keep=False
- 처음이나 끝값인지 여부는 고려를 안하고 중복이면 무조건 True를 반환
- keep='first' → default
# 데이터 중복 확인
import pandas as pd
data = {'key1':['a', 'b', 'b', 'c', 'c'],
'key2':['v', 'w', 'w', 'x', 'y'],
'col':[1, 2, 3, 4, 5]}
df = pd.DataFrame(data, columns=['key1', 'key2', 'col'])
print(df.duplicated(['key1']))
print('------------------------------')
print(df.duplicated(['key1','key2']))
실습 . 데이터 중복 제거
# 데이터 중복 제거
import pandas as pd
data = {'key1':['a', 'b', 'b', 'c', 'c'],
'key2':['v', 'w', 'w', 'x', 'y'],
'col':[1, 2, 3, 4, 5]}
df = pd.DataFrame(data, columns=['key1', 'key2', 'col'])
print(df.duplicated(['key1']))
df.drop_duplicates(['key1'], keep='first')
데이터 연결 중요
- 데이터프레임을 행과 열로 위/아래로 결합하는 방법
- 인덱스 값 중복에 주의 필요
- 판다스 데이터프레임 연결 메소드
- df.concat()
- df.append()
axis 0 이면 행을 확장
axis 1 이면 열을 확장
데이터프레임 연결
- pd.concat(df_list, axis=0, join=‘outer’) 함수
- df_list → 합칠 데이터프레임의 리스트
- axis = 0 → 행방향 연결(행 확장), 칼럼 조인
- join=‘outer’ → 칼럼들의 합집합 (cf. inner : 칼럼들의 교집합)
axis 여부에 따라서 어떻게 되는지 확인!!!! 시험문제나
그룹 분석
- 분석 대상 변수를 그룹별로 데이터를 집계하여 진행하는 분석
- 특정한 조건에 맞는 데이터가 하나 이상 데이터 그룹을 이루는 경우 자주 사용
- 그룹 분석은 대부분 ‘범주형 변수’ 가 그룹 연산의 기준
- 일반적으로 범주형과 연속형이 결합된 경우 그룹 분석 진행
그룹 분석 절차
- 몇몇 기준(범주형)에 따라 여러 그룹으로 데이터를분할(splitting)
- 예) 반별 그룹
- 각 그룹에 독립적으로 함수를적용(applying)
- 예) 반별 평균
- 결과물들을 하나의 데이터 구조로결합(combining)
- 예) 반별 평균결합
- 그룹 평균 : means = weather.groupby('month').mean()
- 그룹 합계 : sums = weather.groupby('month’).sum()
# 그룹 평균과 합계 import pandas as pd weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv', encoding='CP949') weather['month'] = pd.DatetimeIndex(weather['일시']).month means = weather.groupby('month').mean() print(means)
import pandas as pd import matplotlib.pyplot as plt import datetime as dt weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv', encoding='CP949') weather['month'] = pd.DatetimeIndex(weather['일시']).month means = weather.groupby('month').mean() means['평균풍속'].plot() plt.show()
- 실습. 월 평균 풍속 그래프
- 그룹 평균과 합계
필터링 - 논리 인덱싱 사용
• 데이터프레임 열벡터에 논리 연산을 적용하여 필터링을 위한 논리 배열 생성
import pandas as pd
import datetime as dt
weather = pd.read_csv('https://raw.githubusercontent.com/dongupak/DataSciPy/master/data/csv/weather.csv',
encoding='CP949')
weather['month'] = pd.DatetimeIndex(weather['일시']).month
weather[ weather['최대풍속'] >= 10.0]
데이터정렬 - 판다스 데이터프레임 정렬 메소
- df.sort_values(열이름, ascending=True, inplace=True)
- 열이름 → 정렬 기준
- 정렬 기준으로 [열이름 리스트] 지정 가능
- ascending=True → 오름 차순 정렬
- inplace=True → 현재 데이터프레임 정렬
- 열이름 → 정렬 기준
데이터 재구조화
- Reshaping이라고 함
- 분석 과정에서 원본 데이터의 구조가 분석 기법에 맞지 않아 행과 열의 위치를 바꾸는 경우
- 특정 요인에 따라 집계 해서 구조를 변경하는 경우
• 판다스 재구조화 관련 기능
피봇 테이블(Pivot table)
- 많은 양의 데이터에서 필요한 자료만을 뽑아 새롭게 테이터를 재구성하는 기능
- 피봇 테이블을 사용하면 사용자가 원하는 대로 데이터를 정렬하고 필터링 가능
- 판다스는 피봇테이블 관련 메소드
- df.pivot(index, columns, values)
- 첫번째 인수 행 인덱스로 사용할 열 이름, 두번째 인수 열 인덱스로 사용할 열 이름, 세번째 인수 데이터로 사용할 열 이름
- 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐 놓은 표(데이터프레임) 반환
# 피봇 테이블
import pandas as pd
df_1 = pd.DataFrame({'item': ['ring0', 'ring0', 'ring1', 'ring1'],
'type': ['Gold', 'Silver', 'Gold', 'Bronze'],
'price': [20000, 10000, 50000, 30000]})
df_2 = df_1.pivot(index='item', columns='type', values='price')
# index 행으로 지정
print(df_2)