데이터 프레임 업데이트 방법 data.frame update

    데이터 프레임에도 sql 쿼리와 다르지만 업데이트 하는 것이 있다.  데이터 프레임에서 데이터 업데이트 할 케이스는 여러가지 케이스가 있는데,    예를 들자면,  수없이 많은 모델을 업데이트를 할 필요성이 있을때가 있다.    그런데,  바로 업데이트 하면 되는데,  데이터 프레임을 하나 더 만들어서,  업데이트 된 값은 join해서,  데이터를 대치 시킨다.   물론 부분적으로 데이터 업데이트 할 경우에는 더욱 더 많은 과정이 필요하다. 

어찌 되었든  아래와 같은 방법을  잘 사용하면,  복잡한 작업이 간소화 된다.


1. dplyr 패키지 불러오고 Dataframe 만들기 

# 데이터 베이스 업데이트 블로그
  library(dplyr)
# 성적표 데이터 셋 만들기 
  df <- tibble(
                이름 = c("우진",    "예은 ",  "지우",   "현준",   "지민",   "민재",
                         "서연",  "민수",   "수빈",   "서현")  ,
                수학 = c(90,  80, 85, 30, 50, 35, 100,    87, 10, 50),
                물리 = c(100, 90, 95, 50, 40, 45, 90, 95, 40, 30),
                영어 = c(40,  30, 50, 100,    90, 95, 95, 95, 30, 20),
                중국어 = c(50, 45, 40, 90, 95, 100,    100,    90, 50, 60))

  df
## # A tibble: 10 x 5
##    이름     수학  물리  영어 중국어
##    <chr>   <dbl> <dbl> <dbl>  <dbl>
##  1 "우진"     90   100    40     50
##  2 "예은 "    80    90    30     45
##  3 "지우"     85    95    50     40
##  4 "현준"     30    50   100     90
##  5 "지민"     50    40    90     95
##  6 "민재"     35    45    95    100
##  7 "서연"    100    90    95    100
##  8 "민수"     87    95    95     90
##  9 "수빈"     10    40    30     50
## 10 "서현"     50    30    20     60


2. 데이터 변경 테스트 

위와 같이 점수를 바꿀 데이터는 "지민" 하고, "수빈" 데이터를 변경 하려고 한다. 

아래와 같이 지민의 점수를 55점으로 바꾸어 보자. 


 데이터베이스 변경 테스트 
    df %>%    
     rows_update( tibble(이름 = "지민",  수학 = 55 ) )
## Matching, by = "이름"
## # A tibble: 10 x 5
##    이름     수학  물리  영어 중국어
##    <chr>   <dbl> <dbl> <dbl>  <dbl>
##  1 "우진"     90   100    40     50
##  2 "예은 "    80    90    30     45
##  3 "지우"     85    95    50     40
##  4 "현준"     30    50   100     90
##  5 "지민"     55    40    90     95
##  6 "민재"     35    45    95    100
##  7 "서연"    100    90    95    100
##  8 "민수"     87    95    95     90
##  9 "수빈"     10    40    30     50
## 10 "서현"     50    30    20     60


지민이 55점으로 바뀐 것을 볼 수 있다.   


3.  2개이상의 데이터 셋 업데이트 

  지민과, 수빈의 두사람의 수학점수를 바꾸려고 한다.   수학점수를 업데이트 하려면,  별도의 데이터 프레임을 만들어서,  업데이트 할 내용을 만들어야 한다.   일반적으로 모델을 변경 하거나  방법을 변경 할때, 별도의 데이터 프레임이 만들어 진다.   

# 지민과 수빈의 수학 채점이 잘못되어 지민은 수학점수, 5점, 
#  수빈은 수학점수 10점을  더 주었다고 가정 하자.
   df_adj =  tibble(
             이름 = c("지민", "수빈"),
             점수 = c( 55, 20 ))


그리고 데이터 프레임을 중심으로 루프문을 돌려  2개 이상의 데이터를 돌려서 업데이트 한다.   


# 젓번째로 테스트 되었다.  그러면, 2개를 어떻게 해야 하는가?
  for(i in 1:nrow(df_adj)){
    
    name = df_adj$이름[i]
    math = df_adj$점수[i]
    
    df <- df %>% 
      rows_update(tibble(이름= name, 수학 = math))
  }
## Matching, by = "이름"
## Matching, by = "이름"
# 성적이 변경 된 것 확인     
 df        
## # A tibble: 10 x 5
##    이름     수학  물리  영어 중국어
##    <chr>   <dbl> <dbl> <dbl>  <dbl>
##  1 "우진"     90   100    40     50
##  2 "예은 "    80    90    30     45
##  3 "지우"     85    95    50     40
##  4 "현준"     30    50   100     90
##  5 "지민"     55    40    90     95
##  6 "민재"     35    45    95    100
##  7 "서연"    100    90    95    100
##  8 "민수"     87    95    95     90
##  9 "수빈"     20    40    30     50
## 10 "서현"     50    30    20     60


위와 같은 경우에는 부분적으로 업데이트 한 것이다.    만약에 같은 종류의 업무인데 조직이 매우 크고,  다루는 품목이 다를 경우에는  통계 모형이나  로직을 부분적으로 바뀌어야 할때가 많다. 

댓글 없음:

댓글 쓰기

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...