데이터 불러오기


setwd('c:/users/is2js/R_da/')


#### CSV ####

#### 1. readLines()####
# readLines는 데이터가 매우 클 때, 일부 샘플 3줄 정ㄷ만 읽어볼 경우에 사용
#             확장자가 없거나 txt파일
readLines("./data/01_csv.csv", n=3)
# 지금은 데이터가 쉼표로 구분되어있지만
# 만약 구분자가 custom으로 구성(#, @@)되었다고 가정하고
# readLines를 이용하여 구분자 처리해보기
# ****큰 개요****
# -> readLines()로 읽어오기
# -> 기준칼럼obs와 함께 data.frame의 칼럼으로 집어넣기
# -> cSplit()을 이용하여 데이터칼럼의 구분자를 구분해주기
# -> 전체 data.table을 data.frame으로 바꾸기
# -> 전체 data.frame 중 obs제외 2열부터 for문을 돌면서  factor를 character로 바꾸기
# -> 첫행에 있는 칼럼명을 colname에 입혀주기
# -> 첫행(칼럼명 포함row)과 첫칼럼(obs-기준칼럼) 제외시키기 [-1,-1]


# 1. readLines()로 받아온 데이터를 df로 만들기
df = readLines("./data/01_csv.csv", n=3)
df = data.frame(obs = 1:3, # 기준이 될 obs라는 컬럼을 1,2,3로 채워줌
                 values = df,# values 칼럼을 readLines로 읽어온 데이터로 채워줌
                 stringsAsFactors = FALSE) #파일 읽어올때 기본적으로
df
# 2. values칼럼을 구분자로 나누어보자.
# (1) 기본함수 strsplit() 사용
strsplit(df$values, split=",") # 결과가 리스트로 나온다. **df가 깨저버림!!!
strsplit(df$values, split=",")[[1]]

# (2) splitstackshape 패키지의 cSplit()함수 사용해서 구분자 나누기
library("splitstackshape")
df_2 = cSplit(indt = df, splitCols = "values", sep="," )
df_2 # cSplit()의 결과는 행이 1:, 2:, 형태로 나타나는 data.table형태다.

class(df_2) #클래스 확인 -> data.table과 data.frame이 공존하는 상태 -> data.frame만 남겨야함.
str(df_2) # strucure 확인 -> 각 요소가 Factor로 되어있다 -> character로 바꿔야함.

# data.table을 data.frame으로 as.data.frame()을 이용하여 바꿈
df_2 = as.data.frame(df_2)
df_2
class(df_2)
str(df_2) #아직 factor

# 2번째 칼럼부터 for문으로 칼럼들을 돌면서, 각 칼럼들을 as.character()로 factor를 char로바꿈
for(n in 2:ncol(df_2)){
   df_2[,n] = as.character(df_2[,n])
}
str(df_2)

#이제 첫행에 있는 칼럼명들을 df의 칼럼명에 넣어야함.
colnames(df_2)
# 1차원도 끝=ncol(df_2)
colnames(df_2)[2:ncol(df_2)] = df_2[1,2:ncol(df_2)]
df_2
# 이제 첫번째 칼럼과 첫번째 row를 빼주자.
df_2[-1, -1] # R의 df에서는 -n을 통해 해당 row / col을 제외시키고 전체를 나타내는가보다.****


#### 2. read.csv() ####
df = read.csv("data/01_csv.csv")
df



#### TSV ####

#### 1. readLines()로 샘플 읽어서 구분자확인하기 ####
df = readLines("data/02_tsv.txt", n=3)
df # \" : 문자열 속 따옴표, \t : 탭 , \ : escape

#### 2. read.delim()로 구분시키기 ####
# 이번에는 readLines()로 해결안할 것임..
df = read.delim("data/02_tsv.txt", sep="\t")
head(df)



#### XML ####

install.packages("XML")
library("XML")
df = xmlTreeParse("data/03_xml.xml")
df
df = xmlRoot(df) #record 정보만 남김
df = xmlSApply(df, function(x){xmlSApply(x, xmlValue)}) # 가로로 record정보를 보여줌
df
df = data.frame(t(df), row.names = NULL) # 세로로 record정보를 나열해줌
df
head(df)


#### HTML table ####

library("XML")
df = readHTMLTable("data/04_html_table.html", header = TRUE)
head(df)



#### JSON ####

# 1. readLines()로 구경하기
readLines("data/05_json_simple.json", n=20)
# 2. jsonlite 패키지의 fromJSON()함수 사용
install.packages("jsonlite")
library("jsonlite")
df = fromJSON("data/05_json_simple.json")
head(df) # cols 와 data가 나눠져있다..

#데이터만 가져와서 data.frame에 넣자.****
df_2 = as.data.frame(df$data)
head(df_2, 2)

#df_2라는 data.frame에 df의 cols라는 컬럼명집합 컬럼을 넣어주자.
df$cols
colnames(df_2) = df$cols
head(df_2)


#### CUSTOM FORMAT #####

# 1. readLines로 맛보기
df = readLines("data/06_custom.csv", 3)
# 2. #으로 구분되어있으면 read.delim로 읽을 수 있다.
df = read.delim("data/06_custom.csv", sep = "#", stringsAsFactors = F)
head(df, 2)
str(df)


#### Excel - xlsx ####

install.packages("readxl")
library("readxl")
df = read_xlsx("data/07_xlsx.xlsx") # sheet = 인자로 원하는 시트를 가져올 수 있음.
df # data.frame보다 발전된 tibble형태로 읽어온다.

#만약 tibble을 쓰기 싫다면
df_2 = as.data.frame(df)
df_2



01_csv.csv

02_tsv.txt

03_xml.xml

04_html_table.html

05_json_simple.json

06_custom.csv

07_xlsx.xlsx


+ Recent posts