인공지능/파이썬

파이썬(Python) - matplotlib ① pie chart / bar chart / line plot

해피밀세트 2020. 3. 22. 01:01
반응형

 

 

1. 자료의 시각화

 

1) 자료

  • 어떠한 가치 판단을 있는 근거가 되는 재료
  • 문제해결을 위한 원재료로 처리되진 않은 숫자, 문자, 일련의 사실이나 기록들의 모임

 

2) 양적자료 (Qunatitative Data, 수치형 자료)

  • 수치로 측정이 가능한 자료
  • 테이블 생성할때 숫자로 되어있는거 양적자료이다.
  • 연속형 자료(continuous data) : 실수형 ) commission_pct, , 몸무게 
  • 이산형 자료(discrete data) 정수형 ) 출생아수, 남학생수, 왼손잡이수

 

3) 질적자료(Qualitaive Data, 범주형 자료)

  • 수치 측정이 불가능한 자료
  • 자료의 내포하는 의미가 있는 자료
  • 순위형 자료 (ordinal data) : 학점(A+,B,..), 매우좋아, 보통, 아주나쁘다
  • 명목형 자료 (nominal dat) : 성별, 거주지역, 혈액형

 

4) 자료의 시각화

 

요약방법

자료정리

그래프

양적자료

수치,그래프

평균, 분산, 중앙값,
최소값, 최대값,
표준편차, 사분위

히스토그램, 상자도표,
시계열도표, 산점도

질적자료

도수분포표, 도표, 그래프

분할표

막대그래프, 원그래프

 


 

2. pie chart

  • 질적자료(범주형) 대한 그래프
  • 원을 그린후 원에 계급의 상대도수에 대응하는 면적 또는 부분으로 나눈다.
  • 도수(frequency) : 범주에 속하는 관측값의 개수 (건수)
  • 상대도수(relative frequency) : 도수를 전체 개수로 나눈 비율
  • 도수분포표(frequency table) : 범주형 자료에서 범주와 범주에 대응하는 도수와 상대도수를 나열하는

) 케이크 선호도 도수분포표

선호도

도수

상대도수

각도

초코

40

40/100 = 0.4

360*0.4 = 144

딸기

30

30/100 = 0.3

360*0.3 = 108

치즈

20

20/100 = 0.2

360*0.2 = 72

생크림

10

10/100 = 0.1

360*0.1 = 36

100

1

360

 

 

pd.plt를 사용한 시각화 : pie chart

# pie plot 그래프 사용

labels = ['초코','딸기','치즈','생크림']
frequency = [40,30,20,10]
cake = DataFrame({'frequency':frequency},
                   index = labels)
cake['frequency'].plot(kind='pie')

# 그래프에 한글 사용

import matplotlib.pylab as plt
from matplotlib import font_manager, rc

 

# 한글이 깨지므로 꼭 폰트를 설정해야한다.

 

font_name = font_manager.FontProperties(fname = 'C:\windows/fonts/malgun.ttf').get_name()

rc('font',family = font_name)

 

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie')

# figsize : 그림 사이즈(가로인치, 세로인치)

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5))

# autopct : 상대도수를 퍼센트로 표현

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                         autopct = '%1.1f%%')

# startangle : 파이조각을 나누는 시작점 (각도 표시)

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                       autopct = '%1.1f%%', startangle = 90)

# colors : 라벨의 순서대로 컬러를 정해준다.
# 색깔 이름은 matplotlib color list 참고

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                       autopct = '%1.1f%%', startangle = 90,
                       colors = ['saddlebrown', 'lightpink', 'gold',
                                   'cornsilk'])

 

# title : 그래프의 제목

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                       autopct = '%1.1f%%', startangle = 90,
                       colors = ['saddlebrown', 'lightpink', 'gold',
                                   'cornsilk'],
                       title = '케이크 선호도 조사')

# fontsize : 글자 크기 조절 

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                       autopct = '%1.1f%%', startangle = 90,
                       colors = ['saddlebrown', 'lightpink', 'gold',
                                   'cornsilk'],
                       title = '케이크 선호도 조사', fontsize = 13)
# legend : 범례 사용 여부

labels = ['초코','딸기','치즈','생크림'] 
frequency = [40,30,20,10] 
cake = DataFrame({'frequency':frequency}, 
                   index = labels) 
cake['frequency'].plot(kind='pie',figsize=(7,5),
                       autopct = '%1.1f%%', startangle = 90,
                       colors = ['saddlebrown', 'lightpink', 'gold',
                                   'cornsilk'],
                       title = '케이크 선호도 조사', fontsize = 13,
                       legend = True)

 

 

 

matplotlib를 사용한 시각화 : pie chart

 

# matplotlib 임포트

