2020.02.07 3강 :조건을 지정해서 데이터를 뽑아보기

2020.02.07 3강 :조건을 지정해서 데이터를 뽑아보기 


3.0 R-STUDIO에서 불러오기(복습)


#순서

 프로젝트 생성(프로젝트명:DM) -> 파일 작업폴더에 저장하기 -
 -> R스튜디오에 작업파일(CSV) 불러오기(import) 실행 

파일받기 : 실습파일(다이렉트 마케팅 데이터)

## 명령어(코드) 실습

>library(readr)
>DM <- read_csv("~/DM/DirectMarketing.csv") 

DM이란 폴더에 파일이 저장돼 있으며, 앞으로 DM이라고 치면 파일을 R-STUDIO에서
불러온다. [그림1]에서와 같이 파일(DM)을 확인 가능해야 한다.

[그림1] 분석 데이터를 제대로 불러왔을 때 


3.1 조건을 지정해서 데이터 뽑아보기


3.1.1  패키지 소개 : dply 


사용 : "과목 평균점수가 60점 이상인 학생들만 뽑아서 그룹을 만들려고 할 때"
주요 명령어

- filter(  )  행 추출                - select(  ) 열(변수) 추출
- arrange(  )  정렬                   - mutate(  )   변수 추가
- summarise(  ) 통계치 산출       - group_by(  )  집단별로 나누기
- left_join(  )  데이터 합치기(열)  - bind_rows(  ) 데이터 합치기(행)


** dplyr에 대한 자세한 설명은 아래 링크 참조 
   https://wsyang.com/2014/02/introduction-to-dplyr

3.1.2 dplyr 패키지 설치 


>install.packages("dplyr")
>library(dplyr)

3.1.3 filter 명령어 사용하기  


#1 Age가 "Old"인 경우만 추출하여 출력

>DM %>% filter(Age == "Old")


#2 Age가 "Old"이고 자녀와 비동거인 상태인 경우만 추출해서 출력 

>DM %>% filter(Age == "Old"&Children == "0") 

#3 Age가 "Old"이고 자녀와 비동거인 상태 & Salary가 3만불 이상인 경우 추출 

>DM %>% filter(Age == "Old"&Children == "0"&Salary>=30000)


                               [그림2] 3.1.3에서 #3을 실행시킨 후 상황 

  Old와 소득(Salary) 3만불 이상한 관측치(샘플)만 출력된다.


3.1.4 filter 명령어 사용 시 주의사항   


filter는 dplyr의 특징과 마찬가지로 filter를 이용해 추출한 결과값을 변수로 지정하지
않으면 그 값이 따로 저장되지 않으며, 원본 데이터를 변형시키지 않습니다.

즉, 엑셀에서 필터를 써서 원하는 값을 찾고, "저장 안한 것"과 같습니다.  




3.2 데이터에서 그룹핑(Grouping)해보기 


3.2.1 의미 있는 "필터 변수" 찾기 : 상관계수  


지출액(AmountSalary)와 관계 깊은 변수는 무엇인가요?  
Image result for basket mall


피어슨 상관 계수(Pearson Correlation Coefficient ,PCC)란 두 변수 X 와 Y 간의 선형 상관 관계를 계량화한 수치다 . 피어슨 상관 계수는 코시-슈바르츠 부등식에 의해 +1과 -1 사이의 값을 가지며, +1은 완벽한 양의 선형 상관 관계, 0은 선형 상관 관계 없음, -1은 완벽한 음의 선형 상관 관계를 의미한다.



Image result for 피어슨상관계수



# 질문 : 왜 공분산은 사용하지 않을까요? 

Image result for 질문



3.2.2 피어슨 상관계수 구해보기


분석목표 : AmountSpent(지줄액)이 가장 높은 집단의 특징은 어떠한가? 
분석방법 : AmountSpent(지줄액)에 영향을 크게 미치는 변수를 찾아내서 만들어 보기 

3.2.3 R에서 피어슨 상관계수 구하는 방법 


>attach(DM)
>cor(DM)

                            [그림3] 숫자가 아닌 데이터가 있을 경우 : 상관계수 계산 불가



Error in cor(DM) : 'x'는 반드시 수치형이어야 합니다
Image result for 우린 안될거야


3.2.3 R에서 피어슨 상관계수 구하는 방법 : 수치형 데이터로 바꾸기


#1 변수 바꾸기 (car 패키지 사용)

>install.packages("car")
>library(car) 

패키지 설치 (오래걸립니다.)

#1 Age에서 Young, Millde, Old인 값을 1, 2, 3의 수치형 데이터로 변환 

>DM$AgeN <- recode(DM$Age,'"Young"=1;"Middle"=2;"Old"=3')

                                   [그림3] 수치형 변수 생성 : AgeN



   : 변수(Variable)가 "10"에서 "11"개로 1개 늘었음 


                                        [그림4] 수치형 변수 생성 : AgeN



