반응형
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()
...더보기
※ 참고
컬러맵 참조 : http://matplotlib.org/tutorials/colors/colormaps.html
그래프 갤러리 참조 : https://python-graph-gallery.com
시간이 너무 늦은 관계로 오늘은 이만-_-
반응형
LIST
'Python' 카테고리의 다른 글
[Python] 씨본(Seaborn) 라이브러리(Library)_2 (0) | 2019.09.30 |
---|---|
[Python] 씨본(Seaborn) 라이브러리(Library)_1 (0) | 2019.09.26 |
[Python] 맷플롯립(Matplotlib) 라이브러리(Library)_2 (0) | 2019.09.23 |
[Python] 맷플롯립(Matplotlib) 라이브러리(Library)_1 (0) | 2019.09.21 |
[Python] 판다스(Pandas) 라이브러리(Library)_6 (1) | 2019.09.20 |