방명록

  1. Gamma 2022.01.15 09:29  수정/삭제  댓글쓰기

    예, 그렇게 하면 되겠네요.
    처리하고자 하는 컬럼을 먼저 Group 형태로 선택해서 일괄 처리하는 방법으로.
    대단히 감사드립니다.

  2. Gamma 2022.01.13 21:24  수정/삭제  댓글쓰기

    대단히 감사드립니다.
    여러 개의 Giga byte급 Dataframe의 수백 개의 컬럼을 처리해야 하는데,
    일일이 typing할 수가 없어서 반복문을 사용하는 방법을 시도하고자 했는데,
    이렇게 일괄 처리하는 방법이 있었네요. 감사합니다.

    그런데, 기존 Dataframe의 특정 구간의(특정 조건에 맞는) 컬럼들만을 선택해서
    활용하기 위해서
    assign("tmp", d_df[i,1])를 사용했는데, tmp라는 임시 변수에 할당된 word가 인용되는 것이 아니고
    tmp라는 word 자체가 컬럼이름으로 할당되어버리는데,
    tmp라는 변수에 할당된 word가 새로운 컬럼이름으로 할당되게(변경되게) 하는 방법이 있을까요?

    • Rfriend 2022.01.14 19:21 신고  수정/삭제

      아래의 'col_dict' 테이블을 칼럼 이름을 변경하고자 하는 특정 칼럼의 old_col_nm : new_col_nm 으로 만들어서 적용하면 됩니다.

      가령, 기존의 c1~c5'까지의 칼럼들 중에서 'c2', 'c4' 의 2개 칼럼만 선별적으로 변경하고 싶으면 아래처럼 'col_dict' 테이블을 만들어서 적용하면 돼요.

      old_col_nm = c("c2", "c4")
      new_col_nm = c("v2", "v4")

      col_dict <- data.frame("old" = old_col_nm, "new" = new_col_nm)
      print(col_dict)
      # old new
      # 2 c2 v2
      # 4 c4 v4


      library(dplyr)
      c_df_new <- c_df %>%
      rename_at(vars(as.character(col_dict$old)), ~ as.character(col_dict$new))

      print(c_df_new)
      # c1 v2 c3 v4 c5
      # 1 1 4 7 10 13
      # 2 2 5 8 11 14
      # 3 3 6 9 12 15

  3. gamma 2022.01.09 00:17 신고  수정/삭제  댓글쓰기

    반복문을 사용해서 컬럼명을 바꾸는 것을 시도하고 있는데,
    아래와 같이 Error가 나고 바뀌어지지 않는데, 해결방법이 있을까요?
    ===================================================================

    c <- rep(c(""), times = 10)
    c_df <- as.data.frame(c)

    for(i in 1: 5){
    c_df[, paste0("c",i)] <- c_df
    }
    # View(c_df)

    d <- c("가", "나", "다", "라", "마")
    d_df <- as.data.frame(d) # View(d_df)


    library(dplyr)

    # 반복문을 사용한 컬럼명 변경

    for( i in 1:nrow(d_df)) {

    old <- paste0("c",i)
    c_df <- rename(c_df, assign("tmp", d_df[i,1]) = old)

    }

    # View(c_df)

    #==================================================
    #Error: unexpected '=' in:
    # " old <- paste0("c",i)
    # c_df <- rename(c_df, assign("tmp", d_df[i,1]) ="
    #>
    # > }
    #Error: unexpected '}' in "}"
    #>
    #==================================================


    c <- rep(c(""), times = 10)
    c_df <- as.data.frame(c)

    for(i in 1: 5){
    c_df[, paste0("c",i)] <- c_df
    }
    # View(c_df)

    d <- c("가", "나", "다", "라", "마")
    d_df <- as.data.frame(d) # View(d_df)


    # 반복문을 사용한 컬럼명 변경

    for( i in 1:nrow(d_df)) {

    assign("tmp", d_df[i,1])
    old <- paste0("c",i)
    c_df <- rename(c_df, tmp = old)

    }

    # View(c_df)
    #==================================================
    # Error: Names must be unique.
    # x These names are duplicated:
    # * "tmp" at locations 2 and 3.
    # Run `rlang::last_error()` to see where the error occurred.
    #==================================================

    • Rfriend 2022.01.09 15:22 신고  수정/삭제

      안녕하세요.

      (1) names() 함수를 이용해서 한꺼번에 칼럼 이름 변경하기
      (2) key (old column name): value (new column name) mapping table을 이용해서 칼럼 이름 변경하기
      예제 코드입니다. for loop 대신 사용할 수 있을 것 같아서 코드 남겨놓습니다. 이외에 변수 변경 방법은 https://rfriend.tistory.com/41 를 참고하세요.

      ## creating a sample data.frame with 5 columns
      c_df <- data.frame(matrix(1:15, nrow=3))
      print(c_df)
      # X1 X2 X3 X4 X5
      # 1 1 4 7 10 13
      # 2 2 5 8 11 14
      # 3 3 6 9 12 15


      ## (1) changing column names using names() function
      names(c_df) <- c("c1", "c2", "c3", "c4", "c5")
      print(c_df)
      # c1 c2 c3 c4 c5
      # 1 1 4 7 10 13
      # 2 2 5 8 11 14
      # 3 3 6 9 12 15


      ## (2) changing column names using key(old column name):value(new column name) mapping table
      old_col_nm <- names(c_df)
      print(old_col_nm)
      # [1] "c1" "c2" "c3" "c4" "c5"

      col_cnt <- ncol(c_df) # 5
      new_col_nm <- paste0(c(rep("v", col_cnt)), 1:col_cnt)
      print(new_col_nm)
      # [1] "v1" "v2" "v3" "v4" "v5"

      col_dict <- data.frame("old" = old_col_nm, "new" = new_col_nm)
      print(col_dict)
      # old new
      # 1 c1 v1
      # 2 c2 v2
      # 3 c3 v3
      # 4 c4 v4
      # 5 c5 v5


      library(dplyr)
      c_df_new <- c_df %>%
      rename_at(vars(as.character(col_dict$old)), ~ as.character(col_dict$new))

      print(c_df_new)
      # v1 v2 v3 v4 v5
      # 1 1 4 7 10 13
      # 2 2 5 8 11 14
      # 3 3 6 9 12 15

  4. 77dptjd 2021.10.06 12:18  수정/삭제  댓글쓰기

    어제 5시간동안 찾았는데 여기 방법으로 했습니다 감사합니다 ㅜㅜ

    • Rfriend 2021.10.06 12:40 신고  수정/삭제

      안녕하세요.
      어떤 문제였는지는 모르겠지만, 잘 해결이 되었다니 다행입니다. 뭔가 도움이 되었다니 기쁘네요. ^^

  5. 파송송 2021.09.28 15:08  수정/삭제  댓글쓰기

    RFriend님!
    파송송입니다~ ㅎ
    Rfriend님 자료 보며 이것저것 해보다가 막힌게 있는데, 뭐 또 하나 여쭤봐도 될까요?
    이번에는 크롤링을 해봤어요. www.oilprice.com이란 사이트에서 검색어로 lng를 넣으면 총 210페이지에 20개씩 자료가 나오는데요, 제가 하면 매 페이지별 맨앞의 뉴스 1개씩만 크롤링 돼요.
    코드 중에 뭘 고쳐야 할까요?? ㅠㅠ

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    import pandas as pd
    from datetime import datetime
    col_name = ['title', 'timestamp', 'descrip']
    df_lng = pd.DataFrame(columns = col_name)

    for j in range(20):
    url = 'https://oilprice.com/search/tab/articles/lng/Page-' + str(j+1) + '.html'
    with urlopen(url) as response:
    soup = BeautifulSoup(response, 'html.parser')
    headlines = soup.find_all('div', {'id':'search-results-articles'})
    for i in range(len(headlines)):
    head = headlines[i]
    title = head.find('a').text
    timestamp = head.find('div', {'class':'dateadded'}).text
    descrip = head.find('p').text
    # rr = pd.DataFrame [title, timestamp, descrip]
    df_lng = df_lng.append({'title': title, 'timestamp': timestamp, 'descrip': descrip}, ignore_index=True)

    if j%10 == 0:
    print(str(datetime.now()) + " now processing : j = " + str(j))

    • Rfriend 2021.09.29 12:57 신고  수정/삭제

      안녕하세요 파송송님,

      이곳 방명록에 Python code를 올리면 indentation 이 모두 무시가 되어서 코드를 정확하기 보기가 어려우므로, 아래 포스팅의 본문에 수정한 코드 올려놓았습니다.

      https://rfriend.tistory.com/688

      하루 잘 보내시구요.

  6. 서일 2021.09.20 15:53  수정/삭제  댓글쓰기

    19년부터 뭔가 궁금한게 생겨 검색하면 항상 여기에서 많은 도움을 받았는데, 최근 쿠베플로우까지 포스팅하신 것 보고 감탄해서 방명록 남깁니다. 개인 후원계좌라도 있으신가요? 감사한 마음에 커피라도 한 잔 보내드리고 싶네요.

    • Rfriend 2021.09.22 12:04 신고  수정/삭제

      안녕하세요, 서일님.

      방명록에 따뜻한 댓글 남겨주셔서 감사합니다.
      무척 기분이 좋네요. ^___^

      블로그 자주 들려주시고, 질문이라든지, 아니면 혹시라도 제가 잘못 쓴거 있거나 하면 댓글 남겨주시면 그걸로 족합니다.

      방명록 글 다시한번 감사합니다. :-)

  7. 파송송 2021.09.13 22:28  수정/삭제  댓글쓰기

    안녕하세요? R프렌드님~
    한 3주 전에 파일 병합 때문에 도움 많이 받았던 파송송입니다~~
    손수술은 잘 됐나요?
    제가 질문을 남겼던 페이지를 못찾아서 방명록에 안부겸 감사인사 남겨요~

    • Rfriend 2021.09.15 10:27 신고  수정/삭제

      안녕하세요, 파송송님.

      손수술은 잘 받고, 기브스하고 다니고 있어요. 걱정해주셔서 감사합니다.

      여러개 파일 병합은 아래 링크 참조하세요.
      ==> https://rfriend.tistory.com/219

      저도 제 블로그 포스팅 참고해야할 경우에는 Google 에서 'Rfriend, 여러개 파일 합치기' <-- 이런식으로 "Rfriend, " 먼저 써주고, 그 다음에 원하는 검색 키워드를 몇 개 콤마로 구분해서 써줘요. 그러면 대부분 Google 첫번째 페이지에 검색 잘 되더라구요.

      그리고, 방명록에 질문 남기시면 제가 일주일에 한번 포스팅하려고 컴퓨터를 사용해서 로그인할 때만 확인할 수 있어요. 포스팅에 댓글을 남겨주셔야 제 모바일로 실시간 알람이 와서 당일에 답글을 드릴 수 있어요. 방명록 글은 모바일로 알람이 안와요.(티스토리에 몇번을 요청해도 개선이 안되네요. -_-;)

  8. 시스템 트레이더 2021.07.28 21:35  수정/삭제  댓글쓰기

    안녕하세요!
    주식/코인 자동매매를 배워보고 싶어서 열심히 파이썬을 배우고 있습니다!
    궁금한점이 하나 있는데 혹시 질문을 드려도 될까요?
    https://rfriend.tistory.com/494
    포스팅 질문인데,
    이젠 resemple을 하는 방법은 알겠느데
    혹시 10분 간격이지만 데이터는 8분까지 데이터만 처리 하는 방법이 있을까요?
    예를 들어서 위 링크 그림에서 sum 부분이 5개가 아니라
    0~8분 데이터인 12+21+41+79
    10~18분 데이터인 81+24+62+76
    이 되도록 만들고 싶은데 파이썬으로 어떻게 구현해야할지 몰라서 실례를 무릎쓰고
    질문을 드립니다.
    작은 힌트라도 주시면 열심히 공부해보도록 하겠습니다!
    감사합니다!

    • Rfriend 2021.09.15 10:38 신고  수정/삭제

      안녕하세요.

      올해 7월달에 질문을 남겨주셨는데요, 9월달인 오늘에서야 봤네요. ㅜ_ㅜ 방명록에 질문을 남기시면 제 핸드폰으로 알람이 안오며, 제가 컴퓨터를 써서 웹으로 로그인해야만 방명록 새글이 보입니다. 그러다보니 방명록에 글 남겨주시면 한참 늦게보거나 아예 모르고 지나가는 경우도 있어요.

      질문 주신 내용으로 하려면 index의 timestamp를 reset_index() 해서 밖으로 꺼낸 다음에, str()로 텍스트로 만들고, 마지막 한칸 가져와서 조건절로 '9', '0' 인 행은 값을 '0'으로 바꿔주고 ==> 이후 동일하게 resampling 하면 될거 같아요.

      답변 아주 많이 늦어서 죄송합니다. 다음에는 포스팅 본문에 댓글로 질문 남겨주시면 가급적 당일 답변 드릴께요.

  9. 이건웅 2021.06.22 23:36  수정/삭제  댓글쓰기

    안녕하세요. 광주의 대학원에서 교육 관련 석사 과정을 하고 있습니다. R 초보이지만 R프로그램에 관심이 많아 R을 이용해 논문을 작성하려고 이것 저것 검색을 하다보니 선생님의 게시글 도움을 많이 받고 있습니다. 감사합니다.
    제가 논문을 작성할 때 논문에 출처를 밝히고 선생님의 게시글 내용을 인용해도 될지 여쭤 보려고 글 남깁니다.

    • Rfriend 2021.06.27 23:20 신고  수정/삭제

      안녕하세요 이건웅님.
      대학원 공부하시는데 제 블로그 글이 도움이 되었다니 기쁘네요. 글 쓴 보람이 있네요.
      논문에 인용해주신다면 영광입니다! :-)

  10. 분석공부 2021.05.14 17:35  수정/삭제  댓글쓰기

    안녕하세요, 선생님.
    잘 계시지요? 1월에도 방명록에 글을 썼었는데, 선생님 홈페이지의 도움을 받아 완성한 개인 프로젝트들로 취업을 하게 되었습니다. 원하는 직무인데다, 마음에 드는 기업이라 정말 기쁩니다. 감사합니다!
    날이 점점 더워지는데 건강 유의하시고요!
    감사합니다. 선생님^^

    • Rfriend 2021.05.16 19:54 신고  수정/삭제

      안녕하세요.
      원하시는 기업에 취업하셨다니 정말 축하드려요!
      멋지고 대단하십니다.

      방명록에 글 남겨주셔서 고맙습니다. 저도 블로그 포스팅하는데 뿌듯하고 기쁘네요. :-)