ch0nny_log

[빅데이터분석] R _ 37. 데이터 시각화4 (라인 그래프) 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 37. 데이터 시각화4 (라인 그래프)

chonny 2024. 7. 2. 15:44
라인 그래프란?
- 시간에 따른 변화를 추적 확인할 때 매우 효과적인 그래프
ex. 제품의 가격 변동과 판매량과의 관계
- 두변수간의 관계를 시각화 할때 유용
- 경향성 분석
ex. 년도별로 출산율이 저하되는지 확인

 

문법1. plotly 로 강남역 시간대별 승하차수를 라인 그래프로 시각화 하시오.

#예제1. 승차수 라인만 출력하시오
# plotly 패키지 로드
library(plotly)

# 작업 디렉토리 설정
setwd("c:\\data")

# 데이터 로드
data <- read.csv("2호선_강남역_시간대별_승하차현황_수정2.csv", header = TRUE, fileEncoding = "euc-kr")
data

# plotly를 사용한 라인 그래프 생성 (승차수 라인만 출력)
fig <- plot_ly(data, x = ~time) %>%
  add_trace(y = ~in_cnt, name = '승차', type = 'scatter', mode = 'lines+markers', line = list(color = 'blue'))

# 그래프 출력
fig

문법2. 위 그래프의 하차수도 라인그래프로 추가하시오.
# plotly를 사용한 라인 그래프 생성 (승차수, 하차수 라인 출력)
fig <- plot_ly(data, x = ~time) %>%
  add_trace(y = ~in_cnt, name = '승차', type = 'scatter', mode = 'lines+markers', line = list(color = 'blue')) %>%
  add_trace(y = ~out_cnt, name = '하차', type = 'scatter', mode = 'lines+markers', line = list(color = 'red'))

# 그래프 출력
fig​
문제1. 한국  출산율 데이터를 데이터 프레임으로  생성하시오. (라인그래프 시각화)
# 데이터 업로드드
setwd('c:\\data')
birth <- read.csv('korea_birth.csv',header =T, fileEncoding ='euc-kr') 
birth

# plotly를 사용한 라인 그래프 생성 (승차수, 하차수 라인 출력)
fig <- plot_ly(birth, x = ~k_year) %>%
  add_trace(y = ~birth_rate, name = '출산율', type = 'scatter', mode = 'lines+markers', 
            line = list(color = '#FFCCBC'), marker=list(color='#BBDEFB'))
#제목 출력
fig <- fig%>% layout(title ='1970-2023년 까지의 출산율')

# 그래프 출력
fig​


문제2. 아래의 링크에서 일본 출산율 데이터를 가지고 데이터 프레임, 시각화 하시오.

japan2.csv
0.00MB
korea2.csv
0.00MB

# plotly 패키지 로드
library(plotly)

# 작업 디렉토리 설정
setwd("c:\\data")

# 한국 출산율 데이터 로드
korea_data <- read.csv("korea2.csv", header = TRUE)

# 일본 출산율 데이터 로드
japan_data <- read.csv("japan2.csv", header = TRUE)

# 데이터 프레임을 합치기 위해 열 이름 통일
colnames(korea_data) <- c("year", "birth_rate")
colnames(japan_data) <- c("year", "birth_rate")

# 출처를 구분하기 위한 열 추가
korea_data$country <- "Korea"
japan_data$country <- "Japan"

# 두 데이터를 합치기
combined_data <- rbind(korea_data, japan_data)

#설명: rbind 는 위아래와 데이터를 연결
#       cbind 는 양옆으로 데이터를 연결

# plotly를 사용한 라인 그래프 생성
fig <- plot_ly(combined_data, 
                 x = ~year, 
                 y = ~birth_rate, 
                color = ~country, 
                colors = c('blue', 'red'),
                type = 'scatter', mode = 'lines+markers')

# 그래프 출력
fig

설명: color = ~country 를 사용하게 되면 국가별로 다른 색상을 사용을 합니다. 
       국가별로 라인 그래프가 그려지는데  colors = c('blue', 'red') 를 지정해서
       라인색깔로 국가를 구분합니다.

문제3. 1~4호선 승하차 승객수 데이터 프레임 만들고 시각화 하시오 (x축 시간/ y축 승객수 / 승차수가 in 만 가지고 라인그래프를 그리시오) 
# 작업 디렉토리 설정
setwd("c:\\data")

# 지하철철 데이터 로드
data <- read.csv("1-4호선승하차승객수_수정된것.csv", header = TRUE)
data

# plotly를 사용한 라인 그래프 생성
fig <- plot_ly(data, 
               x = ~time, 
               y = ~in., 
               color = ~line_no, 
               colors = c('blue', 'red'),
               type = 'scatter', mode = 'lines+markers')

# 그래프 출력
fig​
문제4. 지하철1-4호선 승차수를 라인그래프로 출력하는데 아래의 코드를 line_plot.R이라는 이름으로 C드라이브 밑에 저장하세요. (line_plot.R 이라는 이름으로)
library(plotly)
data <- read.csv("1-4호선승하차승객수_수정된것.csv", header=TRUE)
data

# plotly를 사용한 라인 그래프 생성
fig <- plot_ly(data, 
               x = ~time, 
               y = ~in., 
               color = ~line_no, 
               colors = c('blue', 'red'),
               type = 'scatter', mode = 'lines+markers')

# 그래프 출력
fig​


★ 문제 5. yys.R에 3번 코드로 line_plot.R 을 추가하시오. 
# 필요한 패키지 로드
library(svDialogs)
library(plotly)

# 옵션 메시지 정의
options_list <- list("1: 막대 그래프 코드", "2: 원형 그래프 코드", "3: 라인 그래프 코드")

# 사용자 입력 받기 (대화 상자 사용)
dialog_result <- dlgList(options_list, title = "번호를 선택하세요")$res

# switch 문을 사용해서 선택에 따라 다른 메세지 출력 및 실행
if (is.null(dialog_result)) {
  cat("유효하지 않은 선택입니다.\n")
} else {
  num <- as.integer(substr(dialog_result, 1, 1)) # 선택한 옵션의 첫 글자를 숫자로 변환
  fig <- switch(as.character(num),
         "1" = {
           cat(readLines("bar_plot.R"), sep = "\n")
           source("bar_plot.R", local = TRUE)
           fig  # bar_plot.R에서 생성된 fig 객체 반환
         },
         "2" = {
           cat(readLines("pie_plot.R"), sep = "\n")
           source("pie_plot.R", local = TRUE)
           fig  # pie_plot.R에서 생성된 fig 객체 반환
         },
         "3" = {
           cat(readLines("line_plot.R"), sep = "\n")
           source("line_plot.R", local = TRUE)
           fig  # pie_plot.R에서 생성된 fig 객체 반환
         },
         {
           cat("유효하지 않은 선택입니다.\n")
           NULL
         }
  )
  if (!is.null(fig)) {
    print(fig)  # fig 객체를 명시적으로 출력
  }
}​

                                                 

source('yys.R')