본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

Rstudio 데이터 가공 및 기초 분석 #2

by Vitaminymc 2023. 8. 2.
반응형

slam_dunk_total.csv
0.00MB

table ()

  • 데이터의 고유한 값들의 빈도를 계산하여 테이블로 반환
  • 벡터, 요인형 데이터, 문자열 등 다양한 형태의 데이터에 대해 빈도를 계산할 수 있음

기본 예제

eg_1 <- c("A", "B", "A", "C", "B", "A", "A", "C", "B", "A")  #A, B, C가 섞여 있는 임의 데이터

table (eg_1)  #각 factor의 빈도
eg_1
A    B   C 
5    3    2 
table (eg_1, exclude = c("B"))  # 'B'를 제외한 각 factor의 빈도
eg_1
A    C 
5    2 
table (eg_1, exclude = c("A", "B"))    # 'A',와 'B'를 제외한 각 factor의 빈도
eg_1

 

slam_dunk_total 데이터

사용 데이터 :  Rstudio 데이터 가공 및 기초 분석 #1 (tistory.com) 참조

빈도 분석

# 전체 데이터의 유니폼 넘버 빈도 계산

table (slam_dunk_total$uniform_no)
 4  5  6  7  8  9 10 11 12 13 14 15 
 6  6  6  5  6  4   2   2   2   2   2   5 
# 4번을 제외한 빈도 계산

table (slam_dunk_total$uniform_no, exclude = 4)
 5  6  7  8  9 10 11 12 13 14 15 
 6  6  5  6  4   2   2   2   2   2   5 
# 4번, 5번, 6번을 제외한 빈도 계산

table (slam_dunk_total$uniform_no, exclude = c(4, 5, 6))
 7  8  9 10 11 12 13 14 15 
 5  6  4   2   2   2   2   2   5 

두 가지 변수의 조합  빈도 분석

table (slam_dunk_total$school, slam_dunk_total$age)
           17 18 19
  능남    2   4   2
  산왕    1   1   5
  상북    5   4   3
  상양    0   2   4
  풍전    1   1   4
  해남    1   4   4
  • 능남고는 18세(2학년)이 4명으로 가장 많음
  • 산왕고는 19세(3학년)이 5명으로 구성됨
  • 상양고는 17세(1학년)이 없음
  • 상북고는 17세(1학년)이 5명으로 가장 많음
 # interaction 함수를 사용하여 두 필드의 조합을 생성한 후, 이를 table 함수의 입력으로 사용하여 빈도를 계산

table(interaction(slam_dunk_total$school, slam_dunk_total$age)) 
능남.17 산왕.17 상북.17 상양.17 풍전.17 해남.17 능남.18 산왕.18 상북.18 상양.18 
       2           1           5           0            1           1           4           1           4           2 
풍전.18 해남.18 능남.19 산왕.19 상북.19 상양.19 풍전.19 해남.19 
       1           4           2           5           3           4           4            4 
  • 두 개의 변수(학교, 나이)를 조합한 요인형 변수 (학교명.나이)별로 빈도 반환

 

addmargins() + table ()

  • 테이블의 행과 열에 합계를 추가하는 addmargins 함수와 데이터의 빈도를 계산하는 table 함수를 사용하여,
    빈도와 행 및 열이 합계를 표시

엑셀 피벗

Rstudio

  • addmargins(x, margin)
  • 합계를 추가할 방향을 지정할 수 있음
    • margin = 없음(생략) : 테이블의 전체 합계가 추가되며, Sum이라는 열과 행이 추가
    • margin = 1: 행의 합계가 추가되며, Sum이라는 행이 추가
    • margin = 2: 열의 합계가 추가되며, Sum이라는 열이 추가
# margin = 없음

addmargins(table (slam_dunk_total$school, slam_dunk_total$age) )
           17  18  19  Sum
  능남    2    4    2     8
  산왕    1    1    5     7
  상북    5    4    3   12
  상양    0    2    4     6
  풍전    1    1    4     6
  해남    1    4    4     9
  Sum  10  16  22   48
addmargins(table (slam_dunk_total$school, slam_dunk_total$age), 1)
             17 18   19
  능남     2    4     2
  산왕    1     1     5
  상북    5     4     3
  상양    0     2     4
  풍전    1     1     4
  해남    1     4     4
  Sum  10   16   22
