방명록

  1. Corin 2022.05.15 18:59  수정/삭제  댓글쓰기

    안녕하세요! npz 파일 여는 방법 글을 잘 보았습니다. 근데 제가 spyder로 따라해보았는데 왜 안열리는걸까요 ㅠㅠㅠ

  2. LMK 2022.04.21 15:04  수정/삭제  댓글쓰기

    선생님 안녕하세요! 선생님 블로그에서 많이 배우고 있습니다. 좋은 글 정말 감사드립니다!!
    최근에 제가 연습을 하다가
    궁금한 부분이 있는데 책을 찾아봐도 명쾌한 답을 찾기가 어려운 부분이 있어서 문의를 드리려고 합니다.
    선생님 시간나시면 아래 부분 한번 봐주실 수 있으신지요

    ------------------------------------------------------------------------------------
    결측치 대체하는 부분을 연습을 하는데요.
    exam이라는 데이터프레임에 math 열에 NA를 몇개 만들어 놓고, NA를 55로 대체하려고 하는데요,

    exam$math <- ifelse(is.na(exam$math),55,exam$math) 는 결측치를 55로 대체를 해주는데
    exam$math <- ifelse(exam$math=NA,55,exam$math) 이 코드는 에러라고 나옵니다.

    아래코드는 뭐가 문제인걸까요

  3. 익명 2022.03.14 14:55  수정/삭제  댓글쓰기

    비밀댓글입니다

  4. Mosaic 2022.01.29 12:07  수정/삭제  댓글쓰기

    안녕하세요?
    파이썬 모자이크 플랏(타이타닉호 예제)을 잘 보았습니다.
    강의자료로 활용해도 될까요?

    • Rfriend 2022.02.14 09:13 신고  수정/삭제

      안녕하세요.
      방명록 글을 이제서야 봤네요.
      강의 자료 활용하셔도 됩니다.

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

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

  6. 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

  7. 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

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

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

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

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

  9. 파송송 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

      하루 잘 보내시구요.

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

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

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

      안녕하세요, 서일님.

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

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

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