full$Title <- gsub('(.*, )|(\\..*)', '', full$Name)

...

[956] "Master"     "Mrs"        "Miss"       "Mr"         "Mr"        

 [961] "Mrs"        "Miss"       "Mr"         "Miss"       "Mr"        

 [966] "Miss"       "Mr"         "Mr"         "Mrs"        "Mr"        

 [971] "Miss"       "Master"     "Mr"         "Mr"         "Mr"        

 [976] "Mr"         "Mr"         "Miss"       "Miss"       "Miss"      

 [981] "Master"     "Mrs"        "Mr"         "Mrs"        "Mr"        

 [986] "Mr"         "Mr"         "Mrs"        "Mr"         "Miss"      

 [991] "Mr"         "Mrs"        "Mr"         "Mr"         "Mr"        

 [996] "Mrs"        "Mr"         "Mr"         "Mr"         "Mr"        



----------------------------



원자료는 


 [991] "Nancarrow, Mr. William Henry"                                                      

 [992] "Stengel, Mrs. Charles Emil Henry (Annie May Morris)"                               

 [993] "Weisz, Mr. Leopold"                                                                

 [994] "Foley, Mr. William"                                                                

 [995] "Johansson Palmquist, Mr. Oskar Leander"                                            

 [996] "Thomas, Mrs. Alexander (Thamine Thelma\")\""                                       

 [997] "Holthen, Mr. Johan Martin"                                                         

 [998] "Buckley, Mr. Daniel"                                                               

 [999] "Ryan, Mr. Edward"                                                                  

[1000] "Willer, Mr. Aaron (Abi Weller\")\""                                                


이런 식으로 생겼었다.




정규표현식을 이용한 gsub() 함수 응용 단계인듯??


해당 표현식의 의미는 아래 주소의 답변을 참고. 


http://www.talkstats.com/threads/how-to-extract-titles-out-of-a-full-name-using-gsub.69337/


match any character (.) zero or more times (*) up to a comma (,) OR (|) a period (\\.) followed any character (.) zero or more times (*)

essentially (.*,) eats up the string up to a character while (\\..*) eats up the string after the period

I would say there are more robust ways to extract the title. I'd use an extraction, rather than subbing approach. Base R can do extraction but it's more complicated than the stringi package which has the stri_extract_all_regex function.

  -- trinker




텍스트 데이터 분석을 위해서는 정규표현식을 한번 공부한 후 분석하는 편이 더 좋을 것으로 여겨짐.

이번에는 캐글의 타이타닉 문제에서


Erik Bruin의 2degree families and majority voting을 참고했음을 밝힙니다.

(https://www.kaggle.com/erikbruin/titanic-2nd-degree-families-and-majority-voting)

===================================================


- 먼저 데이터를 불러오고 변수별 결측값의 여부를 살핀다.

   그 후 결측값이 없는 변수들부터 먼저 시각화하며 살펴본다.


   1) 종속변수(Survived)

       - 전체의 61.6%가 사망했음을 알 수 있다.


   2) 성별(Sex)

       - 전체 데이터셋에서 남녀 성비를 살펴보고,

       - 트레이닝 데이터셋의 성별과 생존여부를 모두 살펴보았다.

          그 결과 남자가 생존하지 못하는 비율이 아주 많음을 확인했다. - insight


   3) 승객 등급(Passenger Class)

       - 전체 수는 3등급이 가장 많다.

       - 이를 생존여부와 함께 보았을때는 3등급에 승선한 고객은 대부분 생존하지 못했다.

       - 여기에 성별까지 추가했을 때 1,2 등급에 승선한 여성 고객은 대부분 생존했음을 확인할 수 있다.

          또한 2,3등급에 승선한 남성 고객은 별 차이없이 대부분 생존하지 못했음을 알 수 있다. - insight


   >> 즉, 여러 변수를 추가하고 쪼개면서 그림을 그릴 수록 특정한 insight를 얻을 수 있다.

        또한, 이때 ggplot의 모양을 조정하며 다양한 모습으로 그려낼 수 있다.



===================================================


다음에는 Feature Engineering에 대해서 살펴보자.



1. rbind( ) 함수와 dplyr패키지의 bind_rows() 함수의 차이

  -  rbind( ) 함수를 사용할 때, 


Error in rbind(deparse.level, ...) : 

                        numbers of columns of arguments do not match


     다음과 같은 에러를 관찰할 수 있다.

     열이 완전히 매칭되지 않아서 그런 것 같은데, bind_rows() 함수를 사용하면 해당부분을 결측값으로 처리하고 결과를 수행한다.

      SQL에서 outer_join이랑 비슷한 듯?

본 게시글은 kaggle 홈페이지 내에서


Megan Risdal 님께서 작성하신 "Exploring Survival on the Titanic"을 보고 공부한 내용을 작성한 것임을 밝힙니다.


================================================================================



[ 목차 ]


