<Kaggle자료>
R Studio에서 R Script를 누르면
그럼 스크립트 창에 이렇게 써야할 패키지들을 인스톨한다.
# R을 실행시키고, 스크립트 창에 입력
install.packages("tidyverse")
install.packages("readr")
실행하려면 줄마다 ctrl+enter
조금만 기다리면 알아서 주륵주륵 설치를 한다.
library(readr)
DM <- read_csv("DirectMarketing.csv") # <- 이게 '='
View(DM)
library가 실행하는 함수(불러오는 함수)로 설치했던 readr함수를 불러오고
DM이라는 이름으로 읽어올 csv파일을 정의 해준다.
View는 DM 파일을 볼 수 있게 해준다.
이와 같이 DM탭에 DM파일이 나온다.
summary(DM)
>summary(DM)
Age Gender
Length:1000 Length:1000
Class :character Class :character
Mode :character Mode :character
OwnHome Married
Length:1000 Length:1000
Class :character Class :character
Mode :character Mode :character
Location Salary Children
Length:1000 Min. : 10100 Min. :0.000
Class :character 1st Qu.: 29975 1st Qu.:0.000
Mode :character Median : 53700 Median :1.000
Mean : 56104 Mean :0.934
3rd Qu.: 77025 3rd Qu.:2.000
Max. :168800 Max. :3.000
History Catalogs AmountSpent
Length:1000 Min. : 6.00 Min. : 38.0
Class :character 1st Qu.: 6.00 1st Qu.: 488.2
Mode :character Median :12.00 Median : 962.0
Mean :14.68 Mean :1216.8
3rd Qu.:18.00 3rd Qu.:1688.5
Max. :24.00 Max. :6217.0
summary는 자료를 요약해서 출력해주며 명목변수와 같은 문자열 데이터는 개수만 출력해준다.
hist(DM$Salary)
DM중에서 Salary에 해당하는 것을 표시하려면 '$'를 쓴다.
hist() 함수의 경우 히스토그램을 출력해준다.
이 때 문자열 자료의 경우 출력이 되지 않으며,
다음과 같이 숫자만 가능하다고 나온다. (Age 데이터는 'Old', 'Middle', 'Young'으로 구분되어 있다)
boxplot(DM$Salary)
boxplot() 함수는 최대값과 최소값, 중앙값을 한번에 나타내주는 차트를 그려준다.
빨간 원은 이상치이고 위쪽의 바가 최대값, 아래쪽 바가 최소값이다.
박스 안의 가로줄은 중앙값이고 가로줄 기준 아래쪽은 일사분위수(25%, Q1)
위쪽은 삼사분위수(75%, Q3)이다.
freq_Age <- table(DM$Age)
names(freq_Age) <- c('Old','Middle','Young')
pie(freq_Age)
나이에 따른 비율을 파이차트로 나타내본다
install.packages("ggplot2")
library(ggplot2)
p <- ggplot(data=DM, aes(x=Salary, y=AmountSpent)) + geom_point(aes(size=AmountSpent, color=AmountSpent))
p
x = 소득, y=소비 로 설정해서 2차원의 차트를 그린다.
geom_point는 차트에 들어갈 데이터를 시각화하는 명령어
geom은 geometric에서 온 말이며 점 크기와 색의 농도를 소비로 설정했다.
p + stat_smooth(color='black', fill='grey')
#color: 추세선의 색깔을 지정한다.
#fill: 추세선의 boundary를 색깔을 지정한다.
이와 같이 추세선을 추가해준다.
p + stat_smooth(color='black', fill='grey') + facet_wrap(~Catalogs)
카탈로그 발송 횟수에 따른 소비를 살펴본다.
p + stat_smooth(color='black', fill='grey') + facet_wrap(~Age)
소득과 소비의 상관관계를 '연령대'에 따라 살펴보기
소득이 증가하지만 소비는 줄어드는 현상이 노년층과 청년층에서 발생
p + stat_smooth(color='black', fill='grey') + facet_wrap(~Gender)
남성의 소비가 좀 더 큰 것으로 나타나지만 거의 유사한 형태라고 판단된다.
p + stat_smooth(color='black', fill='grey') + facet_wrap(~Married)
install.packages('dplyr')
library(dplyr)
DM %>% filter(Age == 'Old')
DM %>% filter(Age == 'Old' & Children =='0')
DM %>% filter(Age == 'Old' & Children =='0' & Salary >= 30000)
----------------------------------------------------------------------------------------
> DM %>% filter(Age == 'Old')
# A tibble: 205 x 10
Age Gender OwnHome Married Location Salary Children History Catalogs AmountSpent
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl>
1 Old Female Own Single Far 47500 0 High 6 755
2 Old Male Own Married Far 80700 0 NA 18 3034
3 Old Female Own Married Far 110000 0 High 24 5564
4 Old Female Own Married Close 82800 0 High 24 3010
5 Old Female Rent Single Far 14000 0 Low 12 410
6 Old Female Rent Married Far 60200 0 High 18 2328
7 Old Female Rent Married Close 39700 0 Medium 12 573
8 Old Female Own Married Close 41600 0 NA 18 982
9 Old Female Rent Single Close 20100 0 Low 24 576
10 Old Female Rent Married Far 81500 0 High 18 3655
# ... with 195 more rows
> DM %>% filter(Age == 'Old' & Children =='0')
# A tibble: 187 x 10
Age Gender OwnHome Married Location Salary Children History Catalogs AmountSpent
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl>
1 Old Female Own Single Far 47500 0 High 6 755
2 Old Male Own Married Far 80700 0 NA 18 3034
3 Old Female Own Married Far 110000 0 High 24 5564
4 Old Female Own Married Close 82800 0 High 24 3010
5 Old Female Rent Single Far 14000 0 Low 12 410
6 Old Female Rent Married Far 60200 0 High 18 2328
7 Old Female Rent Married Close 39700 0 Medium 12 573
8 Old Female Own Married Close 41600 0 NA 18 982
9 Old Female Rent Single Close 20100 0 Low 24 576
10 Old Female Rent Married Far 81500 0 High 18 3655
# ... with 177 more rows
> DM %>% filter(Age == 'Old' & Children =='0' & Salary >= 30000)
# A tibble: 147 x 10
Age Gender OwnHome Married Location Salary Children History Catalogs AmountSpent
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl>
1 Old Female Own Single Far 47500 0 High 6 755
2 Old Male Own Married Far 80700 0 NA 18 3034
3 Old Female Own Married Far 110000 0 High 24 5564
4 Old Female Own Married Close 82800 0 High 24 3010
5 Old Female Rent Married Far 60200 0 High 18 2328
6 Old Female Rent Married Close 39700 0 Medium 12 573
7 Old Female Own Married Close 41600 0 NA 18 982
8 Old Female Rent Married Far 81500 0 High 18 3655
9 Old Female Own Married Close 111500 0 High 18 2510
10 Old Male Rent Married Close 69800 0 High 24 2764
# ... with 137 more rows
필터를 사용해보기 위해 인스톨하고 필터를 적용하여 원하는 조건을 입력해서 출력한다.
#문자열 자료들을 0, 1, 2, 3 등으로 변환시켜주기 위해서
install.packages('car')
library(car)
DM$AgeN <- recode(DM$Age,'"Young"=1;"Middle"=2;"Old"=3')
DM$AgeN
이렇게 코드를 쓰면 명목변수를 수치형 변수로 변경할 수 있다.
DM$AgeN <- recode(DM$Age,'"Young"=1;"Middle"=2;"Old"=3')
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')
나머지 변수들도 변환해준다. 이 때 규칙을 정해서 지정해주는 것이 좋다.
이제 상관관계를 봐보자!
cor(DM)
Error in cor(DM) : 'x'는 반드시 수치형이어야 합니다
껄껄.. 아직도 안되네
View(DM)을 해보면 Age와 AgeN처럼 컬럼이 새로 생성된 것들을 알 수 있다.
기존의 문자열 변수들을 제거해주어야 상관관계분석이 이루어진다.
그러나 제거하기 보다는 새로 수치만으로 이루어진 데이터셋을 만들어주는 것이 좋다.
DM1<-data.frame(DM$AmountSpent, DM$Salary, DM$AgeN, DM$Children, DM$GenderN, DM$OwnHomeN, DM$MarriedN, DM$LocationN, DM$HistoryN, DM$Catalogs)
cor(DM1)
> cor(DM1)
DM.AmountSpent DM.Salary DM.AgeN DM.Children DM.GenderN DM.OwnHomeN DM.MarriedN
DM.AmountSpent 1.0000000 0.69959571 0.348250488 -0.222308170 0.201690213 -0.35080800 0.475879979
DM.Salary 0.6995957 1.00000000 0.384718517 0.049663163 0.261492181 -0.46073640 0.675633080
DM.AgeN 0.3482505 0.38471852 1.000000000 -0.271118420 0.001458581 -0.42889677 0.255993305
DM.Children -0.2223082 0.04966316 -0.271118420 1.000000000 -0.105469083 0.03227408 0.009770249
DM.GenderN 0.2016902 0.26149218 0.001458581 -0.105469083 1.000000000 -0.08443332 0.116057285
DM.OwnHomeN -0.3508080 -0.46073640 -0.428896769 0.032274083 -0.084433317 1.00000000 -0.264009318
DM.MarriedN 0.4758800 0.67563308 0.255993305 0.009770249 0.116057285 -0.26400932 1.000000000
DM.LocationN 0.2526157 -0.03712709 -0.013350265 0.002391455 -0.005553971 0.03369129 -0.006964058
DM.HistoryN NA NA NA NA NA NA NA
DM.Catalogs 0.4726499 0.18355086 0.124459876 -0.113455428 0.087350767 -0.09313151 0.137059886
DM.LocationN DM.HistoryN DM.Catalogs
DM.AmountSpent 0.252615659 NA 0.47264989
DM.Salary -0.037127094 NA 0.18355086
DM.AgeN -0.013350265 NA 0.12445988
DM.Children 0.002391455 NA -0.11345543
DM.GenderN -0.005553971 NA 0.08735077
DM.OwnHomeN 0.033691291 NA -0.09313151
DM.MarriedN -0.006964058 NA 0.13705989
DM.LocationN 1.000000000 NA 0.12858075
DM.HistoryN NA 1 NA
DM.Catalogs 0.128580754 NA 1.00000000
새로 만들어준 뒤 상관관계 분석을 했지만 'NA' 결측값이 있다.
이 때 분석가각 판단한다. 결측값을 포함해서 분석을 할지, 아니면 제거 한 뒤에 사용할지.
제거해서 사용하겠다면
DM2 <- na.omit(DM1)
cor(DM2)
>cor(DM2)
DM.AmountSpent DM.Salary DM.AgeN DM.Children DM.GenderN DM.OwnHomeN DM.MarriedN
DM.AmountSpent 1.0000000 0.66382653 0.333940651 -0.322111112 0.21340790 -0.34082353 0.44261825
DM.Salary 0.6638265 1.00000000 0.336147765 0.065573278 0.28506699 -0.44737394 0.65849177
DM.AgeN 0.3339407 0.33614777 1.000000000 -0.306836700 -0.02053037 -0.41060740 0.25696549
DM.Children -0.3221111 0.06557328 -0.306836700 1.000000000 -0.09438576 0.05634319 0.02347633
DM.GenderN 0.2134079 0.28506699 -0.020530366 -0.094385756 1.00000000 -0.09775929 0.12076147
DM.OwnHomeN -0.3408235 -0.44737394 -0.410607396 0.056343192 -0.09775929 1.00000000 -0.27439024
DM.MarriedN 0.4426183 0.65849177 0.256965485 0.023476330 0.12076147 -0.27439024 1.00000000
DM.LocationN 0.3422802 -0.03182654 -0.005370048 -0.001827235 -0.02194002 0.01296963 -0.02556869
DM.HistoryN 0.7666723 0.69761552 0.395073351 -0.403087448 0.27485475 -0.38203105 0.48205299
DM.Catalogs 0.5125304 0.22807856 0.118524894 -0.130165331 0.13277110 -0.13029728 0.15119401
DM.LocationN DM.HistoryN DM.Catalogs
DM.AmountSpent 0.342280193 0.7666723 0.5125304
DM.Salary -0.031826536 0.6976155 0.2280786
DM.AgeN -0.005370048 0.3950734 0.1185249
DM.Children -0.001827235 -0.4030874 -0.1301653
DM.GenderN -0.021940021 0.2748547 0.1327711
DM.OwnHomeN 0.012969626 -0.3820310 -0.1302973
DM.MarriedN -0.025568691 0.4820530 0.1511940
DM.LocationN 1.000000000 0.2324516 0.1608851
DM.HistoryN 0.232451640 1.0000000 0.3598972
DM.Catalogs 0.160885061 0.3598972 1.0000000
>
이와 같이 결과가 출력되지만 데이터 수가 그만큼 줄어들게 된다.
#상관계수의 신뢰도
cor.test(DM$AmountSpent, DM$Salary, method = "pearson", conf.level=0.95)
Pearson's product-moment correlation
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
# 상관계수 차트로 확인해보기
install.packages('corrplot')
library(corrplot)
DM2COR <- cor(DM2)
corrplot(DM2COR, method='circle')
p-value(유의확률): p값은 귀무가설이 진실일때 적어도 그 정도의 극단적인 표본 값이 나올 확률.
보다 더 쉽게 이해하자면, 귀무가설이 참임에도 이를 기각할 확률.
연구자는 귀무가설이 기각 되기를 원하기 때문에 낮은 p-value가 나오기를 원한다.
p-value <= a 이면 귀무가설을 기각하고 연구가설을 지지
p-value > a 이면 귀무가설을 기각하지 못하고 연구가설을 지지하지 못한다.
귀무가설 기각(기각x) = 통계적으로 유의적(비유의적)이다.
😁
출처:
https://rfriend.tistory.com/34
https://blog.naver.com/victor3dh/220845227964
http://www.kocw.net/home/search/kemView.do?kemId=865312
드림셀파
'Data Scientist' 카테고리의 다른 글
판다스 한번에 정리하기 (0) | 2020.02.11 |
---|---|
넘파이 한번에 정리하기 (0) | 2020.02.09 |
기초통계 - 척도 (0) | 2020.02.07 |
챗봇솔루션 closer를 이용한 나만의 챗봇 만들기! (0) | 2020.02.06 |
와인 종류 예측하기(체크포인트_모델저장, 그래프, Early stopping) (0) | 2020.01.25 |