addmargins(table (slam_dunk_total$school, slam_dunk_total$age), 2)
            17   18   19   Sum
  능남     2     4     2      8
  산왕     1     1     5      7
  상북     5     4     3    12
  상양     0     2     4      6
  풍전     1     1     4      6
  해남     1     4     4      9

prop.table() + table ()

  • 주어진 테이블의 총합에 대한 상대적인 비율을 계산하는 데 사용
  • prop.table(x, margin)
    • margin = 없음(생략) : 전체 테이블의 총합에 대한 상대 빈도를 계산
    • margin = 1: 행의 합에 대한 상대 빈도를 계산
    • margin = 2: 열의 합에 대한 상대 빈도를 계산
prop.table (table (slam_dunk_total$school, slam_dunk_total$age) )
                         17                     18                   19
  능남    0.04166667    0.08333333    0.04166667
  산왕    0.02083333    0.02083333    0.10416667
  상북    0.10416667    0.08333333    0.06250000
  상양    0.00000000    0.04166667    0.08333333
  풍전    0.02083333    0.02083333    0.08333333
  해남    0.02083333    0.08333333    0.08333333
  • 총 48개의 기준으로 각 값에 대한 비율 반환 (예. 상북 17세 : 5 / 48 = 0.10416667, 상북 19세 : 3 / 48 = 0.0625)
prop.table (table (slam_dunk_total$school, slam_dunk_total$age), 1 )
                           17             18                    19
  능남    0.2500000    0.5000000    0.2500000
  산왕    0.1428571    0.1428571    0.7142857
  상북    0.4166667    0.3333333    0.2500000
  상양    0.0000000    0.3333333    0.6666667
  풍전    0.1666667    0.1666667    0.6666667
  해남    0.1111111     0.4444444    0.4444444
  • 학교별로 각 나이의 비율 반환 (예. 상북 17세 5명, 18세 4명, 19세 3명, 총 12명, 17세 : 5 /12 =  0.4166667)
prop.table (table (slam_dunk_total$school, slam_dunk_total$age), 2 )
                             17                  18                   19
  능남    0.20000000    0.25000000    0.09090909
  산왕    0.10000000    0.06250000    0.22727273
  상북    0.50000000    0.25000000    0.13636364
  상양    0.00000000    0.12500000    0.18181818
  풍전    0.10000000    0.06250000    0.18181818
  해남    0.10000000    0.25000000    0.18181818
  • 나이별로 각 학교의 비율 반환 (예. 17세 총 10명, 상북 17세 : 5 / 10 =  0.50000000)

round()

  • round(x, digits = 0)
  • digits: 반올림할 소수점 자릿수를 지정
  • 기본값은 0으로, 소수점 첫째 자리에서 반올림
  • 양수를 지정하면 해당 소수점 자릿수까지 반올림하고, 음수를 지정하면 해당 자릿수 이전에서 반올림
# 100을 곱하고, 소수점 둘째 자리에서 반올림

round (prop.table (table (slam_dunk_total$school, slam_dunk_total$age) ) *100, 2)
                  17       18        19
  능남     4.17     8.33     4.17
  산왕     2.08     2.08   10.42
  상북   10.42     8.33     6.25
  상양     0.00     4.17     8.33
  풍전    2.08     2.08      8.33
  해남    2.08     8.33      8.33
  • 100을 곱하고, 소수점 둘째 자리에서 반올림하여, 일반적으로 사용되는 %단위로 정리됨 

ceiling()과 floor()

  • ceiling() 함수는 올림을 수행
  • floor() 함수는 버림을 수행
  • ceiling() 함수와 floor() 함수는 소수점 이하의 자릿수를 직접 지정하는 것이 아니라, 정수를 올리거나 내릴 때 사용
  • 이들 함수는 주어진 숫자를 가장 가까운 큰 정수 또는 작은 정수로 반올림하지 않고 그냥 올리거나 내림
# 예시 숫자
num <- 3.14159

# ceiling() 함수로 올림
ceiled_num <- ceiling(num)
print(ceiled_num) # Output: 4

# floor() 함수로 내림
floored_num <- floor(num)
print(floored_num) # Output: 3

# round() 함수로 소수점 첫째 자리에서 반올림
rounded_num_1 <- round(num, digits = 1)
print(rounded_num_1) # Output: 3.1
728x90