Gae Ko's Blog

데과 보고서용 (겨울방학) 본문

etc

데과 보고서용 (겨울방학)

Gae Ko 2018. 2. 20. 04:44

내가 분석하고자 하는 예제데이터를 선정하여 분석하는 것을 목표로 하였다.

그래서 주제을 정해 예제데이터를 찾아 보았지만 그거조차 너무 어려워서 다른 사람이 분석해논 것을 따라하며 분석해보기로 하였다.


>> 스팸메일 예측하기 



1. 스팸메일 데이터 


이메일 사용자가 스팸메일을 수동으로 삭제하는 것은 불편하므로 자동으로 스팸메일을 구분하여 삭제하도록 하고 싶다.

이때 스팸메일 데이터를 분류분석하고자 한다.

예제 데이터는 잘 알려진  spambase(스팸베이스)를 사용한다. → 구글링하여 쉽게 얻을 수 있었다.


스팸메일과 일반메일을 구분하는 방법은 무엇이 있을까?

단순한 방법으로 메일 내용을 이용하는 것이다. 스팸메일에 많이 등장하는 단어, 글자, 구두점들을 찾아내어 그러한 것들을 많이 포함하는 메일을 스팸메일로 분류하는 것이다. 


이처럼 비정형데이터(이메일 내용)을 머신러닝 방법의 예측변수로 사용할 수 있는 다양한 특징값(features)으로 변환하는 과정은 'feature engineering'라고 한다. 주어진 예제 데이터는 텍스트 마이닝기법을 사용하여 특징값들로 정리된 결과이다. 


- 4601개의 관측치와 58개의 변수로 이루어짐

- 각 관측치는 하나의 이메일을 나타냄

- 58번째 변수값은 반응 변수로 주어진 관측치가 스팸인지(=1) 아닌지(=0)를 나타냄

- 1부터 57번의 변수들은 스팸 예측의 설명변수로 사용


2. 데이터 불러오기 & 기초 분석


# 데이터 파일 읽어오기 & 변수명 할당 

data <- tbl_df(read.table("C:/Users/sphan/Desktop/spambase/spambase.data", strip.white = T, sep = ",", header = F))

names(data) <- c("word_freq_make", "word_freq_address", "word_freq_all", "word_freq_3d", "word_freq_our", "word_freq_over", "word_freq_remove", "word_freq_internet", "word_freq_order", "word_freq_mail", "word_freq_receive", "word_freq_will", "word_freq_people", "word_freq_report", "word_freq_addresses", "word_freq_free", "word_freq_business", "word_freq_email", "word_freq_you", "word_freq_credit", "word_freq_your", "word_freq_font", "word_freq_000", "word_freq_money", "word_freq_hp", "word_freq_hpl", "word_freq_george", "word_freq_650", "word_freq_lab", "word_freq_labs", "word_freq_telnet", "word_freq_857", "word_freq_data", "word_freq_415", "word_freq_85", "word_freq_technology", "word_freq_1999", "word_freq_parts", "word_freq_pm", "word_freq_direct", "word_freq_cs", "word_freq_meeting", "word_freq_original", "word_freq_project", "word_freq_re", "word_freq_edu", "word_freq_table", "word_freq_conference", "char_freq_;" ,"char_freq_(", "char_freq_[", "char_freq_!", "char_freq_$", "char_freq_#", "capital_run_length_average", "capital_run_length_longest", "capital_run_length_total", 

                # "spam" 

                "class")


# 데이터 구조 살펴보기 

glimpse(data)


# 데이터의 기초통계량

summary(data)


3. 데이터 시각화


분류분석을 본격적으로 시작하기 전에 데이터를 간단하게 시각화해보자.


# 일단 첫 1-10번까지의 변수들과 class변수간의 산점도 행렬 

set.seed(1610)

pairs(data %>% dplyr::select(1:10, 58)

        %>% sample_n(min(1000, nrow(data)))

        lower.panel=function(x,y){ points(x,y); abline(0, 1, col='red') },

        upper.panel= panel.cor

      )


# 57개의 예측변수 중에서 반응변수 class와 가장 상관관계가 가장 높은 스팸인지 아닌지를 분류하기 위하여 

# 각 예측변수와 스팸 반응변수 class와의 상관 관계를 계산하고 

# 변수를 상관 관계 값의 크기로 정렬하여 시각화하기.

tmp <- as.data.frame(cor(data[,-58], as.numeric(data$class)))

tmp <- tmp %>% rename(cor=V1)

tmp$var <- rownames(tmp)

tmp %>%

  ggplot(aes(reorder(var, cor), cor)) + 

  geom_point() +

  coord_flip()


###### @!&*@!(@&)&!*&#*&*#&!#*!&#*&!#&*(!#(&... 



코드를 이해할 수 없어서 멈추고 모르는 함수 및 명령에 대해서 공부해보았다.


--> 기본적인 데이터 가공  http://gaeko-security-hack.tistory.com/135?category=735010

--> R의 dplyr 패키지 http://gaeko-security-hack.tistory.com/127?category=722260

--> dplyr의 핵심동사 http://gaeko-security-hack.tistory.com/129?category=722260

--> dplyr의 group_by, join, chaining http://gaeko-security-hack.tistory.com/136?category=722260

 


'etc' 카테고리의 다른 글

큰 수 계산해주는 사이트  (2) 2018.08.02
자음입력+한자버튼으로 나오는 특수문자  (0) 2018.01.10
엑셀 단축키  (0) 2017.11.21