반응형

도움이 되는 사이트


출처 : 엘리의 드림코딩 - 정규표현식 깃허브(https://github.com/dream-ellie/regex)

Groups and ranges

 

Chracter

|

또는

()

그룹

[]

문자셋, 괄호안의 어떤 문자든

[^]

부정 문자셋, 괄호안의 어떤 문가 아닐때

(?:)

찾지만 기억하지는 않음

Quantifiers

Chracter

?

없거나 있거나 (zero or one)

*

없거나 있거나 많거나 (zero or more)

+

하나 또는 많이 (one or more)

{n}

n번 반복

{min,}

최소

{min,max}

최소, 그리고 최대

Boundary-type

Chracter

\b

단어 경계

\B

단어 경계가 아님

^

문장의 시작

$

문장의 끝

Character classes

 

Chracter

\

특수 문자가 아닌 문자

.

어떤 글자 (줄바꿈 문자 제외)

\d

digit 숫자

\D

digit 숫자 아님

\w

word 문자

\W

word 문자 아님

\s

space 공백

\S

space 공백 아님

 


Titanic Data 에서의 적용

 

Name 필드에는 아래와 같은 이름들이 있다.

 

Bonnell, Miss. Elizabeth

Nasser, Mrs. Nicholas (Adele Achem)

Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)

Williams-Lambert, Mr. Fletcher Fellows

Clarke, Mrs. Charles V (Ada Maria Winfield)

Ford, Miss. Doolina Margaret "Daisy"

Duff Gordon, Lady. (Lucille Christiana Sutherland) ("Mrs Morgan")

Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)

 

 

 

여기에서 우리는 Miss, Mrs, Lady와 같은 호칭을 뽑아내려고 한다.

이 때 정규표현식을 사용해서 R에서 가져오게 되는데 아래와 같은 표현식을 사용한다.

 

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

여기서 '\\'로 '\'가번 쓰이는 것은, R에서는 '\'를 '\\'로 써야 백대시로 인식하기 때문이다.

 

gsub은 대체시키는 함수이다.

대체시키려는 값과 대체시키는 값을 차례로 Paramter로 받는다.

 

결과는 아래와 같다.

 

(.*, ) - 콤마와 공백 앞에 있는 모든 값

| - 또는

(\..*) - 점 다음에 있는 모든 값

 

R에서 사용할 때는 \\를 \ 대신 사용한다는 것이 포인트였다.

정규표현식은 문자열을 다루기 위해서는 반드시 배워야할 필요가 있다는 점을 이해했다.

다음에 문자열을 다룰 때에는 좀더 편하게 다룰 수 있을 것 같다.

 

반응형
반응형
Error in install.packages : ERROR: failed to lock directory
Try removing ‘C:\Users\..../00LOCK’

R MarkDown을 사용하려니까 저런 에러가 발생했다.

 

해결 방법은 위에 해당하는 디렉토리로 가서 00LOCK이라고 하는 폴더를 지워주자

그러면 R Markdown이 다시 제대로 동작한다.

반응형
반응형

따로 CRAN Page에 들어가지 않고 명령어로 R 버전을 업그레이드 할 수 있다.

 

 

 

1. install.packages("installr")

패키지 콜을  먼저 수행한다.

WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/Jessie/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
also installing the dependencies ‘glue’, ‘magrittr’, ‘stringi’, ‘stringr’

URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/glue_1.4.2.zip'을 시도합니다
Content type 'application/zip' length 154967 bytes (151 KB)
downloaded 151 KB

URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/magrittr_2.0.1.zip'을 시도합니다
Content type 'application/zip' length 235353 bytes (229 KB)
downloaded 229 KB

URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/stringi_1.5.3.zip'을 시도합니다
Content type 'application/zip' length 15243599 bytes (14.5 MB)
downloaded 14.5 MB

URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/stringr_1.4.0.zip'을 시도합니다
Content type 'application/zip' length 216647 bytes (211 KB)
downloaded 211 KB

URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/installr_0.22.0.zip'을 시도합니다
Content type 'application/zip' length 341403 bytes (333 KB)
downloaded 333 KB

package ‘glue’ successfully unpacked and MD5 sums checked
package ‘magrittr’ successfully unpacked and MD5 sums checked
package ‘stringi’ successfully unpacked and MD5 sums checked
package ‘stringr’ successfully unpacked and MD5 sums checked
package ‘installr’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Jessie\AppData\Local\Temp\RtmpINxkdB\downloaded_packages

 

2. library(installr)

그리고 라이브러리 콜을 수행한다.

