본문 바로가기
데이터분석 부트캠프/n일차 기록

부트캠프 27일차

by 84a982 2026. 4. 13.

2026/04/13 - 27일차 | ggplot2, 산점도, 선그래프, 확률과 확률실험, 이항분포 

 

[ ggplot2 ]

  • 다양한 시각화 기능을 가지고 있는 패키지
  • 가장 대중적
  • 데이터프레임 시각화(각 컬럼별 선그래프, 산점도 등등)
install.packages('ggplot2')
library(ggplot2)


1. 기본 구성

  • ggplot : 데이터 정의
  • aes : 변수(축) 정의

2. 시각화 함수

  • geom_bar()
  • geom_line()
  • geom_point()
  • geom_boxplot()
  • geom_histogram()

3. 옵션 함수

  • xlab(), ylab(), labs()
  • theme()



[ 산점도 ]

ggplot(data = ,
       mapping = aes(x=..., y=..., col=...)) +
  geom_point() +
  labs() +
  theme()

 

예제) iris data 산점도

더보기
p1 <- c('#0000ff', '#ff00ff', '#00cc00')
ggplot(iris, aes(x = Sepal.Length, 
                 y = Sepal.Width,
                 col = Species)) +
  geom_point(size = 2) +
  labs(title = '산점도', x = 'Sepal.Length', y = 'Sepal.Width') +
  theme_classic()+
  scale_color_manual(values = p1) +
  theme(
    plot.title = element_text(
      size = 18,
      color = "blue",
      face = "bold",
      family = "sans",
      hjust = 0.5                   # 가운데 정렬
    ),
    axis.title.x = element_text(
      size = 14,
      color = "red",
      face = "bold"
    ),
    axis.title.y = element_text(
      size = 14,
      color = "green",
      face = "bold"
    ))





[ 선그래프 ]

ggplot(iris, aes(x = Sepal.Length, 
                 y = Sepal.Width,
                 col = Species)) +
  geom_line() +
  labs(title = '산점도', x = 'Sepal.Length', y = 'Sepal.Width') +
  theme_classic()



예제) 시간대별 각 배달음식에 대한 통화건수 현황 선그래프

더보기
deli <- read.csv('delivery.csv', fileEncoding = 'cp949')

# 폰트설정
windowsFonts(
  dongle = windowsFont("Dongle")     # 다운로드한 폰트를 임의의 이름으로 등록
)

# 기초데이터 가공
library(plyr)
library(stringr)

total <- ddply(deli, .(시간대, 업종), summarise, 통화건수 = sum(통화건수))
total$업종 <- str_remove(total$업종, '음식점-')

# 시각화
p1 = c('#0000ff', '#ff00ff', '#00cc00', '#ff8000')

ggplot(total, aes(x = 시간대, 
                  y = 통화건수,
                 col = 업종)) +
  geom_line(size = 1.2) +
  labs(title = '배달업종별 배달 현황 비교', 
       x = '시간대', y = '통화건수') +
  scale_x_continuous(breaks = total$시간대) +
  scale_y_continuous(breaks = seq(0, 90000, 10000)) +
  theme_classic() +
  scale_color_manual(values = p1) +
  theme(
    text = element_text(family = 'dongle'),
    plot.title = element_text(size = 28, hjust = 0.5),
    axis.title.x = element_text(size = 18),
    axis.title.y = element_text(size = 18, angle = 0),
    axis.text.x = element_text(size = 15),
    axis.text.y = element_text(size = 15),
    legend.title = element_text(size = 15, color = 'red', hjust = 0.5),
    legend.text = element_text(size = 12),
    legend.background = element_rect(color = 'black', fill = 'white'),
    #legend.position = "top",
    #legend.justification = "center",
    plot.background = element_rect(fill = "#F8F9F8"),
    panel.background = element_rect(fill = "#F8F9F8"))

 


[ 확률과 확률실험 ]

 

1. 확률실험

  • 각 실험 반복
  • 각 반복마다 일정한 확률
  • 예상되는 결과 정해져있지만 실제값은 알수없는

