반응형

 

 

import numpy as np
import pandas as pd#시각화는 있지만 자체적으로 show를 못해서 plt.show()로 출력하기
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')
#index0,1,2,3,4 -> 'a','b','c','d','e'
print(s)

# pie 그래프 출력
s.plot(kind = 'pie' ,autopct = '%.2f',figsize = (10,10))
plt.show()

=>pandas_pie02.py
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 모듈

Titanic Datasetseaborn 라이브러리에서 제공되는 ‘titanic’ 데이터셋을 가져와서 다양핚그래프로 출력 해보자.

import seaborn as sns
titanic = sns.load_dataset(‘titanic’)
titanic 데이터셋에는 탑승객 891명의 정보가 담겨져 있다.
index : 891 ( 0 ~ 890 )
columns : 15 columns

=> seaborn_dataset.py
# 라이브러리 불러오기
import seaborn as sns
# titanic 데이터셋 가져오기
titanic = sns.load_dataset('titanic')
# titanic 데이터셋 살펴보기
print(titanic.head())
print('\n')
print(titanic.info())

회귀선이 있는 산점도
seaborn 모듈로 산점도를 그리기 위해서는 regplot() 함수를 이용핚다.
sns.regplot ( x = ‘age’ , # x축 변수
y = ‘fare’ , # y축 변수
data = titanic , # 데이터
ax = ax1 , # 1번째 그래프
fit_reg = True ) # 회귀선 표시

 

# seaborn 모듈로 산점도 그리기

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정
# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('darkgrid')

#그래프 만들기 
# 서브 그래프 만들기 
fig = plt.figure(figsize=(10,10)) #그래프 크기 설정
ax1 = fig.add_subplot(1,2,1) # 1행 2열 구조의 첫번째 그래프
ax2 = fig.add_subplot(1,2,2) # 1행 2열 구조의 두번째 그래프

#산점도 그래프 그리기
sns.regplot(x = 'age', #x축 변수
            y = 'fare', # y측 변수
            data = titanic, #데이터
            ax = ax1 , #첫번때 그래프
            fit_reg=True #회귀선 표시(기본값)
 )

# 산점도 그래프 그리기 - 선형회귀선 미표시(fit_reg=False)
sns.regplot(x='age', # x축 변수
        y='fare', # y축 변수
        data=titanic, # 데이터
        ax=ax2, # axe 객체 - 2번째 그래프
        fit_reg=False) # 회귀선 미표시
#가격이 싼데 많이 몰려있다. 
plt.show()

 

범주형 데이터의 산점도

# seaborn 모듈로 산점도 그리기

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정
# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('darkgrid')

#그래프 만들기
# 서브 그래프 만들기
fig = plt.figure(figsize=(10,10)) #그래프 크기 설정
ax1 = fig.add_subplot(1,2,1) # 1행 2열 구조의 첫번째 그래프
ax2 = fig.add_subplot(1,2,2) # 1행 2열 구조의 두번째 그래프

#산점도 - 데이터 분산 미고려
#분포가 퍼지지 않다.
sns.stripplot(x ='class' , #x측 변수
              y = 'age' , #y측 변수
              data = titanic, #데이터
              ax = ax1 #1번째 그래프
              )

#산점도 - 데이터 분산 고려 - 데이터가 많을 경우 분산되여 있다.
#데이터가 많을 경우 분산해서 보여준다.
sns.swarmplot(x ='class' , #x측 변수
              y = 'age' , #y측 변수
              data = titanic, #데이터
              ax = ax2 #2번째 그래프
              )
#title 설정
ax1.set_title('stripplot()')
ax2.set_title('swarmplot()')

plt.show()

히스토그램과 커널 밀도 함수

#히스토그램과 커널 밀도 함수

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('darkgrid')

# 그래프 객체 생성 (figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5)) # 그래프 크기 설정
ax1 = fig.add_subplot(1, 3, 1) # 1행 3열 - 1번째 그래프
ax2 = fig.add_subplot(1, 3, 2) # 1행 3열 - 2번째 그래프
ax3 = fig.add_subplot(1, 3, 3) # 1행 3열 - 3번째 그래프

