2017-09-05 4 views
1

私は一般的に組み合わせに関する質問がありますが、私はまだどんなヘルプも見つけられていないかなり複雑な状況です。私は列の可能なすべての組み合わせをデータセット内のに報告する方法を見つけようとしています。可能なすべての組み合わせを報告してください

データは、土地の変化に関する文献調査を報告し、各記事で報告されている近位および基礎のドライバを示します。したがって、行は個々の記事を示し、列はすべて近接した基礎となるドライバを示します。 6種類の近接ドライバと5種類の基本ドライバがあります。各記事について、その記事で識別されるドライバの列には1が、そうでないドライバの列には0がそれぞれ配置されます。テーブルには、大体そうのようになります。

key | d1 | d2 |...| d6 | i1 |...| i5 | 
-------------------------------------- 
A1 | 1 | 0 |...| 1 | 1 |...| 0 | 
A2 | 0 | 1 |...| 0 | 0 |...| 1 | 

記事A1は、間接ドライバーとして直接ドライバとI1とD1とD6を特定した場合、など

を私がやりたいと思うパートナーはどのような記事の数を見つけることですダイレクトドライバー、間接ドライバー、直接ドライバーと間接ドライバーのすべての可能な組み合わせのそれぞれを報告します。例えば、d1、d2、i1を識別する記事の件数などです。 d1、d2、およびi2をどれくらい識別するか。等々?私の生徒はExcelファイルにテーブルを持っています。私は、おそらくCalcまたはBaseにプロセスを自動化する機能があると考えていました。どのように私はこれを行うことができるかについて誰かが考えを持っていますか?

ありがとうございました!

+0

2^11の組み合わせをすべて識別し、それぞれの数がどれくらいあるのかを数えたいのですが、出力ファイルをナビゲートする必要があります。それは2048種類の組み合わせです。 –

+0

そのため、私はプロセスを簡素化したいと考えていました。この考え方は、ドライバーのどの組み合わせが文献で最も頻繁に発生するのかを特定することです。 – Napoletano

+0

小さなUDFを使用してドライバを条件付き文字列に結合します(またはバイナリ数字を連結します)。ピボットテーブルを使用して、各組み合わせ文字列の数を数えます。 – MacroMarc

答えて

0

私はついに諦めて、ブルートフォースアプローチで行きました。私はテーブルをテキストにエクスポートし、それをMySQLにプルし、bashスクリプトを使ってオプションを繰り返しました。他のケースの誰かが同様の問題を持っていて、ここではbashスクリプトです:

# Generate array containing factors 
faclis1=(d_inf d_com d_inm d_ind d_agr d_bos i_dem i_eco i_tec i_pol i_cul); 
#faclis=("d_inf" "d_com" "d_inm"); 
a=0 
#echo ${faclis[@]}; 


# Remove output file if exists 
if [ -e permcounts.txt ]; 
    then 
    rm permcounts.txt; 
    fi; 

