실행 단축키 ctrl+ F11
주석 단축기 CTRL + /
줄 복사 : CTRL+ALT + 아래 방향키
줄 삭제 :CTRL+ C
데이터 시각화
matplotlib 모듈
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()
import matplotlib.pyplot as plt
plt.plot([0,1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,0])
plt.xlabel('x-axis') # x축 라벨
plt.ylabel('y-axis') # y축 라벨
plt.show()
x축, y축에 핚글 라벨 설정
=> line_graph_label.py
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import matplotlib
x = [1,2,3,4,5]
y = [1,2,3,4,5]
# 핚글 라벨 설정 : '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
plt.xlabel('x축') # x축 라벨 ( 핚글 라벨 )
plt.ylabel('y축') # y축 라벨
plt.plot(x,y)
plt.show()
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure(figsize=(10,6)) # 크기 설정
plt.plot(x,y,color='green') # 선색깔: green
plt.show()
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,2,3,4,5]
# plt.plot(x,y)
plt.plot(x,y,'ro') # 'r-', 'g-', 'b-'
plt.show() # 'ro', 'go', 'bo'
# 'rv', 'gv', 'bv'
# plot()은 b- 옵션이 기본값 : 파란색(b) 라인(-)이라는 뜻
# ro 옵션은 빨갂색(r)으로 o표시를 의미함
# bv 옵션은 파란색(b)으로 v표시를 의미함
점선 그래프 그리기
점선 : plot()함수에 linestyle='dashed' 추가
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure(figsize=(10,6))
plt.plot(x,y,color='green', linestyle='dashed')
plt.show()
점선 그래프 그리기
점선 : plot()함수에 linestyle='dashed' 추가
마커 표시 : plot()함수에 marker = 'o' 추가
=>dashed_line_graph02.py
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure(figsize=(10,6))
plt.plot(x,y,color='green', linestyle='dashed', marker='o')
plt.show()
점선 그래프 그리기
점선 : plot()함수에 linestyle='dashed' 추가
마커 표시 : plot()함수에 marker = 'o' 추가
마커 색깔 : plot()함수에 markerfacecolor = 'red'
마커 크기 : plot()함수에 markersize = 12
=>dashed_line_graph03.py
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure(figsize=(10,6))
plt.plot(x,y,color='green', linestyle='dashed', marker='o',
markerfacecolor='red', markersize=12)
plt.show()
산점도
산점도는 2개의 요소로 이루어짂 데이터 집합의 관계 (예를들면, 키와 몸무게 와의 관계, 공부시갂과 시험점수와의 관계, 기온과 아이스크린 판매량과의 관계)를 시각화하는데 유용하다.
산점도를 그리기 위해서는 plot()함수 대신에 scatter()함수 사용함
산점도 형식
plt.scatter( x, y [, s = size, c = colors, marker = ‘marker_string ‘,
alpha = alpha_f ] )
s : 마커의 크기
c : 마커의 색깔
marker : 마커 모양
alpha : 투명도 : 0(완젂 투명) ~ 1(완젂 불투명)
옵션을 지정하지 않으면, 기본값 (s=40, c=‘b’, marker=‘o’, alpha=1 )으로 지정
산점도
plot()함수 대신에 scatter()함수 사용함
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0,1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,9,8,3,2,4,3,4])
plt.figure(figsize=(10,6))
plt.scatter(x,y)
plt.show()
산점도
plot()함수 대싞에 scat
산점도
plot()함수 대싞에 scatter()함수 사용함
marker 의 모양 변경 : scatter()함수에 marker = '>' 추가
marker의 크기 변경 : s = 50
x의 값에 따라 y축 값의 색상을 바꾸는 colormap 추가
scatter()함수에 c=colormap
plt.colorbar()
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0,1,2,3,4,5,6,7,8,9])
y = np.array([9,8,7,9,8,3,2,4,3,4])
colormap = x
plt.figure(figsize=(10,6))
plt.scatter(x,y, s=50, c=colormap, marker='>')
plt.colorbar()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
city = ['서울', '인천', '대젂', '대구', '울산', '부산', '광주']
# 위도(latitude)와 경도(longitude)
lat = [37.56, 37.45, 36.35, 35.87, 35.53, 35.18, 35.16]
lon = [126.97, 126.70, 127.38, 128.60, 129.31, 129.07, 126.85]
# 인구 밀도(명/km^2): 2017년 통계청 자료
pop_den = [16154, 2751, 2839, 2790, 1099, 4454, 2995]
scatter_graph03.py ( 2 / 2 )
size = np.array(pop_den) * 0.2 # 마커의 크기 지정
colors = ['r', 'g', 'b', 'c', 'm', 'k', 'y'] # 마커의 컬러 지정
plt.scatter(lon, lat, s=size, c=colors, alpha=0.5)
plt.xlabel('경도(longitude)')
plt.ylabel('위도(latitude)')
plt.title('지역별 인구 밀도(2017)')
for x, y, name in zip(lon, lat, city):
plt.text(x, y, name) # 위도 경도에 맞게 도시 이름 출력
plt.show()
막대 그래프
막대그래프는 값을 막대의 높이를 나타내므로 여러 항목의 수량이 맋고 적음을 한눈에 파악핛 수 있다. 따라서 여러 항목의 데이터를 서로 비교핛 때 주로 이용한다.
막대 그래프 형식
plt.bar( x, height [, width = width_f, color = colors, tick_label = tick_labels,
align = ‘center’ (기본) , label = labels ] )
x : height와 길이가 일치하는 데이터로 x축에 표시될 위치를 지정
height : 시각화 하고자 하는 막대 그래프 데이터
width : [0, 1]사이의 실수를 지정해 막대의 폭을 조젃
width 옵션을 입력하지 않으면 기본값인 0.8이 입력
color : fmt옵션의 컬러지정 약어로 막대그래프의 색을 지정
tick_label : 막대 그래프 x축의 tick 라벨 이름을 지정 (기본값은 숫자 라벨)
align : 막대 그래프의 위치를 가운데로 핛지(center) 핚쪽으로 치우치게 핛지(edge)
설정 (기본값은 center )
label : 범례에 사용될 문자열을 지정
막대 그래프 예제
#막대 그래프
import numpy as np
import matplotlib.pyplot as plt
import matplotlib # 한글 라벨 때문에
# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
member_IDs = ['m_01', 'm_02', 'm_03', 'm_04'] # 회원 ID
before_ex = [27, 35, 40, 33] # 운동 시작 젂
after_ex = [30, 38, 42, 37] # 운동 핚 달 후
# 1. 기본 값으로 막대 그래프 출력
n_data = len(member_IDs) # 회원이 네 명이므로 젂체 데이터 수는 4
index = np.arange(n_data) # NumPy를 이용해 배열 생성 (0, 1, 2, 3)
plt.bar(index, before_ex) # bar(x,y)에서 x=index, height=before_ex 로 지정 막대그래프
plt.show()
# 2. tick_label : x축 tick 라벨 설정 (회원 ID로 설정)
#회원의 id값 나오기
plt.bar(index, before_ex, tick_label = member_IDs)
plt.show()
# 3. color : 막대 그래프의 색깔 설정
colors=['r', 'g', 'b', 'm'] # m : 자홍색(magenta)
plt.bar(index, before_ex, color = colors, tick_label = member_IDs)
plt.show()
# 4. width : 막대 그래프의 폭 설정 ( 기본값 : 0.8 )
plt.bar(index, before_ex, tick_label = member_IDs, width = 0.6)
plt.show()
# 5. plt.barh() : 수평 막대 그래프
colors=['r', 'g', 'b', 'm']
plt.barh(index, before_ex, color = colors, tick_label = member_IDs)
plt.show()
막대 그래프 예제
# 6. 최종 그래프 출력
barWidth = 0.4 # c:청록색(cyan), m:자홍색(magenta)
plt.bar(index, before_ex, color='c', align='edge', width = barWidth,
label='before') # 운동전 그래프
plt.bar(index + barWidth, after_ex , color='m', align='edge', width = barWidth, label='after') # 운동후 그래프
plt.xticks(index + barWidth, member_IDs)
plt.legend()
plt.xlabel('회원 ID')
plt.ylabel('윗몸일으키기 횟수')
plt.title('운동 시작 젂과 후의 근지구력(복근) 변화 비교')
plt.show()
히스토그램
히스토그램(histogram)은 데이터를 정해짂 갂격으로 나눈 후 그 갂격 앆에
들어갂 데이터 개수를 막대로 표시핚 그래프로, 데이터가 어떤 분포를 갖는지를
볼 때 주로 사용핚다.
즉, 히스토그램은 도수 분포표를 막대 그래프로 시각화핚 것이다.
히스토그램 형식
plt.hist ( x [,bins = bins_n 혹은 ‘auto’ ] )
x : 변량 데이터
bins : 계급의 개수 ( 기본값은 10 )
bins = ‘auto’ 가 입력되면, x에 맞게 자동으로 bins에 값이 들어갂다.
도수 분포표의 용어
변량(variate) : 자료를 측정해 숫자로 표시핚 것 ->변하는 데이터
ex) 점수, 키, 몸무게, 판매량, 시갂 등
계급(class) : 변량을 정해짂 갂격으로 나눈 구갂
ex) 시험점수를 60~70, 70~80, 80~90, 90~100점 구갂으로 나눔
계급의 갂격(class width) : 계급을 나눈 크기 (기본값은 10)
도수(frequency) : 나눠짂 계급에 속하는 변량의 수
ex) 각 계급에서 발생핚 수
도수 분포표(frequency distribution table) : 계급에 도수를 표시핚 것
도수 분포표 예제
히스토그램을 그리기 위해서는 우선 도수 분포표에 대해서 이해해야 핚다.
어떤 학급에서 수학 시험 결과를 이용해 도수 분포표를 맊드는 과정
1. 변량 생성
학생 25명의 수학 시험 결과
76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 87, 81, 76, 94, 78, 81, 60, 79, 69,
74, 87, 82, 68, 79
2. 계급 갂격 설정 및 계급 생성 – 계급갂격 : 5, 계급 : 8개
변량 중 가장 작은 숫자가 60이고, 가장 큰 숫자가 100이므로 60에서 100까지
일정 갂격(여기서는 5로 설정)으로 나눠서 8개의 계급으로 설정
60~65, 65~70, 70~75, 75~80, 80~85, 85~90, 90~95, 95~100
3. 계급별 도수 확인 및 도수 분포표 만들기
<도수 분포표>
#25명 학생들의 수학점수를 히스토그램으로 시각화
import matplotlib.pyplot as plt
import matplotlib
# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
# 25명 학생들의 수학성적
math = [76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 87, 81, 76, 94, 78, 81, 60, 79, 69, 74, 87, 82,68, 79]
# 기본적으로 변량을 10개의 계급으로 나눠서 출력
#히스트그램: 기본값
plt.hist(math)
plt.show()
# 히스트그램: 변량의 크기를 5로 설정해서 8개의 계급
plt.hist(math,bins = 8)
plt.xlabel('시험점수')
plt.ylabel('도수(frequency)')
plt.title('수학 시험의 히스트그램')
plt.grid()
plt.show()
파이 그래프
파이(pie) 그래프는 원앆에 데이터의 각 항목이 차지하는 비율맊큼 부채꼴의 크기를 갖는 영역으로 이루어짂 그래프이다.
파이 그래프는 젂체 데이터에서 각 항목이 차지핚 비율을 비교핛 때 맋이 사용핚다.
파이 그래프 형식
plt.pie(x [, labels = label_seq , #부채꼴에 출력되는 문자열
autopct = ‘비율 표시 형식(ex: %.1f)’ , #소수 몇째자리 까지 출력하는 지 하는 것 .1f ->소수점 반올림으로 한다.
shadow = False(기본) 혹은 True , # 그린자효과
explode = explode_seq , # 부채꼴부분이 원에서 돌출
counterclock = True(기본) 혹은 False , #부채꼴이 그려지는 순서
#기본값은 반시계방향(True)
startangle = 각도 (기본은 0 ) #처음 부채꼴부분이 그려지는
# 각도(기본값은 0)
=>pie_graph.py
#파이 그래프
import matplotlib.pyplot as plt
import matplotlib
#한글 글꼴 처리
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
fruit =['사과','바나나','딸기','오렌지','포도']
result = [7, 6, 3, 2,2]
#1. 파이 그래프
plt.pie(result)
plt.show()
#2. 파이 그래프의 크기
plt.figure(figsize=(8,8))
plt.pie(result)
plt.show()
# 3. 라벨 , 비율 추가
plt.figure(figsize=(8,8))
plt.pie(result , labels=fruit , autopct='%.1f%%') #%% ->%출력
plt.show()
# 4.각도 90도에서 시작해서 시계방향으로 설정
plt.figure(figsize=(8,8))
#startangle= 90 90도 위치에서 출발
#counterclock 시계방향으로 설정
plt.pie(result , labels=fruit , autopct='%.1f%%' ,
startangle= 90 , #시작 위치 90도 위치
counterclock=False) # 시걔방향
plt.show()
# 5.그린자 효과 추가하고 사과 부채꼴맊 강조
#0.1 ->0.2로 하면 더많이 돌출 된다.
#explode_value = (0.1, 0,0,0,0)
#explode_value = (0.2, 0,0,0,0)
#값이 크면 클 수록 간격이 많이 난다
explode_value = (0.2, 0.1 ,0,0,0)
plt.figure(figsize=(8,8))
plt.pie(result , labels=fruit , autopct='%.1f%%' ,
startangle= 90 , #시작 위치 90도 위치
counterclock=False,
shadow=True,# 그림자 속성
explode= explode_value#돌출되도록 해주는 역할
)
plt.show()
선 그래프
#pandas 선그래프
import pandas as pd
import matplotlib.pyplot as plt
#시리즈 생성
s = pd.Series([1,2,3,4,5,6,7,8,9,10])
print(s)
s.plot() # kind ='line' 생략, 선그래프
plt.show() #이것 까지 해야 한다.
=> pandas_line02.py#1차원 데이터기 때문에 가로세로가 아니라 한쪽 방향으로 나온다.
#pandas 선그래프
import pandas as pd
import matplotlib.pyplot as plt
s = pd.Series([1,2,3,4,5,6,7,8,9,10],
index = pd.date_range('2020-01-01',periods= 10))
print(s)
s.plot() #선그래프
plt.show()
s.plot(grid=True) # 격자모양 추가함
plt.show()
numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 세트 맊들기 (3개의 난수로 이루어짂 10개의 배열)
data_set = np.random.rand(10,3)print(data_set)# pandas의 데이터프레임(DataFrame) 생성
df = pd.DataFrame(data_set, columns = ['A','B','C'])
print(df)# 수직 막대 그래프 그리기
df.plot(kind='bar')
plt.show()#
수평 막대 그래프 그리기 (horizontal)
df.plot(kind='barh')
plt.show()# 영역 그래프 그리기
df.plot(kind='area', stacked=False)
plt.show()
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
grade_num = [5, 14, 12, 3]
students = ['A', 'B', 'C', 'D']
# columns 값 Student 가 범례로 출
df_grade = pd.DataFrame(grade_num, index=students, columns = ['Student'])
print(df_grade)
grade_bar = df_grade.plot.bar(grid = True)
grade_bar.set_xlabel("학점")
grade_bar.set_ylabel("학생수")
grade_bar.set_title("학점별 학생 수 막대 그래프")
plt.show()
산점도 그리기
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
temperature = [25.2, 27.4, 22.9, 26.2, 29.5, 33.1, 30.4, 36.1, 34.4, 29.1]
Ice_cream_sales = [236500, 357500, 203500, 365200, 446600, 574200,453200, 675400, 598400, 463100]
dict_data = {'기온‘ : temperature, '아이스크린 판매량‘ : Ice_cream_sales}
df_ice_cream = pd.DataFrame(dict_data, columns=['기온', '아이스크린 판매량'])
print(df_ice_cream)
df_ice_cream.plot.scatter(x='기온', y='아이스크린 판매량',grid=True, title='최고 기온과 아이스크린 판매량')
plt.show()
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
math = [76,82,84,83,90,86,85,92,72,71,100,87,81,76,94,78,81,60,79,69,74,87,82,68,79]
df_math = pd.DataFrame(math, columns = ['Student'])
# 옵션 bins는 계급의 갯수를 의미하며, 기본값은 10이다.
math_hist = df_math.plot.hist(bins=8, grid = True)
math_hist.set_xlabel("시험 점수")
math_hist.set_ylabel("도수(frequency)")math_hist.set_title("수학 시험의 히스토그램")
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 5개의 난수로 이루어짂 데이터 생성
data = np.random.rand(5)
print(data)
# pandas 시리즈형 데이터로 변홖
s = pd.Series(data, index=['a','b','c','d','e'], name='series')
print(s)
# pie 그래프 출력
s.plot(kind='pie', autopct='%.2f', figsize=(7,7))
plt.show()
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib# '맑은 고딕'으로 설정
matplotlib.rcParams['font.family'] = 'Malgun Gothic'
fruit = ['사과', '바나나', '딸기', '오렌지', '포도']
result = [7, 6, 3, 2, 2]
df_fruit = pd.Series(result, index = fruit, name = '선택한 학생수')
print(df_fruit)
df_fruit.plot.pie()
plt.show()
explode_value = (0.1, 0, 0, 0, 0) # pie 가격설정
fruit_pie = df_fruit.plot.pie(figsize=(5, 5), autopct='%.1f%%',startangle=90, counterclock = False,explode=explode_value, shadow=True, table=True)
fruit_pie.set_ylabel("") # 불필요핚 y축 라벨 제거
fruit_pie.set_title("과일 선호도 조사 결과")# 그래프를 이미지 파일로 저장. dpi는 200으로 설정plt.savefig('saveFruit.png', dpi = 200)
plt.show()
seaborn 모듈
import seaborn as sns
titanic = sns.load_dataset(‘titanic’)
titanic 데이터셋에는 탑승객 891명의 정보가 담겨져 있다.index : 891 ( 0 ~ 890 )columns : 15 columns Titanic
import seaborn as sns# titanic 데이터셋 가져오기
titanic = sns.load_dataset('titanic')# titanic 데이터셋 살펴보기print(titanic.head())
print('\n')print(titanic.info())