2. 사건

  • 확률실험을 통해서 관심을 갖게 되는 특정 실험
  • 동전을 던져서 앞면이 나오는 사건

3. 확률변수

  • 사건에서 얻을수 있는, 수치로 표현가능한 대상
  • 사건의 결과이면서 각 결과마다의 확률값을 알 수 있음


예) 동전던지기 실험을 5번 반복해서 얻게되는 앞면이 나오는 횟수(X)

더보기
P(X=0) : TTTTT
0.5^5 = 0.03125

P(X=1) : HTTTT, THTTT, TTHTT, TTTHT, TTTTH
5*0.5^5 = 0.15625
choose(5,1)*(0.5)^1*(0.5)^4

P(X=2) : HHTTT, HTHTT, ...
choose(5,2)*(0.5)^2*(0.5)^3 = 0.3125

P(X=3) : choose(5,3)*(0.5)^3*(0.5)^2 = 0.3125
P(X=4) : choose(5,4)*(0.5)^4*(0.5)^1 = 0.15625
P(X=5) : choose(5,5)*(0.5)^5*(0.5)^0 = 0.03125

# 분포 시각화
par(mfrow = c(1,1))
vx <- 0:5
vy <- choose(5,0:5)*(0.5)^5
barplot(vy, names.arg = vx)

 



[ 이항분포 ]

  • 이산형 확률분포
  • 베르누이 시험을 n회 반복했을 때 성공횟수(X)가 따르는 분포
  • 모수: n, p
  • X ~ B(n,p)


예제) 이산형 확률분포의 확률계산

# 자유투 성공률이 0.8인 A선수가
# 총 10번 자유투를 던졌을 때 4번 성공할 확률은?
# 확률변수(X) : 총 10번 자유투 성공횟수
X ~ B(10,0.8)
P(X=x) = nCx * p^x * (1-p)^n-x
P(X=4) = choose(10,4) * 0.8^4 * (0.2)^6 = 0.005505024




R에서 사용 가능한 확률 함수
1. 확률질량/밀도 함수 : dbinom()

X ~ B(10,0.8)
P(X=4) = choose(10,4) * 0.8^4 * (0.2)^6 = 0.005505024
P(X=4) = dbinom(x,      # 성공횟수
                size,   # 시행횟수
                prob)   # 성공확률
       = dbinom(4,10,0.8) = 0.005505024

2. 누적분포함수 : p____
3. 퍼센트포인트함수 : q____
4. 랜덤샘플링 : r___

rbinom(n,        # 샘플크기
       size,     # 총 시행횟수(n)
       prob)     # 성공확률(p)



** 이항분포 시각화

더보기
# 1) n의 변화에 따른
v1 <- rbinom(100, 10, 0.5)
v2 <- rbinom(100, 20, 0.5)
v3 <- rbinom(100, 30, 0.5)

par(mfrow=c(1,3))
par('mar' = c(5,5,4,2))
hist(v1, breaks = 0:30, main = 'E(X)=5')
hist(v2, breaks = 0:30, main = 'E(X)=10')
hist(v3, breaks = 0:30, main = 'E(X)=15')
# 2) p의 변화에 따른
v1 <- rbinom(100, 10, 0.1)
v2 <- rbinom(100, 10, 0.5)
v3 <- rbinom(100, 10, 0.9)

par(mfrow=c(1,3))
par('mar' = c(5,5,4,2))
hist(v1, breaks = 0:10, prob = T, main = "p=0.1")
hist(v2, breaks = 0:10, prob = T, main = "p=0.5")
hist(v3, breaks = 0:10, prob = T, main = "p=0.9")






27일차 실습 문제 풀이

링크첨부 예정

'데이터분석 부트캠프 > n일차 기록' 카테고리의 다른 글

부트캠프 29일차  (0) 2026.04.16
부트캠프 28일차  (0) 2026.04.16
부트캠프 26일차  (0) 2026.04.13
부트캠프 25일차  (0) 2026.04.10
부트캠프 24일차  (0) 2026.04.08