본문 바로가기
인공지능/R

R (4)

by bibibig_data 2021. 6. 4.

 

171p - 173p  이상치 정제하기

#171p 이상치 정제하기

# 이상치 제거하기

outlier <- data.frame(sex = c (1, 2, 1, 3, 2, 1),
                      score = c(5, 4, 3, 4, 2, 6))
outlier

table(outlier$sex)

table(outlier$score)

# sex가 3이면 NA할당
outlier$sex <- ifelse(outlier$sex == 3, NA, outlier$sex)
outlier

# score가 5보다 크면 NA 할당
outlier$score <- ifelse(outlier$score > 5, NA, outlier$score)
outlier

install.packages("dplyr")
library(dplyr) #라이브러리 할당

outlier %>% 
  filter(!is.na(sex) & !is.na(score)) %>% 
  group_by(sex) %>% 
  summarise(mean_score = mean(score))

- ifelse 사용해서 지정값을 NA로 변경하기


 

174p - 177p 이상치 제거하기

# 이상치 제거하기
# 패키지 다운로드
install.packages("ggplot2")
library(ggplot2)

boxplot(mpg$hwy) # hwy변수로 상자그림 그리기

boxplot(mpg$hwy)$stats # 상자그림 통계치 출력 

#결측치 처리하기
mpg$hwy <- ifelse(mpg$hwy < 12 | mpg$hwy > 37, NA, mpg$hwy)
table(is.na(mpg$hwy))

mpg %>% 
  group_by(drv) %>% 
  summarise(mean_hwy = mean(hwy, na.rm = T))

- boxplot() : 상자그림 그리기

- boxplot() $ stats : 상자그림 통계치 출력

 

아래 극단치 경계(12),     1사분위수 (18),     중앙값 (24),     3사분위수 (27),     위쪽 극단치 경계 (37)

 

- ifelse를 이용해서 아래 극단치 경계(12)보다 작거나 위쪽 극단치 경계(37)보다 큰 값을 결측치로 처리


My SQL  연동하기

 

# R <-> My SQL 연동
install.packages("rJava")
install.packages("RJDBC")

library(rJava)
library(RJDBC)

#데이터베이스 연결 설정
jdbcDriver <- JDBC(driverClass="com.mysql.jdbc.Driver"
                   , classPath="C://mysql-connector-java-5.1.38-bin.jar")

conn <- dbConnect(jdbcDriver, 
                  "jdbc:mysql://localhost:3306/world", "root", "1234")

#sql을 사용해서 r로 데이터 가져오기
r <- dbGetQuery(conn, "SELECT * FROM city")
class(r)
str(r)
r

 

 


ORACLE 연동

# R <-> ORACLE 연동

#r 실행 버젼유의
#64비트에서 실행해야 에러가 적게남
# 첨부된 ojdbc6.jar 파일을 다운로드 받아서 C:\ 아래에 두세요.
install.packages("rJava")
install.packages("RJDBC")  

library(rJava)
library(RJDBC)  

#데이터베이스 연결 설정
jdbcDriver <- JDBC(driverClass="oracle.jdbc.OracleDriver"
                   , classPath="C://ojdbc6.jar")

conn <- dbConnect(jdbcDriver, 
                  "jdbc:oracle:thin:@localhost:1521/xe", "scott", "tiger")

#sql을 사용해서 r로 데이터 가져오기
r <- dbGetQuery(conn, "SELECT * FROM scott.emp")
class(r)
str(r)
r

8장 그래프 만들기

- 그래프 : 목적이 있어야함  ex) 어느 대상에게 이걸 보여줘서 어떤 정보를 주고 싶은지

- 그래프를 사용하는 이유

   1) 추세와 경향성을 확인 ( 산점도, 히스토그램 )

   2) 패턴을 발견 ( 네트워크 그래프 )

- 그래프의 종류

   2차원그래프, 3차원그래프, 지도그래프, 네트워크 그래프, 모션차트, 인터랙티브 그래프, 버블차트 등

- 그래프 함수

   그래프를 그릴 때  ggplot2  패키지를 가장 많이 사용함.

 


 

180p - 188p 산점도 만들기

 

- 산점도란 ?

   데이터를 x축과 y축에 점으로 표현한 그래프.

   두 변수의 관계를 표현할 때 사용.

 

- ggplot2 레이어 구조 이해하기

   1) 배경 설정 ( 축 )

   2) 그래프 추가 ( 점, 막대, 선 )

   3) 설정 추가 ( 축 범위, 색, 표식 )

 

# 8장 그래프



# 183p 산점도 만들기

library(ggplot2)
# displ(= 배기량), hwy(= 고속도로 연비)
# 1) x축은 displ, y축은 hwy로 지정해 배경 생성

ggplot(data = mpg , aes(x = displ, y = hwy))


# 2) 배경에 산점도 추가

ggplot(data = mpg, aes(x = displ, y =hwy)) + geom_point()

