본문 바로가기
R 과 데이터분석/기초 문법 ~ 머신러닝

[R 데이터분석] 3장. 데이터 입출력 (feat. 데이터셋 제공 사이트)

by JoyfulS 2019. 9. 13.

# chap03_DataIO

# 1. 데이터 불러오기 

# 2. 데이터 저장(출력)하기  

 

 

# 1. 데이터 불러오기

 

# 1) 키보드 입력 
# scan()
num <- scan() # 숫자 입력 
num
num * 2
names <- scan(what = character()) # 문자 입력 
names

 

### 사용된 파일은 https://joyfuls.tistory.com/4 에서 다운 받으실 수 있습니다.


# 2) 파일 데이터 가져오기 
getwd()
setwd("C:/2_Rwork/Part-I")

# (1) read.table : 칼럼 구분자(특수문자, 공백)
# 제목 없음, 공백 
student <- read.table("student.txt", sep="")
student
# 제목 있음, 공백 
student1 <- read.table("student1.txt", header = TRUE, sep="")
student1
# 제목 있음, 특수문자(;)
student2 <- read.table("student2.txt", header = TRUE, sep=";")
student2
# 제목 있음, 공배, 특수문자 -> NA 
student3 <- read.table("student3.txt", header = TRUE, sep="",
                       na.strings = "-")
student3
class(student3) # "data.frame"
h <- student3$키
h
mean(h, na.rm = TRUE) # 177.6667
mean(student3$몸무게, na.rm=TRUE) # 73.33333

# (2) read.csv : 칼럼 구분자(,)
student4 <- read.csv("student4.txt", header = TRUE, 
                     na.strings = "-") # sep=","
student4
bmi <- read.csv("bmi.csv", header = TRUE, sep=",")
dim(bmi) # 20000     3
bmi

# 연속형 변수 -> 계산 
mean(bmi$height) # 164.9379
mean(bmi$weight) # 62.40995

# 범주형 변수 -> 빈도수 
table(bmi$label)
# fat normal   thin 
#7425   7677   4898

# 파일 탐색기 이용 : 파일 선택 
data <- read.csv(file.choose())
data

# (3) read.xlsx : 엑셀 
install.packages("xlsx")
install.packages("rJava")
# java jre 경로 
Sys.setenv(JAVA_HOME = "C:\\Program Files\\Java\\jre1.8.0_144")
library(rJava) # R에서 java 지원 로딩 
library(xlsx) # 엑셀 관련 패키지 로딩 


kospi <- read.xlsx("sam_kospi.xlsx", sheetIndex = 1)
kospi
st_excel <- read.xlsx("studentexcel.xlsx", sheetIndex = 1,
                      encoding = "UTF-8")
st_excel


# 3) 인터넷 파일 불러오기 

# 데이터 셋 제공 사이트 
http://www.public.iastate.edu/~hofmann/data_in_r_sortable.html - Datasets in R packages
https://vincentarelbundock.github.io/Rdatasets/datasets.html
https://r-dir.com/reference/datasets.html - Dataset site
http://www.rdatamining.com/resources/data

titanic <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/COUNT/titanic.csv")
titanic

options(max.print = 999999)

dim(titanic) # 1316    5
names(titanic)
# "X"        "class"    "age"      "sex"   "survived"
class(titanic) # "data.frame"

head(titanic) # 앞부분 6줄 
tail(titanic) # 뒷부분 6줄 

# 범주형 : age, sex, survived 
table(titanic$age)
# adults  child 
#  1207    109
table(titanic$sex)
# man women 
# 869   447 
table(titanic$survived)
#  no yes 
# 817 499

surv <- table(titanic$survived)
surv

# 막대차트 시각화 
barplot(surv, col = rainbow(2),
        main = "titanic survived")


# 4) 웹문서 가져오기 

# 미국의 각 주별 1인당 소득자료  
url <- "http://ssti.org/blog/useful-stats-capita-personal-income-state-2010-2015"


install.packages("XML") # HTML 태그 처리  
install.packages("httr") # url 문서 가져오기 
library(XML)
library(httr)

# 1. url source 가져오기 
get_url <- GET(url) # httr 제공 
get_url # Status: 200
get_url$content # 16진수(기계어) 


# 2. 16진수 -> html 문자열 
html_srt <- rawToChar(get_url$content)
html_srt