필요한 패키지를 로딩중입니다: stringr

Welcome to installr version 0.22.0

More information is available on the installr project website:
https://github.com/talgalili/installr/

Contact: <tal.galili@gmail.com>
Suggestions and bug-reports can be submitted at: https://github.com/talgalili/installr/issues

			To suppress this message use:
			suppressPackageStartupMessages(library(installr))

 

3. check.for.updates.R()

위 명령어 수행을 통해 R의 버전을 확인한다.

나는 현재 업데이트가 마친 상태이므로 (21.02.12 기준) 4.0.3 버전이 설치가 완료되었다.

 

4. install.R()

위 명령어 수행과 동시에 설치에 대한 진행이 시작되고 그대로 Next - Next로 쫓아 수행한다.

 

5. version
인스톨을 마친 후에 RStudio를 종료하고 실행 후 version 명령어를 입력하여 현재의 버전을 확인 할 수 있다. 아래 내용처럼 현재의 R버전이 4.0.3 (2020-10-10)의 최신 버전인 것을 확인 가능하다.

> version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          4                           
minor          0.3                         
year           2020                        
month          10                          
day            10                          
svn rev        79318                       
language       R                           
version.string R version 4.0.3 (2020-10-10)
nickname       Bunny-Wunnies Freak Out 
반응형
반응형

<순서>

1. 데이터 프레임 만들기

2. 데이터 프레임에 Column 추가

3. 데이터 프레임에서 Column 제거

 

 

1. 데이터 프레임 만들기

종종 샘플 데이터를 만들 때 데이터프레임을 직접 만들어야 하는 경우가 있습니다. R에서 데이터 프레임을 직접 만드는 방법은 아래와 같습니다.

# Data Frame 만들기

id <- c(1,2,3,4,5,6)
class <- c(1,1,1,1,2,2)
math <- c(50,60,45,30,25,50)
english <- c(98,97,86,98,80,89)

exam <- data.frame(id,class,math,english, stringsAsFactors = F)

1) c()를 이용해 길이를 맞춰 벡터를 생성한다

2) 해당 벡터를 data.frame이라는 함수와 함께 생성한다.

3) Character가 자동으로 Factor로 처리되는 것을 막기 위해 stringsAsFactors = F로 설정해준다.

 

결과는 아래와 같습니다.

  id class math english
1  1     1   50      98
2  2     1   60      97
3  3     1   45      86
4  4     1   30      98
5  5     2   25      80
6  6     2   50      89

 

꼭 이 방법을 사용해야 하는 것은 아니지만, 가장 깔끔하게 데이터를 생성할 수 있는 방법이라고 생각합니다.

더 좋은 방법은 댓글로 공유해주세요 :)

 

2. 데이터 프레임에 Column 추가하기

위에서 만든 데이터 프레임은 시험 점수에 대한 데이터 프레임입니다. 만약 데이터 프레임에 과학점수를 추가하고 싶을 수 있겠죠? 그럼 어떻게 해야 할까요?

# Data Frame Column 추가하기
# 1) $ 사용하기
exam$science <- c(50,60,78,58,65,98)

먼저 위와 같이 $로 이용한 방법이 있습니다.

기존의 데이터 프레임에서 $를 사용하여 새로운 Column이름을 붙여주고 똑같은 길이의 벡터를 붙여주는 방법입니다.

 

# 2) transform 함수 사용하기
exam <- transform(exam, physics = c(10,10,10,20,40,30))

두 번째로 transform 함수를 사용하는 방법입니다.

Transform 함수를 통하여 Physics라는 Column을 추가했습니다.

결과를 볼까요?

  id class math english science physics
1  1     1   50      98      50      10
2  2     1   60      97      60      10
3  3     1   45      86      78      10
4  4     1   30      98      58      20
5  5     2   25      80      65      40
6  6     2   50      89      98      30

Science와 Physics가 잘 생성된 것을 볼 수 있네요 :)

 

3. 데이터 프레임에서 Column 제거

마지막으로 만든 Column을 지우고 싶은 경우가 있을 수 있습니다. 현재 exam 데이터 프레임에는 science와 physics 점수가 들어가 있습니다. 이 중 physics 점수를 빼고 싶다고 가정할게요.  

 

# Data Frame Column Column 지우기

exam$physics <- NULL

 $을 사용해서 제거를 원하는 Column에 NULL을 할당해주면 됩니다. 간단하죠?

 

 

감사합니다 :)

반응형
반응형

데이터 분석에서 데이터를 구하는 일은 늘 숙제인 것 같다.

