저장소

R 정형 데이터 분석_02 본문

교육/빅데이터 청년인재_경희대 R

R 정형 데이터 분석_02

HB HB 2019. 7. 10. 09:27

데이터 유형 ~ 도수분포표

#구구단 _ 사람마다 다양한 식이 나와서 신기

gugu=function(x){

  for (i in 1:9){

    cat(x,'x',i,'=',x*i,'\n')

  }

}

gugu(3)


gu=function(){return(seq(3,27,by=3))}

gu()


g=function(x,y){return(x*y)}

g(3, 1:9)


u=function(x){

  return(3*x)

}

u(1:9)


#데이터 유형_실수(numeric), 정수(integer), 인자(factor), 논리값(logical), 문자열(character)

x=8

class(x)


y='dna'

class(y)


z=factor(c('t','f','tf'))

class(z)


w=as.logical(c('1','0','1','0'))

class(w)

w


s=as.logical(c(1,0,1,1))

s

class(s)


###데이터구조_유형과 헷갈리지 말 것!###

#타입검색==class, 구조검색==str


#vector : 하나의 열, 단위행렬

#matrix : 2차원 행렬, 벡터 합친 것

#array : 3차원 행렬 (같은 타입으로만 구성)

#data frame : 3차원 행렬(다른 타입으로도 같은 구조 가능)

#list : (name, value)쌍으로 갖는 것이 특징


##vector

x=c(1,2,3,4,5)

x

str(x)

x[2]

x[4]=0

x

c(x,8)

x=c(x,9)

x


##matrix

x=matrix(c(1,2,3,4),nrow=2,ncol=2)

x

y=matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=T) #byrow행중심

y


#rbind행중심으로 결합, cbind열중심으로 결합


r1=c(1,4,7)

r2=c(2,5,8)

r3=c(3,6,9)

rbind(r1,r2,r3)


c1=1:3

c2=4:6

c3=7:9

cbind(c1,c2,c3)



##array

array(1:6) #1차원 배열 생성


array(1:6,c(2,3)) #2차원 배열 생성


array(1:6,c(2,2,2)) #3차원배열 생성 (2행, 2열, 2층)


arr=c(1:24)

arr

dim(arr)=c(3,4,2) #dim arry차열 정리해주는 함수

arr

dim(arr)=c(2,4,3)

arr

class(arr) #여러개 값이 들어가면 class에서 구조로 나옴.

str(arr) #숫자로 이루어져있다고 나옴. 행열층까지.


##data.frame

char1=c('a','a','b','b','c')

num=c(1,1,2,2,3)

test1=data.frame(char1,num)

test1

test3=rbind(test1,c('c',4)) #행추가

test3


test2=cbind(test1,married=c(T,T,T,F,F)) #열추가 (married는 vector형태)

test2


##list

test=list('kim',c(94,82,92),c(T,F,T))

test


son<-list(son.name=c('minsu','minchul'),son.gender=c('M','M'),son.age=c(2,6))


son



###R데이터 파일 관리

getwd()


txt<-read.table("studentlist.txt",header=T,stringsAsFactors = F)

#header 컬럼명있을 경우 T

txt

#sep=" "콤마로 구분되있는 정보는 한 행으로 인식(read.table)sep으로 구분해줘야함.

txt<-read.table("studentlist.txt",header=T,sep=",",stringsAsFactors = F)

txt

str(txt)


g<-as.data.frame(read.csv("example_studentlist.csv"))


t<-read.csv("example_studentlist.csv",header = T,sep = ",")

t


write.table(txt,file='tt.txt',row.names=F,col.names=T)

#row.names=f 행번호x

write.table(txt,file='ttt.txt',sep=",",row.names=F,col.names=T)

write.csv(t,file='test.csv',row.names = F)



###기술통계

weight<-c(72,67,60,78,82)

mean(weight)


#sample표본 무작위 추출 함수 / replace복원추출(중복가능)

myNum<-sample(1:100,size=100,replace=T)

myNum

mean(myNum)


#무작위로 결측값 넣기 위해 작업

myNum[sample(x=1:100,size=20,replace=F)]<-NA

myNum

mean(myNum)


