Python

[Python] 맷플롯립(Matplotlib) 라이브러리(Library)_3

구루싸 2019. 9. 25. 01:49
반응형
SMALL

오늘 맷플롯립(Matplotlib) 라이브러리(Library)의 학습을 마치고자 달렸더니 벌써 새벽 2시를 향해-_-

진행할 내용은 맷플롯립을 이용해서 히스토그램(histogram), 산점도(scatter plot), 파이 차트(pie chart), 박스 플롯(box plot)입니다

# 판다스(Pandas)
import pandas
import matplotlib.pyplot as mp
import matplotlib

filepath = "/Users/dennis_sa/Documents/"
# 0번 로우를 header로 설정 
read_data = pandas.read_csv(filepath+"auto-mpg.data-original", header = None, sep = '\s+') 
read_data.columns = ['연비(mpg)', '실린더 수(cylinders)', '배기량(displacement)', '출력(horsepower)',
                     '차중(weight)', '가속능력(acceleration)', '출시년도(model_year)', '제조국(origin)', '모델명(name)']

matplotlib.rc('font', family = 'AppleGothic') # MAC OS 일 경우 한글 폰트 오류 해결
# 히스토그램(histogram) : 단변수 데이터를 일정 크기의 구간으로 나누어 빈도수를 표현
read_data['출력(horsepower)'].plot(kind = 'hist',
                                  bins = 10, # 10개 구간으로 나눔
                                  color = 'coral',
                                  figsize = (10, 5))
mp.style.use('classic')
mp.title('히스토그램 - 자동차 출력')
mp.xlabel('horsepower')
mp.ylabel('frequency')
mp.show()

matplotlib.rc('font', family = 'AppleGothic') # MAC OS 일 경우 한글 폰트 오류 해결
# 산점도(scatter plot) : 두 변수(연속 값) 사이의 관계
weight_rate = read_data['차중(weight)']/read_data['차중(weight)'].max() * 200
read_data.plot(kind = 'scatter', 
               x = '출력(horsepower)', # x축
               y = '연비(mpg)', # y축
               #c = 'coral', # 색
               cmap = 'viridis',
               s = weight_rate, # 크기 : 버블(bubble) 차트를 위해 차중을 크기 값으로 줌
               alpha = 0.3,
               figsize = (10, 5))
mp.title('산점도 - 연비 vs 출력')
mp.show()

# 그림 파일로 저장
mp.savefig(filepath + "Matplotlib_01_190924.jpg", transparent = True) 

matplotlib.rc('font', family = 'AppleGothic') # MAC OS 일 경우 한글 폰트 오류 해결
# 파이 차트(pie chart) : 원을 파이처럼 나눔
read_data['count'] = 1 # count column을 추가해서 합계를 구함
pie_data = read_data.groupby('제조국(origin)').sum() #제조국 기준으로 합계 계산
print(pie_data, end = '\n')
pie_data['count'].plot(kind = 'pie',
                       figsize = (10, 5),
                       autopct = '%1.1f%%', #%표시
                       startangle = 0, #조각을 나누는 시작점(각도)
                       colors = ['bisque', 'cadetblue', 'chocolate'])
mp.title('파이 차트 - 자동차 제조국')
mp.axis('equal') # 비율을 원에 가깝게 조정
mp.legend(labels = pie_data.index, loc = 'upper right')
mp.show()

matplotlib.rc('font', family = 'AppleGothic') # MAC OS 일 경우 한글 폰트 오류 해결
# 박스 플롯(boxplot) : 범주형 데이터 파악(아래에서 부터 최소값, 1분위값, 중간값, 3분위값, 최대값을 나타냄)
mp.style.use('seaborn-poster')
mp.rcParams['axes.unicode_minus'] = False # 마이너스 부호 출력
read_data = read_data.fillna(method = 'ffill') #Invalid value encountered in percentile 해결
fig = mp.figure(figsize = (10, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
ax1.boxplot(x = [read_data[read_data['제조국(origin)'] == 1]['연비(mpg)'],
                 read_data[read_data['제조국(origin)'] == 2]['연비(mpg)'],
                 read_data[read_data['제조국(origin)'] == 3]['연비(mpg)']])
ax2.boxplot(x = [read_data[read_data['제조국(origin)'] == 1]['연비(mpg)'],
                 read_data[read_data['제조국(origin)'] == 2]['연비(mpg)'],
                 read_data[read_data['제조국(origin)'] == 3]['연비(mpg)']],
            vert = False)
ax1.set_title('제조국가별 연비 분포(수직)')
ax2.set_title('제조국가별 연비 분포(수평)')
mp.show()

시간이 너무 늦은 관계로 오늘은 이만-_-

반응형
LIST