오늘은 네이버 실시간 증권 뉴스를 가져오는 연습을 진행해본다.

 

1. 네이버 증권뉴스 주소 

finance.naver.com/news/news_list.nhn?mode=LSS2D&section_id=101&section_id2=258

 

실시간 속보 : 네이버 금융

관심종목의 실시간 주가를 가장 빠르게 확인하는 곳

finance.naver.com

뉴스 제목에서 오른쪽 마우스 - 검사를 누르면 오른쪽에 패널이 생기면서 태그들이 생성됨

 

 

2. RStudio 켜고 패키지 다운 및 라이브러리 생성

install.packages(c("rvest","ggplot2","dplyr","httr"))
library(httr)
library(rvest)

 

3. URL 생성

url <- 'https://finance.naver.com/news/news_list.nhn?mode=LSS2D&section_id=101&section_id2=258'
data <- GET(url)

위에 링크에 맞는 url을 url객체에 넣어준다.

 

4. 태그를 찾아 text 뽑아내기

news <- read_html(data, encoding="EUC-KR")

headlines <- news %>% 
  html_nodes('dl') %>% 
  html_nodes('.articleSubject') %>% 
  html_nodes('a') %>% 
  html_text()

 

5. 결과 보기

 [1] "‘삼천피’‘천스닥’ 시대 눈앞에 왔다"                                                  
 [2] "박셀바이오, `투자위험종목` 지정에 6일 거래정지된다"                                     
 [3] "코로나19로 지친 삶…술·담배 소비액 역대 최대"                                          
 [4] "[신년 대예측]코스피 3천 시대?…동학개미 힘 어디까지?"                                   
 [5] "[데일리안 오늘뉴스 종합] 박원순 피소 몰랐다는 남인순에 野 맹폭, 배달비 부담에 직접 나.."
 [6] "[어르신이 행복한 나라] 경제력 있고 건강한데 여가는 아직도 경로당?"                      
 [7] "두산 오너家, 퓨얼셀 지분 3천억 규모 블록딜로 처분"                                      
 [8] "고객 대접할 쿠키를 발 위에…백화점 직원들의 일탈"                                       
 [9] "코스피 3000선 육박…배경엔 68조 고객예탁금"                                             
[10] "코스피 1000 돌파후 31년만에 `삼천스피`시대 연다"                                        
[11] "[마켓인사이트]두산 오너家의 '새옹지마'...석달 전보다 50% 높은값에 퓨얼셀 블록딜"        
[12] "[표]아시아 주요 증시 동향(1월 5일)"                                                     
[13] "국민연금, 대한항공의 아시아나 인수 '반대'...\"주주가치 훼손 우려\""                     
[14] "5일 장 마감 후 주요 종목 뉴스"                                                          
[15] "“세스코, 믿고 먹는 깨끗한 음식점 되는데 도움”"                                        
[16] "장 마감 후 기업공시[1월 5일]"                                                           
[17] "[마켓인사이트]AJ셀카, 중고차 '오토허브' 운영사 신동해홀딩스에 매각"                     
[18] "'8만전자' 된 삼성전자, 시총도 500조원 돌파"                                             
[19] "엔드림, 조이시티 지분 23만주 추가 취득"                                                 
[20] "오르비텍, 100억원 규모 CB 발행 결정"      

So Happy Baby

 

크롤링하는 법은 해도 해도 잘 안쓰니 까먹는 것 같다.

R을 산소처럼 사용해야 이 툴이 손에 익을텐데 아직은 멀었나보다.

Qlik 사용하듯 R을 편하게 다루는 날도 얼른 왔으면 좋겠다.

 

반응형

'Data > R' 카테고리의 다른 글

R) 명령어로 버전 업그레이드 하기  (1) 2021.02.12
R) Data Frame 다루기  (0) 2021.02.06
R) lapply와 sapply의 차이  (0) 2020.04.23
R) class(), typeof()의 차이  (0) 2020.04.23
R) apply 정리  (0) 2020.04.22
반응형

lapply()

  • 입력값으로 vector 또는 list를 받아 list를 반환한다.

즉 vector를 넣든, list를 넣든 결과값으로 list 형식의 자료형으로 return 해준다.

그리고 이 list자료를 다시 vector로 바꾸기 위해서는 unlist를 사용해주면 된다.

a <- lapply(1:10, function(x) x*2)
unlist(a)


> typeof(a)
[1] "list"

> typeof(unlist(a))
[1] "double"

 

 

Sapply()

  • lapply는 list를 반환하지만 sapply는 matrix 또는 vector로 반환한다.
