이번 포스팅에서는 .csv 파일을 Pandas로 불러와서 만든 데이터프레임에서 간단하게 그래프를 Pie Chart(원 그래프) , Bar Chart (막대 그래프) 를 그리는 방법에 대해서 정리해보겠습니다. 먼저 데이터를 pandas를 이용해서 불러오겠습니다. 그 다음 데이터 구조를 한 번 확인해보겠습니다. 여기서 저희는 이산적인 속성인 sex 속성에 대해서 데이터를 시각화해보고자 합니다. 먼저 value_counts() 함수를 이용해서 각 속성의 갯수를 파악할 수 있습니다. 이를 이용해서 각 속성과 해당 속성의 대한 갯수를 값으로 해서 그래프를 그릴 수 있습니다.
위에서 insurance['sex].value_counts().plot.bar() 을 함으로써 쉽게 막대 그래프를 그릴 수 있습니다.
barh 를 함으로써 x , y 축을 반대로 해줄 수 도 있습니다. 이제 원형 그래프를 그려보겠습니다.
value_counts().plot.pie() 함수를 통해서 원 그래프를 매우 간단하게 그려볼 수 있었습니다. import pandas as pd import numpy as np from pandas import Series, DataFrame from numpy import nan as NA import matplotlib.pyplot as plt %matplotlib qt #. 막대 그래프(Bar Plot) 그리기 - 각 로우별 막대 그래프 출력 - 각 컬럼이름이 범례로 지정 df1 = pd.read_csv('plot_test.csv') df1.index = ['월','화','수','목','금','토','일'] df1.columns.names = ['지점'] df1.index.names = ['요일'] fig, ax = plt.subplots(1,2) df1.plot(kind='bar', ax=ax[0]) # bar(수직막대) df1.plot(kind='barh', ax=ax[1]) # barh(수평막대) #. Q1 # cctv 데이터를 불러오고 cctv = pd.read_csv('cctv.csv', encoding='cp949') cctv['rate'] = round(cctv['검거'] / cctv['발생']*100,2) # 각 구별 검거율의 평균이 가장 낮은 구의 각 년도별 검거율을 막대그래프로 표현 data = cctv.pivot_table(index='구', columns='년도', values='rate') data.loc[data.mean(1).idxmin()].plot(kind='bar', title='관악구(검거율 평균이 가장 낮은 구) 검거율', ylim=[0,100]) plt.xticks(rotation=30) #. Q2 # employment 데이터를 불러온 후 emp = pd.read_csv('employment.csv', encoding='cp949',na_values='-', index_col=0) col1 = emp.columns.str[:4] # 컬럼 이름 정제 col2 = emp.iloc[0].str.split(' ').str.get(0) # 첫 번째 행 정제 후 제거 emp = emp.iloc[1:] emp.columns = [col1, col2] # 정제한 컬럼을 컬럼 이름으로 emp.columns.names = ['년도','구분'] emp = emp.applymap(lambda x : str(x).replace(',','')).astype('float') # 천 단위 구분기호 제거 # 1) 각 근로자별로 월급여액의 년도별 증감 추이를 그래프로 ( row:년도, colums=근로자) data1 = emp.xs('월급여액', level=1, axis=1).T plt.rc('font', family='Malgun Gothic') data1.index = data1.index.astype('int') # 대소비교 가능한 정수형으로 변환해야 축 범위로 자동 지정 data1.plot(ylim=[0,4000]) # 2) 각 근로자별 초과근로시간의 평균을 구하고 막대 그래프로 비교할 수 있도록 data2 = emp.xs('초과근로시간', level=1, axis=1).dropna().mean(1) data2.plot(kind = 'bar') plt.xticks(rotation=50) 참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정 |