학부공부/데이터마이닝과통계

데이터셋을 활용하여서 회귀분석을 해보자.

IT grow. 2018. 12. 3. 06:38
반응형


오늘은 기존에 알고 있던 , mtcars ( 기존 R에 내장되어 있는 데이터셋 ) 말고 , 새로운 데이터셋을 구해서 회귀분석을 다뤄보겠다.

 

데이터셋을 다루는 사이트는 굉장히 많다 . 그런데 , 자동차 특정 정보를 포함하는 데이터셋을 찾기에는 어려웠다.

다음은 내가 찾은 데이터셋 사이트중 괜찮은 곳 들을 정리해 보았다.

https://www.kaggle.com/ --> 데이터셋 사이트

https://archive.ics.uci.edu/ml/datasets.html --> 데이터셋 사이트

https://www.teoalida.com/cardatabase/ --> cardatabase 전문사이트

 

내가 사용할 곳은 cardatabase전문 사이트이다. 자동차 정보가 내가 원하는 곳이 있었기 때문이다.

 

사이트를 들어가면 다음과 같은 화면이 뜬다.

Read more & Buy를 사용해서 더 많은 정보를 보고 싶지만돈이 부족하므로다음에 이용해보겠다. Demo버전을 다운받아본다

 

다운받으면 xls파일이 다운받아 질 것이다.

열어보면 다음과 같다.

좋다 .. 정보가 많은것까지는 좋은데 너무 많다 그래서 걸러줄 필요를 느꼈다.

 

나는 다음처럼 정리해 보았다.

순서대로 브랜드 , 모델명 , 만든시기 , trim , 가격 , 기본curb무게 , MPG 3시리즈 , cur와 관련된2가지 데이터까지 해서 정리를 해보았다.

그런데 파랑색으로 된 셀은 밑으로 조금만 내리다 보니까 , 영문이 섞여 있었다.

나는 숫자로써 어떠한 수치를 보고싶었기 때문에 셀을 지워준다.

 

이제 Exel 파일이 어느정도 정리가 되었다.

이제 Rstudio를 켜서 이 Exel파일을 분석해 볼 것이다.

 

코드를 통해서 어떻게 회귀분석을 하게 되는지 확인해 본다.

 

install.packages("readxl")

library(readxl)

è  기본적으로 exel파일을 읽을수 있는 패키지를 로딩시키는 것이 1번이다.

 

# readxl 패키지를 설치하여 read.xlsx()함수를 사용한다.

 

Data <- read_excel("C:/Users/user/Desktop/3학년2학기/데이터마이닝과통계/기말고사/기말_HW4/Modify2_Sample.xlsx", sheet = "Database",range = "B3:K108",

col_names = TRUE,

col_types ="guess",

na = "NA")

è  read함수를 이용해서 exel파일을 읽어 줄 것이다

è  sheet = “ 특정 sheet를 보고 싶을 경우

è  range = “ 다루고 싶은 셀의 범위

è  col_names = 셀의 이름 여부

è  col_type = 셀의 타입

è  na = 빈공백일 경우 어떻게 할지

 

이렇게 Exel 파일에 있는 데이터를 가져온다.

그런데 , R에서 Exel파일을 읽어올 때 다음과 같은 오류가 났다.

나는 경로도 , sheet 이름도 , 모든것을 알맞게 해주었는데 오류가 났다.


 

 

이해할 수가 없었다. 그러던 중 Exel 파일의 형식을 볼 수 있었는데 , 형태가 보호되어 있는 것이였다. 그렇기 때문에 접근을 할 수가 없었던 것이다.

Exel 파일의 형태를 공공으로 바꾸어 주니 , 접근이 잘 되었다.

 

 

str(Data)

è  str를 사용해서 str형태로 Data를 다룬다.

결과값은 다음과 같다.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   105 obs. of  10 variables:

 $ Make                                : chr  "BMW" "BMW" "BMW" "BMW" ...

 $ Model                               : chr  "3-Series" "3-Series" "3-Series" "3-Series" ...

 $ Year                                : num  2018 2018 2018 2018 2018 ...

 $ Trim                                : chr  "Gran Turismo 330i xDrive Specs" "Gran Turismo 340i xDrive Specs" "Plug-In Hybrid 330e iPerformance Specs" "Sedan 320i Specs" ...

 $ MSRP                                : POSIXct, format: "2022-10-16" "2038-10-22" "2024-11-04" "1995-07-20" ...

 $ Base Curb Weight (lbs)              : num  3915 4010 3915 3295 3450 ...

 $ EPA Fuel Economy Est - City (MPG)   : num  23 20 NA 24 23 31 30 24 23 21 ...

 $ EPA Fuel Economy Est - Hwy (MPG)    : num  33 29 NA 35 34 43 40 34 33 32 ...

 $ Fuel Economy Est-Combined (MPG)     : num  27 23 30 28 27 36 34 27 27 25 ...

 $ Turning Diameter - Curb to Curb (ft): num  38.7 38.7 37.1 37.1 38.4 37.1 38.4 37.1 38.4 37.1 ...

 

아주 잘 가져와 졌다.

#데이터의 변수를 직접 이용

attach(Data)

