Awn_pastebin

コテハン頻度計測

Aug 7th, 2015
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //========================================//
  2. //
  3. //          グローバル変数
  4. //
  5. //========================================//
  6.  
  7. //スプレッドシートのURL
  8. var myurl = "https://docs.google.com/spreadsheets/d/1Yynlwa-JmTU9Pz0RHduFlLnueb3KKjwAs0JYOau2mao/edit"
  9. var ss = SpreadsheetApp.openByUrl(myurl);
  10. var sheet = ss.getSheetByName("summary1");
  11. var lastrow = sheet.getLastRow();
  12. var lastcol = sheet.getLastColumn();
  13. var dary = sheet.getDataRange().getValues();
  14.  
  15.  
  16.  
  17. //========================================//
  18. //
  19. //          メイン関数
  20. //
  21. //========================================//
  22. function mainFunction() {
  23.   var kr7d5t = KoteRoster(7,5);//7日間で5日
  24.   var kr14d10t = KoteRoster(14,10);//14日間で10日
  25.   var kr21d15t = KoteRoster(21,15);//21日間で15日
  26.   var kr28d20t = KoteRoster(28,20);//28日間で20日
  27.   var kr42d30t = KoteRoster(42,30);//42日間で30日
  28.   var kr56d40t = KoteRoster(56,40);//56日間で40日
  29.  
  30.  
  31.   /* TIPS  
  32.   //1次元配列を2次元配列に変換する
  33.   var output = dammy.map(function (elm){return [elm];});
  34.   */
  35.  
  36.   //ヘッダー
  37.   var hed = [["<h3>直近1週間(過去7日間)に合計5日以上書き込んでいるコテ</h3>",
  38.              "<h3>直近2週間(過去14日間)に合計10日以上書き込んでいるコテ</h3>",
  39.              "<h3>直近3週間(過去21日間)に合計15日以上書き込んでいるコテ</h3>",
  40.              "<h3>直近4週間(過去28日間)に合計20日以上書き込んでいるコテ</h3>",
  41.              "<h3>直近6週間(過去42日間)に合計30日以上書き込んでいるコテ</h3>",
  42.              "<h3>直近8週間(過去56日間)に合計40日以上書き込んでいるコテ</h3>"]];
  43.  
  44.   //結果格納用スプレッドシートのURL
  45.   var myurl = "https://docs.google.com/spreadsheets/d/1OzGco4-5UZW22Xy8ITgOANnGdml0fwVg7s82Y-e8qoE/edit"
  46.   var ss = SpreadsheetApp.openByUrl(myurl);
  47.   var sheet = ss.getSheetByName("res");
  48.  
  49.   //結果をスプレッドシートへ書き込む
  50.   sheet.clear();
  51.   sheet.getRange(1, 1, 1, 6).setValues(hed);
  52.   sheet.getRange(2, 1, kr7d5t.length, 1).setValues(kr7d5t.map(function(elm){return [elm];}) );
  53.   sheet.getRange(2, 2, kr14d10t.length,1).setValues(kr14d10t.map(function(elm){return [elm];}) );
  54.   sheet.getRange(2, 3, kr21d15t.length,1).setValues(kr21d15t.map(function(elm){return [elm];}) );
  55.   sheet.getRange(2, 4, kr28d20t.length,1).setValues(kr28d20t.map(function(elm){return [elm];}) );
  56.   sheet.getRange(2, 5, kr42d30t.length,1).setValues(kr42d30t.map(function(elm){return [elm];}) );
  57.   sheet.getRange(2, 6, kr56d40t.length,1).setValues(kr56d40t.map(function(elm){return [elm];}) );
  58. }
  59.  
  60.  
  61.  
  62. //========================================//
  63. //
  64. //          関数:KoteRoster
  65. //
  66. //========================================//
  67. function KoteRoster(Ndays,Mtimes){
  68.   var N = Ndays;// N日間で
  69.   var M = Mtimes;// M回出現
  70.  
  71.  
  72.   //N日間に出現したすべてのコテハンを集計する
  73.   var temp = [];
  74.   for(j = lastcol - N ; j < lastcol; j++){
  75.     for(i = 1; i < lastrow; i++){
  76.       if(dary[i][j] != ""){//データなしの要素は除外
  77.         temp.push( dary[i][j] );
  78.       }
  79.     }
  80.   }
  81.  
  82.   //集計結果をソートする
  83.   temp.sort();
  84.  
  85.  
  86.   //集計結果から重複する要素を取り除く
  87.   var temp_uniq = temp.filter(function (x, ix, self) { return self.indexOf(x) === ix;});
  88.  
  89.   //重複要素除去済みの各要素が集計結果中で何回出現したかカウントする
  90.   var temp_uniq_cnt = temp_uniq.map(function(elU){return (temp.filter(function(elA){return elA == elU;}) ).length;});  
  91.  
  92.  
  93.   //M回以上出現したコテハンのみをoutput変数に格納し、関数の戻り値とする
  94.   var output = [];
  95.   var temp_uniq_length = temp_uniq.length;
  96.   for(i = 0; i < temp_uniq_length ; i++){
  97.     if( temp_uniq_cnt[i] >= M ){
  98.       output.push( temp_uniq[i] );
  99.     }
  100.   }
  101.  
  102.   return output;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment