전직 초안의 응답률을 R을 사용하여 집계 해 보았습니다.
원래 스크래핑과 R 연습으로 시작했지만 지난번은 데이터 표시만으로 끝나 버렸으므로 이번에는 R 스크립트도 써 갑니다.
처리할 데이터
스크래핑을 사용하여 회사 이름, 사용자 ID, 지명 금액, 답변 데이터를 추출하고 tmp.csv에 넣습니다.
$ head -n 3 tmp.csv
name,user_id,income,reply
Speee,1,ゴッド,承諾
Retty,2,ウィザード,承諾
전체 응답률
> x = read.csv("tmp.csv")
> table(x$reply)
辞退 承諾 未返答
123 197 57
>
> round(prop.table(y) * 100)
辞退 承諾 未返答
33 52 15
read.csv는 기본적으로 header = T이므로 첫 번째 행은 데이터 영역이 아닌 헤더로 처리됩니다.x$reply
그렇게하면 열 데이터를 검색 할 수 있습니다.
table
를 사용하여 집계 할 수 있습니다.
prop.table
로 비율로 변환할 수 있습니다.
지명 전체의 33%가 사퇴, 52%가 승낙, 15%가 미답이다.
회사별 응답률
> table(x$name, x$reply)
辞退 承諾 未返答
BASE 4 6 2
freee 8 21 2
Retty 21 28 14
Sansan 19 20 8
Speee 14 10 4
VASILY 3 4 1
イグニス 1 2 0
クルーズ 2 4 1
サイバーエージェント(ゲーム事業) 8 9 2
ディー・エヌ・エー 6 15 2
ナイル(旧:ヴォラーレ) 2 2 1
フリークアウト 11 13 2
ペロリ 4 4 5
ミクシィ 4 4 1
ヤフー 8 10 3
リクルートライフスタイル 5 30 9
リブセンス 3 15 0
table
에 2개의 요소를 건네주는 것으로, 집계를 할 수 있다.
소계를 추가하려면 몇 가지 방법이 있는 것 같다.
피벗 테이블을 다루기 위해서는 reshape2
가 유명한 것 같지만, tidyr 1 도 좋다, 라고 하는 이야기로, 헤매었으므로, 라이브러리를 사용하지 않고 베타인 방법으로 간다.
> y = table(x$name, x$reply)
> y = cbind(y, "合計" = rowSums(y))
> y
辞退 承諾 未返答 合計
BASE 4 6 2 12
freee 8 21 2 31
Retty 21 28 14 63
Sansan 19 20 8 47
Speee 14 10 4 28
VASILY 3 4 1 8
イグニス 1 2 0 3
クルーズ 2 4 1 7
サイバーエージェント(ゲーム事業) 8 9 2 19
ディー・エヌ・エー 6 15 2 23
ナイル(旧:ヴォラーレ) 2 2 1 5
フリークアウト 11 13 2 26
ペロリ 4 4 5 13
ミクシィ 4 4 1 9
ヤフー 8 10 3 21
リクルートライフスタイル 5 30 9 44
リブセンス 3 15 0 18
>
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z
辞退 承諾 未返答 合計 辞退率 承諾率 未返答率
BASE 4 6 2 12 33 50 16
freee 8 21 2 31 25 67 6
Retty 21 28 14 63 33 44 22
Sansan 19 20 8 47 40 42 17
Speee 14 10 4 28 50 35 14
VASILY 3 4 1 8 37 50 12
イグニス 1 2 0 3 33 66 0
クルーズ 2 4 1 7 28 57 14
サイバーエージェント(ゲーム事業) 8 9 2 19 42 47 10
ディー・エヌ・エー 6 15 2 23 26 65 8
ナイル(旧:ヴォラーレ) 2 2 1 5 40 40 20
フリークアウト 11 13 2 26 42 50 7
ペロリ 4 4 5 13 30 30 38
ミクシィ 4 4 1 9 44 44 11
ヤフー 8 10 3 21 38 47 14
リクルートライフスタイル 5 30 9 44 11 68 20
リブセンス 3 15 0 18 16 83 0
>
cbind 로 열을 결합할 수 있다. 합계를 결합했다.
총 열과 각 열에 대해 100을 곱하여 floor 함으로써 백분율화.
다소의 어긋남은 신경쓰지 않는다.
> z[rev(order(z[,6])),5:7]
辞退率 承諾率 未返答率
リブセンス 16 83 0
リクルートライフスタイル 11 68 20
freee 25 67 6
イグニス 33 66 0
ディー・エヌ・エー 26 65 8
クルーズ 28 57 14
フリークアウト 42 50 7
VASILY 37 50 12
BASE 33 50 16
ヤフー 38 47 14
サイバーエージェント(ゲーム事業) 42 47 10
ミクシィ 44 44 11
Retty 33 44 22
Sansan 40 42 17
ナイル(旧:ヴォラーレ) 40 40 20
Speee 50 35 14
ペロリ 30 30 38
>
승낙율로 오름차순 정렬해 보았다.
z[,6]이 수락율 열입니다.
order를 사용하면 순서의 index가 반환됩니다.
order(z[,6])
[1] 13 5 11 4 3 14 9 15 1 6 12 8 10 7 2 16 17
그래서 rev에서 역순.
[,5:7]에서 5열부터 7열까지 추출.
모두 맞추면 z[rev(order(z[,6])),5:7]
가 된다.
뭐야 이 립센스의 승낙율! ?
지명액별 응답률
> y = table(x$income, x$reply)
> y
辞退 承諾 未返答
ウィザード 15 20 13
ゴッド 2 3 1
スター 32 56 18
ノービス 0 3 0
ノーマル 33 44 11
プチリッチ 41 71 14
>
> my_order = c(2, 1, 3, 6, 5, 4)
> y = y[my_order,]
> y
辞退 承諾 未返答
ゴッド 2 3 1
ウィザード 15 20 13
スター 32 56 18
プチリッチ 41 71 14
ノーマル 33 44 11
ノービス 0 3 0
>
table(x$income, x$reply)
에서 집계.
순서를 변경하고 싶었기 때문에 수동으로 순서 벡터를 만들고 정렬합니다.
이후에는 위와 같은 코드를 사용한다.
> y = cbind(y, "合計" = rowSums(y))
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z[,5:7]
辞退率 承諾率 未返答率
ゴッド 33 50 16
ウィザード 31 41 27
スター 30 52 16
プチリッチ 32 56 11
ノーマル 37 50 12
ノービス 0 100 0
지명액이 높은 편이 승낙율이 높은 것이라고 생각했지만, 그런 일은 없었다.
사용자별 응답률
유저는 많기 때문에, 한층 더 정리해 본다.
승낙율을 [0, 1~10, 11~20, ..., 90~99, 100]의 계층으로 분할한다.
y = table(x$user_id, x$reply)
......
> as.matrix(table(cut(z[,6], c(-1, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99, 100))))
[,1]
(-1,0] 43
(0,10] 0
(10,20] 3
(20,30] 4
(30,40] 0
(40,50] 16
(50,60] 3
(60,70] 8
(70,80] 4
(80,90] 0
(90,99] 0
(99,100] 54
z[,6] 은 승낙율.
cut을 사용하여 데이터를 지정된 범위에 매핑합니다.(-1,0]
는 -1을 포함하지 않고 0을 포함하는 범위.(0,10]
는 0을 포함하지 않고 10을 포함하는 범위.
소위 개방 공간과 폐쇄 공간.
table로 집계하고, as.matrix로 세로로 변환했다(종횡 변환의 방법을 모르기 때문에 행렬로 고치는 것으로 세로 형식으로 성형했다).
승낙율이 0이라는 것은 [사퇴, 미반응]만의 사람이 43명 있다는 것을 나타내고 있다.
지명이 있던 사람은 135명이므로, 실은 32%의 사람이 한 건도 승낙하고 있지 않다.
그러나 반대로 말하면 68%의 사람이 승낙하고 있다.
매칭률 68%는 좋을 것 같은 느낌이 들지만, 실제로 어떨까?
덧붙여서, 미반응율 100%의 사람은 20명 있었다.
length(z[,7][z[,7] == 100])
[1] 20
히스토그램으로 쓰면 이런 느낌.
요약
$ head -n 3 tmp.csv
name,user_id,income,reply
Speee,1,ゴッド,承諾
Retty,2,ウィザード,承諾
> x = read.csv("tmp.csv")
> table(x$reply)
辞退 承諾 未返答
123 197 57
>
> round(prop.table(y) * 100)
辞退 承諾 未返答
33 52 15
read.csv는 기본적으로 header = T이므로 첫 번째 행은 데이터 영역이 아닌 헤더로 처리됩니다.
x$reply
그렇게하면 열 데이터를 검색 할 수 있습니다.table
를 사용하여 집계 할 수 있습니다.prop.table
로 비율로 변환할 수 있습니다.지명 전체의 33%가 사퇴, 52%가 승낙, 15%가 미답이다.
회사별 응답률
> table(x$name, x$reply)
辞退 承諾 未返答
BASE 4 6 2
freee 8 21 2
Retty 21 28 14
Sansan 19 20 8
Speee 14 10 4
VASILY 3 4 1
イグニス 1 2 0
クルーズ 2 4 1
サイバーエージェント(ゲーム事業) 8 9 2
ディー・エヌ・エー 6 15 2
ナイル(旧:ヴォラーレ) 2 2 1
フリークアウト 11 13 2
ペロリ 4 4 5
ミクシィ 4 4 1
ヤフー 8 10 3
リクルートライフスタイル 5 30 9
リブセンス 3 15 0
table
에 2개의 요소를 건네주는 것으로, 집계를 할 수 있다.
소계를 추가하려면 몇 가지 방법이 있는 것 같다.
피벗 테이블을 다루기 위해서는 reshape2
가 유명한 것 같지만, tidyr 1 도 좋다, 라고 하는 이야기로, 헤매었으므로, 라이브러리를 사용하지 않고 베타인 방법으로 간다.
> y = table(x$name, x$reply)
> y = cbind(y, "合計" = rowSums(y))
> y
辞退 承諾 未返答 合計
BASE 4 6 2 12
freee 8 21 2 31
Retty 21 28 14 63
Sansan 19 20 8 47
Speee 14 10 4 28
VASILY 3 4 1 8
イグニス 1 2 0 3
クルーズ 2 4 1 7
サイバーエージェント(ゲーム事業) 8 9 2 19
ディー・エヌ・エー 6 15 2 23
ナイル(旧:ヴォラーレ) 2 2 1 5
フリークアウト 11 13 2 26
ペロリ 4 4 5 13
ミクシィ 4 4 1 9
ヤフー 8 10 3 21
リクルートライフスタイル 5 30 9 44
リブセンス 3 15 0 18
>
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z
辞退 承諾 未返答 合計 辞退率 承諾率 未返答率
BASE 4 6 2 12 33 50 16
freee 8 21 2 31 25 67 6
Retty 21 28 14 63 33 44 22
Sansan 19 20 8 47 40 42 17
Speee 14 10 4 28 50 35 14
VASILY 3 4 1 8 37 50 12
イグニス 1 2 0 3 33 66 0
クルーズ 2 4 1 7 28 57 14
サイバーエージェント(ゲーム事業) 8 9 2 19 42 47 10
ディー・エヌ・エー 6 15 2 23 26 65 8
ナイル(旧:ヴォラーレ) 2 2 1 5 40 40 20
フリークアウト 11 13 2 26 42 50 7
ペロリ 4 4 5 13 30 30 38
ミクシィ 4 4 1 9 44 44 11
ヤフー 8 10 3 21 38 47 14
リクルートライフスタイル 5 30 9 44 11 68 20
リブセンス 3 15 0 18 16 83 0
>
cbind 로 열을 결합할 수 있다. 합계를 결합했다.
총 열과 각 열에 대해 100을 곱하여 floor 함으로써 백분율화.
다소의 어긋남은 신경쓰지 않는다.
> z[rev(order(z[,6])),5:7]
辞退率 承諾率 未返答率
リブセンス 16 83 0
リクルートライフスタイル 11 68 20
freee 25 67 6
イグニス 33 66 0
ディー・エヌ・エー 26 65 8
クルーズ 28 57 14
フリークアウト 42 50 7
VASILY 37 50 12
BASE 33 50 16
ヤフー 38 47 14
サイバーエージェント(ゲーム事業) 42 47 10
ミクシィ 44 44 11
Retty 33 44 22
Sansan 40 42 17
ナイル(旧:ヴォラーレ) 40 40 20
Speee 50 35 14
ペロリ 30 30 38
>
승낙율로 오름차순 정렬해 보았다.
z[,6]이 수락율 열입니다.
order를 사용하면 순서의 index가 반환됩니다.
order(z[,6])
[1] 13 5 11 4 3 14 9 15 1 6 12 8 10 7 2 16 17
그래서 rev에서 역순.
[,5:7]에서 5열부터 7열까지 추출.
모두 맞추면 z[rev(order(z[,6])),5:7]
가 된다.
뭐야 이 립센스의 승낙율! ?
지명액별 응답률
> y = table(x$income, x$reply)
> y
辞退 承諾 未返答
ウィザード 15 20 13
ゴッド 2 3 1
スター 32 56 18
ノービス 0 3 0
ノーマル 33 44 11
プチリッチ 41 71 14
>
> my_order = c(2, 1, 3, 6, 5, 4)
> y = y[my_order,]
> y
辞退 承諾 未返答
ゴッド 2 3 1
ウィザード 15 20 13
スター 32 56 18
プチリッチ 41 71 14
ノーマル 33 44 11
ノービス 0 3 0
>
table(x$income, x$reply)
에서 집계.
순서를 변경하고 싶었기 때문에 수동으로 순서 벡터를 만들고 정렬합니다.
이후에는 위와 같은 코드를 사용한다.
> y = cbind(y, "合計" = rowSums(y))
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z[,5:7]
辞退率 承諾率 未返答率
ゴッド 33 50 16
ウィザード 31 41 27
スター 30 52 16
プチリッチ 32 56 11
ノーマル 37 50 12
ノービス 0 100 0
지명액이 높은 편이 승낙율이 높은 것이라고 생각했지만, 그런 일은 없었다.
사용자별 응답률
유저는 많기 때문에, 한층 더 정리해 본다.
승낙율을 [0, 1~10, 11~20, ..., 90~99, 100]의 계층으로 분할한다.
y = table(x$user_id, x$reply)
......
> as.matrix(table(cut(z[,6], c(-1, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99, 100))))
[,1]
(-1,0] 43
(0,10] 0
(10,20] 3
(20,30] 4
(30,40] 0
(40,50] 16
(50,60] 3
(60,70] 8
(70,80] 4
(80,90] 0
(90,99] 0
(99,100] 54
z[,6] 은 승낙율.
cut을 사용하여 데이터를 지정된 범위에 매핑합니다.(-1,0]
는 -1을 포함하지 않고 0을 포함하는 범위.(0,10]
는 0을 포함하지 않고 10을 포함하는 범위.
소위 개방 공간과 폐쇄 공간.
table로 집계하고, as.matrix로 세로로 변환했다(종횡 변환의 방법을 모르기 때문에 행렬로 고치는 것으로 세로 형식으로 성형했다).
승낙율이 0이라는 것은 [사퇴, 미반응]만의 사람이 43명 있다는 것을 나타내고 있다.
지명이 있던 사람은 135명이므로, 실은 32%의 사람이 한 건도 승낙하고 있지 않다.
그러나 반대로 말하면 68%의 사람이 승낙하고 있다.
매칭률 68%는 좋을 것 같은 느낌이 들지만, 실제로 어떨까?
덧붙여서, 미반응율 100%의 사람은 20명 있었다.
length(z[,7][z[,7] == 100])
[1] 20
히스토그램으로 쓰면 이런 느낌.
요약
> table(x$name, x$reply)
辞退 承諾 未返答
BASE 4 6 2
freee 8 21 2
Retty 21 28 14
Sansan 19 20 8
Speee 14 10 4
VASILY 3 4 1
イグニス 1 2 0
クルーズ 2 4 1
サイバーエージェント(ゲーム事業) 8 9 2
ディー・エヌ・エー 6 15 2
ナイル(旧:ヴォラーレ) 2 2 1
フリークアウト 11 13 2
ペロリ 4 4 5
ミクシィ 4 4 1
ヤフー 8 10 3
リクルートライフスタイル 5 30 9
リブセンス 3 15 0
> y = table(x$name, x$reply)
> y = cbind(y, "合計" = rowSums(y))
> y
辞退 承諾 未返答 合計
BASE 4 6 2 12
freee 8 21 2 31
Retty 21 28 14 63
Sansan 19 20 8 47
Speee 14 10 4 28
VASILY 3 4 1 8
イグニス 1 2 0 3
クルーズ 2 4 1 7
サイバーエージェント(ゲーム事業) 8 9 2 19
ディー・エヌ・エー 6 15 2 23
ナイル(旧:ヴォラーレ) 2 2 1 5
フリークアウト 11 13 2 26
ペロリ 4 4 5 13
ミクシィ 4 4 1 9
ヤフー 8 10 3 21
リクルートライフスタイル 5 30 9 44
リブセンス 3 15 0 18
>
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z
辞退 承諾 未返答 合計 辞退率 承諾率 未返答率
BASE 4 6 2 12 33 50 16
freee 8 21 2 31 25 67 6
Retty 21 28 14 63 33 44 22
Sansan 19 20 8 47 40 42 17
Speee 14 10 4 28 50 35 14
VASILY 3 4 1 8 37 50 12
イグニス 1 2 0 3 33 66 0
クルーズ 2 4 1 7 28 57 14
サイバーエージェント(ゲーム事業) 8 9 2 19 42 47 10
ディー・エヌ・エー 6 15 2 23 26 65 8
ナイル(旧:ヴォラーレ) 2 2 1 5 40 40 20
フリークアウト 11 13 2 26 42 50 7
ペロリ 4 4 5 13 30 30 38
ミクシィ 4 4 1 9 44 44 11
ヤフー 8 10 3 21 38 47 14
リクルートライフスタイル 5 30 9 44 11 68 20
リブセンス 3 15 0 18 16 83 0
>
> z[rev(order(z[,6])),5:7]
辞退率 承諾率 未返答率
リブセンス 16 83 0
リクルートライフスタイル 11 68 20
freee 25 67 6
イグニス 33 66 0
ディー・エヌ・エー 26 65 8
クルーズ 28 57 14
フリークアウト 42 50 7
VASILY 37 50 12
BASE 33 50 16
ヤフー 38 47 14
サイバーエージェント(ゲーム事業) 42 47 10
ミクシィ 44 44 11
Retty 33 44 22
Sansan 40 42 17
ナイル(旧:ヴォラーレ) 40 40 20
Speee 50 35 14
ペロリ 30 30 38
>
> y = table(x$income, x$reply)
> y
辞退 承諾 未返答
ウィザード 15 20 13
ゴッド 2 3 1
スター 32 56 18
ノービス 0 3 0
ノーマル 33 44 11
プチリッチ 41 71 14
>
> my_order = c(2, 1, 3, 6, 5, 4)
> y = y[my_order,]
> y
辞退 承諾 未返答
ゴッド 2 3 1
ウィザード 15 20 13
スター 32 56 18
プチリッチ 41 71 14
ノーマル 33 44 11
ノービス 0 3 0
>
table(x$income, x$reply)
에서 집계.순서를 변경하고 싶었기 때문에 수동으로 순서 벡터를 만들고 정렬합니다.
이후에는 위와 같은 코드를 사용한다.
> y = cbind(y, "合計" = rowSums(y))
> z = cbind(y, "辞退率" = floor(y[,1] * 100 / y[,4]), "承諾率" = floor(y[,2] * 100 / y[,4]), "未返答率" = floor(y[,3] * 100 / y[,4]))
> z[,5:7]
辞退率 承諾率 未返答率
ゴッド 33 50 16
ウィザード 31 41 27
スター 30 52 16
プチリッチ 32 56 11
ノーマル 37 50 12
ノービス 0 100 0
지명액이 높은 편이 승낙율이 높은 것이라고 생각했지만, 그런 일은 없었다.
사용자별 응답률
유저는 많기 때문에, 한층 더 정리해 본다.
승낙율을 [0, 1~10, 11~20, ..., 90~99, 100]의 계층으로 분할한다.
y = table(x$user_id, x$reply)
......
> as.matrix(table(cut(z[,6], c(-1, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99, 100))))
[,1]
(-1,0] 43
(0,10] 0
(10,20] 3
(20,30] 4
(30,40] 0
(40,50] 16
(50,60] 3
(60,70] 8
(70,80] 4
(80,90] 0
(90,99] 0
(99,100] 54
z[,6] 은 승낙율.
cut을 사용하여 데이터를 지정된 범위에 매핑합니다.(-1,0]
는 -1을 포함하지 않고 0을 포함하는 범위.(0,10]
는 0을 포함하지 않고 10을 포함하는 범위.
소위 개방 공간과 폐쇄 공간.
table로 집계하고, as.matrix로 세로로 변환했다(종횡 변환의 방법을 모르기 때문에 행렬로 고치는 것으로 세로 형식으로 성형했다).
승낙율이 0이라는 것은 [사퇴, 미반응]만의 사람이 43명 있다는 것을 나타내고 있다.
지명이 있던 사람은 135명이므로, 실은 32%의 사람이 한 건도 승낙하고 있지 않다.
그러나 반대로 말하면 68%의 사람이 승낙하고 있다.
매칭률 68%는 좋을 것 같은 느낌이 들지만, 실제로 어떨까?
덧붙여서, 미반응율 100%의 사람은 20명 있었다.
length(z[,7][z[,7] == 100])
[1] 20
히스토그램으로 쓰면 이런 느낌.
요약
y = table(x$user_id, x$reply)
......
> as.matrix(table(cut(z[,6], c(-1, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99, 100))))
[,1]
(-1,0] 43
(0,10] 0
(10,20] 3
(20,30] 4
(30,40] 0
(40,50] 16
(50,60] 3
(60,70] 8
(70,80] 4
(80,90] 0
(90,99] 0
(99,100] 54
어쨌든, R이 편리합니다.
참고
reshape2에 의한 크로스 집계(Excel 피벗 테이블과 같은 조작을 실시한다)
reshape2: 유연한 데이터 변형 도구 - Watal M. Iwasaki
질서와 정보와 브로콜리 : R 언어 cut 함수 사용법
r - Add column sum to table - Stack Overflow
htps : // 헤아 vy water l. 기주 b. 이오 / rs ts / chi dyr. HTML ↩
Reference
이 문제에 관하여(전직 초안의 응답률을 R을 사용하여 집계 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/osd/items/c8106b0f660dd1193dbd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(전직 초안의 응답률을 R을 사용하여 집계 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/osd/items/c8106b0f660dd1193dbd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)