데이터 분석에 많이 사용되는 Python Pandas 패키지의 기능에 대해서 정리하고 있습니다. copy, row/column 추가 및 삭제, pivot_table, groupby, 시각화 등의 기능에 대해서 정리해 보겠습니다.
Copy() - 복사
데이터프레임을 복사할 때 copy를 사용합니다. 오리지널 데이터프레임을 다른 이름의 변수에 넣고 수정을 하면 오리지널의 데이터프레임도 함께 수정됩니다. 어떻게 해결해야 할까요? 원본 데이터를 유지시키고, 새로운 변수에 복사할 때는 copy()를 사용해야 합니다.
copy_df = df.copy()
row, column 추가
row의 추가
딕셔너리 형태의 데이터를 만들어 준다음 append() 함수를 사용하여 데이터를 추가할 수 있습니다. 반드시 ignore_index=True 옵션을 같이 추가해 주어야 에러가 발생하지 않습니다.
df.append({'과일':'사과', '지역':'안동'}, ignore_index=True)
append() 한 뒤 다시 df에 대입해줘야 변경한 값이 유지됩니다.
df = df.append({'과일':'사과', '지역':'안동'}, ignore_index=True)
column의 추가
column의 추가는 매우 쉽습니다. 단순히 새로운 column을 만들고 값을 대입해주면, 자동으로 생성합니다. 전부 동일한 값이 추가되면서, column도 추가됩니다.
df['국적'] = '대한민국'
만약 값을 변경하고 싶다면, loc함수를 사용해서 변경가능합니다.
df.loc[df['이름'] == '손흥민', '국적'] = '대한민국'
통계 값 다루기
min(최솟값), max(최댓값)
통계 값은 data type이 float나 int형인 column에 대해서 수행합니다.
df['키'].min()
df['키'].max()
sum(합계), mean(평균), median(중앙값)
합계와 평균을 구합니다.
df['키'].sum()
df['키'].mean()
df['키'].median()
var(분산), std(표준 편차)
분산과 표준편차를 구합니다.
df['키'].var()
df['키'].std()
count(개수 세기), mode(최빈값)
데이터 행의 개수가 얼마인지, 가장 많이 출현하는 데이터가 무엇인지 구합니다.
df['키'].count()
df['키'].mode()
피벗테이블 (pivot_table)
피벗테이블은 엑셀의 피벗테이블과 동일합니다. 데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하여 펼쳐놓은 것을 의미합니다. 왼쪽에 나타나는 인덱스를 행 인덱스, 상단에 나타나는 인덱스를 열 인덱스라고 부릅니다.
pd.pivot_table() 사용법 입니다. 괄호 안에는 먼저 데이터프레임을 불러옵니다. 다음으로 인덱스와 행을 적어주어 분류를 합니다. 마지막으로 values를 통해서 보고자 하는 값의 열을 지정해 줍니다. 만약에 해당되는 인덱스와 열이 중복이 되는 경우에는 기본적으로 평균을 낸 값이 반영되게 됩니다.
pd.pivot_table(dataframe, index='', columns='', values='')
만약 중복되는 값에 대해서 합으로 나타낼 때는 맨 뒤에 aggfunc=np.sum을 적어주고 평균으로 나타낼 때는 aggfunc=np.mean을 적어줍니다.
pd.pivot_table(dataframe, index='', columns='', values='', aggfunc=)
GroupBy (그룹으로 묶어 보기)
groupby는 데이터를 그룹으로 묶어 분석할 때 활용합니다. 특정 그룹별 통계 및 데이터의 성질을 확인하고자 할 때 활용합니다. groupby와 함께 아래 내용 적어주면 다양한 통계 값을 얻게 됩니다. 산술 통계는 자동으로 산술 통계가 가능한 열만 출력됩니다.
- count() - 개수
- sum() - 합계
- mean() - 평균
- var() - 분산
- std() - 표준편차
- min()/max() - 최솟값, 최댓값
df.groupby('소속사').count()
df.groupby('그룹').mean()
df.groupby('성별').sum()
만약 특정 열만 출력하고 싶다면 아래와 같이 대괄호 안에 특정 열을 기입하면 됩니다.
df.groupby('혈액형')['키'].mean()
Multi-index (복합 인덱스)
행 인덱스를 복합적으로 구성하고 싶은 경우는 인덱스를 리스트로 만들어 줍니다. 리스트의 요솟값 순차적으로 인덱스를 만들어 줍니다.
df2 = df.groupby(['혈액형', '성별']).mean()
multi-index로 된 데이터프레임을 피벗테이블 형태로 다시 변환해 줄 수 있습니다. unstack()메소드를 사용하면 해당되는 요솟값이 행에서 열로 옮겨집니다.
df2.unstack('혈액형')
reset_index (인덱스 초기화)
reset_index()는 multi-index로 구성된 데이터 프레임의 인덱스를 초기화해 줍니다. 즉, 인덱스가 아닌 일반 열 처럼 변환되게 됩니다.
df2 = df2.reset_index()
시각화
데이터 시각화를 왜 해야 할까요? 시각화는 수많은 숫자와 문자형으로 된 데이터로부터 사람이 이해하기 쉽도록 인사이트를 얻을 수 있는 가장 직관적인 시각적 정보를 얻기 위함입니다. 즉, 데이터 시각화(Data Visualization)는 숫자와 문자로 된 데이터를 시각적으로 변환한 가장 직관적인 수단입니다.
plot
plot은 일반 선 그래프를 나타냅니다.
df['키'].plot()
kind 옵션을 통해 원하는 그래프를 그릴 수 있습니다.
- line : 선 그래프
- bar : 바 그래프
- barh : 수평 바 그래프
- hist : 히스토그램
- kde : 커널 밀도 그래프
- hexbin : 고밀도 산점도 그래프
- box : 박스 플롯
- area : 면적그래프
- pie : 파이 그래프
- scatter : 산점도 그래프
line 그래프
line 그래프는 주가 데이터 등 데이터가 연속적인 경우 사용하기 적절합니다.
df['주가 데이터'].plot(kind='line')
bar/barh 그래프
bar 그래프는 그룹별로 비교하는 경우 사용하기 적절합니다. barh 그래프는 항목들이 수평방향으로 그려집니다.
df.groupby('지역')['분양가'].mean.plot(kind='bar')
df.groupby('지역')['분양가'].mean.plot(kind='barh')
히스토그램 (hist)
히스토그램은 분포-빈도를 시각화하여 보여줍니다. 가로축에는 분포를, 세로축에는 빈도가 시각화되어 보입니다.
df['분양가'].plot(kind='hist')
커널 밀도 그래프
커널 밀도 그래프는 히스토그램과 유사하게 밀도를 보여주는 그래프입니다. 히스토그램과 유사한 모양새를 갖추고 부드러운 라인을 가지고 있습니다.
df['분양가'].plot(kind='kde')
Hexbin
hexbin은 고밀도 산점도 그래프입니다. x와 y키 값을 넣어 주어야 합니다. x, y값 모두 nemeric 한 값을 넣어 주어야 하고 데이터의 밀도를 추정합니다. x와 y축에 어디에 데이터가 분포되어 있는지 확인 가능합니다.
df.plot(kind = 'hexbin', x = '분양가', y = '연도', gridsize = 20)
박스 플롯(box)
박스 플롯은 kind 옵션에 box를 입력하여 그릴 수 있습니다. 박스 플롯은 데이터 outlier 감지할 때 가장 많이 활용되며 25%, median, 75% 분위 값을 활용하는 용도로 많이 사용됩니다.
df['분양가'].plot(kind='box')
박스 안의 선은 중앙값입니다. 박스의 상단은 3/4 지점입니다. 박스의 하단은 1/4 지점입니다. 맨 아래는 최솟값 맨 위는 최댓값입니다. IQR은 lnter Quantile Range의 약어로써, (3Q - 1Q) * 1.5 값입니다. 최댓값은 3Q + IQR, 최솟값은 1Q - IQR에 의해 구해집니다. 최대 최솟값을 벗어난 원은 튀는 값 outlier입니다.
area plot
area plot은 line 그래프에서 아래 area를 모두 색칠해주는 것이 특징입니다.
df.groupby('월')['분양가'].count().plot(kind='area')
pie plot(파이 그래프)
데이터 점유율을 보여줄 때 유용합니다.
df.groupby('연도')['분양가'].count().plot(kind='pie')
scatter plot(산점도 그래프)
점으로 데이터를 표기해 줍니다. x, y 값을 넣어주어야 합니다. x축과 y축을 지정해주면 그에 맞는 데이터 분포도를 볼 수 있습니다.
df.plot(x='월', y='분양가', kind='scatter')
이상으로 Python Pandas 패키지 pivot_table, groupby, 시각화 등의 기능에 대해서 정리 마치겠습니다.
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
MySQL 규칙 만들기 방법 - IF, CASE, CREATE FUNCTION (0) | 2022.02.21 |
---|---|
파이썬 판다스 활용한 데이터 전처리 핵심 요약 (0) | 2022.02.16 |
파이썬 판다스 기능 핵심 요약 - 파일 읽어오기, 통계값, 색인 (0) | 2022.02.09 |
비전공 직장인의 파이썬 독학 - 조건문과 반복문 (0) | 2022.02.07 |
평범한 직장인의 파이썬 독학 기록 - 리스트, 딕셔너리, 함수 (0) | 2022.02.05 |
댓글