2017-12-19 21 views
1

データセットのデータは純粋にcharで構成されています。たとえば:matplotlibを使用したCharデータのパンダデータフレームのプロット

p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u 
e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g 
e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m 
p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u 
e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g 

データの完全なコピーが

agaricus-lepiota.data in the uci machine learning datasets mushroom datasetで文字データを使用して(代わりの数値に設定されたデータを変換すること)matplotlibの経由のための可視化の方法があります見つけることができますか?ただ、可視化すなわちの任意の並べ替えのための

filename = 'mushrooms.csv' 
df_mushrooms = pd.read_csv(filename, names = ["Classes", "Cap-Shape", "Cap-Surface", "Cap-Colour", "Bruises", "Odor", "Gill-Attachment", "Gill-Spacing", "Gill-Size", "Gill-Colour", "Stalk-Shape", "Stalk-Root", "Stalk-Surface-Above-Ring", "Stalk-Surface-Below-Ring", "Stalk-Colour-Above-Ring", "Stalk-Colour-Below-Ring", "Veil-Type", "Veil-Colour", "Ring-Number", "Ring-Type", "Spore-Print-Colour", "Population", "Habitat"]) 


#If there are any entires (rows) with any missing values/NaN's drop the row. 
df_mushrooms.dropna(axis = 0, how = 'any', inplace = True) 

df_mushrooms.plot.scatter(x = 'Classes', y = 'Cap-Shape') 
+0

私はそうは思わない。文字が何を表しているかは大きな疑問です。幸いにも、数値への変換は簡単です。 –

+0

使用できる 'pd.factorize'メソッドがあります。または、カテゴリに変換します。 –

+0

原則として 'plt.scatter([" "e"、 "w"、 "a"、 "e"]、["z"、 "t"、 "z"、 "u"]) 。特にマッシュルームのケースでは、そのようなプロットによって伝達される情報は何なのでしょうか?むしろ、茶色のキノコがどれくらい食べられるのか、量が関心のあるものなのかを知りたいのですか?スキャッターは、その組み合わせがデータにどれだけ頻繁に入っていても、ドットだけを表示します。 – ImportanceOfBeingErnest

答えて

1

これを行うことが可能であるが、この方法でそれが本当にビューのグラフィカルな点から任意の意味をなさない。

enter image description here

そして、私は彼らのグラフを提示する方法を誰かに伝えるの領土に踏むべきではありませんが、これは伝えていません知っている:あなたはそれが次のようになりますため、あなたが求めて何をした場合私にはどんな情報でも。問題は、xyのインデックスにClassesCap-Shapeのフィールドを使用すると、常に同じ場所に同じ文字が表示されることです。変動はありません。おそらく、インデックスとして使用できる他のフィールドがあり、マーカーとしてCap-Shapeを使用していますが、これは値を追加するものではありません。それは私にとって個人的にも同じです。

文字列をマーカーとして使用するには、matplotlib.markersに記載されている "$ ... $"マーカーを使用できますが、もう一度、このようなグラフが従来の方法よりもはるかに遅いという警告を提供する必要がありますデータフレームの行

fig, ax = plt.subplots() 
# Classes only has 'p' and 'e' as unique values so we will map them as 1 and 2 on the index 
df['Class_Id'] = df.Classes.map(lambda x: 1 if x == 'p' else 2) 
df['Cap_Val'] = df['Cap-Shape'].map(lambda x: ord(x) - 96) 
for idx, row in df.iterrows(): 
    ax.scatter(x=row.Class_Id, y=row.Cap_Val, marker=r"$ {} $".format(row['Cap-Shape']), c=plt.cm.nipy_spectral(row.Cap_Val/26)) 
ax.set_xticks([0,1,2,3]) 
ax.set_xticklabels(['', 'p', 'e', '']) 
ax.set_yticklabels(['', 'e', 'j', 'o', 't', 'y']) 
fig.show() 
関連する問題