##NA결측치(빈값) / NULL모른다(평균 등 통계량 계산시 제외)

#na.rm=T na 제외

mean(myNum,na.rm=T)


##가중평균(weighted.mean)

sales<- c(95,72,87,65)

weight<-c(0.5,0.25,0.125,0.125)

mean(sales)

weighted.mean(sales,weight)


A_score<-c(4.0,3.0)

b_score<-c(3.0,4.0)


count<-c(3,2)

weight<-count/sum(count)

weighted.mean(A_score,weight)

weighted.mean(b_count,weight)

#가중치를 넣는 작업(퍼센트화), 위에 문제는 이미 가중치(%) 포함 수치 


score<-c(90,80,70,60)

student<-c(3,12,15,5)

weight<-student/sum(student)

weighted.mean(score,weight)


##중앙값

ti<-c(7,2,3,7,6,9,10,8,9,9,10)

median(ti)

mean(ti)

summary(ti)


ta<-c(7,2,3,7,6,9,10,8,9,10)

median(ta)

mean(ta)

summary(ta)


##freq최빈값 / which.max(freq)최빈값위치

num.v<-c(1,2,2,3,4,3,5,5,7,9,2,2,0)


#table은 도수분표만들어줌

freq<-table(num.v)

freq


which.max(freq) #2,3 2가 최빈값이며, 3번째에 위치한다라는 의미.

names(freq)[3]



char.v<-c('o','it','the','it','it','가','가','가','가','가')

freq2<-table(char.v)

which.max(freq2) #가,4 최빈값 가, 4번째 위치함.

names(freq2)[4]



##table 빈도조사하여 표로 만듦. 분류할때 자주 사용

x<-c('a','b','c','c','d','d')

table(x)


##최대 최소값의 색인(위치) which.

x<-c(1,2,3,NA,4)

which.max(x)

which.min(x)


##최대 최소 (na.rm안하면 NA로 나옴.)

min(x,na.rm=T)

max(x,na.rm=T)



###자료의 분산


##범위 : 최대-최소소

we<-c(72,67,60,78,82)

max(we)-min(we)


##분산

ww<-c(72,67,60,78,82)

var(ww)


##표준편차

sd(ww)



###데이터의 위치

##구간별데이트 파악


##사분위수

r<-c(136,182,166,132,130,186,140,155)

quantile(r)

quantile(r,0.25)

quantile(r,0.3) #30% 위치의 수

quantile(r,c(0.25,0.3))


summary(r)


iris

summary(iris)


boxplot(r) #2사분위수는 중앙값

#최대, 3사분위,2사분위(=중앙),1사분위,최소



#숙제

#1)이론적으로 평균과 표준편차 

dice1<-c(1,2,3,4,5,6)

mean(dice1)

sd(dice1)

#2)주사위 10번 던졌을 때

dice<-sample(1:6,size=10,replace=T)

mean(dice)

sd(dice)

#3)1000000번던졌을 때

dice2<-sample(1:6,size=1000000,replace=T)

mean(dice2)

sd(dice2)

#4)1,2,3값 비교하여 값 차이가 나는 이유 설명



##도수분포표

t<-c(88,67,76,80,86,94,78,84,82,75,80,75,65,84,78,82,71,60,87,75)

20^(1/3)


u<-c(6.5,4.0,7.1,8.3,5.4,7.6,9.0,15.7,16.7,6.4,5.0,8.5,5.7,7.7,7.2,12.4,7.1,5.5,9.7,4.4,7.0,6.3,8.3,6.9,

5.7,7.6,7.9,7.9,6.0,8.2,10.4,9.9,3.9,9.8,8.2,5.6,7.9,6.4,7.4,7.0,13.0,8.7,6.4,6.7,7.4)

length(u)

x.num<-length(u)

d<-x.num^(1/3)

round(d)


duu<-(max(u)-min(u))/4

round(duu)


min(u)

max(u)

u.cut<-cut(u,breaks=seq(3.0,18.0,by=3.0),right=F)

#cut 쪼갠다, breaks 나누겠다 3에서18까지 3간격으로, right=F e뒤에숫자미만으로.

table(u.cut)

u.cut

 


Comments