R-Studio hist, skewness, kurtosis 이용한 왜첨도 그래프 그리기 Part.0

R-Studio의 hist, skewness, kurtosis

Featured image

파일 소스

우클릭 -> 다른이름으로 링크저장 이용해 주세요
S20191029.zip

사용 예시 소스코드 1

descriptive <- read.csv("descriptive.csv")
head(descriptive)

dim(descriptive)
length(descriptive)
nrow(descriptive)
ncol(descriptive)

# survey 속성의 개체 어커런스 출력
length(descriptive$survey)
# 구조 확인하기.
str(descriptive)
summary(descriptive)

# 명목 척도
length(descriptive$gender)
summary(descriptive$gender)
table(descriptive$gender)

# 젠더가 1또는 2인것만 추출 (이상치 제거후 나머지 튜플 추출)
descriptive <- subset(descriptive, descriptive$gender==1 | descriptive$gender==2)
descriptive

tableGender <- table(descriptive$gender)
tableGender

# 차트 그리기
barplot(tableGender, col = rainbow(length(tableGender)), names.arg = c("남자", "여자"), main ="남녀 성비")
legend(x = "topright", legend = c("남", "녀"), bty = "o", fill = rainbow(2))

proGender <- prop.table(tableGender)
proGender <- round(100*proGender, 2)
proGender

# 차트 그리기
barplot(proGender, col = rainbow(length(proGender)), names.arg = c("남자", "여자"), main ="남녀 성비")
legend(x = "topright", legend = c("남", "녀"), bty = "o", fill = rainbow(2))

# ggplot2 로 그리기
unique(descriptive$resident)

tableResident <- table(descriptive$resident)
dataResident <- data.frame(지역=c("서울", "대전", "대구", "부산", "경기"),명수=matrix(tableResident)[,1])
dataResident

# ggplot2 를 통해 차트를 그립니다.
library(ggplot2)
ggplot(data=dataResident, aes(x=dataResident$지역, y=dataResident$명수, col=dataResident$지역, fill=dataResident$지역)) + geom_col() + labs(title="나이와 월급의 관계")

# 서열 척도 : level(학력 수준)
unique(descriptive$level)
length(descriptive$level)
summary(descriptive$level) # 의미가 없음
table(descriptive$level) 

tableLevel <- table(descriptive$level)
barplot(tableLevel, col = rainbow(length(tableLevel)))

# 등간 척도 : survey(설문 조사)
survey <- descriptive$survey
survey

unique(survey)
summary(survey) # 의미가 없다.
tableSurvey <- table(survey)
tableSurvey

# 비율 척도 : cost(비용)
length(descriptive$cost)
summary(descriptive$cost)
mean(descriptive$cost)

# stats : 신뢰구간 내에 사분위수(quantile)
# conf : 신뢰구간, out : 이상치 lists, group : cost속성 밖에 없어서 1그룹 밖에 없음
# names : 그룹 속성 이름
plot(descriptive$cost) # 산점도
myBox <- boxplot(descriptive$cost)
myBox

# 신뢰구간 데이터만 잘라내기
descriptive <- subset(descriptive, descriptive$cost >= 2 & descriptive$cost <= 10)
descriptive

# Value값 상세 목록
cost <- descriptive$cost
sort(cost)
sort(cost, decreasing = T)
mean(cost)
median(cost)
quantile(cost, 1/4)
quantile(cost, 2/4)
quantile(cost, 3/4)
quantile(cost, 4/4)

# 이상치 제거후 박스플롯 그림
newBox <- boxplot(cost)
newBox

# plot 그리기
plot(descriptive$age, descriptive$cost)

hist(cost)

# 연속성인 cost 컬럼을 범주화(리코딩)
# low(4.0미만), middle(4.0이상 6.0미만), high(6.0이상)
descriptive$cost2[descriptive$cost < 4.0] = "low"
descriptive$cost2[descriptive$cost >= 4.0 & descriptive$cost < 6.0] = "middle"
descriptive$cost2[descriptive$cost >= 6.0] = "high"
unique(descriptive$cost2)

# tableCost
tableCost <- table(descriptive$cost2)
tableCost
barplot(tableCost, col=rainbow(length(tableCost)))

# age 컬럼을 이용하여 age2 코딩 변경해보세요.
h <- hist(descriptive$age)
h

# 나이 그래프
descriptive$age2[descriptive$age >= 40 & descriptive$age < 50] = "40대"
descriptive$age2[descriptive$age >= 50 & descriptive$age < 60] = "50대"
descriptive$age2[descriptive$age >= 60 & descriptive$age < 70] = "60대"
descriptive$age2[descriptive$age >= 70] = "70대이상"

descriptive$age2
ageTable <- table(descriptive$age2)
ageTable
barplot(ageTable, col = rainbow(3))

boxplot(descriptive$age)
hist(descriptive$age)

# 왜첨도 그리기
# install.packages("moments") # 왜첨도
library(moments)

skewness(cost) #왜도

# 3값보다 적음 첨예하지 않고 완만하다.
kurt <- kurtosis(cost) #첨도
ifelse(kurt == 3.0, "정규분포", ifelse(kurt > 3.0, "뾰쪽", "완만"))

# freq : F면 밀도, T면 분포
hist(cost, freq = F)
# 밀도 분포 곡선
lines(density(cost), col="blue")

x <- seq(0, 8, 0.1)
dnorm(x, mean(cost), sd(cost)) # mean평균, sd표준편차

curve(dnorm(x, mean(cost), sd(cost)), col="red", add=T)

# 코딩 변경
# gender(남, 여), level(고졸, 대학졸, 대학원졸)
unique(descriptive$level)
tableLevel <- data.frame(gender=descriptive$gender, level=descriptive$level)
tableLevel$gender <- ifelse(tableLevel$gender==1, "남", "여")
tableLevel$level <- ifelse(tableLevel$level==1, "고졸", ifelse(tableLevel$level==2, "대학졸", "대학원졸"))

# 전체 데이터 셋에 포함된 모든 변수들을 대상으로 
# 기술 통계량을 제공하며, 빈도와 비율 데이터를 일괄적으로 제공
# install.packages("Hmisc")
library(Hmisc)
Hmisc::describe(descriptive)
Hmisc::describe(descriptive$cost2)

# install.packages("prettyR")
library(prettyR)
freq(descriptive)