è  Data변수에 접근한다.

 

#그래프의 창 크기를 설정

win.graph(7,5)

 

 

plot(`Base Curb Weight (lbs)` , `Fuel Economy Est-Combined (MPG)` , main="Ibs 대비 MPG 산점도", xlab="Base Curb Weight", ylab="Fuel Economy Est-Combined (MPG)", pch=19, cex=1.2)

è  Plot을 통해서 , 커브무게인 IBS 와 연비 MPG에 산점도를 확인해 볼 것이다

è  x축은 Ibs , y축은 MPG로 주었다.

Plot 결과값은 다음과 같다.

아주 잘 나타나 졌다.

이걸 통해 알 수 있는 사실은 , 많이 없지만 , 대략 짐작해 보았을 때 ,

무게가 3600~4000사이에 있는 것들이 많다정도로 생각해 볼 수 있었다.

 

이제 여기에 grid를 주어볼 것이다.

grid(col=3)

Grid 가 잘 들어간 모습이다.

 

#단순회귀 적합선 추가 : lm(y~x) 함수 , abline()함수

sr <- lm(`Fuel Economy Est-Combined (MPG)`~`Base Curb Weight (lbs)`)

sr

여기서 보면 lm이라는 것을 사용하는 것을 알 수 있다.

어떤 선을 추가하는 것같긴 한데 정확히 먼지 모른다.

그래서 알아보았다.

Lmlinear model의 약자이다.

사용법은 다음과 같다.

Lm(종속변수(결과) ~ 독립변수(원인) , 데이터)

이렇게 하면 머리에 와닿지가 않을 것이다 . 나또한 그렇기 때문이다.

예를 들면 , 부모와 자식이 있을 때 키를 예로 들어보자.

Lm을 사용해본다고 하면 ,

Out = lm ( child~parent, data = data)

위 공식을 보게 되면 부모의 키에 의해 자녀의 키가 결정된다 라는 것을

Lm을 사용해서 예를 들어보았다.

 

다시 본론으로 들어가서 , 위에 공식을 보면 , ibs에 의해서 MPG가 결정된다 라는 것을 lm을 사용해 본 것이다

왜 이렇게 해보았냐면 , 보통 커브라는 것은 급브레이크를 하거나 , 순간적인 엔진을 많이 소비하게 된다 . 그렇기 때문에 커브의 무게도 상관있지 않을까 라는 생각이 들었다.

그래서 커브의 무게에 의해 MPG의 값이 결정될 것이라고 생각했다.

 

위의 결과를 출력해 보면 다음과 같다.

 

출처 :http://rstudio-pubs-static.s3.amazonaws.com/189354_277dfb3a83a34a2abaae855b90fcf269.html

 

Call:
lm(formula = `Fuel Economy Est-Combined (MPG)` ~ `Base Curb Weight (lbs)`)
 
Coefficients:
             (Intercept)  `Base Curb Weight (lbs)`  
               34.412182                 -0.002526  

 

위와 같이 출력값이 나오는데 , 여기서 우리가 알 수 있는 사실은

y절편 ( intercept ) 34.41이고 , ibs의 기울기는 -0.002526이란 것을 알 수 있다.

고로 이사실을 통해서 y= 34.41x – 0.002526의 결과값을 도출할 수 있게 되는 것이다.

 

abline(sr , col="red")

è  선을 추가해주는 역할을 한다.

결과값

선이 추가된 것을 확인할 수 있으며 , 기울기가 이므로 내려져 가는 것을 확인할 수 있다.

 

이제 데이터를 통합해서 한번해 보는 작업을 해보겠다.

 

나는 먼저 모든 데이터들을 확인해 보았다.

pairs(Data[c(5,6,7,8,9,10)])

결과값은 다음과 같다.

보이긴 하는데 , 이렇게 보기에는 불편하다 .

그래서 총 6개의 셀들을 3개씩 나눠서 2번확인해 보기로 하였다.

 

pairs(Data[c(5,6,7)])

 

이렇게 2단계를 거쳐서 각각 확인이 가능했다.

 

 

이제 대충 어떤 식으로 회귀분석이 이루어 지는지 알게 되었는가.

마지막으로 산점행렬도로써 , 분석을 해보겠다.

내가 확인할 셀은 MPG , Ibs , year 이다.

 

pairs(~`Fuel Economy Est-Combined (MPG)`+`Base Curb Weight (lbs)`+Year, data = Data, main="자동차 특성 산점행렬도", panel=function(x,y)

{points(x,y, pch=19, col=4); abline(lm(y~x), col=2)})

 

확인해 보면 , 다음과 같은 결과값들을 얻을 수가 있다.

순서대로 분석을 해보면 , MPG가 높을수록 ibs는 조금씩 감소한다는 것을 알 수 있다 .

그리고 year은 여기서 2018로 동일하기 때문에 2018은 그대로 둔다.

MPG Ibs만 살펴보았다.

이렇게 함으로써 좀 더 많은 데이터셋을 통해서 , 분석을 해 볼 수 있었다.

나의 예측은 조금 ? 맞는것 같다 .

커브의 무게가 클수록 연비가 약간 크게 증가하는 것을 확인할 수 있었다.


반응형