• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:組み合わせ関連スクリプト)

組み合わせ関連スクリプト

このQ&Aのポイント
  • 組み合わせ関連スクリプトについての質問です。
  • カラムの組み合わせを試すためのスクリプトを作成したいですが、どこから始めればよいかわかりません。
  • サンプルデータがあり、同じ人数ずつのグループを作成するためにどのデータを破棄すればよいか調べたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

どうせ、1回しか使わなしか使わないと思うので、無理矢理やります このサイトの特性上、スペースでのインデントが使えない、というPythonのスクリプトを書く上での重大な問題があるので、スペースは全てアンダーバーにしました。 sed 's/_/ /g'とでもして使ってください。 #!/usr/bin/env python from_itertools_import_combinations_as_C dataE1=( ____(1,1,1), ____(2,1,1), ____(3,1,2), ____(4,1,7), ____(5,1,9) ____) dataE2=( ____(6,2,2), ____(7,2,2), ____(8,2,3), ____(9,2,3), ____(10,2,3) ____) dataE3=( ____(11,3,3), ____(12,3,3), ____(13,3,4), ____(14,3,4), ____(15,3,8) ____) dataE4=( ____(16,4,4), ____(17,4,4), ____(18,4,5), ____(19,4,5), ____(20,4,7) ____) dataE5=( ____(21,5,5), ____(22,5,5), ____(23,5,6), ____(24,5,6) ____) dataE6=( ____(25,6,6), ____(26,6,6), ____(27,6,7), ____(28,6,7) ____) dataE7=( ____(29,7,4), ____(30,7,5), ____(31,7,8), ____(32,7,8), ____(33,7,8) ____) dataE8=( ____(34,8,2), ____(35,8,8), ____(36,8,9), ____(37,8,9), ____(38,8,9) ____) dataE9=( ____(39,9,1), ____(40,9,1), ____(41,9,6), ____(42,9,9) ____) for_num_in_xrange(4,0,-1): ____expt2=[0]_*_9 ____for_c1_in_C(dataE1,num): ________for_dt_in_c1:_expt2[dt[2]-1]_+=1 ________for_c2_in_C(dataE2,num): ____________for_dt_in_c2:_expt2[dt[2]-1]_+=1 ____________for_c3_in_C(dataE3,num): ________________for_dt_in_c3:_expt2[dt[2]-1]_+=1 ________________for_c4_in_C(dataE4,num): ____________________for_dt_in_c4:_expt2[dt[2]-1]_+=1 ____________________for_c5_in_C(dataE5,num): ________________________for_dt_in_c5:_expt2[dt[2]-1]_+=1 ________________________for_c6_in_C(dataE6,num): ____________________________for_dt_in_c6:_expt2[dt[2]-1]_+=1 ____________________________for_c7_in_C(dataE7,num): ________________________________for_dt_in_c7:_expt2[dt[2]-1]_+=1 ________________________________for_c8_in_C(dataE8,num): ____________________________________for_dt_in_c8:_expt2[dt[2]-1]_+=1 ____________________________________for_c9_in_C(dataE9,num): ________________________________________for_dt_in_c9:_expt2[dt[2]-1]_+=1 ________________________________________res=[] ________________________________________res.extend(c1) ________________________________________res.extend(c2) ________________________________________res.extend(c3) ________________________________________res.extend(c4) ________________________________________res.extend(c5) ________________________________________res.extend(c6) ________________________________________res.extend(c7) ________________________________________res.extend(c8) ________________________________________res.extend(c9) ________________________________________#_judge ________________________________________judge=True ________________________________________for_i_in_xrange(9): ____________________________________________if_expt2[i]_!=num: ________________________________________________judge=False ________________________________________________break ________________________________________if_judge_: ____________________________________________print_num,res ____________________________________________e1=[[]_for_i_in_range(9)] ____________________________________________e2=[[]_for_i_in_range(9)] ____________________________________________for_r_in_res: ________________________________________________s="%02d"_%_r[0] ________________________________________________e1[r[1]-1].append(s) ________________________________________________e2[r[2]-1].append(s) ____________________________________________for_i_in_xrange(9): ________________________________________________print_"_EX1-%d:_%s"_%_(i+1,_",".join(e1[i])) ____________________________________________for_i_in_xrange(9): ________________________________________________print_"_EX2-%d:_%s"_%_(i+1,_",".join(e2[i])) ________________________________________for_dt_in_c9:_expt2[dt[2]-1]_-=1 ____________________________________for_dt_in_c8:_expt2[dt[2]-1]_-=1 ________________________________for_dt_in_c7:_expt2[dt[2]-1]_-=1 ____________________________for_dt_in_c6:_expt2[dt[2]-1]_-=1 ________________________for_dt_in_c5:_expt2[dt[2]-1]_-=1 ____________________for_dt_in_c4:_expt2[dt[2]-1]_-=1 ________________for_dt_in_c3:_expt2[dt[2]-1]_-=1 ____________for_dt_in_c2:_expt2[dt[2]-1]_-=1 ________for_dt_in_c1:_expt2[dt[2]-1]_-=1

juillet07
質問者

お礼

> どうせ、1回しか使わなしか使わないと思うので お察しの通りです。無理矢理なコードでも何でも(笑)、助かりました!! importの部分でImportErrorが出てしまったのですが、itertoolsのcombinationsの部分をPythonのマニュアルからコピーしてきて上記コードの"from itertools..."の行の代わりに貼り付けたらエラーなしでできました。3時間半かかりましたが、(3人~1人の)413530組の組み合わせをすべて抽出できたようです。コードの内容はこれからじっくり勉強させていただきます。エラーに関しては、itertoolsのマニュアルを見ると、combinationsは”New in version 2.6”とあり、私のはversion 2.5なので恐らくそれが原因ではないかと思っています。 ありがとうございました!!

その他の回答 (1)

noname#140045
noname#140045
回答No.1

イマイチ、私の解読力がないのかも知れませんが、上記条件だと subject,expt1 subject,expt2 を被験者と実験を個別に関連づけ、各グループ最低4名いるのですから、5名のグループを1人破棄して4名にするだけのような気がします。 何かもっと「subject,expt1,expt2」と管理する理由があるとは思うのですが、それが書いていないような気がします。 (間違っていたら、ゴメンなさい)

juillet07
質問者

補足

早速にご回答ありがとうございます。説明不足で申し訳ありません。 ご提案のように単純に5名のグループを4名にする方法だと、例えばexpt 1のグループ1は5人いるのでsubject 1を破棄したとします。そうするとexpt 1のグループ1は4名になっていいのですが、expt 2のグループ1はsubject 1が抜けたことで3名になってしまいます。つまり各グループ4人にする場合、expt1, 2とも5人いるグループに所属している人を各グループから破棄しなければなりません。expt 1グループ1の場合、subject 9しか破棄候補はありません。(地道にやってみたところ4名ずつ揃えるというのは無理そうなのですが、3名ずつもしくは2名ずつ、1名ずつでできるかどうかチェックしたいのですが、組み合わせが多すぎてスクリプトなしではとても対応しきれませんでした...) この説明で補足になりましたでしょうか。

関連するQ&A

専門家に質問してみよう