> zz <- sapply(iris[,1:4], function(x){ x*5 })
> typeof(zz)
[1] "double"
> class(zz)
[1] "matrix"


> head(zz)
     Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]         25.5        17.5          7.0           1
[2,]         24.5        15.0          7.0           1
[3,]         23.5        16.0          6.5           1
[4,]         23.0        15.5          7.5           1
[5,]         25.0        18.0          7.0           1
[6,]         27.0        19.5          8.5           2


> zzz <- sapply(iris[1,1:4], function(x){ x*5 })
> typeof(zzz)
[1] "double"
> class(zzz)
[1] "numeric"

기본적으로 iris 데이터는 data.frame이지만, matrix형태로 반환해주는 것을 알 수 있다.

 

결론은, 반환하려는 자료형의 형태에 따라 lapply와 sapply를 다르게 사용해주면 된다.

반응형
반응형

typeof() : 원시 자료형 (R 에서의)

먼저 원시 자료형이라는 건, R에서 취급하는 일반적인 자료형의 모든 형태를 지칭한다.

예를 들어,

  • NULL: 데이터가 없는 경우
  • Logical: 불리언, 참 또는 거짓
  • Int: 정수
  • Double: 부동소수점 실수
  • Complex: 복소수
  • Character: 문자열
  • List: 리스트
  • Closure: 함수

이런 것들을 자료형이라고 부른다.

 

그래서 가장 기본적인 데이터인 iris의 type을 물어보면 다음과 같은 값이 return된다.

typeof(iris)
"list"

 

그러면 이건 Class()와 뭐가 다른 걸까?

 

 

class() : R 객체지향 관점에서의 자료형

 

R 에서 클래스는 변수가 가지는 속성의 하나이다. 따라서 자료형과 클래스는 같은 값을 가지지 않을 수도 있다.

특히 다음과 같은 점에 주의한다.

  • 부동소수점 실수의 자료형은 double 이지만 클래스는 numeric 이다.
  • 함수의 자료형은 closure 이지만 클래스는 function 이다.
  • matrix, data.frame 등의 클래스 객체나 사용자 정의 클래스의 자료형은 list 이다.

출처: https://datascienceschool.net/view-notebook/0a66597ee82f464b9e2015e41cff8205/

 

Data Science School

Data Science School is an open space!

datascienceschool.net

 

즉 흔히 헷갈릴 수 있는 게 list()나 data.frame이 같은 선상에 있는 자료형이라고 생각하는 것이다.

하지만 data.frame이나 matrix는 엄연히 말하면 객체이며 다음의 iris 예시에서 이렇게 확인할 수 있다.

 

class(iris)
"data.frame"

 

정리하자면, Iris는 list의 자료형을 가진 data.frame 객체이다.

반응형
반응형

Apply 공부를 하다보니, 이게 다양한 종류가 있는 함수라는 걸 알게 되었다.

 

정적으로 설명을 적자면,

  • apply() 제품군은 R 기본 패키지와 관련이 있으며 행렬, 배열, 목록 및 데이터 프레임의 데이터 조각을 반복적 인 방식으로 조작하는 함수로 채워져 있다.
  • 이러한 함수를 사용하면 여러 가지 방식으로 데이터를 교차시킬 수 있으며 루프 구문을 명시적으로 사용하지 않아도 된다.
  • 입력 목록, 행렬 또는 배열에서 작동하며 하나 이상의 선택적 인수와 함께 명명된 함수를 적용합니다.
  • apply () 함수는보다 복잡한 조합의 기초를 형성하며 아주 적은 코드 행으로 작업을 수행하는 데 도움이 된다.
  • 보다 구체적으로, 패밀리는 apply(), lapply(), sapply(), vapply(), mapply(), rapply() 및 tapply() 함수로 구성

그 중에서도 오늘은 Apply에 대해서만 집중해보자

 

Apply

 

  • Apply 함수는 특정 구조를 지니는 object 를 입력값으로 받아 인자별 및 그룹별로 함수를 적용하는 것이다.

 

https://www.datacamp.com/community/tutorials

 

 

x <- matrix(1:9, c(3,3))
x
# [,1] [,2] [,3]
# [1,]    1    4    7
# [2,]    2    5    8
# [3,]    3    6    9

# apply(array, 1 또는 2, 함수)
# 1:행, 2:열

y <- apply(x, 1, function(x) {5*x })
y
# [,1] [,2] [,3]
# [1,]    5   10   15
# [2,]   20   25   30
# [3,]  

 

반응형

+ Recent posts