R
[혼자 공부하는 R 데이터분석] 4주차_데이터 수집, 관측, 시각화
섀싹
2024. 7. 29. 18:07
4-1. 데이터 수집하기
- 데이터를 수집하는 방식 : 직접 vs 외부 데이터 수집
- 가공을 거치지 않은 데이터 : 원시 데이터(=원시 자료)
- View(데이터프레임 변수명) 함수로 조회 (= 데이터 뷰어)
- 반드시 첫 글자 대문자로 작성
- 가공하지 않은 원시 데이터만 확인 가능
- 데이터 수집 방법
데이터 종류 | 사용법 | 추가 설명 |
직접 데이터 입력 | 변수명 <- c(값) | |
TXT 파일 | <- read.table("원시 데이터 경로", options) | 데이터 프레임으로 저장됨, header 기본값 False (변수명 임의지정) 데이터 경로 표현시 슬래시 사용 |
CSV 파일 | <- read.csv("원시 데이터 경로", options) | 데이터 프레임으로 저장됨, header 기본값 TRUE -> 원시 데이터 변수명 없을 시 임의로 지정됨 |
EXCEL | install.packages('readxl') library(readxl) <- read_excel("원시데이터 경로", options) |
데이터 프레임으로 저장됨, header 기본값 TRUE 엑셀 여러 시트 중에 특정 시트 값을 가지고 오고 싶다면 options 에서 sheet = 2 이런 식으로 설정해주면 됨. |
XML | install.packages("XML") library("XML") <- xmlToDataFrame("원시 데이터 경로" options) |
데이터 프레임으로 저장됨, 태그 명이 변수 명이 됨 |
JSON | install.packages("jsonlite") library(jsonlite) <- fromJSON("원시 데이터 경로", options) |
데이터 프레임으로 저장 안됨. 따라서 실행 결과 View 가 아닌 str() 함수로 데이터 구조 살펴봐야함. |
- options
사용법 | 기능 |
encoding = "sth" | R의 인코딩 설정 |
fileEncoding = "sth" | 파일의 인코딩 설정 |
header = TRUE or FALSE | 원시 데이터의 1행 변수명인지 아닌지 판단 |
col.names = c(~) or 다른 컬럼변수벡터 row.names = c(~) or 다른 행변수벡터 |
컬럼 이름 직접 할당 행 이름 직접 할당 |
skip = number | 옵션에 지정한 특정 행까지 제외하고 이후 행부터 가져옴 |
nrows = number | 몇개의 행을 불러올지 지정 |
sep = "sth" | 데이터 구분자 지정하는 옵션 |
-손코딩
# 직접 데이터 입력하기
ID <- c(1, 2, 3, 4, 5)
ID
SEX <- c("F", "M", "F", "M", "F")
SEX
DATA <- data.frame(ID=ID, SEX=SEX)
View(DATA)
# 외부 데이터 가져오기 : TXT 파일
ex_data <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8")
View(ex_data)
# header 넣어주기
ex_data1 <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8", header = TRUE)
View(ex_data1)
# 컬럼명 만들어주기
varname <- c("ID", "SEX", "AGE", "AREA")
ex1_data <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8", col.names = varname)
View(ex1_data)
# skip 옵션
ex_data2 <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8",
header = TRUE, skip = 2)
View(ex_data2)
#nrows 옵션
ex_data3 <- read.table("C:/Rstudy/data_ex.txt", encoding = "EUC-KR", fileEncoding = "UTF-8",
header = TRUE, nrows = 7)
View(ex_data3)
#sep 옵션
ex_data4 <- read.table("C:/Rstudy/data_ex1.txt", encoding = "EUC-KR", fileEncoding = "UTF-8",
header = TRUE, sep = ",")
View(ex_data4)
# 외부 데이터 가져오기 : csv 파일
ex_data <- read.csv("C:/Rstudy/data_ex.csv")
View(ex_data)
# 외부 데이터 가져오기 : excel 파일
install.packages('readxl')
library(readxl)
excel_data_ex <- read_excel("C:/Rstudy/data_ex.xlsx")
View(excel_data_ex)
# 외부 데이터 가져오기 : XML
install.packages("XML")
library(XML)
xml_data <- xmlToDataFrame("C:/Rstudy/data_ex.xml")
View(xml_data)
# 외부 데이터 가져오기 : JSON 파일
install.packages("jsonlite")
library(jsonlite)
json_data <- fromJSON("C:/Rstudy/data_ex.json")
str(json_data)
4-2. 데이터 관측하기
- 데이터 관측 함수
데이터 관측 함수 | 기능 |
data() | R에 내장된 데이터 세트 목록 확인 |
data("~~") | 내장 데이터 세트 가져오기 |
str(변수명) | 데이터 전체 구조 확인 데이터 행, 열, 칼럼 이름, 데이터 타입 등을 알 수 있음 |
ncol(변수명), nrow(변수명), dim(변수명) | 데이터 프레임 열 개수 확인, 행 개수 확인, 행과 열 개수 확인 |
length(변수명) | 벡터 데이터 개수 or 데이터 프레임 열 개수 or 해당 열 행 개수 |
ls(변수명) | 컬럼명 확인 |
head(변수명, n=수량), tail(변수명, n=수량) | 데이터 앞부분 확인(기본6개), 뒷부분 확인 |
- 기술 통계 함수
데이터 프레임의 특정 열 확인 시 데이터프레임명$변수명 의 형태로 작성
기술 통계 함수 | 기능 |
mean(변수명) | 평균 이상치 영향 많이 받음 |
median(변수명) | 중앙값 |
min(변수명) | 최솟값 |
max(변수명) | 최댓값 |
range(변수명) | 범위 (최솟값과 최댓값) |
quantile(변수명, probs=0~1) | 분위수 |
var(변수명) | 분산 |
sd(변수명) | 표준편차 |
kurtosi(변수명) | 첨도 사용하기 위해 아래 패키지 설치 요망 install.packages("psych") library(psych) 첨도 > 0 : 정규 분포 대비 그래프 곡선 뾰족 첨소 = 0 : 정규 분포와 그래프 뾰족 동일 첨도 < 0 : 정규 분포 대비 그래프 곡선 완만 |
skew(변수명) | 왜도 사용하기 위해 아래 패키지 설치 요망(첨도랑 같음) install.packages("psych") library(psych) 왜도 > 0 : 오른쪽 꼬리 가짐 왜도 = 0 : 중앙 왜도 < 0 : 왼쪽 꼬리 가짐 |
freq(변수명) ex) freq_test <- freq(iris$Sepal.Length, plot=F) |
빈도분석 사용하기 위해 아래 패키지 설치 요망 install.packages("descr") library(descr) |
- 손코딩
data("iris")
iris
str(iris)
ncol(iris)
nrow(iris)
dim(iris)
data <- c(1, 2, 3, 4, 5)
length(data)
length(iris)
length(iris$Species)
ls(iris)
head(iris)
tail(iris, n=3)
# 기술통계량
mean(iris$Sepal.Length)
median(iris$Sepal.Length)
min(iris$Sepal.Length)
max(iris$Sepal.Length)
range(iris$Sepal.Length)
quantile(iris$Sepal.Length)
quantile(iris$Sepal.Length, probs = 0.25)
quantile(iris$Sepal.Length, probs = 0.50)
quantile(iris$Sepal.Length, probs = 0.75)
quantile(iris$Sepal.Length, probs = 0.80) #제 0.8분위수 (하위 80퍼센트 지점의 값 출력)
var(iris$Sepal.Length)
sd(iris$Sepal.Length)
install.packages("psych")
library(psych)
kurtosi(iris$Sepal.Length)
skew(iris$Sepal.Length)
install.packages("descr")
library(descr)
freq_test <- freq(iris$Sepal.Length, plot=F)
freq_test
4-3. 데이터 탐색하기
- 시각화 함수
종류 | 사용법 | 상세 설명 |
막대 그래프 (barplot) | - freq(변수명, plot=T, options) - barplot(변수명, options) *table() 함수 같이 사용 필수 |
barplot 함수의 경우 table 함수 결과처럼 표 형태로 데이터가 구성되어 있을 때 변수별로 빈도를 표현 가능(freq 처럼은 불가) |
상자 그림 (boxplot) | boxplot(변수명, options) | 데이터 분포 비교나 이상치 판단에 용이 |
히스토그램 (histogram) | hist(변수명, options) | 구간별 관측치 분포 상태 확인 용이 |
파이차트 (pie chart) | pie(변수명, options) *table() 함수 같이 사용 필수 |
그림에 빈도수 같이 나옴 |
줄기 잎 그림 | stem(변수명, scale = 1, options) | scale 옵션에 따라 데이터 분포를 다양하게 파악 가능. 숫자가 클 수록 더 세밀하게 볼수 있음. 기본값은 1 |
산점도 그리기(=산포도) | 산점도 : plot(x, y) 산점도 행렬 - pairs(변수명) - pairs.panels(변수명) *psych 라이브러리 필요 |
pairs.panels 가 pairs 만 쓰는 것보다 수치 등이 추가 되어 결과가 더 명확. |
- 함수 옵션
사용법 | 기능 |
ylim = c(y축 범위) | 출력할 y 범위 지정 |
main = "그래프 제목" | 그래프 제목 지정 |
xlab = "x축 제목" | x축 제목 지정 |
ylab = "y축 제목" | y축 제목 지정 |
names = c("컬럼 제목", ...) | c() 함수를 사용해 벡터 형태로 컬럼 제목 지정 |
col = c("색상", ...) | c() 함수를 사용해 벡터 형태로 그래프 색상 지정 |
- 어떤 그래프를 쓰는게 더 좋을지 고민될 때 참고할만한 사이트
- 손코딩
# 막대 그래프 그리기
library(descr)
library(readxl)
exdata1 <- read_excel("C:/Rstudy/Sample1.xlsx")
exdata1
freq(exdata1$SEX, plot = T, main = '성별(barplot)')
dist_sex <- table(exdata1$SEX)
dist_sex
barplot(dist_sex)
barplot(dist_sex, ylim=c(0,14), main = "BARPLOT", xlab = "SEX",
ylab = "FREQUENCY",
names = c("FEMALE", "MALE"),
col = c("pink", "navy"))
# 상자 그림 그리기
boxplot(exdata1$Y21_CNT, exdata1$Y20_CNT)
boxplot(exdata1$Y21_CNT, exdata1$Y20_CNT,
ylim = c(0, 60),
main = "boxplot",
names = c("21년건수", "20년건수"),
col = c("green", "yellow"))
#히스토그램 그리기
hist(exdata1$AGE, xlim = c(0, 60), ylim = c(0, 7), main = "AGE분포")
#파이차트 그리기
data(mtcars)
x <- table(mtcars$gear)
pie(x)
# 줄기 잎 그림 그리기
x <- c(1, 2, 3, 4, 7, 8, 8, 5, 9, 6, 9)
stem(x)
stem(x, scale = 2)
stem(x, scale = 0.5)
# 산점도 그리기
data(iris)
plot(x = iris$Sepal.Length, y = iris$Petal.Width)
pairs(iris)
library(psych)
pairs.panels(iris)
4-4. 4주차 과제
1)
2)
상자 그림 그래프의 5가지 요약값
명칭 | 의미 |
최댓값 | 데이터의 가장 큰 값(가장 위쪽 수염) 수염 밖은 이상치 |
제 3사분위수 | 데이터의 상위 25프로 지점 데이터의 75프로가 이 값 보다 작다 |
중앙값 (제 2사분위수) | 전체 데이터의 가운데. 박스 내부에 있는 가로선으로 표시됨 |
제 1사분위수 | 데이터의 하위 25프로 지점 데이터의 75프로가 이 값 보다 크다 |
최솟값 | 데이터의 가장 작은 값(가장 아래쪽 수염) 수염 밖은 이상치 |