ggplot(data = mpg, aes(x = displ, y =hwy)) + geom_point() + xlim(3, 6) # 축 범위 설정 xlim( 최솟값, 최댓값 )

ggplot(data = mpg, aes(x = displ, y =hwy)) + geom_point() + xlim(3, 6) + ylim(10, 30) # 축 범위 설정 ylim( 최솟값, 최댓값 )


# 가독성 높이기
ggplot(data = mpg, aes(x = displ, y =hwy)) + 
  geom_point() + 
  xlim(3, 6) + 
  ylim(10, 30)

- aes : 1) 산점도 배경 생성 옵션

- geom_point() : 2) 그래프 추가 ( 점 )

- ggplot2패키지는 함수들을 + 로 연결함.

- xlim ( 최솟값, 최댓값 ) : 3) 그래프 설정 ( x축 범위 조정 )

- ylim ( 최솟값, 최댓값 ) : 3) 그래프 설정 ( y축 범위 조정 )

 


 

# 189p - 191p 막대그래프

 

- 막대그래프란 ? 

 성별, 소득 차이 처럼 집단 간 차이를 표현.

 데이터의 크기를 막대의 길이로 표현

 

# 189p 막대그래프

# 집단별 평균표 만들기
library(dplyr)

# mpg 초기화 하기
ggplot2::mpg
mpg <- as.data.frame(ggplot2::mpg)

# drv (= 구동방식)

df_mpg <- mpg %>% 
  group_by(drv) %>% 
  summarise(mean_hwy = mean(hwy))

df_mpg

# 막대그래프 생성

ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()


# 막대그래프 정렬

ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col() 

- geom_col() : 막대그래프 추가

- reorder( x변수, 정렬기준 ) : 차트 정렬하기 ( - 정렬기준이면 내림차순 )

 


# 192p 빈도 막대 그래프 만들기

# 빈도 막대 그래프 만들기

ggplot(data = mpg, aes(x = drv)) + geom_bar() # drv 빈도

ggplot(data = mpg, aes(x = hwy) + geom_bar() # hwy 빈도
       

- geom_bar() : 빈도 막대 그래프 생성

- 빈도 막대 그래프는 count가 y축이기 때문에 y축 설정 no !


 

194p - 195p선 그래프

 

- 주로 시간에 따라 달라지는 데이터 표현 ex) 환율, 주가지수

- 시계열그래프라고도 함

 

# 194p 선 그래프

ggplot(data = economics, aes( x = date, y =unemploy)) + geom_line()

- geom_line : 선 그래프

 


 

196p - 198p 상자 그림

 

- 제일 잘 만든 그래프는 설명이 없는 누구나 봐도 아는 그래프

- 데이터의 분포를 직사각형 상자 모양으로 표현한 그래프

- box plot은 이걸 아는 사람들에게 발표 할 때만 사용

- violinplot을 이용해서 이해하기 쉽게 표현

 

# 196p 상자 그림

ggplot(data = mpg, aes(x = drv, y = hwy)) + geom_boxplot()

- geom_boxplot () : 상자그림 생성

drv = 구동 방식

hwy = 고속도로 연비

 

해석

- 4륜구동(4)은 17~22 사이에 대부분의 자동차가 모여있습니다.

  중앙값이 상자 밑면에 가까운 것을 보면 낮은 값 쪽으로 치우친 형태의 분포라는 것을 알 수 있습니다.

 

- 전륜구동(f)은 26~29 사이에 좁은 범위에 자동차가 모여 있는 뾰족한 형태의 분포라는 것을 알 수 있습니다.

  수염의 위, 아래에 점 표식이 있는 것을 보면 연비가 극단적으로 높거나 낮은 자동차들이 존재한다는 것을 알 수 있습니다.

 

- 후륜구동(r)은 17~24 사이의 넓은 범위에 자동차가 분포하고 있다는 것을 알 수 있습니다.

  수염이 짧고 극단치가 없는 것을 보면 대부분의 자동차가 사분위 범위에 해당한다는 것을 알 수 있습니다.

 


 

Error : figure margins too large

에러가 생기면 ?

-> R GUI파일에서 코드 실행

 


ggplot2 함수 요약

내용
aes 변수 선택
reorder 정렬
geom_point() 산점도
geom_col() 막대그래프
geom_bar() 빈도 막대그래프
geom_line() 선 그래프
geom_boxplot() 상자그림

 


ORACLE로 CSV파일 불러오기

테이블에서 데이터 임포트해서 불러오기

 


 

'인공지능 > R' 카테고리의 다른 글

R - 지도시각화  (0) 2021.06.08
R - 인터렉티브  (0) 2021.06.08
R 데이터 가공  (0) 2021.06.03
R 데이터프레임, 데이터 분석 기초  (0) 2021.06.02
R 설치, 변수, 함수, 패키지 이해  (0) 2021.06.01