2017-07-02 16 views
3

このピクルスのようにデータをフォーマットし、それが私たちは、私は<a href="https://github.com/ImSoErgodic/py-upset" rel="nofollow noreferrer">PyUpset</a>パッケージを使用しようとしています

hereは、私は、データの内容と形式を表示するには、次のコードを実行することができます見つけることができますpickelのテストデータを持つことができる方法

from pickle import load 
with open('./test_data_dict.pckl', 'rb') as f: 
    data_dict = load(f) 
data_dict 
フォーマットを次のようにデータを示した0​​

、私は私のCSVデータをフォーマットしようとしている

[495 rows X 4 columns], 
    'adventure':   title rating_avg \ 
     0    20,000 Leagues Under the Sea (1954) 3.702609  
     1     7th Voyage of Sinbad, The (1958)  3.616279 

      rating_std views 
     0  0.869685 575 
     1  0.931531 258 

    [281 rows x 4 columns], 
    'romance':   title rating_avg \ 
     0    'Til There Was You (1997) 2.402609  
     1     1-900 (1994)    2.411279 

      rating_std views 
     0  0.669685 575 
     1  0.981310 245 

、のようにそれがどのように見えるか、それは単なる一例この方法と一番近いで私は、次の形式で、この

csvファイルのようなものにパンダを使用していた得ることができた

Type_A, Type_B, Type_C 
x1,x2,x3 
y1,y2,y3 
データフレームにインポートし、インデックスを追加した後、それらを一緒にCONCATする

使用パンダ

次いで
import pandas as pd 
df=pd.read_csv(csv_file) 
d1=df.Type_A.tolist() 
d2=df.Type_B.tolist() 
d3=df.Type_C.tolist() 

指標使用列挙()

d1_df=list(enumerate(d1, 1)) 
d2_df=list(enumerate(d2, 1)) 
d3_df=list(enumerate(d3, 1)) 
d1_df # this gives me [(1, 'x1'), (2, 'y1')] 

Nを追加しますOWは、次の私は、すべての3 1つのデータフレームにまとめ

labels = ['Id','Value'] 
d1_df = pd.DataFrame.from_records(d1_df, columns=labels) 
d2_df = pd.DataFrame.from_records(d2_df, columns=labels) 
d3_df = pd.DataFrame.from_records(d3_df, columns=labels) 


d1_df # this gives me Id Value 
     #   0 1 x1 
     #   1 2 y1 

をDATAFRAMEと私は打たれていた場合、私は私が使用していると思います。これは、あるTYPE_A、TYPE_BとType_C

child_df = [d1_df, d2_df, d3_df] 
labels2 = ['Type_A','Type_B','Type_C'] 

parent_df = pd.concat(child_df, keys=['Type_A', 'Type_B', 'Type_C']) 

parent_df # out below 


#   Id Value 
#Type_A 0 1 x1 
#  1 2 y1 
#Type_B 0 1 x2 
#  1 2 y2 
#Type_C 0 1 x3 
#  1 2 y3 

を再定義するlablesイドと価値を追加しましたPyUpsetがどのように使用されたかの形式でデータを取得する方が簡単なはずです。

答えて

2

テーブルを「長い」形式になるように転置する必要があると思います。一度それをすると、pyupsetの正しい辞書を作るために、pandasのgroupbyメソッドを使うことができます。

import pandas as pd 
try: 
    # for Python 2.x 
    from StringIO import StringIO 
except ImportError: 
    # for Python 3.x 
    from io import StringIO 

test_string = StringIO("""Type_A,Type_B,Type_C 
x1,x2,x3 
y1,y2,y3""") 

df = pd.read_csv(test_string) 
df = pd.melt(df, var_name='type') 
# df now looks like this: 
# 
# type  value 
# 0 Type_A x1 
# 1 Type_A y1 
# 2 Type_B x2 
# 3 Type_B y2 
# 4 Type_C x3 
# 5 Type_C y3 

pyupset_data = {key: df.loc[value] for key, value in df.groupby("type").groups.items()} 
0

実際にはデータフレーム全体としての値を持つ単純なpython dictだと思います。キーは一番下の行にあるタイトルです。

関連する問題

 関連する問題