방명록

  1. 김진양 2018.08.18 23:09 신고  수정/삭제  댓글쓰기

    선생님, 안녕하세요.
    어제 글 올려드린 RSelenium을 이용한 Mouser hover 이후 크롤링 코딩을 완성했습니다!
    혹시 코드를 올려드리면 선생님 포스팅에 도움이 될까 싶어 방명록을 남깁니다^^
    졸업 축하 감사드립니다!

  2. 김진양 2018.08.17 18:31 신고  수정/삭제  댓글쓰기

    선생님, 안녕하세요! 몸 건강하신지요.
    저는 오늘 졸업식을 갔다왔습니다^^
    다름 아니라, 가르쳐주신 r 커뮤니티 가입 승인이 나지 않아, 궁금한 점을 여쭤보려고 합니다!!
    질문내용은 ‘mouseover해야 나타나는 데이터를 크롤링 하는 방법’입니다!
    1. 사이트는 쿠팡으로 pc에서 접속 시 마우스가 내려갈수록 상품평 등의 페이지가 추가로 나타나고 있습니다.
    2. 구글링과 공부를 통해 RSelenium을 이용한다면 크롤링이 가능할 수도 있다는 것을 알아냈습니다.
    3. RSelenium을 이용해 사이트의 상품평을 추출하려했지만 되지 않아 선생님의 고견을 구하고자 합니다!!
    일이 바쁘신데 질문이 잦아 죄송합니다! 혹시라도 제가 알게되면 코드를 방명록에 적어놓겠습니다^^ 선생님 감사합니다!
    사이트는 http://www.coupang.com/vp/products/112233854?itemId=337560830&vendorItemId=3829068389&from=home_CategoryBest_ranking&traid=home_CategoryBest_ranking
    입니다!

  3. 박수환 2018.08.06 02:37 신고  수정/삭제  댓글쓰기

    R프로그래밍에 대한 자세한 설명 너무 감사드립니다.
    추후 꼭 배우고 싶던 통계학적 분석 방법을 올려주셔서, 나중에도 큰 도움이 될 것 같습니다.

    미리 감사의 인사 드립니다.
    항상 건강하세요!

  4. 이슬빈 2018.07.19 14:13 신고  수정/삭제  댓글쓰기

    안녕하십니까 선생님 더운날 건광관리 잘하고 계신진요!
    다름이아니라 제가 통계분석 프로젝트를 하나 진행하는데,

    어느제품의 주요 특성의 관계에서 개별제품의 특성묘사(Coeff:영향력,Pvalue:유의성)
    을 분석 해야하는데요, 전체 테이블에서 피밸류는 검증을 마쳤습니다
    하지만 개별제품에 대한 결과값 검증이 아무리해도 쉽지가 않아서요, 1주일정도 노력중인데
    혹시 조언 해주실수 있는 부분이 있을가 싶어서 방명록남깁니다. 분석 시트 예제 자료나 해당 코딩 스크립트는 가지고 있습니다.

    건강 유의하십시오, 바쁘시면 회신 안해주셔도 되요
    july7771@naver.com

    • R Friend R_Friend 2018.07.20 00:46 신고  수정/삭제

      안녕하세요 이슬빈님,

      질문 주신 내용만 봐서는 어려움을 겪고 있는 부분이 무엇인지 정확히 파악하기 힘든데요,
      혹시 개별 제품의 관측치 개수가 적고 추정 모수의 변동성이 큰 것이 문제라면 hierarchical bayesian modeling 고려해보시면 좋겠습니다.

      혹시 어려움을 겪는 부분이 개별 제품이 너무 많아서 일일이 수작업하는게 번거롭고ㅠ시간이 오래걸리는거면 사용자정의함수 짜서 apply() 함수나 for loop 으로 자동화 하시면 도움이 될거 같습니다.

  5. 서현 2018.07.17 11:43 신고  수정/삭제  댓글쓰기

    안녕하세요. 비제이퍼블릭 출판사에 도서기획담당자 서현입니다.
    선생님이 올리시는 글을 바탕으로 진필제안을 드릴려고합니다.

    회신 한 번 부탁드리겠습니다.

    010-5064-3014 / seo_h@bjpublic.co.kr

    • R Friend R_Friend 2018.07.17 13:06 신고  수정/삭제

      안녕하세요 서현님,
      제안은 고맙습니다만 제가 직장인이고 프로젝트 기간에는 너무 바빠서 다른걸 하기가 어렵습니다. 블로그 포스팅도 요즘 바빠서 불규칙적으로 쓰고 있구요. 죄송합니다.

  6. 이상규 2018.07.09 14:16 신고  수정/삭제  댓글쓰기

    안녕하세요 선생님!!
    제가 rselenium을 사용해서 웹 크롤링을 하는데 홈페이지 로딩이 끝나지 않은 상태서에서 크롤링을 하려니 에러가 발생합니다.

    혹시 로딩이 완료되면 실행해라 혹은, 5초뒤에 실행해라 라는 함수가 있을까요??

    • R Friend R_Friend 2018.07.09 14:23 신고  수정/삭제

      안녕하세요.
      Sys.sleep() 함수 한번 찾아보실래요?

      testit <- function(x)
      {
      p1 <- proc.time()
      Sys.sleep(x)
      proc.time() - p1
      }
      testit(5.0)

  7. WonderLand 2018.07.05 11:29 신고  수정/삭제  댓글쓰기

    안녕하세요 선생님.

    강의 섭외과 관련해서 문의드리고 싶어서 이렇게 방명록 남기게 되었습니다.

    이메일 주소를 남겨주시면 자세한 내용 전달해드리고 싶은데, 괜찮으실까요?

  8. KJH 2018.06.26 10:10 신고  수정/삭제  댓글쓰기

    안녕하세요! 통계 관련 질문이 하나 있습니다.
    상관계수를 구한뒤, 그 값으로 상관관계의 정도를 판단하는 것으로 배웠는데요.
    보통 범위를 나눠서 0.7이상이면 강한 상관관계고, 0.3까지는 약한 상관관계.. 뭐 이런식으로요.

    그럼 상관분석은 왜 하는지 궁금합니다. 상관계수 값만 가지고 상관관계의 정도를 판단해버리면
    상관분석을 할 필요가 없는것 아닌가요?

    • R Friend R_Friend 2018.06.26 10:38 신고  수정/삭제

      안녕하세요 KJH님,
      상관관계 분석 관련해서는 아래 포스팅 참고하시기 바랍니다.

      http://rfriend.tistory.com/126

      보통 상관계수하면 피어슨 상관계수를 말하는데요, (1) 선형(Linear) 관계만을 파악할 수 있으며 (즉, 비선형 관계는 파악 못함. 비모수 상관관계 분석 기법 필요), (2) 두 변수간의 관계만 파악 (즉, 다수 변수간의 관계를 보려면 회귀모형 적합 필요) 할 수 있습니다.

  9. 이상규 2018.06.15 18:09 신고  수정/삭제  댓글쓰기

    안녕하세요 알프렌드님!!
    시각화 관련하여 질문있습니다

    A
    B
    result5.data.A
    1
    -4.2922960
    0.00000000000389755
    0.00000000268579
    2
    -3.9102123
    0.00000000000939471
    0.00000003082191
    3
    -3.5281286
    0.00000000002264455
    0.00000027610486
    4
    -3.1460449
    0.00000000005458189
    0.00000193070482
    5
    -2.7639612
    0.00000000013156254
    0.00001053865139
    6
    -2.3818776
    0.00000000031711433
    0.00004490363779
    7
    -1.9997939
    0.00000000076436268
    0.00014935003987
    8
    -1.6177102
    0.00000000184239690
    0.00038775418083
    9
    -1.2356265
    0.00000000444085801
    0.00078584150863
    10
    -0.8535428
    0.00000001070411038
    0.00124319933681
    11
    -0.4714591
    0.00000002580086522
    0.00153523161114
    12
    -0.0893754
    0.00000006218962756
    0.00147990680737
    13
    0.2927083
    0.00000014989999897
    0.00111358189390
    14
    0.6747920
    0.00000036131440584
    0.00065408965954
    15
    1.0568757
    0.00000087090114242
    0.00029990225777
    16
    1.4389594
    0.00000209919260108
    0.00010733701573
    17
    1.8210431
    0.00000505982314747
    0.00002998793957
    18
    2.2031268
    0.00001219600184343
    0.00000653989939
    19
    2.5852105
    0.00002939662278856
    0.00000111332724
    20
    3.5852105
    0.00029392734366929
    0.00000000000000
    21
    4.5852105
    0.00293538878457633
    0.00000000000000
    22
    5.5852105
    0.02896916461589227
    0.00000000000000
    23
    6.5852105
    0.25470155892952129
    0.00000000000000
    24
    7.5852105
    0.94711869936516890
    0.00000000000000
    25
    8.5852105
    0.99999999999982903
    0.00000000000000
    26
    9.5852105
    1.00000000000000000
    0.0000000000000

    이라는 데이터에 ggplot을 이용해서 2개의 y축으로 막대그래프와, 선그래프를 그리려고 합니다.

    처음 ggplot(result5, aes(x = result5$A)) +
    geom_line(aes(y = result5$B), color = "red", size = 2) +
    geom_bar(aes(y = result5$result5.data.A), fill = "#66CCFF", stat = "identity")코드로 작성해보았는데 2개의 y축은 안그려 지더라구요... 혹시 구글링하면서 시도해봐도 첫번째로 그리는 그래프만 작성됩니다.

    도와주세요~!

    • R Friend R_Friend 2018.06.16 00:30 신고  수정/삭제

      안녕하세요 이상규님,
      아래 R 코드 참고하세요.
      result5.data.A 에 650을 곱했습니다.

      #=========================================
      # Dual y-axes plot using ggplot2 sec.axis
      #=========================================

      rm(list=ls()) # clear all

      # make a DataFrame
      data_val <- matrix(
      c(-4.2922960, 0.00000000000389755, 0.00000000268579,
      -3.9102123, 0.00000000000939471, 0.00000003082191,
      -3.5281286, 0.00000000002264455, 0.00000027610486,
      -3.1460449, 0.00000000005458189, 0.00000193070482,
      -2.7639612, 0.00000000013156254, 0.00001053865139,
      -2.3818776, 0.00000000031711433, 0.00004490363779,
      -1.9997939, 0.00000000076436268, 0.00014935003987,
      -1.6177102, 0.00000000184239690, 0.00038775418083,
      -1.2356265, 0.00000000444085801, 0.00078584150863,
      -0.8535428, 0.00000001070411038, 0.00124319933681,
      -0.4714591, 0.00000002580086522, 0.00153523161114,
      -0.0893754, 0.00000006218962756, 0.00147990680737,
      0.2927083, 0.00000014989999897, 0.00111358189390,
      0.6747920, 0.00000036131440584, 0.00065408965954,
      1.0568757, 0.00000087090114242, 0.00029990225777,
      1.4389594, 0.00000209919260108, 0.00010733701573,
      1.8210431, 0.00000505982314747, 0.00002998793957,
      2.2031268, 0.00001219600184343, 0.00000653989939,
      2.5852105, 0.00002939662278856, 0.00000111332724,
      3.5852105, 0.00029392734366929, 0.00000000000000,
      4.5852105, 0.00293538878457633, 0.00000000000000,
      5.5852105, 0.02896916461589227, 0.00000000000000,
      6.5852105, 0.25470155892952129, 0.00000000000000,
      7.5852105, 0.94711869936516890, 0.00000000000000,
      8.5852105, 0.99999999999982903, 0.00000000000000,
      9.5852105, 1.00000000000000000, 0.0000000000000),
      nrow=26,
      byrow=TRUE)

      # convert a matrix into a dataframe
      result5 <- data.frame(data_val)

      # column name
      colnames(result5) <- c("A", "B", "result5.data.A")
      head(result5)
      summary(result5)
      max(result5$B)/max(result5$result5.data.A) # 651

      # Dual y-axes plot using ggplot2 sec.axis
      library(ggplot2)

      g <- ggplot(result5, aes(x = A))
      g <- g + geom_line(aes(y = B), colour = "red", size = 2)

      # adding the relative result5.data.A, transformed to match roughly the range of the B
      g <- g + geom_bar(aes(y = result5.data.A*650), fill = "#66CCFF", stat = "identity")

      # adding secondary axis
      g <- g + scale_y_continuous(sec.axis = sec_axis(~.*650, name="result5.data.A*650"))

      # adding text
      g <- g + annotate("text", x = -3, y = 0.75, colour="black", label="result5.data.A*650")
      g <- g + annotate("text", x = 5, y = 0.5, colour="black", label="B")

      # adding arrow
      library(grid)
      g <- g + annotate("segment", x = -2, y = 0.75, xend = -1, yend = 0.6, colour="blue", arrow=arrow())
      g <- g + annotate("segment", x = 5.2, y = 0.5, xend = 6.7, yend = 0.4, colour="red", arrow=arrow())

      g

    • 이상규 2018.06.19 10:26 신고  수정/삭제

      알프렌드님 감사합니다.
      추가적으로 궁금한게 있습니다.

      1) scale_y_continuous(sec.axis = sec_axis(~.*650, name="result5.data.A*650"))
      으로 생성한 y axis의 name 크기를 조절할 수 있나요??

      2) geom_line(aes(y = B), colour = "red", size = 2)으로 그린 선 그래프를 좀 더 부드럽게 그릴 수 없나요??
      stat_smooth등 여러 방법을 적용해보았는데 bar그래프를 벗어나도록 그려져서 ㅜㅜ!

    • R Friend R_Friend 2018.06.20 22:42 신고  수정/삭제

      안녕하세요.

      (1) y axis의 name 크기 조절은 아래 코드 참고하시기 바랍니다.

      # changing x, y axis lable name size
      g <- g + theme(axis.title.y = element_text(size=15),
      axis.title.x = element_text(size=15))

      (2) 선 그래프 부드럽게 하는 것은 loess (Local regrESSion) 구글링 해보시면 도움이 될 것 같습니다.

  10. vibe 2018.06.05 18:00 신고  수정/삭제  댓글쓰기

    아래 cross validation 관련 질문을 올렸었는데, 못보실까봐 새 글로 올립니다.
    일단 선생님께서 설명하신 cv의 개념이 제가 알고 있던 것과 동일하여 다행인데요.

    제가 헷갈리게 된 이유는
    1. 파이썬의 KFold라는 클래스document에서 'validation'이라는 용어를 사용하지 않고 'test'라는 용어를 사용한다는 점입니다.
    설명하신대로 k-fold cv의 개념이 (test셋을 떼어 놓고 나머지 데이터를 가지고) train셋과 validation셋으로 나누면서 하는걸 k회 반복하는 것이라면
    파이썬의 KFold라는 클래스에서도 validation이라는 용어를 사용해야 하는데 말이죠.. 여기서 첫 번째 혼란이 왔습니다.

    2. 구글에서 cross validation이라고 검색을 해서 이미지 카테고리로 들어가 보면
    K-fold cross validation을 설명한 것들이 많이 나오는데요.
    이 이미지들에서도 k회 반복하며 cv하는 과정을 그림으로 나타내면서 데이터셋에 대한 용어 사용을 train/validation이 아니라 train/test로 사용하고 있는 그림이 꽤 많습니다.
    (validation이라고 표기한 것도 있습니다)

    질문글이 길어지게 됐는데요..
    결론적으로 파이썬에서는
    train_test_split함수를 써서 train과 test로 나눈 뒤에
    GridSearchCV와 같은 것들을 할 때 train셋만을 가지고 KFold라는 클래스를 사용하면 되는건지 궁금합니다.

    • R Friend R_Friend 2018.06.06 00:24 신고  수정/삭제

      안녕하세요 vibe 님,

      댓글에 남겨주신대로 training set만을 가지고 K-fold cross-validation 을 해서 hyperparameter 최적값을 구하고, 마지막으로 test set으로 으로 모델의 최종 성능 평가하는게 맞습니다.

      아래에 ageron님께서 작성한 handson-ml/02_end_to_end_machine_learning_project.ipynb 의 github 내용을 참고하시면 이해하시는데 도움이 되실것 같습니다. 데이터 전처리 부터해서 댓글에 질문남겨주신 부분에 대한 예시 내용이 빠짐없이 잘 설명되어 있습니다.

      https://github.com/ageron/handson-ml/blob/master/02_end_to_end_machine_learning_project.ipynb

    • vibe 2018.06.07 09:50 신고  수정/삭제

      감사합니다. 정독해보겠습니다!