#그래프 그리기 : 히스트그램 + 커널 밀드 그래프
sns.distplot(titanic['fare'], ax = ax1)

#그래프 그리기 : 커널 밀드 그래프
sns.distplot(titanic['fare'], hist=False, ax = ax2)

#그래프 그리기 : 히스트그램
sns.distplot(titanic['fare'], kde=False, ax = ax3)


# 차트 제목 표시
ax1.set_title('titanic fare - hist/ked') # 히스토그램 / 커널밀도함수
ax2.set_title('titanic fare - ked') # 커널밀도함수
ax3.set_title('titanic fare - hist') # 히스토그램

plt.show()

히트맵

import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('darkgrid')

# 피벖테이블로 범주형 변수를 각각 행, 열로 재구분하여 데이터프레임을 생성함
# aggfunc='size' 옵션은 데이터 값의 크기를 기준으로 집계핚다는 의미
# 등석에 따라 남자 여자 몇명인지 나오기
table = titanic.pivot_table(index = ['sex'],columns=['class'],aggfunc='size')

#히트맵 만들기
sns.heatmap(table,
            annot=True ,  # 승객수
            fmt = 'd' , #정수 형태로
            cmap='YlGnBu', # 색상 설정
            linewidths=0.5, #구분선 두깨
            cbar=False #컬러바 표시 여부 오른쪽에 생기는 것
            )
plt.show()

막대 그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns
# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')
# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')
# 그래프 객체 생성 (figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5)) # 그래프 크기 설정
ax1 = fig.add_subplot(1, 3, 1) # 1행 3열 - 1번째 그래프
ax2 = fig.add_subplot(1, 3, 2) # 1행 3열 - 2번째 그래프
ax3 = fig.add_subplot(1, 3, 3) # 1행 3열 - 3번째 그래프

#막대 그래프 그리기
sns.barplot(x = 'sex' , y = 'survived', data=titanic , ax = ax1)

# x축, y축에 변수 핛당하고, hue 옵션 추가하여 누적 출력순으로 출력
sns.barplot(x='sex', y='survived', hue='class', data=titanic, ax=ax2)

# x축, y축에 변수 핛당하고, dodge=False 옵션으로 1개의 막대그래프로 출력
sns.barplot(x='sex', y='survived', hue='class', dodge=False, data=titanic, ax=ax3)
# 차트 제목 표시
ax1.set_title('titanic survived - sex')
ax2.set_title('titanic survived - sex/class')
ax3.set_title('titanic survived - sex/class(stacked)')
plt.show()

빈도 막대그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns
# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')
# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')
# 그래프 객체 생성 (figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5)) # 그래프 크기 설정
ax1 = fig.add_subplot(1, 3, 1) # 1행 3열 - 1번째 그래프
ax2 = fig.add_subplot(1, 3, 2) # 1행 3열 - 2번째 그래프
ax3 = fig.add_subplot(1, 3, 3) # 1행 3열 - 3번째 그래프

#빈도 막대 그래프
sns.countplot(x = 'class' , palette='Set1', data=titanic, ax = ax1)

#빈도 막대 그래프 : hue ='who' who(man, woman, child)값으로 각각 빈도 막대 그래프
sns.countplot(x = 'class' , palette='Set2', hue ='who', data=titanic, ax = ax2)

#빈도 막대 그래프 : dodge= False한개의 막대그래프에 나타남
sns.countplot(x = 'class' , palette='Set2', hue ='who', dodge= False, data=titanic, ax = ax3)


# 차트 제목 표시
ax1.set_title('titanic class')
ax2.set_title('titanic class - who')
ax3.set_title('titanic class - who(stacked)')


plt.show()

박스플롯 / 바이올린 그래프

# 박스 플롯/ 바이올린 그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')

