# 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
'R 과 데이터분석 > 기초 문법 ~ 머신러닝' 카테고리의 다른 글
[R 데이터분석] 5장. 데이터 시각화 (0) | 2019.09.13 |
---|---|
[R 데이터분석] 4장. 제어문과 함수 (0) | 2019.09.13 |
[R 데이터분석] 2장. 데이터 자료구조 & 문자열 처리와 정규표현식 (0) | 2019.09.12 |
[R 데이터분석] 1장. R 기초 문법 (0) | 2019.09.12 |
R 프로그램 개요 & 다운로드 (0) | 2019.09.12 |
댓글