본문 바로가기

데이터 분석

파이썬 사이킷런 (Scitkit-Learn)과 선형회귀 모델 (1)

반응형

 

 

선형회귀 모델은 데이터 분석에서 정말 자주 사용되는데요, 선형회귀 모델은 변수 간의 상관관계를 파악하여 관계를 예측하는 데 사용됩니다. 한 가지 이상의 변수들의 관계 역시 분석할 수 있습니다. 머신러닝을 활용한 선형회귀 모델을 파이썬에서 제공하는 사이킷런 (Scitkit-Learn) 라이브러리를 사용하여 만들 수 있습니다. 머신러닝을 진행할 때 전체 데이터 (학습 데이터)를 학습에 사용하고 일부 데이터 (테스트 데이터)는 성능을 평가하기 위해 사용되기 때문에 데이터를 무작위로 섞어서 분할하는 과정이 필요합니다. 이번 글에서는 기본 선형회귀 그래프를 만들어 보고 선형회귀 모델을 만들기 위해 데이터를 분할하는 방법에 대해 알아보도록 하겠습니다. 

 

 

 
 

기본 선형회귀 그래프 

 

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

 

numpy, pandas, matplotlib, 그리고 seaborn을 모두 불러옵니다. seaborn 역시 matplotlib과 같이 데이터 시각화를 위한 라이브러리입니다. 

 

df = pd.read_csv("Advertising.csv")
df.head()

 

 

 

 

분석에 사용할 "Advertising" csv 파일을 불러옵니다. 불러온 데이터프레임에는 각 미디어 별 광고 예산과 판매량이 있습니다. 광고 예산과 판매량 사이의 관계를 분석해 보도록 하겠습니다.  

 

fig,axes = plt.subplots(nrows=1,ncols=3,figsize=(16,6))

axes[0].plot(df['TV'],df['sales'],'o')
axes[0].set_ylabel("Sales")
axes[0].set_title("TV Spend")

axes[1].plot(df['radio'],df['sales'],'o')
axes[1].set_title("Radio Spend")
axes[1].set_ylabel("Sales")

axes[2].plot(df['newspaper'],df['sales'],'o')
axes[2].set_title("Newspaper Spend");
axes[2].set_ylabel("Sales")
plt.tight_layout();

 

 

 

 

먼저 fig,axes = plt.subplots(nrows=1,ncols=3,figsize=(16,6))를 확인해 보겠습니다. subplots 함수는 그래프를 만드는 함수인데 fig,axes와 함께 사용합니다. fig는 프레임 그리고 ax 캔버스라고 이해하시면 됩니다. 16x6의 프레임 크기를 가진 그래프를 1행 3열, 즉 3개의 그래프를 그린다는 의미입니다.  

 

axes[0].plot(df['TV'],df['sales'],'o')에 axes[0].plot는 첫 번째 열에 있는 그래프에 어떤 데이터를 그린다는 의미입니다. 즉, 불러온 데이터프레임에서 TV 예산을 x값 그리고 판매량을 y값으로 그리는데 그래프를 동그라미로 표현한다는 의미입니다. 그리고 set_ylabel과 set_title 함수를 이용하여  y축의 이름과 그래프의 이름을 지정했습니다. 

 

2번째 열에 있는 그래프는 라디오 예산과 판매량의 관계 그리고 3번째 열에 있는 그래프는 신문 예산과 판매량의 관계를 보여주고 있습니다.

 

plt.tight_layout는 그래프가 잘리지 않도록 크기를 조절한다는 의미입니다. 

 

sns.pairplot(df)

 

 

 

각 그래프에 대한 코드가 복잡한 경우 sns.pairpolot 함수를 사용할 수 있습니다. 모든 변수 간의 관계에 대한 그래프를 반환합니다. 불러온 데이터프레임에는 4개의 변수가 있기 때문에 16개 (4x4)의 그래프가 만들어졌습니다. 

 

 

 

Matplotlib 기본 라인 그래프 만들기

데이터분석은 데이터에서 인사이트를 발견하고 발견한 사실을 데이터에 대한 지식이 없는 분들도 쉽게 이해할 수 있도록 데이터를 시각화하는 작업이 필요합니다. 파이썬에서 제공하는 Matplotli

thespud.kr

 

 

 
 

학습 데이터와 테스트 데이터 분할

 

 

X = df.drop('sales',axis=1)
y = df['sales']

 

 

그래프에 사용할 x 변수와 y 변수를 지정합니다. x 변수에는 sales (열)을 삭제하고 y 변수에는 sales를 사용합니다. 

 

 

from sklearn.model_selection import train_test_split

 

 

사이킷런 라이브러리에서 train_test_split 함수를 사용합니다. train_test_split는 분석하는 데이터를 학습 데이터와 테스트 데이터로 분리해 줍니다. 

 

 

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=101)

 

 

 

 

이제 데이터 분할을 준비합니다. train_test_split 함수를 이용하여 x 변수와 y 변수를 학습 및 테스트 데이터로 분할합니다. test_size=0.3은 각 변수 데이터의 30%만 테스트 데이터로 사용한다는 의미입니다. random_state는 크게 중요한 부분은 아니며 실행 결과가 동일하게 나올 수 있도록 임의의 숫자를 적어주면 됩니다. 테스트 데이터의 총 행 수는 60 (200의 30%)이며 학습 데이터의 총 행 수는 140인 것을 확인할 수 있습니다.

 

 

 

Pandas 피벗 테이블 만들기

데이터프레임의 데이터가 복잡하고 많으면 원하는 정보를 얻기 힘듭니다. 데이터를 정렬하여 원하는 정보를 빨리 찾기 위해서 피벗 테이블을 활용할 수 있습니다. 판다스의 피벗 테이블은 엑셀

thespud.kr

 

 

 
 

분석 모델 준비

 

 

from sklearn.linear_model import LinearRegression

 

 

사이킷런 라이브러리에서 LinearRegression (선형회귀) 함수를 사용합니다.

 

 

model = LinearRegression()
model.fit(x_train,y_train)

 

 

model을 만들고 해당 모델에 변수 값을 입력해야 합니다. fix함수를 사용하여 x 변수와 y 변수의 학습데이터를 해당 모델에 입력합니다.

 

 

 

 


 

 

 

 

 

Pandas 활용도 높은 함수

Pandas에는 다양한 함수가 있습니다. 그중에서 활용도가 높은 함수 몇 가지를 알아보도록 하겠습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는 경우, 불러오고자 하는 CSV

thespud.kr

 

 

 

Pandas Apply 함수 (2)

이전 글에 이어 apply 함수에 대하여 더 알아보도록 하겠습니다. apply와 함께 자주 사용되는 lambda 함수와 lambda 함수 대신 사용할 수 있는 vectorize 함수도 함께 알아보도록 하겠습니다. 해당 글을 보

thespud.kr

 

 

 

Pandas Apply 함수 (1)

Pandas 함수 중 Apply 함수를 사용하면 새롭게 계산된 데이터 또는 조건에 따른 데이터를 가진 열을 쉽게 추가할 수 있습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는 경우,

thespud.kr

 

반응형