블로그를 준비하고 있어요
잠시만 기다려주세요...
먼저 위의 그래프처럼 학생들의 수학, 읽기 점수를 scatter 로 그래프를 그려보자.
이전 강의에서 봤던 코드에서 똑같이 시작하고, 불러오는 파일의 경로만 변경하면 된다.
import pandas as pd
# 모듈 호출 및 한글폰트 설정
import matplotlib.pyplot as plt
import matplotlib
# MacOS에서 폰트설정
# matplotlib.rcParams["font.family"] = "AppleGothic"
# 윈도우에서 폰트설정
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# 폰트 크기 설정
matplotlib.rcParams["font.size"] = 13
# 마이너스 출력 문제 해결
plt.rcParams['axes.unicode_minus'] = False
score = pd.read_excel("./StudentsPerformance.xlsx")
score.head(3)
이제 이것을 이용해 수학 점수, 읽기 점수를 plt.scatter의 파라미터로 넣어준다.
plt.scatter(score["수학점수"], score["읽기점수"])
그래프가 이쁘지 않으니 조금 더 꾸며보았다.
그래프의 색, 투명도, 각 축의 레이블을 넣어 주었다.
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
기본적인 그래프가 완성되었으니 이제 numpy를 활용하여 선형회귀분석을 해보자.
numpy의 polymomial을 호출한 뒤 분석하고자 하는 x값, y값, 몇차함수 인지를 파라미터로 입력하면 된다.
우리는 수학점수, 읽기점수를 1차 함수로 선형휘귀 분석을 해보자.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
이렇게 입력하면 polynomial은 예측한 선형함수를 반환한다.
따라서 f는 x값을 파라미터로 받는 함수가 된다.
아래와 같이 입력해서 예측값을 한번 보자.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
f(40)
수학점수가 40점인 학생의 읽기점수 예측값은 40이 된다.
이제 그래프를 그려보자.
자료에서 학생들의 수학점수와 읽기 점수는 0부터 100까지 정렬된 값이 아니다.
그래서 f에 파라미터로 수학점수를 넣어주면 차수가 높아질 수록 그래프가 뒤죽박죽이 된다.
먼저 0부터 100까지의 숫자를 생성 한 뒤 이것을 선형함수의 x값으로 줘서 그래프를 그려야 한다.
numpy의 linspace는 시작점, 끝점, 안에 채울 숫자의 수를 파라미터로 받아 값을 생성해다.
import numpy as np
x = np.linspace(0,100,200)
plt.plot(x,f(x))
x의 값을 확인해보면 왼쪽과 같이 생성된 것을 볼 수 있다.
그리고 이것으로 그래프를 그리면 아래와 같이 된다.
이제 그래프 두 개를 겹쳐주기만 하면 끝이다.
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
plt.plot(x, f(x),"r--")
이번 글에서는 선형회귀분석을 통해 두 값이 어떤 관계를 가지는지 그래프로 그려보았다.
다음 글에서는 데이터 시각화를 이용해 고등학교 생기부를 어떻게 채워나갈지를 고민해보려고 한다.
댓글을 불러오는 중...