전직 초안의 응답률을 R을 사용하여 집계 해 보았습니다.

9863 단어 R전직
전직 초안 | IT 엔지니어를 연봉 · 직장 내용으로 경쟁 입찰 의 회답 기한이 종료했으므로, 회답율을 집계해 보았다.

원래 스크래핑과 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

히스토그램으로 쓰면 이런 느낌.



요약


  • R을 사용하여 집계해 보았다.
  • 테이블이 편리합니다
  • cut 가 편리
  • order에서 임의로 순서가 바뀌어 편리
  • 이번 전직 드래프트, 7할 정도가 다음 액션으로 연결되어 있었다.
  • 지명액이 높기 때문에 승낙하는 경향은 없었다.

  • 어쨌든, 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 

    좋은 웹페이지 즐겨찾기