私のデータセットは、一緒に働いているか、一人で働いている人々のリストです。
各プロジェクトの行と、そのプロジェクトに携わったすべての人の名前の列があります。列2が行の最初の空の列である場合、それは単独のジョブでした。列4が行の最初の空の列である場合、3人が一緒に作業していました。
すべてのペアを見つけるためのコードがあります。出力データセットでは、すべてのアクターが列と行にラベルを付けて、正方形NxNが作成されます。セル(A、B)と(B、A)には、そのペアが一緒に機能した回数が含まれています。Bでの作業は、BがAでの作業と同じように扱われます。
カンマ区切りの入力データの例:
A,.,.
A,B,.
B,C,E
B,F,.
D,F,.
A,B,C
D,B,.
E,C,B
X,D,A
F,D,.
B,.,.
F,.,.
F,X,C
C,F,D
Python3.2を使用しています。これを行うコード:
import csv
import collections
import itertools
grid = collections.Counter()
with open("connect.csv", "r") as fp:
reader = csv.reader(fp)
for line in reader:
# clean empty names
line = [name.strip() for name in line if name.strip()]
# count single works
if len(line) == 1:
grid[line[0], line[0]] += 1
# do pairwise counts
for pair in itertools.combinations(line, 2):
grid[pair] += 1
grid[pair[::-1]] += 1
actors = sorted(set(pair[0] for pair in grid))
with open("connection_grid.csv", "w") as fp:
writer = csv.writer(fp)
writer.writerow([''] + actors)
for actor in actors:
line = [actor,] + [grid[actor, other] for other in actors]
writer.writerow(line)
私の質問は次のとおりです。
月と年の列がある場合、月ごとのマトリックススプレッドシートを作成することはできますか?(つまり、2011年の場合、12個の行列があります)?
私が使用する内訳が何であれ、変数名が一緒に働いたすべての人々の組み合わせであるような変数を作成することは可能ですか?たとえば、「ABD」は、人物A、人物B、および人物Dが一緒に作業したプロジェクトを意味し、ABDが3つのグループとしてどのような順序で作業した回数にも等しくなります。プロジェクトは最大20人を収容できるため、2〜20人のグループを作成できる必要があります。また、変数をアルファベット順にするのが最も簡単です。