#질문 : 왜  Age가 아니라 AgeN이라는 변수를 새로 만들었을까요?

Image result for 질문



#2 범주형 데이터를 수치형 데이터로 바꾸기 


##이제 남은 변수를 모두 수치형 변수로 바꾸겠습니다.

>DM$GenderN <- recode(DM$Gender,'"Female"=1;"Male"=2')
>DM$OwnHomeN <- recode(DM$OwnHome,'"Own"=1;"Rent"=2')
>DM$MarriedN <- recode(DM$Married,'"Single"=1;"Married"=2')
>DM$LocationN <- recode(DM$Location,'"Close"=1;"Far"=2')
>DM$HistoryN <- recode(DM$History,'"High"=3;"Medium"=2;"Low"=1')


## 중요 : 규칙을 만드세요. (0->1->2, 저->중->고)
예를 들어 고령자일수록 숫자가 0, 1, 2 처럼 증가하는 식으로 규칙을 만들것! 



                                       [그림5] 수치형 변수 생성 : 나머지 변수


  : 변수(Variable)가 "11"에서 "16"개로 5개 늘었음 


자 이제!!!

진짜 될거에요.

>cov(DM) 
>cor(DM) 


                                         [그림6] 상관계수 에러 메세지 




#3 수치형 데이터셑만으로 데이터 테이블 만들기 

여전히 DM에는 범주형 데이터(글자)가 들어가 있습니다. 따라서
상관계수를 구하기 위해서는 수치형데이터만으로 데이터셋을 다시만듭니다.


>DM1<-data.frame(DM$AmountSpent, DM$Salary, DM$AgeN, DM$Children, DM$GenderN, DM$OwnHomeN, DM$MarriedN, DM$LocationN,  DM$HistoryN, DM$Catalogs)



                                                  [그림7] 수치형 데이터로만 만든 데이터셋(DM1)





3.2.4 R에서 피어슨 상관계수 구하기 : 결측값 제거 


#1 드디어!!!!

>cor(DM1) 

                                                      [그림8] 상관계수 




#2 그런데????? NA???


                                [그림9] 결측값이 존재할 경우 상관계수 : "NA로 계산 불가"




#3 결측값 제거방법

>DM2<-na.omit(DM1)



                                      [그림10] 결측값을 제거한 데이터 셋 : D2



결측값 제거에 대한 참고 사이트
https://rfriend.tistory.com/34



#4 결측값 제거한 데이터로 상관계수 구하기


>cor(DM2)
>cor(DM1, use = "pairwise", method = "pearson")

 "pairwise" 옵션을 써서 DM2 데이터 셋을 쓴것과 같도록 분석이 가능합니다

                      [그림11] 결측값을 제거한 데이터 셋(D2)로 상관계수 구하기

"pairwise" 옵션에 대한 참고 사이트
http://blog.naver.com/PostView.nhn?blogId=pmw9440&logNo=221530246292



3.2.5 피어슨 상관계수에 대한 t-검정 : 상관계수가 신뢰도 있는가? 

계산한 피어슨 상관계수가 신뢰성이 있는지 분석하는 방법! 

>cor.test(DM$AmountSpent, DM$Salary, method = "pearson", conf.level=0.95) 

: 상관계수가 신뢰도가 있는가에 대해서


                                  [그림12] 상관계수에 대한 t검정 
 


data:  DM$AmountSpent and DM$Salary
t = 30.93, df = 998, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.6665092 0.7299316
sample estimates:
      cor 
0.6995957 

귀무가설이 기각 : AmountSpent와 Salary는 유의적인 양(+)의 관계가 있다. 



# 참고 남은 변수에 대해서도 가설 검정해볼 것 

> cor.test(DM$AmountSpent, DM$AgeN, method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$GenderN, method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$OwnHomeN, method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$MarriedN, method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$LocationN, method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$HistoryN , method = "pearson", conf.level=0.95)
> cor.test(DM$AmountSpent, DM$Children , method = "pearson", conf.level=0.95)


3.2.6 피어슨 상관계수에 대한 시각화


#1 패키지 설치
>install.packages("corrplot")
>library(corrplot)

#2 피어슨 계수를 구하고 이를 시각화

##2-1 계수를 구한뒤 이를 별도 데이터로 저장
>DM2COR<-cor(DM2)

##2-2 계수를 구한뒤 이를 별도 데이터로 저장
>corrplot(DM2COR, method="circle")
>corrplot(DM2COR, method="square")
>corrplot(DM2COR, method="number")


시각화

DM2<-na.omit(DM1)
DM2COR<-cor(DM1)
library(corrplot)

corrplot(DM2COR, method="circle")
corrplot(DM2COR, method="square")
corrplot(DM2COR, method="number")



                                           [그림13] 상관계수에 대한 시각화 


다음 주 강의 예고

#1 표본 간의 비교 : 대응표본 t검정
#2 회귀분석 및 회귀분석 시각화 

댓글