# Cycle through list of factors 
for f1 in ${faclis1[@]}; 
do 
# only proceed if factor not null 
if [ ${f1} ]; 
then 
# print remaining array just to be sure 
echo "factor list is ${faclis1[@]}"; 
#echo ${faclis[@]}; 
echo "Now on factor ${f1}"; 
echo "FACTOR ${f1}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1;" metamorelia >> permcounts.txt; 
# create sub array without current factor, 2 factors 
faclis2=(${faclis1[@]/${f1}/}); 
#set sub-counter 
b=0 
#echo "${faclis2[@]}"; 
# loop through sub array, two factors 
for f2 in ${faclis2[@]}; 
do 
if [ ${f2} ] && \ 
[ "${f1}" != "${f2}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis3=(${faclis2[@]//${f2}}); 
c=0 
#echo "${faclis3[@]}"; 
# loop through sub-array 
for f3 in ${faclis3[@]}; 
do 
if [ ${f3} ] && \ 
[ "${f1}" != "${f3}" ] && \ 
[ "${f2}" != "${f3}" ]; 

then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis4=(${faclis3[@]//${f3}}); 
d=0 
#echo "${faclis4[@]}"; 
# loop through sub-array 
for f4 in ${faclis4[@]}; 
do 
if [ ${f4} ] && \ 
[ "${f1}" != "${f4}" ] && \ 
[ "${f2}" != "${f4}" ] && \ 
[ "${f3}" != "${f4}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis5=(${faclis4[@]//${f4}}); 
e=0 
#echo "${faclis5[@]}"; 
# loop through sub-array 
for f5 in ${faclis5[@]}; 
do 
if [ ${f5} ] && \ 
[ "${f1}" != "${f5}" ] && \ 
[ "${f2}" != "${f5}" ] && \ 
[ "${f3}" != "${f5}" ] && \ 
[ "${f4}" != "${f5}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis6=(${faclis5[@]//${f5}}); 
f=0 
#echo "${faclis6[@]}"; 
# loop through sub-array 
for f6 in ${faclis6[@]}; 
do 
if [ ${f6} ] && \ 
[ "${f1}" != "${f6}" ] && \ 
[ "${f2}" != "${f6}" ] && \ 
[ "${f3}" != "${f6}" ] && \ 
[ "${f4}" != "${f6}" ] && \ 
[ "${f5}" != "${f6}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis7=(${faclis6[@]//${f6}}); 
g=0 
#echo "${faclis7[@]}"; 
# loop through sub-array 
for f7 in ${faclis7[@]}; 
do 
if [ ${f7} ] && \ 
[ "${f1}" != "${f7}" ] && \ 
[ "${f2}" != "${f7}" ] && \ 
[ "${f3}" != "${f7}" ] && \ 
[ "${f4}" != "${f7}" ] && \ 
[ "${f5}" != "${f7}" ] && \ 
[ "${f6}" != "${f7}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6} \ 
AND ${f7}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1 and \ 
${f7} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis8=(${faclis7[@]//${f7}}); 
h=0 
#echo "${faclis8[@]}"; 
# loop through sub-array 
for f8 in ${faclis8[@]}; 
do 
if [ ${f8} ] && \ 
[ "${f1}" != "${f8}" ] && \ 
[ "${f2}" != "${f8}" ] && \ 
[ "${f3}" != "${f8}" ] && \ 
[ "${f4}" != "${f8}" ] && \ 
[ "${f5}" != "${f8}" ] && \ 
[ "${f6}" != "${f8}" ] && \ 
[ "${f7}" != "${f8}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6} \ 
AND ${f7} \ 
AND ${f8}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1 and \ 
${f7} = 1 and \ 
${f8} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis9=(${faclis8[@]//${f8}}); 
i=0 
#echo "${faclis9[@]}"; 
# loop through sub-array 
for f9 in ${faclis9[@]}; 
do 
if [ ${f9} ] && \ 
[ "${f1}" != "${f9}" ] && \ 
[ "${f2}" != "${f9}" ] && \ 
[ "${f3}" != "${f9}" ] && \ 
[ "${f4}" != "${f9}" ] && \ 
[ "${f5}" != "${f9}" ] && \ 
[ "${f6}" != "${f9}" ] && \ 
[ "${f7}" != "${f9}" ] && \ 
[ "${f8}" != "${f9}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6} \ 
AND ${f7} \ 
AND ${f8} \ 
AND ${f9}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1 and \ 
${f7} = 1 and \ 
${f8} = 1 and \ 
${f9} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis10=(${faclis9[@]//${f9}}); 
j=0 
#echo "${faclis10[@]}"; 
# loop through sub-array 
for f10 in ${faclis10[@]}; 
do 
if [ ${f10} ] && \ 
[ "${f1}" != "${f10}" ] && \ 
[ "${f2}" != "${f10}" ] && \ 
[ "${f3}" != "${f10}" ] && \ 
[ "${f4}" != "${f10}" ] && \ 
[ "${f5}" != "${f10}" ] && \ 
[ "${f6}" != "${f10}" ] && \ 
[ "${f7}" != "${f10}" ] && \ 
[ "${f8}" != "${f10}" ] && \ 
[ "${f9}" != "${f10}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6} \ 
AND ${f7} \ 
AND ${f8} \ 
AND ${f9} \ 
AND ${f10}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1 and \ 
${f7} = 1 and \ 
${f8} = 1 and \ 
${f9} = 1 and \ 
${f10} = 1;" metamorelia >> permcounts.txt; 

# next sub-array 
faclis11=(${faclis10[@]//${f10}}); 
k=0 
#echo "${faclis11[@]}"; 
# loop through sub-array 
for f11 in ${faclis11[@]}; 
do 
if [ ${f11} ] && \ 
[ "${f1}" != "${f11}" ] && \ 
[ "${f2}" != "${f11}" ] && \ 
[ "${f3}" != "${f11}" ] && \ 
[ "${f4}" != "${f11}" ] && \ 
[ "${f5}" != "${f11}" ] && \ 
[ "${f6}" != "${f11}" ] && \ 
[ "${f7}" != "${f11}" ] && \ 
[ "${f8}" != "${f11}" ] && \ 
[ "${f9}" != "${f11}" ] && \ 
[ "${f10}" != "${f11}" ]; 
then 
echo "FACTOR ${f1} \ 
AND ${f2} \ 
AND ${f3} \ 
AND ${f4} \ 
AND ${f5} \ 
AND ${f6} \ 
AND ${f7} \ 
AND ${f8} \ 
AND ${f9} \ 
AND ${f10} \ 
AND ${f11}" >> permcounts.txt; 
mysql -u harvey -pdavid -e "select count(clave) from genfact where \ 
${f1} = 1 and \ 
${f2} = 1 and \ 
${f3} = 1 and \ 
${f4} = 1 and \ 
${f5} = 1 and \ 
${f6} = 1 and \ 
${f7} = 1 and \ 
${f8} = 1 and \ 
${f9} = 1 and \ 
${f10} = 1 and \ 
${f11} = 1;" metamorelia >> permcounts.txt; 

unset faclis11[k]; 
k=$((${k} + 1)); 
fi; 
done; 
unset faclis10[j]; 
j=$((${j} + 1)); 
fi; 
done; 
unset faclis9[i]; 
i=$((${i} + 1)); 
fi; 
done; 
unset faclis8[h]; 
h=$((${h} + 1)); 
fi; 
done; 
unset faclis7[g]; 
g=$((${g} + 1)); 
fi; 
done; 
unset faclis6[f]; 
f=$((${f} + 1)); 
fi; 
done; 
unset faclis5[e]; 
e=$((${e} + 1)); 
fi; 
done; 
unset faclis4[d]; 
d=$((${d} + 1)); 
fi; 
done; 
unset faclis3[c]; 
c=$((${c} + 1)); 
fi; 
done; 
# Remove analyzed factors from vector 
unset faclis2[b]; 
b=$((${b} + 1)); 
fi; 
done; 
# remove nth item from array (progressively remove one item) 
unset faclis1[a]; 
# increment n for next round 
a=$((${a} + 1)); 
echo ${n}; 
fi; 
done; 

このスクリプトは、その中に多少非効率的である私は、私は不要な動作の多くを含んだと思うが、それは仕事を得ました。

関連する問題