R note 05 visualization

moon.kick·2025년 1월 26일

R 데이터 분석 및 시각화 단계

단계설명
1. 기본 변수 생성숫자형, 문자형, 논리형 데이터를 각각 벡터로 생성하여 변수에 저장. 이를 통해 R에서 다양한 데이터 타입을 다루는 기본을 익힐 수 있음.
2. 패키지 설치 및 로드tidyverse 패키지를 설치 및 로드하여 데이터 처리와 시각화를 위한 환경을 설정. tidyverse는 데이터 분석에 필요한 여러 도구를 포함한 통합 패키지.
3. 산점도 생성mpg 데이터셋에서 배기량(displ)과 고속도로 연비(hwy) 간의 관계를 산점도로 시각화. 데이터 간의 분포를 쉽게 확인 가능.
4. 색상 추가산점도에 자동차의 class별로 색상을 구분하여 추가. 각 자동차 클래스의 차이를 시각적으로 명확히 보여줄 수 있음.
5. 스포츠카 제외데이터에서 스포츠카(2seater)를 제외하여 특정 자동차 클래스가 분석에 미치는 영향을 제거. 결과적으로 더 일반적인 자동차 클래스만을 대상으로 분석 가능.
6. 일본 브랜드 식별일본 자동차 브랜드(혼다, 닛산, 스바루, 도요타)를 japanese_make라는 새로운 열로 식별하여 데이터에 추가. 일본 브랜드와 비일본 브랜드의 차이를 분석할 수 있도록 준비.
7. 실린더별 색상 구분실린더 수(cyl)를 범주형으로 변환하여 색상으로 구분. 실린더 수에 따른 자동차 성능 차이를 시각적으로 확인할 수 있음.
8. 도시 및 고속도로 연비 비교도시 연비(cty)와 고속도로 연비(hwy)의 관계를 실린더별로 색상을 구분하여 산점도로 표현. 연비 간의 상관관계 및 실린더별 차이를 한눈에 확인 가능.
9. 특정 연비 필터링도시 연비가 10 미만이거나 32.5 초과인 자동차를 필터링하여 데이터로 추출. 극단값을 중심으로 데이터의 특성을 파악하거나, 분석 범위를 제한하는 데 활용.
10. 겹친 점 흐트러뜨리기점이 겹치는 것을 방지하기 위해 jitter를 사용해 위치를 약간 무작위로 조정. 점의 밀도를 명확히 표현하고 겹침 문제를 해결.
11. 연속형 색상 추가도시 연비(cty)를 연속형 데이터로 설정하여 그라데이션 색상을 사용. 연비가 높을수록 파란색, 낮을수록 노란색으로 표현해 연비의 분포를 시각적으로 이해하기 쉽게 만듦.
12. 센서스 API 설정미국 인구조사 데이터를 가져오기 위해 API 키를 설정. 이 키는 이후 데이터를 자동으로 가져오는 데 사용되며, 한 번 설정하면 반복적으로 입력하지 않아도 됨.
13. 변수 목록 로드2019년 ACS1 데이터셋의 변수 목록을 불러와 데이터의 구조와 변수들을 탐색. 분석에 필요한 변수들을 선택하고 확인하기 위한 기본 작업.
14. 변수 필터링인종 통계와 관련된 특정 변수들만 필터링하여 데이터의 효율성을 높임. 이렇게 선택된 변수들은 분석과 시각화에서 집중적으로 사용됨.
15. 플로리다 인종 데이터 가져오기2019년 플로리다주의 카운티별 인종 통계 데이터를 불러옴. 각 카운티의 다양한 인종 비율을 포함한 데이터로 분석과 시각화에 사용 가능.
16. 지리 정보 추가각 카운티의 경계 데이터를 포함한 지리 정보를 추가하여 지도를 기반으로 데이터를 시각화할 수 있게 함. 지리적 분석과 시각화에 필요한 필수 작업.
17. 퍼센트 계산특정 인종의 인구 수를 전체 인구로 나누어 퍼센트를 계산하고 새로운 열로 추가. 이를 통해 각 인종이 전체 인구에서 차지하는 비율을 쉽게 분석 가능.
18. 데이터 결합인종 변수의 이름과 설명을 데이터에 결합하여 분석 결과를 명확히 함. 이를 통해 데이터 구조와 시각화에 필요한 정보가 보완됨.
19. 지도 시각화플로리다 카운티별로 각 인종의 인구 비율을 색상으로 표현한 지도를 생성. facet_wrap을 사용해 각 인종별로 분리된 지도를 만들어 비교하기 쉽게 함.