# 그래프 객체 생성 (figure에 4개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 10)) # 그래프 크기 설정
ax1 = fig.add_subplot(2, 2, 1) # 2행 2열 - 1번째 그래프
ax2 = fig.add_subplot(2, 2, 2) # 2행 2열 - 2번째 그래프
ax3 = fig.add_subplot(2, 2, 3) # 2행 2열 - 3번째 그래프
ax4 = fig.add_subplot(2, 2, 4) # 2행 2열 - 4번째 그래프

#1. 박스 그래프
sns.boxplot(x = 'alive', y = 'age', data=titanic, ax = ax1)

#2. 박스 그래프 : hue: sex sex(male, female)로 구분해서 출력
sns.boxplot(x = 'alive', y = 'age',hue='sex', data=titanic, ax = ax2)

#3. 바이올린 그래프
sns.violinplot(x = 'alive' ,y ='age', data=titanic, ax = ax3)

#4. 바이올린 그래프 hue: sex sex(male, female)로 구분해서 출력
sns.violinplot(x = 'alive' ,y ='age',hue = 'sex', data=titanic, ax = ax4)

plt.show()

조인트 그래프

# 조인트 그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')

# 1. 조인 그래프 : 산점도 + 히스트그램
j1 = sns.jointplot(x = 'fare', y = 'age', data= titanic)

# 2. 조인 그래프 : 회귀선 : kind ='reg'
j2 = sns.jointplot(x = 'fare', y = 'age',kind ='reg',  data= titanic)


# 3. 조인 그래프 : kind ='hex'
j3 = sns.jointplot(x = 'fare', y = 'age',kind ='hex',  data= titanic)


# 4. 조인 그래프 : kind ='kde'
j4 = sns.jointplot(x = 'fare', y = 'age',kind ='kde',  data= titanic)

# 차트 제목 표시
j1.fig.suptitle('titanic fare - scatter', size=15)
j2.fig.suptitle('titanic fare - reg', size=15)
j3.fig.suptitle('titanic fare - hex', size=15)
j4.fig.suptitle('titanic fare - kde', size=15)

plt.show()

조건을 적용하여 화면을 그리드로 분할한 그래프

# 조건을 적용하여 화면을 그리드로 분핛핚 그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')

# 조건에 따라 그리드  나누기 : who(man, woman, child) , survived (0 or 1)
g = sns.FacetGrid(data = titanic, col ='who', row='survived')

#그래프 그리기: 히스트그램
g = g.map(plt.hist, 'age')

plt.show()

데이터 분포 그래프

#데이터 분포 그래프

# 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

# Seaborn 제공 데이터셋 가져오기
titanic = sns.load_dataset('titanic')

# 스타일 테마 설정 (5가지: darkgrid, whitegrid, dark, white, ticks)
sns.set_style('whitegrid')

# titanic 데이터셋 중에서 분석에 필욯난 데이터 선택하기
titanic_pair = titanic[['age','pclass' ,'fare']]

# 조건에 따라서 그리드로 누누가: 3행 3열 그리드로 출력
g = sns.pairplot(titanic_pair)

plt.show()

 

 

인공지능(AI, Artificial Intelligence)이란 무엇인가?

인공지능이란 사람과 유사한 지능을 가지도록인간의 학습능력, 추론능력, 지각능력, 자연어 이해능력 등을 컴퓨터 프로그램으로 실현하는 기술이다.

 

비젼: 이미지 비디오 인식 하는 것

기계학습은 인공지능의 한 분야로 기계 스스로 대량의 데이터로부터 지식이나 패턴을 찾아 학습하고 예측을 수행하는 것이다

강화학습은 게임 쪽에서 많이 한다.

Perceptron은 학습이 진행될수록 선형 분리(linear boundary)를 업데이트하면서 학습

 

 

학습 데이터에 너무 지나치게 맞추다 보면 일반화 성능이 떨어지는 모델을 얻게 되는 현상을 과적합(Overfitting)이라고 한다.

Under Fitting-> 학습률이 떨어진다.적정 수준의 학습을 하지 못하여 실제 성능이 떨어지는 경우

Normal Fitting (Generalized Fitting)적정 수준의 학습으로 실제 적정한 일반화 수준을 나타냄. 기계 학습이 지향하는 수준.

