'Code'에 해당되는 글 161건
R 공부_데이터 처리
#chapter4. 데이터 가공과 처리
# 교제 81p 부터 참고할 것
# 1. 외부데이터를 이용한 데이터 가공과 처리 - 파일 입출력을 활용
# 2. 데이터의 취득과 정재
# - csv 파일을 이용하여 데이터 수집
# - 결측값과 이상값을 분석
library(help=datasets) # R에서 제공하는 기본 데이터 셋
str(iris)
head(iris,10) # 10 숫자 적어주면 숫자만큼 출력 / 반대로 tail()
summary(iris) # 변수들의 기초 통계량
plot(iris) # 시각적으로 보여주는 것
plot(iris$Petal.Width, iris$Petal.Length, col=iris$Species) # 품종을가지고 너비, 길이
#3*3 행렬
x <- matrix(1:9,ncol = 3) # 3개의 열
x
# apply : 특정 영역을 대상으로 집계를 하는 함수
# apply (데이터 셋, 방향, 함수)
# 방향: 1 - 가로 방향으로 집계, 2 - 세로 방향으로 집계
apply(x,1, sum) # 가로 끼리의 합
apply(x,2,sum) # 세로 끼리의 합
apply(iris[,1:4], 2, sum) # [ , 1:4] : 행은 모두, 열은 품종을 제외한 1 ~ 4까지만
# 데이터 수집
# 계산서 금액(total_bill), 팁 액수(tip), 계산한 사람의 성별(sex), 요일(day),
# 시간(time), 동석자수(size), 흡연자 포함여부(smoker)
tips <- read.csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv')
str(tips) #data.frame으로 되어있으며 7개의 변수를 가지고 있다는 뜻. 이것만을 가지고 우리가 알 수 있는 정보는 많이 없다.
head(tips, 10) #위에 것 보다 조금 더 구체적으로 데이터를 보기 위해서
# 탐색적 데이터 분석
summary(tips)
install.packages('dplyr') # 보조 기억장치에 저장 / 막강한 함수, 데이터 추출에 사용, 함수 연결 연산자가 있어서 사용용
install.packages('ggplot2') # r에서 지원하는 시각화는 그래프를 좀 더 고퀄로
library(dplyr)
library(ggplot2) # 주기억장치에 저장
# 동석자수(size)
plot(tips$size) # 기본 동그라미로 그려진 그래프
plot(tips$size, type='l') # 꺽은선 그래프
# dplyr 가 가진 강력한 함수 연결
tips %>% ggplot(aes(size,color=sex))+geom_histogram(fill="white") # 배경담고, line그리고 싶으면 line, 히스토그램으로 그리고 싶으면 historam
# %>% : 함수 연결
# 계산서 금액에 따른 팁 액수
# tips %>% ggplot(aes(total_bill : x축,tip : y축)) 만 하면 그래프 없음
# aes () : 옵션
tips %>% ggplot(aes(total_bill,tip)) + geom_point(aes(col=day)) #상관관계 나타내는 삼전도 나타냄
#성별에 따른 경향을 추가한다.
# pch : 그래프에 나타나는 모양, 동그라미냐 네모냐 세모냐
tips %>% ggplot(aes(total_bill,tip)) + geom_point(aes(col=day, pch=sex, size=3))
# 데이터 분석 - 테이블 형태로 읽어옴 / 머리글 설정
students <- read.table("C:/R_project/studio/student.txt", header = T)
students
str(students)
#/ stringAsFactor=F : 문자열 포함하여 팩터로 읽지 마세요
# factor -> char로 변경
students <- read.table("파일 경로/student.txt", header = T, stringsAsFactor=F)
str(students)
# as.is = T : 요인이 문자열로 해석되길 바랄 경우 T, stringsAsFactor=F와 같은 개념
# NA(결측값)을 문자열로 오해하지 않도록 설정하는 작업
students<-read.table("파일 경로/student.txt",header=TRUE,stringsAsFactors = FALSE,na.strings = "NA")
str(students)
students<-read.table("파일 경로/student.txt",header=TRUE,as.is=T,na.strings="NA")
str(students)
#doBy 패키지
#install.packages('doBy')
library(doBy)
.libPaths() # 현재 라이브러리가 저장된 위치를 확인하는 함수
quantile(iris$Sepal.Length) # 4분위수 -> 평균에서 퍼저있는 모양 볼려고
# 10분위 수
quantile(iris$Sepal.Length, seq(0,1, by=0.1))
# 정렬
head(orderBy(~Sepal.Width, iris)) # sepal.width를 정렬하여 보여줌
head(orderBy(~Species+Sepal.Width ,iris)) # 여러 항목을 기준으로 정렬하기
# 랜덤 샘플링( 기본값: 중복을 허용하지 않음)
sample(1:10, 5 ) # 1에서 10 범위 안에 5개 숫자를 무작위로 추출해주세요
sample(1:10, 5, replace = T) # 중복 허용하여 추출
sample(1:10,10)
sample(1:45, 6)
str(iris)
# nrow(데이터셋) : 데이터 셋의 행의 수
head(iris[sample(nrow(iris), nrow(iris)),],10)
# 앞에 추출할 데이터, 뒤에 원본 데이터
# iris 앞에서 6개 데이터 가져올 것이다. sample로 섞여있는 데이터
# split(데이터, 분리조건)
split(iris, iris$Species) # 품종별로 분류해라
# split : 전체 부분에서 일부 자르는 것
# subset : 특정 부분에서 일부 자르는 것
head(subset(iris,Species=='virginica')) # 앞에서 부터 6개의 데이터 가져오세요 / 품종이 virginica인 데이터
head(subset(iris,Species=='virginica' & Sepal.Length > 5.0)) # 두개 이상 조건 줄 때 &로 연결
#merge: 두 데이터 프레임에서 공통된 값을 기준으로 묶는 함수
x <- data.frame(name=c("aaa","bbb","ccc"), korean=c(90,100,95))
y <- data.frame(name=c("ccc","bbb","aaa"), english=c(90,95,100))
merge(x,y)
# 그룹 함수
# aggregate(그룹 조건, 데이터 셋, 함수)
aggregate(Sepal.Width~Species,iris,mean)
students <- read.table("파일 경로/student.txt", header=T, as.is=T)
students
# 파생변수,average = korean+english+math
students$average <- (students$kor+students$eng+students$math)/3
students
# 결측값 처리
test<-c(15,20,30,NA,45)
test
# 변수명[행, 열]
test[test<40]
# 3의 배수가 아닌 값만 추출
test[test %% 3 != 0]
#is.na() : 결측값입니까? true, false
test[is.na(test)]
# 결측값 제외
test[!is.na(test)]
# 2의 배수이면서 na가 아닌 요소값만 출력하세요
test[!is.na(test) & test%%2==0]
# 데이터 프레임형태의 자료형을 이용하여 결측값을 제거하는 작업
members <-data.frame(name=c("길동","춘향","철수","영희"), age=c(13,11,22,23),
gender = c("M","F","M","F"))
members
# 성별이 여성인 경우만 추출
# 데이터셋[형 조건식, 열 조건식] -> 행의 조건만 있고 전체 출력이라 열은 , 만
members[members$gender=="F",]
# 20살 미만인 남성만 출력
members[members$gender=="M" & members$age<20,]
# 데이터 정제
# 1. 결측값 처리
# is.na() 결측값 있으면 t, 아니면 f
# na.omit() : 결측값이 들어있는 행 제거
# na.rm() : T일 때 결측값을 제거하고 추출하세요 / 결측값 제거하고 통계함수 계산
# 2. 이상치값 처리
install.packages("gapminder")
# 스웨덴 비영리단체에서 만든 통계 분석 서비스
# 1952년부터 2007년까지 5년간격으로 여러나라의 인구, 1인당 gdp, 기대 수명 등
library(gapminder)
str(gapminder)
# 각 나라의 기대 수명 -> 열정보 가져오는 것 / 여러개 넣을 때는 c
install.packages("dplyr")
library("dplyr")
gapminder[,c("country","lifeExp","year")]
# 크로아티아 나라의 기대수명과 년도 보기
gapminder[gapminder$country== "Croatia",c("country","pop")]
# croatia의 1990년도 이후의 기대수명과 인구를 추출하세요
gapminder[gapminder$country== "Croatia" & gapminder$year>=1990,c("lifeExp","pop")]
# apply : 특정 영역을 대상으로 집계를 하는 함수
# apply (데이터 셋, 방향, 함수)
# 방향: 1 - 가로 방향으로 집계, 2 - 세로 방향으로 집계
apply(gapminder[gapminder$country== "Croatia" & gapminder$year>=1990,c("lifeExp","pop")], 2, mean)
# gaminder 데이터 셋의 관측 자료 중 대한민국 인구의 최댓값과 해당 년도 출력
apply(gapminder[gapminder$country=="Korea, Rep.",c("year","pop")],2,max)
# 2007 년 아시안 대륙의 인구 총합
apply(gapminder[gapminder$continent== "Asia" & gapminder$year==2007, "pop"],2, sum)
# dplylr 라이브러리 - select(특정열을 추출할 때), filter(특정 행을 추출할 때)
# 연결 연산자 %>% (단축키 : ctrl+shift+m)
select(gapminder, country, lifeExp, pop)
filter(gapminder, country == "Croatia")
# 전체 인구의 평균
mean(gapminder$pop)
#summarize
summarize(gapminder, pop_mean=mean(pop))
# 대륙별 인구 평균 - group_by를 통해 대륙을 그룹으로 묶음
summarize(group_by(gapminder, continent), pop_mean=mean(pop))
# 대륙별 각 나라의 인구의 평균을 계산하여 추출하시오
summarize(group_by(gapminder,continent, country), avg=mean(pop))
gapminder %>% group_by(continent, country) %>% summarize(avg_pop = mean(pop))
# croatia 나라의 국가이름, 년, 기대수명을 골라 평균 수명 구하는 것
temp <- filter(gapminder,country =="Croatia")
temp2 <- select(temp, country, year, lifeExp)
temp3 <- apply(temp2[,"lifeExp"],2, mean)
temp3
gapminder %>% filter(country=="Croatia") %>% select(country, year, lifeExp) %>% summarize(mean_lifeExp=mean(lifeExp))
# plot[ y축 데이터, 옵션]
# plot[x축 데이터, y축 데이터, 옵션]
y <- c(1,1,2,2,3,3,4,4,5,5)
plot(y)
x <- 1:10
y <- 1:10
plot(x,y,xlim = c(11,0)) # 옵션 중에 xlim = : x축 눈금 lim : limit
x <- c(1,3,2,4,6,5,7,6,9)
plot(x, main = "Simple Time Series", sub = "그래프1", type="b", lty="dashed")
# type 옵션
# #“p” 점으로
# #“l” 선으로
# #“b” 점과 선 둘다 동시에
# #“o” 점과 선 둘다 동시에 (단 겹쳐짐 : overplotted)
# #“h” 히스토그램과 비슷한 형태로 (histogram)
# #“s” 계단모양으로 (stair steps)
# #“S” 계단모양으로 (upper stair steps)
# #“n” 좌표찍지 않음
# lty = 0, lty = "blank" : 그리지 않음
# lty = 1, lty = "solid" : 실선 (기본값)
# lty = 2, lty = "dashed" : 대시
# lty = 3, lty = "dotted" : 점
# lty = 4, lty = "dotdash" : 점과 대시
# lty = 5, lty = "longdash" : 긴 대시
x <- runif(100) # 난수 생성
y <- runif(100)
plot(x,y,pch=ifelse(y>0.5, 1,18),col="red")
x <- c(1,3,6,8,9)
y <- c(12,56,78,32,9)
plot(x,y)
# 화살표 그리기
arrows(3,56,1,12)
# 사각형 그릴려면 시작은 왼쪽 아래, 오른쪽 위
rect(4,20,6,50)
rect(4,20,6,40, density = 5)
# 그래픽 텍스트
text(4,40,"이것은 샘플입니다.")
# size = 1: 아랫쪽, 2 : 왼쪽, 3 : 위 4 : 오른쪽
mtext("상단의 문자열입니다.",side=3)
aaa <- c(250,300,250,280,310)
bbb <- c(180,200,210,190,170)
ccc <- c(210,250,260,210,270)
# axes : 기본 T, F 하면 테두리 사라짐 / x, y축을 표시하지 않습니다.
# ann : 기본 T, F 하면 x축과 y축 라벨 사라 짐 / x, y축 제목을 지정하지 않습니다
plot(aaa, type="o", ylim=c(0,400), col="red", axes = F, ann=F)
axis(1, at=1:5, lab=c("a","b","c","d","e")) # 축의 라벨 1 : x축 / 위에 다 f로 주고 실행해야 함
axis(2, ylim=c(0:400))
title(main="Sample Graph", col.main="red")
title(xlab = "DAY", col.lab="black")
title(ylab = "values", col.lab="blue")
lines(bbb,type="o",col="green", lty=2, pch=21)
lines(ccc, type="o", col="blue", lty=2, pch=11)
# legend(x, y, 범례 담을 내용 ) : 범례
legend(4,400,c("BaseBall","SoccerBall","BeachBall"), col = c("red", "green","blue"),lty=1:3,pch=13)
# r의 내장 데이터 cars의 데이터를 이용한 분석
# 1920년대에 수집된 데이터 셋
# 50대의 차량으로 부터 speed와 dist(제동거리) 두 변수 측정
str(cars)
# 산점도(산포도) : 두 변수 사이의 ㅣ상관관계를 점으로 표현한 그래프
# pch=1, col="red", 속도와 제동거리 비교
plot(cars$speed, cars$dist, main="속도와 제동거리의 상관관계", xlab="속도", ylab="제동거리",pch=1, col="red")
# 선 그래프 - 시간의흐름에 따라 데이터의 흐름 달라지는 데이터(시계월) -> 막대 그래프로 표현 하는것이 효율적
plot(cars$speed, cars$dist, main="속도와 제동거리의 상관관계", xlab="속도", ylab="제동거리",pch=1, col="red", type="l")
#시계열 그래프/ 자료형 (time series)
#시간의 순서에 따라 자료가 정렬되어 있는 형
# 1871년부터 1970년까지의 연동별 나일강의 유량을 기록하고 있는 시계열 데이터
Nile
str(Nile)
# 나일강의 유량을 그래프로 표시하시오
# main="나일강의 연도별 유량 변화"
# xlab="연도" ylab="유량"
plot(Nile, type="l",main="나일강의 연도별 유량 변화", xlab="연도", ylab="유량", col="red")
# 1. 산점도(산포도)
# - x축과 y축에 점으로 표현한 그래프
# - 연속 값으로 된 변수의 관계를 쵸현할 대 사용
# 2. 막대그래프(히스토그램)
# - 데이터 크기를 막대로 표현한 그래프
# - 집단간의 차이를 표현할 때 주로 사용
# 3. 선 그래프
# - 시간에 따라 달라지는 데이터를 표현할 때
# - 시계열 데이터라고 부름
# 4. 상자수염 그래프
# - 데이터의 분포를 직사각형의 상자 모양으로 표현하는 그래프
# - 평귬나 볼때보다 데이터의 특성을 잘 나타낼 수 있다.
# 막대 그래프
x <- c(1,2,3,4,5,6)
barplot(x, names="매출")
# 복잡한 형태의 막대그래프로 표현하는 작업
#xx <- matrix(1:10, dim=c(3,2))
xx <- matrix(c(1,2,3,4,5,6), 3,2)
xx
barplot(xx) # -> 누적 막대 그래프
barplot(xx,beside = T, names=c("korea","china")) # -> 누적 하지 말고 세워서 그리기
# 시즌 별(a,b,c,d,e)
# aaa : baseball판매현황
# bbb : Soccer
# ccc : BeachBall
barplot(aaa, main="BaseBall 판매량", xlab="Season", ylab="판매량", names.arg=c("A","B","c","D","E"),density=c(10,20,30,40,50))
Ball_type <- matrix(c(aaa,bbb,ccc),5,3)
Ball_type
barplot(Ball_type, main="Ball Type별 시즌 판매량",xlab="Ball Type",
ylab="매출",beside=T,names.arg=c("BaseBall","SoccerBall","BeachBall"),
col=rainbow(5), ylim=c(0,400))
legend(10,400,c("BaseBall","SoccerBall","BeachBall"), fill=rainbow(5))
# 2015년 인구 통계 자료 로딩
people <- read.csv("C:/Users/User/Desktop/Data/people/people2015.csv", header = F)
str(people)
# 성별을 라벨로, level은 1,2만 가지도록 -> 1일때 남자, 2일때 여자
people$V1 <- factor(people$V1,levels=c(1,2),labels = c("남자","여자"))
str(people)
people$V3 <- factor(people$V3, levels =1:14,
labels = c("가구주", "가구주의 배우자", "자녀", "자녀의 배우자",
"가구주의 부모", "배우자의 부모", "손자녀, 그 배우자",
"증손자녀, 그 배우자", "조부모", "형제자매, 그 배우자",
"형제자매의 자녀, 그 배우자", "부모의 형제자매, 그 배우자","기타 친인척", "그 외 같이 사는 사람"))
people$V4 <- factor(people$V4, levels =1:8,labels=c("안받았음","초등학교","중학교","고등학교",'대학4년제미만','대학4년제이상','석사과정','박사과정'))
str(people)
# 출생아별 빈도표 생성
table_v5 <- table(people$V5)
table_v5
barplot(table_v5, main="출생아 빈도수", xlab="출생아수",ylab="빈도수")
table_v1 <- table(people$V1)
table_v1
table_v4 <- table(people$V1,people$V4)
table_v4
barplot(table_v4, main="성별에 따른 학력 분포",xlab="학력",ylab="성별",beside = T, ylim=c(1,70000), col=c("red","blue"),legend.text=T)
hist(people$V2, breaks=c(seq(0,90,10)),main="연령별 분포",xlab="연령",ylab="빈도수")
# 파이차트
T_sales <- c(210,110,400,550,700,450)
pie(T_sales)
pie(T_sales, init.angle = 90,col=rainbow(length(T_sales)))
'Code > R 프로그래밍' 카테고리의 다른 글
| R공부_그래프, 함수 (0) | 2019.07.18 |
|---|---|
| R 공부_db연동, 그래프그리기 (0) | 2019.07.18 |
| R 공부_txt 파일 불러오기 (0) | 2019.07.18 |
| R공부_Day1_5. 제어문과 함수 (0) | 2019.07.18 |
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
R 공부_txt 파일 불러오기
# file I/O : 파일 입출력
no <- c(1,2,3,4)
name <- c("aa","bb","cc","dd")
price <- c(500,1000,300,700)
qty <- c(5,2,7,9)
data <- data.frame(No=no, Name=name, Price=price, QTY=qty)
data
ls()
#89
save(no,name,data,file="파일경로/test.dat") # 주소 설정할 때 \ 표시 아니고 슬래시 / 사용, dat 파일 형태로 저장
#삭제 함수
rm(data,no,name)
ls()
#저장된 data 불러오기
load("파일경로/test.dat")
ls()
a <- file("test.txt",open="w", encoding = "UTF-8")
cat("임시로 만든다.\n",file= a)
cat("동해물과 백두산이 마르고 닳도록\n", file=a)
cat("하느님이 보우하사 우리나라만세\n", file=a)
cat("무궁화 삼천리 화려강산\n", file=a)
cat("대한사람 대한으로 길이보전하세\n", file=a)
close(a)
s <- readLines("test.txt", encoding = "UTF-8")
#csv() : , 컴마로 구분되어 있는 자료형 / false 면 header 생성,
x <- read.csv("파일경로/a.csv")
x
#범주형 아닌데 범주로 받아오면 안될 때 사용 -> x 는 factor로 가져오고 , y는 chr로 가져옴 isas도 대체 가능
y <- read.csv("파일 경로/a.csv",stringsAsFactors = F) # 문자를 포함하고 있는 것을 factor로 인식하지 마세요
yx
#header : 머리글 가지고 있냐 아니냐 기본 T 임 -> 열머리글 있다는 소리, 그렇기 때문에 열 머리글 없으면 첫번째 행의 값을 열머리로 정함
z <- read.csv("파일경로/b.csv",stringsAsFactors = F, header = F)
z
names(z) <- c("id", "name", "score") # 이름 부여한다. z의 열머리글에
z
data
help("read.csv")
'Code > R 프로그래밍' 카테고리의 다른 글
| R 공부_db연동, 그래프그리기 (0) | 2019.07.18 |
|---|---|
| R 공부_데이터 처리 (0) | 2019.07.18 |
| R공부_Day1_5. 제어문과 함수 (0) | 2019.07.18 |
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
| R 공부_Day1_ 문자 다루는 함수 (0) | 2019.07.18 |
R공부_Day1_5. 제어문과 함수
# 조건문 : [], if, if ~ else, ifelse
x <- 11
if( x%%2 ==0 ) print("짝수") else print("홀수")
ifelse(x%%2==0, "짝수","홀수")
y <- -9
if(y%%2 == 0){ # 한줄 이상일 때 블럭으로 묶음
print(y)
print("짝수")
}else{
print(y)
print("홀수")
}
xx <- c(15,20,30,NA,45) # NA ; 자료형으로 쓸 수 있는 결측값,
xx
xx[xx <40] # 40보다 작은 거
xx[xx %% 2!=0] # 홀수
!is.na(xx) # na면 t, 아니면 f
is.na(xx)
xx[is.na(xx)]
# 성적 출력 / switch
point <- 85
grade <- point %/% 10 # 10으로 나눈 몫(정수)만 가져와라
switch(as.character(grade), # 형변환 ass
'10' = print("A"),
'9' = print("B"),
'8' = print("C"),
'7' = print("D"),
print("F"))
sum <- 0
for(i in seq(1,10))
sum <- sum+i
sum
dan <- 3
for(i in seq(1,9))
cat(dan, "x", i, "=", dan*i, "\n")
print(class(dan)) #class는 자료형을 확인해준다.
gugu <- function(){
dan <- readline("단을 입력하세요 : ") #readline() : 줄 단위로 입력받아라 , 다 입력하고 ENTER 치면 넘어가겠다.
dan <- as.integer(dan) # int로 형변환
for(i in seq(1, 9)){
cat(dan,"x", i, "=", dan*i, "\n")
}
}
gugu()
print(class(dan)) #class는 자료형을 확인해준다.
gugu <- function(){
dan <- readline("단을 입력하세요 : ") #readline() : 줄 단위로 입력받아라 , 다 입력하고 ENTER 치면 넘어가겠다.
dan <- as.integer(dan) # int로 형변환
for(i in seq(1, 9)){
cat(dan,"x", i, "=", dan*i, "\n")
}
}
gugu()
dan <- 3
for(i in seq(1,9))
cat(dan, "x", i, "=", dan*i, "\n")
sum1 <- 0
i <- 1
while(i <= 10){
sum1 <- sum1 + i
i <- i+1
}
sum1
sum1 <- 0
i <- 1
repeat{
if(i>10) break
else print(i)
i <- i+1
}
sum1
for(i in seq(1,10)){
count <- 0
for(j in seq(1, i)){
if(i%%j==0) {
count <- count+1
}
}
if(count == 2) print(i)
}
#구구단
for(i in 2:9){
cat("\n=====",i,"단 ======\n")
for(j in 1:9)
cat(i," x ",j," = ",i*j,"\n")
}
x <- c(1,2,3,4,5)
max(x) #최댓값
min(x) #최솟값
median(x) #중위수
mean(x) #평균
summary(x) #통계량
hello <- function() {
print("hello")
}
hello()
# 리턴값은 있지만 매개변수가 없는 것
func1 <- function() {
x <- 10
y <- 20
return (x+y)
}
func1()
# 리턴값은 있지만 매개변수가 있는 것
func1 <- function(x,y){
return(sum(x,y))
}
func1(1,2)
# 함수 안에 함수 사용하는 것
test <- function(x,y){
xx <- x+1
yy <- y+1
xxx <- func1(xx,yy)
return(xxx)
}
test(9,19)
test2 <- function(){
x<-10
y<-10
return(invisible(x*y)) # 값을 화면에 출력하지 마라라
}
test2() # invisible 때문에 값 출력 안됨
result <- test2() # 리턴값 변수에 저장
result
# page 81
'Code > R 프로그래밍' 카테고리의 다른 글
| R 공부_데이터 처리 (0) | 2019.07.18 |
|---|---|
| R 공부_txt 파일 불러오기 (0) | 2019.07.18 |
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
| R 공부_Day1_ 문자 다루는 함수 (0) | 2019.07.18 |
| R 공부_Day1_ 숫자를 다루는 함수 (0) | 2019.07.18 |
R 공부_ Day1_Data Frame
# 행렬 : 2차원 이상 넘어가는 것을 r에서 행렬로 씀
# 행과 열로 나누어 사용
# rbind : 행단위로 결합
# cbind : 열단위로 결합
# merge : 동일한 key 값 기준 결합
# 배열 : 행렬이랑 벡터 확장 구조
var1 <- c(1,2,3)
var2 <- c(4,5,6)
var3 <- c(7,8,9)
mat1 <- rbind(var1, var2, var3)
mat2 <- cbind(var1, var2, var3)
mat1
mat2
colnames(mat1) <-c("A", "B", "C") # 하나 이상의 데이터 담을 때 벡터
mat1
# 벡터는 하나의 자료형 담기 때문에 문자랑 숫자랑 같이 벡터에 넣으면 숫자도 문자가 됨
xx<-c('a',1,'b')
xx
yy<-c(1,2,3)
yy
# 데이터 프레임 : 다양한 자료형으로 모아서 구성된 행렬
no <- c(1,2,3,4)
name <- c("이순신","홍길동","장보고","강감찬")
korean <- c(990,85,100,95)
english <- c(100,90,85,80)
student <- data.frame(No=no, Name = name, KOR = korean,ENG = english ) # 데이터 프레임 만들기 : data.frame(필드명, 값)
student
# 대괄호 조건 : [행 조건식, 열 조건식]
student[1, ] # 행 조건에 값이 있고, 열 조건 값 없으면 모든 열 / 1 = 첫행만 보여주세요
student[-3, ]
# 리스트(list) : key 와 values를 쌍으로 묶어서 씀 / java의 map,
member <- list(name = "홍길동", address = "korea",tel="010-0000-0000")
member
member$name # 키의 값을 가져오고 싶을 때 $이름 적으면 속하는 값 가져옴
member$age = 30
member
# 배열 : 행렬(matrix)은 2차원만 가능하지만, 배열 그 이상은 가능
# 3행 4열의 2차원 배열 생성
# dimension으로 행과 열의 차수를 결정해 줌
# 열단위로 들어감
array(1:12, dim=c(3,4))
x <- array(1:6, dim=c(3,2))
x
x[1][1]
dim(x) # 행과 열을 나타냄
# class () : 자료형을 추출하는 함수
class(c(1,6)) # c(1,6) -> 자료형 숫자임을 출력시킴
class(matrix(c(1,2)))
# is.numeric : 안에 있는 타입이 numeric이냐? 맞으면 true 아니면 false
is.numeric(c(1,2))
is.numeric(c("a","b"))
is.character(c("a","b"))
# as.자료형() : 강제 형변환
as.numeric(c("1","2","3"))
# integer(int), num : 실수, chr : 문자형, cplx: 복소수, factor: 팩터
# 결측값 : 임의대로 누락했거나 범위 벗어난 값 NULL, NA(Not a Number), NaN(숫자가 아니다.)
1:7 # factor
c(1,2,3,4,5)
c(1:5)
seq(from = 1, to = 5, by = 2) 3 순열
rep(c(1:3), times = 2) # 123을 두번 반복
rep(c(1:3),each=2) # 11 22 33 이렇게 됨
x <- c(1,2,3,4,5,6)
length(x)
#벡터는 요소로 접근할 수 있다.
x[1]
#대괄호연산자는 두개 쓸 수 없다.
#행과열의값을 갖고있지않다. 행렬이 아니다. 엄밀히 말하면 1차원이다. 따라서 대괄호 안에 하나의 요소만 있어야한다. 그래서 아래와 같이 쓰면 에러가 난다.
#x[1,2,3]
#x[1,2]
# (-)하면 그 값을 빼고 가져와라
x[-1]
y <- c(10,20,30,40,50)
y
#y[1,2,3] # ->에러, 첫번째 요소 두번재 요소 세번재 요소 가져오고 싶으면 다음 줄
y[c(1,2,3)] # -> 하나 이상의 문자 가져올 때 벡터로 값을 붙여서
y[-c(1,2,3)]
# 배열 생성 함수 : array(), matrix() - 2차원 행렬,
# 행 중심 rbind, 열 중심 cbind -> 배열 만드는 함수
#?array
x <- array(data = 1:5, dim =c(2,4)) # data 1-5까지 배열 만들어라 생략가능, c(2,4) -> 벡터에 2와 4 즉 2행 4열
# 배열의 크기보다 값(data)가 작을 때 빈 곳을 반복해서 채워짐.
x
# 기본적으로 같은 타입을 묶는다. 숫자는 숫자, 문자는 문자. 숫자와 문자가 같이 있으면 다 문자로 취급한다.
# 데이터 프레임 : 여러 데이터를 묶어서 사용. 즉 여러 자료형의 벡터를 묶어서 사용할 때 좋음
name <- c("홍길동","장보고","이순신")
age <- c(17,21,19)
blood.type <- c("A","O","B")
people <- data.frame(name, age, blood.type)
people
# 혈액형처럼 범주에 속하면 factor
str(people) # 데이터 프레임 형태 보는 거
'Code > R 프로그래밍' 카테고리의 다른 글
| R 공부_txt 파일 불러오기 (0) | 2019.07.18 |
|---|---|
| R공부_Day1_5. 제어문과 함수 (0) | 2019.07.18 |
| R 공부_Day1_ 문자 다루는 함수 (0) | 2019.07.18 |
| R 공부_Day1_ 숫자를 다루는 함수 (0) | 2019.07.18 |
| R 공부_ Day1_기본 문법과 사용법 (0) | 2019.07.18 |
R 공부_Day1_ 문자 다루는 함수
xx <- c("a","b","c","d","e")
xx
# paste : 문자열 합치는 것
paste(xx[1],xx[2]) # -> index 1과 2를 출력하되 합쳐서 출력 / 공백으로 연결
paste("hello","world") # 줄 띄어지고 따옴표 있음
print(500)
# cat : 따옴표가 없어 짐 -> 하나의 문자가 아니다 / 줄 띄움이 없음
cat("hello","world","\n") # -> 줄 바꿈 연결해야 함
print(500)
substring("abcdefghijklmn",2,5)# ->2번째에서 5번째까지 뽑아서 추출
#runif(개수) : 5개의 난수
x <- runif(5) # 인덱스 1개 일 때 인덱스의 값만큼 난수 발생,
x
xx <- runif(5,10,20) # 3개 일 때: 10 - 20까지 5개의 난수
xx
# AND(&), OR(|), NOT(!)
# any() : 어느거 하나, or의 의미 갖고 있음
# all() : 모두, and의 의미
x <- runif(5)
x
# 문제 1 : x가 0.4 ~ 0.7 사이에 있는 가
(x >= 0.4) & (x <= 0.7)
# 문제 2 : x 중에 0.9이상의 값이 있는 가
any(x >= 0.9)
# 문제 3 : x의 값 모두 0.9 이하 인가
all(x <= 0.9)
'Code > R 프로그래밍' 카테고리의 다른 글
| R공부_Day1_5. 제어문과 함수 (0) | 2019.07.18 |
|---|---|
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
| R 공부_Day1_ 숫자를 다루는 함수 (0) | 2019.07.18 |
| R 공부_ Day1_기본 문법과 사용법 (0) | 2019.07.18 |
| R Studio 기본 셋팅 (0) | 2019.07.09 |
R 공부_Day1_ 숫자를 다루는 함수
# 숫자를 다루는 함수
# 기초통계량에 사용되는 함수
# head() : 앞에 6개를 가져와라
head(iris) #iris 가져오라
#tail:마지막 6개를 추출해주세요
tail(iris)
head(iris,15) # 15개 까지 보여주세요
# summary : 기초 통계에서 많이 사용하는 데이터 5개를 보여주세요 # 숫자 형태의 데이터 구조 볼 때 사용
summary(iris)
#전체 구조를 보여주세요 -> 데이터 프레임, 150개 데이터, 5개의 변수로 이루어짐
# $ 속성, : num -> 자료형, vector로 되어있음
str(iris)
val<- c (1,2,3,4,5,6,7,8,9)
val
summary(val) #데이터 형태가 숫자다 하면 사용, 데이터 셋의 형태나 구조 볼 때 str
# vector (벡터) : 하나의 데이터 형을 가지고 있는 데이터 집합 / index 는 1부터 시작
# 결칙치 / 결칙값 / na : 누락된 값
x <- c(1,2,3,4,5,6)
x
# rnorm(갯수) : 정규분포 난수를 발생시켜주는 함수
xx <- rnorm(30)
xx
length(x) # vector 구성하는 요소의 개수
mean(x) # 평균값
range(x) # 범위( 최솟값, 최댓값)
var(x) # 분산 : 평균값에서 얼마나 떨어져있는지
sd(x) # 표준 편차
x
x[2]
x[-2]
#벡터 합치기
x <- c(3,6,9,12,15)
y <- c(5,10,15,20,25)
z <- append(x,y) # 뒤에 추가하는 함수
z
c(1,2) + c(4,5)
c(1,2,3)+1
v <- -5:5
v
# seq() : 연속된 값을 가지는 벡터 생성
q <- seq(1,5)
qq <- seq(1,10,by=2)
q
qq
x <- c(1,2,3)
y <- c(4,2,7)
x == y # 비교 연산자
(xx <- rep(c("a","b","c"), times=4)) # rep : 반복하기 위해 , 벡터 times = 숫자만큼 반복
yy <- unique(xx) # 중복 제거
yy
'Code > R 프로그래밍' 카테고리의 다른 글
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
|---|---|
| R 공부_Day1_ 문자 다루는 함수 (0) | 2019.07.18 |
| R 공부_ Day1_기본 문법과 사용법 (0) | 2019.07.18 |
| R Studio 기본 셋팅 (0) | 2019.07.09 |
| R 설치 및 R studio 설치 (0) | 2019.07.09 |
R 공부_ Day1_기본 문법과 사용법
* 수업때 공부한 내용을 소스로 올려 놓은 것!
# 도움말 : help() 또는 ?
help(log)
# 변수와 대입연산자(=, <-)
1+2
(11+54-13)*76/9
9%%3
5/2
5%/%2
4**2
4^2
# 대입 연산자 (<- 권장)
x = 5
x
x <- 7
x
(x <- 2) #x에 2 넣고 찍어주세요
#rm : 변수 삭제 용도
rm(x)
# list 함수 : 현재 시스템에서 사용중인 변수의 목록을 출력하는 함수
ls()
help(ls)
# 출력 방법
x <- "one"
x
print(x)
print(x,quot=F) # "" 없애기 위해
sprintf("%s님의 나이는 %i입니다.","홍길동",33) # %i: int, %s : 문자열, %d : 10진수, % 개수에 맞게 포맷팅 해줘야 함
sprintf("%s님의 키는 %5.1f 입니다.","홍길동",172.4567) # %5.1f : float 형식이며 5자리이고 소수점 아래 1자리만 -> .을 포함해서 5자리임
'Code > R 프로그래밍' 카테고리의 다른 글
| R 공부_ Day1_Data Frame (0) | 2019.07.18 |
|---|---|
| R 공부_Day1_ 문자 다루는 함수 (0) | 2019.07.18 |
| R 공부_Day1_ 숫자를 다루는 함수 (0) | 2019.07.18 |
| R Studio 기본 셋팅 (0) | 2019.07.09 |
| R 설치 및 R studio 설치 (0) | 2019.07.09 |
슬라이스
전 게시글과 이어지는 작업으로 시퀀스 자료형 사용함
- 슬라이스(slice) : 무엇인가의 일부를 잘라낸다는 뜻으로 시퀀스 일부를 잘라냄
ex ) 시퀀스객체 [ 시작인덱스 : 끝 인덱스]
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:4] #0에서 3까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30]
- 리스트 중간부분 가져오기
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[4:7] # 4에서 6까지 잘라서 새 시퀀스 만듦
#결과 [40,50,60]
>>> a[4:-1] # 4에서 -1(마지막값)이므로 -2까지만 뽑아서 새 시퀀스 만듦
#결과 [40,50,60,70,80]
- 인덱스 증가폭 사용 : 인덱스의 증가폭을 지정하여 범위 내에서 인덱스를 건너뛰며 요소를 가져올 수 있음
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[2:8:3] # 2부터 7까지 값 가져오는데 인덱스가 3씩 증가
#결과 [20,50]
- 인덱스 생략하기 : 시작 인덱스 혹은 끝 인덱스를 생략하면 맨 처음부터 / 맨 끝까지 돌아갈 때 사용
객체 길이 몰라도 사용할 수 있음
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7] #0에서 6까지 잘라서 새 시퀀스 만듦
#결과 [0,10,20,30,40,50,60]
>>> a[7:] # 7에서 끝까지 요소 가져옴
#결과 [70,80,90]
- 인덱스 생략하면서 증가폭 사용
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[:7:2] #0에서 6까지 인덱스는 2씩 증가하여 0,2,4,6
#결과 [0,20,40,60]
>>> a[7::2] # 7부터 끝까지 2씩 증가
#결과 [70,90]
>>> a[::2] #0부터 끝까지 2씩 증가
# [0,20,40,60,80]
>>> a[:::] #0부터 끝까지 출력
# [0,10,20,30,40,50,60,70,80,90]
- len 응용하기
>>> a = [0,10,20,30,40,50,60,70,80,90]
>>> a[0:len(a)] #0에서 a의 길이까지 -> -1 이 되기때문에 마지막 인덱스 가르킴
#결과 [0,10,20,30,40,50,60,70,80,90]
- 리스트, 튜플, range, 문자열에 모두 사용 가능
- 수정, 삭제는 리스트만 가능하며, 삭제 시 리스트는 새로 시퀀스를 생성하는 것이 아니라 기존 객체에 저장됨
시퀀스 자료형
시퀀스 자료형 : 연속적으로 이어진 자료형 (리스트, 튜플, range, 문자열 등)
- 특정 값 존재 여부 : 값 in 시퀀스 객체 or 값 not in 시퀀스 객체
>>> a = [1,10,20,30,40,50,60,70,80,90]
>>> 30 in a
#결과 True
>>> 1 in range(10)
#결과 True
- 시퀀스 객체 연결하기 : 변수를 만들지 않고 직접 연결 가능하여, 서로 연결하여 새 객체 생성
대신, range는 + 연산자를 통하여 객체르 생성 할 수 없음 -> range를 리스트 혹은 튜플로 만들어서 연결
>>> a = [1,10,20,30]
>>> b = [40,50,60,70,80,90]
>>> a+b
#결과 [1,10,20,30,40,50,60,70,80,90]
- 시퀀스 객체 반복하기 : * 연산자는 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 만든다.
(0 혹은 음수를 곱하면 빈 객체 만들고, 실수는 곱할 수 없음)
>>> [0,1,2] * 2
#결과 [0,1,2,0,1,2,0,1,2]
- 시퀀스 객체의 요소 개수 구하기 : len() 함수를 이용하여 개수 구할 수 있음
>>> len(a)
>>> len(range(0,10,2))
>>> len('hello,world')
- 인덱스 사용하기 : 시퀀스의 객체의 각 요소는 순서가 정해져있음 -> 이 순서를 인덱스라고 함
[]를 사용하여 [] 안에 인덱스 지정하면 해당 요소에 접근 가능 ex) 시퀀스객체 [ 인덱스 ]
>>> a = [1,2,3]
>>> a[0]
#결과 1
>>> a[-1]
#결과 3
- range, 리스트 , 튜플, 문자열 모두에 사용 가능
- 인덱스는 0부터 사용
- 음수는 뒤에서부터 요소 접근하여 마지막 값이 -1, 그 전 값이 -2 .. 이런 형태로 됨
- 인덱스 범위 벗어나면 IndexError 뜸
- 요소 수정하기 : 시퀀스객체[인덱스] = 값
- 튜플과 range 문자열 변경 불가
- del 요소 삭제 : 시퀀스 객체 요소를 삭제함 ex) del 시퀀스개개체[인덱스]
- 튜플과 range와 문자열 삭제 불가
'Code > Python' 카테고리의 다른 글
| 주소록 관리 프로그램.py (0) | 2019.07.24 |
|---|---|
| 슬라이스 (0) | 2019.07.10 |
| 리스트, 튜플 (0) | 2019.07.10 |
| 문자열 사용하기 (0) | 2019.07.10 |
| 불과 비교, 논리 연산자 (0) | 2019.07.10 |
리스트, 튜플
리스트 (List) : 목록이란 뜻으로 값들을 일렬로 저장한 것
리스트 이름 = [값, 값, 값]
- 여러 가지 자료형 저장 가능 : [문자열, 숫자, 정수, 불] 을 리스트 하나에 생성 가능
- range() : 연속된 숫자를 생성하는데 사용. 지정한 횟수 숫자는 생성되는 숫자에 포함되지 않음
>>> a = list(range(10))
>>> a
#결과 [0,1,2,3,4,5,6,7,8,9]
range(10) : 0 ~ 9까지의 값을 순차적으로 출력
>>> c = list(range(-4, 10, 2))
>>> c
#결과 [-4,-2,0,2,4,6,8]
range(시작, 끝. 증가폭) : 처음 시작 값부터 (끝 - 1 ) 까지의 수를 2씩 증가하는 인덱스로 뽑아옴
- 튜플(tuple) : 리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경 , 추가, 삭제를 할 수 없다.
튜플 = (값, 값, 값)
>>> a = (1,2,3,4,5)
>>> a
#결과 (1,2,3,4,5)
* 리스트와 차이점 : 리스트는 []를 사용하며 안에 요소 변경 추가 삭제 가능, 튜플은 ()사용하며, 안에 요소 변경 불가
- range 사용하여 튜플 만들기
>>> a = tuple(range(10))
>>> a
#결과 (0,1,2,3,4,5,6,7,8,9)
- 튜플을 리스트로 만들고 리스트를 튜플로 만들기
>>> a = [1,2,3] #리스트
>>> tuple(a) #튜플
#결과 (1,2,3)
>>> b = (4,5,6) #튜플
>>> list(b) #리스트
#결과 [4,5,6]
tuple() 과 list()를 사용하며, 튜플은 값을 변경할 수 없어 그래도 사용해야 함