추가 요약

  • 데이터 처리 과정: 데이터 전처리(필터링, 열 추가, 퍼센트 계산)로 분석과 시각화를 위한 데이터를 준비.
  • 시각화 목표: 산점도와 지도를 활용해 자동차 데이터와 플로리다주 인구 데이터를 직관적으로 표현.
  • 활용 가능한 분석: 자동차의 연비 및 브랜드 분석, 플로리다 카운티별 인종 분포와 지리적 특징 분석.
x <- c(1, 2, 3)
x

y <- c("a", "b", "c")
y

z <- c(TRUE, FALSE)
z

install.packages("tidyverse")
library(tidyverse)
mpg

library(dplyr)
library(ggplot2)
ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy))

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

library(dplyr)
library(ggplot2)
no_sports_cars <- filter(mpg, as.character(class) != "2seater")
ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = class))

no_sports_cars <- no_sports_cars |> 
  mutate(japanese_make = 
           manufacturer %in% c("honda", "nissan", "subaru", "toyota"))
ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = japanese_make))

ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cyl))

ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = as.factor(cyl)))

ggplot(no_sports_cars) + 
  geom_point(aes(x = cty, y = hwy, color = as.factor(cyl)))

no_sports_cars |> 
  filter(cty < 10 | cty > 32.5) |> 
  relocate(cty, .after = year) |>
  relocate(hwy, .before = cyl)

ggplot(no_sports_cars) +
  geom_point(mapping = aes(x = cty, y = hwy, color = as.factor(cyl)), 
             position = "jitter")

ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cty))

ggplot(data = no_sports_cars) +
  geom_point(mapping = aes(x = displ, y = hwy, color = cty)) +
  scale_color_gradient(low = "yellow3", high="blue")

install.packages("viridis")
install.packages("tidycensus")
install.packages("patchwork")
install.packages("mapview")

library(tidyverse)
library(viridisLite)
library(viridis)
library(tidycensus)
library(patchwork)
library(mapview)

census_api_key("6b3123c92c911ef3b80640296b2de59f7b815669", install = TRUE)

datasets <- c("sf1", "sf2", "sf3", "sf4", "pl", 
              "as", "gu", "mp", "vi", "acs1", "acs3",
              "acs5", "acs1/profile", "acs3/profile", 
              "acs5/profile", "acs1/subject",
              "acs3/subject", "acs5/subject", 
              "acs1/cprofile", "acs5/cprofile")

acs1_variables <- load_variables(year = 2019, dataset = "acs1", cache = TRUE)
acs1_variables

race_variables <- acs1_variables |>
  filter(str_detect(name, "B01001._001")) |>
  mutate(concept_short = str_extract(concept, regex("(?<=\\().{11}")))
race_variables

race_variables_names <- c("B01001A_001", "B01001B_001", "B01001C_001", 
                          "B01001D_001", "B01001E_001", "B01001I_001")
fl_races_county <- get_acs(
  year = 2019,
  geography = "county",
  state = "FL",
  variable = race_variables_names)
fl_races_county

fl_races_county_geo <- get_acs(
  year = 2019,
  geography = "county",
  state = "FL",
  variable = race_variables_names,
  geometry = TRUE)
fl_races_county_geo

fl_races_county_geo <- get_acs(
  state = "FL",
  geography = "county",
  variables = race_variables_names,
  summary_var = "B01001_001",
  geometry = TRUE)
fl_races_county_geo

with_race_percent <- fl_races_county_geo |> 
  mutate(percent = 100 * estimate / summary_est)
with_race_percent <- with_race_percent |>
  inner_join(race_variables, by = c("variable" = "name"))
