0

5,000以上の属性を含むデータセットがあります テーブルは以下のようになります

id attr1 attr2, attr3
a  0         1       0
a  1         0       0
a  0         0       0
a  0         0       1

クラスタリングによるデータマイニングに適したものにするために、たとえば下の表のように、各レコードを 1 つの行に表示したいと考えています。

id, attr1, attr2, attr3
a     1       1        1

私はこれを行う多くの方法を試しました.MYSQL DBにインポートして、各属性の最大値を取得しようとしました(IDごとに1または0のみにすることができます)が、テーブルは5,000以上の属性を保持できません.

Excel でピボット関数を使用して属性ごとの最大値を取得しようとしましたが、ピボットが処理できる列の数は、現在見ている 5,000 よりもはるかに少ないです。

私はそれをTableuaにインポートしようとしましたが、あまりにも多くのレコードを処理できないという事実にも苦しんでいます

テキスト/CSVファイルまたはデータベーステーブルのいずれかで表2を取得したいだけです

ソフトウェアの一部、または私がまだ検討していないものなど、誰かが何か提案できますか

4

1 に答える 1

3

これは、あなたが求めることを行うPythonスクリプトです

def merge_rows_by_id(path):
    rows = dict()
    with open(path) as in_file:
        header = in_file.readline().rstrip()
        for line in in_file:
            fields = line.split()
            id, attributes = fields[0], fields[1:]
            if id not in rows:
                rows[id] = attributes
            else:
                rows[id] = [max(x) for x in zip(rows[id], attributes)]

    print (header)
    for id in rows:
        print ('{},{}'.format(id, ','.join(rows[id])))

 merge_rows_by_id('my-data.txt')

これは、かなり効率的ですが、最大効率よりも明確にするために書かれています。ただし、これでも 5000 個の属性を持つ行が残りますが、その数はさらに少なくなります。

私はこのデータの「構造」がバイオインフォマティクスであまりにも頻繁に使用されているのを見てきました.研究者は「「a」について知っていることすべてを1つの行に入れると、「すべて」のセットが2倍になり、さらに2倍になるなどと言っています. RDBM が得たものを処理できるように、データの正規化について彼らに教えなければなりませんでした。通常、attr_1…n1 回の試行からのものattr_n+1…mで、2 回目の試行からのものというように、データの賢明な正規化が可能になります。

于 2013-05-19T12:42:47.190 に答える