
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 < 10 | cty > 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)와 플로리다주 인종 통계 데이터를 중심으로 분석.