https://pastryofjsmath.tistory.com/28
날짜,시간 데이터 전처리
*위의 파일을 이용하여 날짜와 시간 데이터 전처리하였습니다.import pandas as pdimport numpy as np#df_merged_mean = pd.read_csv('파일위치주소',encoding='UFT-8 또는 CP949')주소가 어디인지 모르시는 분들은 아래의
pastryofjsmath.tistory.com
위 파이썬 날짜,시간 데이터 전처리의 R버전입니다.
우선, R에서 날짜,시간 데이터 전처리 할 때 사용되는 함수는 as.Date와 strptime이라는 함수입니다.
as.Date는 년,월,일만 나타내주며, strptime은 그 이하 년,월,일,시간,분,초까지 모두 반환해 줍니다.
기본적으로 파이썬에서 해본 format을 항상 맞춰준다는 생각을 가지고 있으면 됩니다.
df <- read.csv('',fileEncoding = 'CP949')
library(magrittr)
library(dplyr)
만약 as.Date로 한다면 년,월,일만 가능합니다.
as.Date(df$개강일 %>% as.character(),format='%y%m%d')
[1] "2024-04-19" "2024-04-18" "2024-04-18" "2024-04-19" "2024-04-19" "2024-04-18"
년,월,일만 있는 경우도 있지만 그 이하 시간,분을 사용하는 경우도 생깁니다.
강의시작시간 컬럼의 format을 맞춰줍시다. %H%M의 형태를 맞춰줘야합니다. 저는 13:00, 10:30 처럼 맞춰주겠습니다.
df2<- gsub(pattern = '시',replacement = ':',x = df$강의시작시간)
df2
[1] "13:" "10:30분" "12:" "15:" "14:" "9:30"
df2<- gsub(pattern = '분',replacement = '',x = df2)
df2
[1] "13:" "10:30" "12:" "15:" "14:" "9:30"
df2 <- ifelse(nchar(df2) == 3, paste0(df2, "00"), df2)
df2
[1] "13:00" "10:30" "12:00" "15:00" "14:00" "9:30"
파이썬에서는 str.extract(r'(\d+시)') 같이 문자를 길이에 상관없이 추출이 가능했지만
제가 아직 모르는 것인지는 모르겠으나 R에서는 없는 것 같습니다;; 그래서 일반 양식을 맞춰주기 위해 코드 길이가 좀 길어졌습니다.
++20240610
str.extract()와 같은 기능을 하는 코드를 찾았습니다.이 글 맨 밑에 서술해두었습니다. 그 코드를 보고 다음 글을 따라가세요.
# 시간 데이터를 POSIXct 형식으로 변환####
df2 <- strptime(df2, format = "%H:%M")
df2
[1] "2024-05-15 13:00:00 KST" "2024-05-15 10:30:00 KST" "2024-05-15 12:00:00 KST" "2024-05-15 15:00:00 KST"
[5] "2024-05-15 14:00:00 KST" "2024-05-15 09:30:00 KST"
#시간만 출력.
format(df2,format='%H:%M')
[1] "13:00" "10:30" "12:00" "15:00" "14:00" "09:30"
이제 개강일과 종강일도 strptime으로 나타내보겠습니다.
df$last_day <- strptime(df$종강일,format='%y년%m월%d일')
df$first_day <-strptime(df$개강일,format='%y%m%d')
df
그러면 위 last_day,first_day 데이터 구조는 어떻게 될까요?
우리가 자주 쓰는 문자형,숫자형,정수형,팩터형이 아닌 새로운 형태인 Positxlt으로 나타납니다.
이러한 형태는 파이썬에서 데이트형태처럼 일자끼리 뺄셈같은 연산이 가능합니다.
df$last_day-df$first_day
Time differences in days
[1] 72 72 73 70 72 72
++20240610
R에서 Python의 str.extract()과 같은기능을 하는 코드를 찾았습니다.
stringr패키지의 str_extract()입니다. 이 친구에 정규표현식을 같이 사용하면 똑같은 기능입니다.
library(stringr)
str_extract(df$강의시작시간,'\\d+시')
> str_extract(df$강의시작시간,'\\d+시')
[1] "13시" "10시" "12시" "15시" "14시" "9시"
> str_extract(string = df$강의시작시간,pattern = '\\d+분')
[1] NA "30분" NA NA NA NA
ifelse(test = is.na(str_extract(string = df$강의시작시간,pattern = '\\d+분')),yes = '00분',no=str_extract(string = df$강의시작시간,pattern = '\\d+분'))
> ifelse(test = is.na(str_extract(string = df$강의시작시간,pattern = '\\d+분')),yes = '00분',no=str_extract(string = df$강의시작시간,pattern = '\\d+분'))
[1] "00분" "30분" "00분" "00분" "00분" "00분"
추가적으로 python에서의 df[col].str[순서]와 같이 원하는 부분을 추출하는 기능이 있는데, R에서도 똑같은 기능을 구현한 코드가 있다.
str_extract(df$강의시작시간,'\\d+시')
str_extract(string = df$강의시작시간,pattern = '\\d+시')
str_extract(string = df$강의시작시간,pattern = '\\d+분')
start_time <- paste(str_extract(string = df$강의시작시간,pattern = '\\d+시'),ifelse(test = is.na(str_extract(string = df$강의시작시간,pattern = '\\d+분')),yes = '00분',no=str_extract(string = df$강의시작시간,pattern = '\\d+분')),sep = '')
start_time
강의시작시간<-format(strptime(start_time,format='%H시%M분'),format = '%H:%M')
substr(강의시작시간,start = 1,stop = 2)
> str_extract(df$강의시작시간,'\\d+시')
[1] "13시" "10시" "12시" "15시" "14시" "9시"
> str_extract(string = df$강의시작시간,pattern = '\\d+시')
[1] "13시" "10시" "12시" "15시" "14시" "9시"
> str_extract(string = df$강의시작시간,pattern = '\\d+분')
[1] NA "30분" NA NA NA NA
> start_time <- paste(str_extract(string = df$강의시작시간,pattern = '\\d+시'),ifelse(test = is.na(str_extract(string = df$강의시작시간,pattern = '\\d+분')),yes = '00분',no=str_extract(string = df$강의시작시간,pattern = '\\d+분')),sep = '')
> start_time
[1] "13시00분" "10시30분" "12시00분" "15시00분" "14시00분" "9시00분"
> 강의시작시간<-format(strptime(start_time,format='%H시%M분'),format = '%H:%M')
> substr(강의시작시간,start = 1,stop = 2)
[1] "13" "10" "12" "15" "14" "09"
'데이터 전처리 > R' 카테고리의 다른 글
ggplot을 이용한 데이터 시각화 - geom_bar(),geom_histogram() (0) | 2024.06.17 |
---|---|
파이썬 split,replace,extract [R ver.] (3) | 2024.06.11 |
자주 쓰이는 apply계열 함수 사용법 in r (0) | 2024.06.04 |
gsub()함수 기본 사용법 in r (1) | 2024.06.04 |
수치형 데이터 전처리 [in R] (0) | 2024.05.14 |