with_race_percent |> 
  ggplot(aes(fill = percent)) +
  facet_wrap(~concept_short) +
  geom_sf(color = NA) +
  theme_void() + 
  scale_fill_viridis_c() + 
  labs(fill = "% of population\n(2019 Census)")

R 데이터 분석 및 시각화 코드와 설명

단계코드설명
1. 기본 변수 생성x <- c(1, 2, 3); y <- c("a", "b", "c"); z <- c(TRUE, FALSE)숫자형, 문자형, 논리형 데이터를 각각 벡터로 생성하여 변수에 저장.
2. 패키지 설치 및 로드install.packages("tidyverse"); library(tidyverse)tidyverse 패키지를 설치 및 로드하여 데이터 처리와 시각화를 위한 환경 설정.
3. 산점도 생성ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))mpg 데이터셋의 배기량(displ)과 고속도로 연비(hwy) 관계를 산점도로 시각화.
4. 색상 추가geom_point(mapping = aes(x = displ, y = hwy, color = class))자동차의 class별로 색상을 구분하여 시각적으로 비교.
5. 스포츠카 제외no_sports_cars <- filter(mpg, as.character(class) != "2seater")filter()를 사용해 스포츠카(2seater)를 데이터에서 제외.
6. 일본 브랜드 식별mutate(japanese_make = manufacturer %in% c("honda", "nissan", "subaru", "toyota"))mutate()로 일본 제조사(japanese_make) 여부를 나타내는 새로운 열 생성.
7. 실린더별 색상 구분aes(x = displ, y = hwy, color = as.factor(cyl))실린더 수(cyl)를 범주형으로 변환하여 색상으로 구분.
8. 도시 및 고속도로 연비 비교geom_point(aes(x = cty, y = hwy, color = as.factor(cyl)))도시 연비(cty)와 고속도로 연비(hwy)의 관계를 실린더별 색상으로 시각화.
9. 특정 연비 필터링```filter(cty < 10cty > 32.5)```
10. 겹친 점 흐트러뜨리기geom_point(position = "jitter")점이 겹치는 것을 방지하기 위해 jitter로 점의 위치를 약간 무작위로 조정.
11. 연속형 색상 추가scale_color_gradient(low = "yellow3", high = "blue")연속형 데이터를 색상 그라데이션으로 표현. 연비가 높을수록 파란색, 낮을수록 노란색.
12. 센서스 API 설정census_api_key("API_KEY", install = TRUE)미국 인구조사 데이터를 가져오기 위해 API 키를 설정 및 저장.
13. 변수 목록 로드load_variables(year = 2019, dataset = "acs1", cache = TRUE)2019년 ACS1 데이터셋의 변수 목록을 가져와 변수 탐색.
14. 변수 필터링filter(str_detect(name, "B01001._001"))인종 통계 관련 변수만 필터링하여 분석에 필요한 데이터로 제한.
15. 플로리다 인종 데이터 가져오기get_acs(year = 2019, geography = "county", state = "FL", variable = race_variables_names)2019년 플로리다 카운티별 인종 통계를 가져옴.
16. 지리 정보 추가get_acs(geometry = TRUE)지리 정보(geometry)를 포함하여 데이터를 시각화할 수 있도록 설정.
17. 퍼센트 계산mutate(percent = 100 * estimate / summary_est)특정 인종의 인구 비율(%)을 계산하여 새로운 열 추가.
18. 데이터 결합inner_join(race_variables, by = c("variable" = "name"))변수 이름과 간략한 설명을 데이터에 결합하여 분석의 명확성을 높임.
19. 지도 시각화facet_wrap(~concept_short) + geom_sf() + scale_fill_viridis_c()플로리다 카운티별로 각 인종의 인구 비율을 색상으로 표현한 지도를 생성.

요약

  • 데이터 처리: 데이터 전처리(filter, mutate, inner_join)를 통해 필요한 데이터 구성.
  • 시각화: ggplot2와 지리 정보(geometry)를 활용한 지도 및 산점도 시각화.
  • 분석 대상: 자동차 데이터(mpg)와 플로리다주 인종 통계 데이터를 중심으로 분석.
profile
@mgkick

0개의 댓글