막대 그래프 그리기
bar() 함수를 이용해서 막대 그래프를 그릴 수 있다.
# barh() 함수를 이용해 수평 막대 그래프 그리기도 가능하다.
x1 = np.arange(0,20) # 0-19 까지 연속된 값 20 개
y1 = x1*2
x_ticks = np.arange(len(x1)) # 눈금지정(위치값)
plt.bar(x1,y1, label = 'Blue bar', color = 'blue' , edgecolor = 'yellow', linewidth = 3)
# plt.barh(x1,y1, label = 'Blue bar', color = 'blue' , edgecolor = 'yellow', linewidth = 3)
plt.xlabel('bar number')
plt.ylabel('bar height')
plt.title('Bar Chart Example')
plt.xticks(x_ticks,x_ticks+1) # x_ticks+1 눈금의 새로운 값
plt.legend()
plt.show()
matplotlib 색상표

두가지 막대그래프 결과를 한 그래프 안에 넣기
labels = ['Seoul','Busan','Incheon','Gwangju','Jeju']
men_means = [20,34,30,35,27]
women_means = [25,32,34,20,25]
x_ticks = np.arange(len(men_means))
width = 0.35 # 막대그래프의 폭 크기
# x_ticks-width/2 : 한 그래프의 중간에서 원래 중간까지의 값을 뺀 값
# x_ticks-width/2 : 한 x 축에 두가지 막대를 그리기 위함
plt.bar(x_ticks-width/2, men_means, width = width, color = 'dodgerblue', label = 'Men')
plt.bar(x_ticks+width/2, women_means, width = width, color = 'violet', label = 'Women')
plt.xlabel('City')
plt.ylabel('Score')
plt.xticks(x_ticks,labels)
plt.title('Score by group and gender')
plt.legend()
plt.show()

산점도 그리기
산점도 scatter plot 은 직교 좌표계를 이용해서 두 변수간의 상관관계를 나타내는 plot 이며 scatter() 함수를 이용해서 산점도를 그릴 수 있다.
np.random.seed(0)
for color in ['blue','orange','green']:
n = 50
# rand 균등 분포
x, y = np.random.rand(2,n) # random.rand : 0 <= n < 1 [0,1) 사이의 난수 2행 50열 모양으로 생성 (2차원)
# 데이터 마커의 크기 지정
scale = 190 * np.random.rand(n) + 10 # 10 <= n < 200 [10,200) 난수 50개
plt.scatter(x,y, color = color, s = scale, label = color , alpha = 0.3, edgecolors = 'none')
# edgecolors = 'none' 테두리가 없는
plt.legend() # 디폴트 값이 best
plt.grid(True)
plt.show()

히스토그램 그리기
hist() 함수를 이용해서 히스토그램을 그릴 수 있다.
자료의 분포를 몇 개의 구간으로 나눈 후에 각 구간에 해당하는 데이터의 빈도수를 표로 나타낸 것을 도수분포표 frequency table 이라고 한다.
히스토그램은 도수분포표에서 구간별 빈도수를 막대그래프로 나타낸 것이다.
y = np.random.randn(1000)
# randn 표준정규분표 : 평균 = 0 , 표준편차 = 1 난수 1000개 생성
x = np.arange(len(y))
# 막대그래프로 구성
plt.bar(x,y)
plt.title('Raw Data <Bar Chart>')
plt.show() # x축의 값이 1000이 됨 1000 개 하나의 높이를 나타냄
# 히스토그램으로 구성
plt.hist(y, bins = 50) # 표현할 데이터 50 개의 구간으로 나눈다.
plt.title('Histogram')
plt.show()
# 누적 히스토그램(도수분포표)
plt.hist(y,cumulative= True, bins =20)
plt.title('Cumulative Histogram')
plt.show()

원 그래프 그리기
pie() 함수를 이용해서 원 그래프를 그릴 수 있다.
## 기본 원 그래프
labels = ['Python', 'Java','C']
# autopct : wedge 위에 표시할 레이블 지정 (default : None)
# pie() 함수의 전달하는 값은 굳이 비율값을 전달하진 않고 일반적인 값을 전달하더라도 값들의 총합에 대한 비율을 알아서 계산해서 표시
# => 자동으로 비율을 계산해서 표시를 한다.
plt.pie([0.3, 0.35, 0.4], labels= labels, autopct ='%.1f%%' ) # 비율값
plt.title('Popular Language Ranking')
plt.show()
# 조각의 시작= 3시방향 -> 시계 반시계방향으로 그림
## 스타일 활용편
sections = [0.3,0.35,0.4]
labels = ['Python', 'Java','C']
colors = ['navy', 'olive', 'maroon']
plt.pie(
sections, # 조각의 크기를 설정하는 기본 값
explode = (0.1, 0, 0), # 조각을 중심으로부터 얼마나 떨어지게 할것인지 설정(0.1 = 반지름의 10% 벗어난 것을 의미)
# 조각의 개수 만큼 지정
colors= colors, # 조각의 색을 결정
labels = labels, # 조각의 이름을 표시
autopct = '%.2f%%', # %소수점 이하 2자리 % '%' 를 다루기 위함 : 비율을 표시하는 문자열 형식 지정
shadow = True, # 그림자를 표시
startangle = 90, # 첫번째 조각(원형의 시작 부분)을 각도로 표시 : 기본값 = 3시방향(0도)
counterclock = False, # 반시계방향으로 표시할지를 결정 : 기본값 = True
rotatelabels = True # 조각의 이름을 회전 : 기본값 = False
)
plt.title('Pie Chart example 2')
plt.show()

박스 플롯 그리기
데이터의 분포와 이상치 확인
boxplot 은 데이터 집합의 범위와 중앙값 등 통계 수치를 확인하고 데이터의 이상치를 확인하고자 하는 목적으로 사용
최소값: 제 1사분윙에서 1.5IQR(interquartile range: 사분위수 범위, Q3-Q1)을 뺀 위치
제 1사분위(Q1) : 중앙값 기준 하위 50% 중의 중앙값, 전체 데이터 중 하위 25%에 해당하는 값
제 2사분위(Q2) : 50%의 위치로 중앙값(median)을 의미, 데이터의 정 가운데 순위에 해당하는 값
제 3사분위(Q3) : 중앙값 기준 상위 50% 중의 중앙값, 전체 데이터 중 상위 25%에 해당하는 값
최대값: 제 3사 분위에서 1.5IQR을 더한 위치
IQR interquartile range, 사분위수 분위: Q3 - Q1
최대값과 최소값 범위를 벗어나는 값을 이상치 데이터로 간주한다.
np.random.seed(0)
data_a = np.random.normal(0, 2.0, 1000) # 평균:0 표준편차:2 데이터: 1000개 # 정규분포 값
data_b = np.random.normal(-3, 1.5, 500)
data_c = np.random.normal(1.2, 1.5, 1500)
plt.boxplot([data_a,data_b,data_c])
plt.ylim(-10,10) # y축 범위 명시적 지정
plt.xlabel('Data Type')
plt.ylabel('Value')
plt.show()

'국비 교육 > 데이터' 카테고리의 다른 글
[데이터 분석] Numpy -1 (0) | 2023.11.07 |
---|---|
[데이터 분석] Seaborn (0) | 2023.11.06 |
[데이터 시각화] matplotlib - 1 (0) | 2023.11.04 |
[데이터 수집] Auto Crawler (0) | 2023.11.04 |