import matplotlib.pylab as plt

plt.pie(cake['frequency'], labels=cake.index)

# figsize : 그래프 크기 조절

plt.figure(figsize=(5,5))
plt.pie(frequency)
# explode : 조각내기

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0))
# labels : 라벨 표시

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels)
# autopct : 상대도수를 퍼센트로 표현

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%')
# shadow : 그림자 사용 여부

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True)
# startangle : 파이조각을 나누는 시작점 (각도 표시)

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True, startangle = 90)
# textprops : 폰트 크 조절

plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True, startangle = 90,
         textprops = {'fontsize':13})
# colors : 색상 지정

colors = ['saddlebrown','lightpink','gold','cornsilk']
plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True, startangle = 90,
         textprops = {'fontsize':13}, colors = colors)

 

# plt.title() : 표 제목

colors = ['saddlebrown','lightpink','gold','cornsilk']
plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True, startangle = 90,
         textprops = {'fontsize':13}, colors = colors)
plt.title('케이크 선호도 조사')
# plt.legend() : 범례 지정

colors = ['saddlebrown','lightpink','gold','cornsilk']
plt.figure(figsize=(5,5))
plt.pie(frequency, explode = (0.1,0,0,0),
         labels = labels, autopct='%1.1f%%',
         shadow = True, startangle = 90,
         textprops = {'fontsize':13}, colors = colors)
plt.title('케이크 선호도 조사')
plt.legend(labels=labels, loc='upper right')
plt.show()

 

 


 

3. bar chart

  • 막대그래프
  • 범주에서 도수의 크기를 막대로 표현한다.
  • 세로방향, 가로방향 막대그래프를 표현한다.
  • bar(x, y) : x축의 위치, y축의 위치

# bar 그래프 사용

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x,y)

# color : 막대의 색상 지정

x = [1,2,3,4] 

y = [90,80,70,50] 
xlabel = ['초코','딸기','치즈','생크림'] 
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'])

# align : 막대의 x축 좌표에서 정렬 수행

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center')
# width : 막대의 넓이

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center', width = 0.7)
# plt.title() : 그래프의 제목

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center', width = 0.6)
plt.title("케이크 선호도 조사", size = 20)

# plt.xlabel() : x축의 이름
# plt.ylabel() : y축의 이름

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center', width = 0.6)
plt.title("케이크 선호도 조사", size = 20)
plt.xlabel("종류", size = 15)
plt.ylabel("선호도", size = 15)

# 축의 이름을 바꿀때

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center', width = 0.6)
plt.title("케이크 선호도 조사", size = 20)
plt.xlabel("종류", size = 15)
plt.ylabel("선호도", size = 15)
plt.xticks(x, xlabel)
# plt.grid() : 그래프에 그리드 사용 여부

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.bar(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center', width = 0.6)
plt.title("케이크 선호도 조사", size = 20)
plt.xlabel("종류", size = 15)
plt.ylabel("선호도", size = 15)
plt.xticks(x, xlabel)
plt.grid(True)

 

# 가로형 bar 그래프 사용

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.barh(x, y,
         color = ['saddlebrown','lightpink','gold','cornsilk'],
         align = 'center')
# xlime : x축의 길이를 0~120까지 늘린다.

x = [1,2,3,4]
y = [90,80,70,50]
xlabel = ['초코','딸기','치즈','생크림']
plt.barh(x, y,
          color = ['saddlebrown','lightpink','gold','cornsilk'],
          align = 'center')
plt.title("케이크 선호도 조사", size = 20)
plt.ylabel("종류", size = 15)
plt.xlabel("선호도", size = 15)
plt.yticks(x, xlabel)
plt.xlime(0,100)

# 여러개의 값을 bar형태로 나타내기

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25],
          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data.plot(kind='bar')

# 한 개의 값을 bar형태로 나타내기

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25], 

          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data['서울'].plot(kind='bar')

# 여러개의 값을 가로형 bar형태로 나타내기

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25],
          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data.plot(kind='barh')

# 스택형 막대 그래프

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25], 
          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data
.plot(kind='bar', stacked = True)

# 스택형 가로 막대 그래프

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25], 

          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data
.plot(kind='barh', stacked = True)

 


 

4. line plot (= 기본값)

  • 선을 그리는 그래프
  • 꺾은선 그래프
  • 데이터가 시간, 순서 등에 따라 어떻게 변하는지를 보여주기 위해서 사용된다.

 

# line 그래프 사용

data = DataFrame({'서울':[25,35,15], '천안':[30,15,25], 

          '분당':[15,20,30]}, index = ['강아지','고양이','햄스터'])
data.plot()
# line 그래프 사용

data.plot(kind='line',color=['red','blue','yellow'],figsize=(7,7))
반응형