Over Fitting -> 학습 데이터가 너무 적을 떄도 일어난다. train에는 학습이 잘된다. 학습 데이터에 성능이 좋지만 실제 데이터에 관해 성능이 떨어짐. 특히 조심해야 함.

 

Overfitting을 피하는 다양한 방법 중 검증(Validation) 기법을 알아본다.

 

사이킷런 모듈 설치

1. python 에 설치

c:\> pip install scikit-learn

2. anaconda 에 설치

c:\> conda install scikit-learn

PyCharm scikit-learn 설치

단순선형 회귀 예제

y = ax + b 처럼 데이터를 만들어 회귀문제를 풀어 보자.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

# 학습 데이터 생성 난수를 가지고 만든다.
x = np.random.rand(100, 1)

x = x * 4 - 2 # -2 ~ 2
y = 3 * x - 2 # y = 3x - 2

# 모델 생성하기
model = linear_model.LinearRegression()#모듈을 직접 만드는 것이 아니라 linearRegression

# 모델 학습
model.fit(x,y)

# 학습을 하면서 규칙을 찾는다.
# x,y에 대해서 규칙을 찾는다.
#기울기라는 회귀계수 와 절별 (bias)
print("회귀계수(기울기)",model.coef_)
print("회귀계수(절편)",model.intercept_)

# 산점도 그래프 출력 (예측값과 실제 값 비교하기 위해서)
plt.scatter(x, y , marker='+')
plt.show()

y = ax + b 처럼 데이터를 만들어 회귀문제를 풀어 보자.

여기서는 y = 3x – 2에 정규분포 난수를 더했을때, 최소 제곱법으로 기울기와 절편을예측해 보자.

#단순 선형 회귀
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

#학습 데이터 생성 3 0 ~ 1 사이의 난수 100개 생성
x = np.random.rand(100, 1)

x = x * 4 - 2 # -2 ~ 2
y = 3 * x - 2 # 고정된 값이 아니게 해야 한다.

#표준 정규분포(평균: 0 표준편차 : 1)의 난수를 추가 어떤 값이 나올지 모른다.
y += np.random.randn(100,1)

#모델 생성
model = linear_model.LinearRegression()

#모델 학습
model.fit(x,y) #x가 얼마일때 y가 얼마인지

# 예측값 출력
print(model.predict(x))
print()
print(y)

#회귀계쑤와 절편 출력
print("회귀계수:" , model.coef_)
print("절편:", model.intercept_)

#예측은 predict로 한다.

# 산점도 그래프 출력 (예측값과 실제 값 비교하기 위해서)
plt.scatter(x, y , marker="+") #실제값 데이터
#x가 얼마 일 때 y가 얼마인지 는 실제 데이터
plt.scatter(x, model.predict(x), marker='o')# 예측값 구하기
#x값이 얼마 일때 학습된 값 가지고 예측 한다.
plt.show()

#x가 학습데이터 x -> - 2~ 2 학습데이터 -> y = 3x -2 그대로 집어여면 y이 고정된다.
#y += np.random.randn(100,1) y 값에 누적을 생겨서 오차가 생긴다.
#y가 1일때 1으로 떨어지지 않는다.
# model.fit(x,y) 정확하게 떨어지지 않는 값이다.
#예측은 제공된 함수로 예측한다.
#난수이기 때문에 값이 다르다.
반응형

'Study > 머신러닝' 카테고리의 다른 글

머신러닝-6  (0) 2020.11.19
머신러닝-5  (0) 2020.11.19
머신러닝-4  (0) 2020.11.17
머신러닝-3  (0) 2020.11.16
머신러닝-1  (0) 2020.11.14
반응형

실행 단축키 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())                 

반응형

'Study > 머신러닝' 카테고리의 다른 글

머신러닝-6  (0) 2020.11.19
머신러닝-5  (0) 2020.11.19
머신러닝-4  (0) 2020.11.17
머신러닝-3  (0) 2020.11.16
머신러닝-2  (0) 2020.11.14

+ Recent posts