줄리아에서 빈도 수 세는 방법
설명
줄리아에서 객체 내 원소의 빈도수를 셀 때는 함수 countmap 혹은 counts를 이용하면 된다. 둘 다 패키지 StatsBase를 불러와야 사용할 수 있다.
countmap은 그 이름에 맞게 원소와 그 개수의 페어들을 반환한다. 입력 대상이 포함하는 값에 대해서만 결과를 얻는다.
julia> countmap(x)
Dict{Int64, Int64} with 4 entries:
값1 => 값1의 빈도
값2 => 값2의 빈도
값3 => 값3의 빈도
값4 => 값4의 빈도
이와 달리 counts는 우선 출력이 벡터이며, 정수에 대해서만 사용할 수 있다. 자세한 건 아래에서 코드를 확인하라.
countmap
정수의 벡터든, 문자의 벡터든, 행렬이든, 문자열이든 사용할 수 있다.
julia> x = rand(0:4, 100)
100-element Vector{Int64}:
0
4
⋮
4
1
julia> countmap(x)
Dict{Int64, Int64} with 5 entries:
0 => 28
4 => 20
2 => 13
3 => 16
1 => 23
julia> s = rand('a':'e', 100)
100-element Vector{Char}:
'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)
'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)
⋮
'e': ASCII/Unicode U+0065 (category Ll: Letter, lowercase)
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
julia> A = rand(0:4, (10,10))
10×10 Matrix{Int64}:
2 4 3 1 2 3 3 3 3 0
1 0 3 2 0 0 3 0 3 1
⋮ ⋮
2 0 1 3 4 4 2 0 4 4
1 4 4 4 2 1 2 1 0 4
julia> countmap(A)
Dict{Int64, Int64} with 5 entries:
0 => 19
4 => 24
2 => 15
3 => 22
1 => 20
julia> foo = "asdflk23f90cxnvjkcdsafalj;fdwaelkf"
"asdflk23f90cxnvjkcdsafalj;fdwaelkf"
julia> countmap(foo)
Dict{Char, Int64} with 18 entries:
'n' => 1
'f' => 5
';' => 1
⋮
'0' => 1
'2' => 1
'3' => 1
'v' => 1
counts
함수 counts는 countmap과 비슷하지만, 결과가 빈도의 벡터라는 점이 다르다. 여기서 중요한 점은 출력의 첫번째 성분이 제일 작은 값의 빈도, 두번째 성분은 그 다음 정수의 빈도와 같은 식으로 되어있다는 것이다.
julia> x = [1, 1, 2, 2, 3]
5-element Vector{Int64}:
1
1
2
2
3
julia> counts(x)
3-element Vector{Int64}:
2 # x내 1의 빈도
2 # x내 2의 빈도
1 # x내 3의 빈도
julia> y = [3, 5, 5, 8, 8, 8]
6-element Vector{Int64}:
3
5
5
8
8
8
julia> counts(y)
6-element Vector{Int64}:
1 # y내 3의 빈도
0 # y내 4의 빈도
2 # y내 5의 빈도
0 # y내 6의 빈도
0 # y내 7의 빈도
3 # y내 8의 빈도
빈도를 측정할 범위를 지정할 수 있다.
# 정수 k만 입력하면 범위 1:k 내의 빈도수를 반환
julia> counts(x, 5)
5-element Vector{Int64}:
2
2
1
0
0
julia> counts(x, 0:5)
6-element Vector{Int64}:
0
2
2
1
0
0
환경
- OS: Windows11
- Version: Julia 1.11.3, StatsBase v0.34.10

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