1. Introduction

   - 데이터 불러오기 및 데이터 확인


2. Feature Engineering (처음 들어본 용어였음)

    

3. Missingness

     3.1 합리적인 값 대체

          - 요금에 따른 passenger class 분류

     3.2 예측적인 값 대체 - mice() 함수 사용

     3.3 위에서 대체한 값을 통한 새로운 파생변수 창출 (가능하다면)

4. Prediction


5. Conclusion



==================================================================



 * Feature Engineering이란?

   - 기존에 있는 데이터를 기반으로 feature를 변경하거나

   - 새롭게 추가하여 모델링을 하는 등

   - 예측을 할 때 데이터를 더 유용하게 만드는 방법


   1) Variable Identification

   2) Univariate

   3) Bivariate Analysis

   4) Missing Value Imputation

   5) Outliers Treatment

   

   데이터 탐색에 해당하는 위의 5단계를 수행한 후, 2가지 스템으로 구분해서 진행한다.


   step1) Variable transformation

            - square / cube root / logarithm

            - 변수의 분포에는 영향을 미치지 않으므로,

            - 변수의 스케일을 변경할 때 사용한다.

               or

            - nonlinear의 관계를 linear한 관계로 변경할 떄 사용 >> 산점도를 통한 직관적인 이해가 가능해진다.

            - normal distribution으로 만들어 주는 등 skewed distribution에 대한 skewness를 줄일 수 있다.

            - Categorizing or Binning


   step2) Variable/Feature creation

            - 기존의 변수를 활용해 새로운 Features or Variables를 만들어내는 과정


            (1) Creating derived variables : 기존 변수에서 새로운 변수 생성

            (2) Creating dummy variables : 카테고리 데이터를 numerical 변수로 변경하는 것




( 참고 : http://ourcstory.tistory.com/144 )

======================================================



* Missing Value Imputation



  1) 결측값 확인


      apply( ___ , 2, function(x) sum(is.na(x))


  2) 누락된 자료의 패턴 분석

      - VIM 패키지의 aggr() 함수로 시각화할 수 있다.


      install.packages("VIM")


      require(VIM)

      aggr( dataset, prob=FALSE, numbers=TRUE )


      marginplot( )  # 두 변수 간의 missing data의 관계를 보여준다.


   3) 상관관계를 이용

      - is.na() 함수를 통해 binary matrix를 형성하고,

      - apply( ,2, function(x) sum(x)>0 ) 함수를 통해 결측이 있는 열 여부를 만든다.

      - 결측이 있는 열만을 가지고 상관행렬을 형성한다.

 



* Missing Data의 종류

   1) MCAR (Missing completely at random) : 완전 무작위적 > 분석에 영향 X

   2) MAR (Missing at random) : 특정 변수와 관련되어 있지만, 변수의 값과는 관련이 없다.

       ex) 피조사자들이 반대 쪽에도 설문이 있는지 몰랐던 경우

   3) MNAR (Missing at not randomly) : 누락된 변수의 값이 누락된 이유와 관련 있는 경우

       ex) 우울증과 관련 있는 사람이 해당 문항에 대한 대답을 회피한 경우



* Multiple Imputation (다중 대입법)

   - 시뮬레이션을 반복하여 누락된 데이터를 채워넣는다.(몬테카를로 방법을 사용)

   - 누락된 자료를 채운 complete datasets를 3~10개 만든다.

   - 이 과정에 대한 통계적인 결과와 신뢰구간을 제공한다.

   - Amelica, mice 등의 패키지를 활용할 수 있다.


   - MICE (Multiple Imputation by chained equations)

      1) mice() : 예측하고 채워넣기

      2) with()  : 통계모형을 순서대로 적용

      3) pool() : 분석결과를 하나로 통합

      4) >> Final Result


* 단순 대입법

    - 평균값, 중앙값 등으로 채워넣는다.

    - 무작위 오차가 발생하지 않는다.

    - sample size의 값소 없이 누락된 자료의 문제를 해결할 수 있다.


    - 비교적 쉽지만, MCAR이 아닌 경우 편향된 결과를 만들 수 있다.

    - 또한, 누락된 데이터의 양이 많을 때, 표준오차를 과소평가하게 하고 변수들간의 상관관계를 뒤틀며 통계 검정에서 부정확한 p값을 얻게 한다. >> 비추

( 참고 : https://rstudio-pubs-static.s3.amazonaws.com/192402_012091b9adac42dbbd22c4d07cb00d36.html)




=====================================================================


* 시각화 방법


   1. ggplot2 라이브러리의 다양한 함수를 사용할 수 있다.

      - ggplot : 사용하기에 따라 다양한 그림 표현 가능

                    여기서는 2 class의 히스토그램을 그렸다.

      - mosaicplot : 면적을 통해 class별 비율을 표현

      >> 위의 두 그림으로 특정 계층은 생존비율이 높음을 한 눈에 알 수 있음.

+ Recent posts