# 3. table tag -> data 가져오기
html_cont <- readHTMLTable(html_srt, stringAsFactors=FALSE) # XML 제공 
html_cont
class(html_cont) # "list"

# 4. list -> data.frame 
html_cont_df <- as.data.frame(html_cont)
class(html_cont_df) # "data.frame"
dim(html_cont_df) # 52  7

html_cont_df
names(html_cont_df)

# 칼럼명 수정 
names(html_cont_df) <- c("State", "y2010", "y2011", "y2012", "y2013", "y2014", "y2015")
head(html_cont_df)

# 5. file save
getwd()
write.csv(html_cont_df, "html_cont.csv", row.names = FALSE)

html_cont_df2 <- read.csv("html_cont.csv")#, header = T, sep=",")
html_cont_df2

# 6. 데이터 처리 : 2015년 합계, 평균
y2015 <- html_cont_df2$y2015
y2015

# 특수문자 제거($, ,)
library(stringr)

y2015 <- str_replace_all(y2015, "\\$|\\,", "")
y2015

# 문자열 -> 숫자형 변환 
y2015 <- as.numeric(y2015)

sum(y2015)
mean(y2015)

# 7. 데이터 시각화 
y2015[1:10]

state <- html_cont_df2$State

# 10주 2015년도 10개주 1인당 소득자료 
barplot(y2015[1:10], col = rainbow(10),
        main = "2015년도 10개주 1인당 소득자료",
        names.arg = state[1:10])
# main : 제목 
# names.arg : x축눈금 


# 2. 데이터 저장(출력)하기 

# 1) 화면 출력 
a <- 1:100
a # print() 생략 
print(a)

View(a)
b <- matrix(1:9, nrow = 3)
View(b)

cat('a=', a)

x <- 10
y <- 20
z <- x + y

print(z) # 30
cat(z,'= 10 + 20')
#print(z, '= 10 + 20') # Error


# 2) 파일 데이터 저장 
# read.table <-> write.table 
# read.csv <-> write.csv
# read.xlsx <-> write.xlsx

# (1) write.table : 구분자(공백)
student1
View(student1)

getwd()
write.table(student1, "st1.txt", row.names = FALSE)
write.table(student1, "st2.txt", row.names = FALSE, quote = FALSE)

# (2) write.csv : 구분자(콤마)
student4
write.csv(student4, "st.csv", row.names = F, quote = F)

# (3) write.xlsx
Sys.setenv(JAVA_HOME = "C:\\Program Files\\Java\\jre1.8.0_144")
library(rJava) # R에서 java 지원 로딩 
library(xlsx) # 엑셀 관련 패키지 로딩 

write.xlsx(student4, "st.xlsx", sheetName = "sheet1", row.names = F)

# example 
data()
data("quakes")

# 지진 진앙지 데이터셋 
quakes 
dim(quakes) # 1000(행=관측치) 5(열=칼럼=변수)
class(quakes) # "data.frame"

# dataset 구조 
str(quakes)
# 'data.frame': 1000 obs. of  5 variables:
# $ lat     : num(실수=연속형)  -20.4 -20.6 -26 -18 -20.4 ...
# $ long    : num(실수)  182 181 184 182 182 ...
# $ depth   : int(정수=비연속형)  562 650 42 626 649 195 82 194 211 622 ...
# $ mag     : num(실수)  4.8 4.2 5.4 4.1 4 4 4.8 4.4 4.7 4.3 ...
# $ stations: int(정수)  41 15 43 19 11 12 43 15 35 19 ...

# 문1) quakes 변수를 대상으로 파일로 저장하기 
# <조건> 현재 경로 저장, 파일명 : quakes_df.csv, 행번호 없음, quote 없음
write.csv(quakes, "quakes_df.csv", row.names = F, quote = F)

# 문2) quakes_df.csv을 quakes_data 변수로 읽어오기 
quakes_data <- read.csv("quakes_df.csv", header = T, sep = ",")
str(quakes_data) # 'data.frame': 1000 obs. of  5 variables:

# 문3) mag(지진규모) 변수를 대상으로 평균(mean) 계산하기 
mag <- quakes_data$mag
length(mag)
cat('평균 리히터 =', mean(mag)) 
# 평균 리히터 = 4.6204

댓글