質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

PCAで次元削減した後にクラスタリングを行いグラフに描画をしたい

kawasemi29
kawasemi29

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0評価

0クリップ

517閲覧

投稿2021/10/24 17:23

python

コード

前提・実現したいこと

excelのデータを利用してクラスタリングをしているプログラミング初心者です。
複数の項目があったのでPCAで次元削減をした後クラスタリングを行い、その結果をグラフの描画を行おうと試みているのですがいろいろ試してみましたが描画されません。
基礎的なところで躓いているかもしれませんがご指摘いただけたら嬉しいです。

発生している問題・エラーメッセージ

TypeError Traceback (most recent call last) <ipython-input-22-81f51b7dc085> in <module> 2 color = ['r', 'b', 'g'] 3 for i in range(3): ----> 4 p = data1[labels == i, :] 5 plt.scatter(p[:, 0], p[:, 1], marker = markers[i], color = color[i]) 6 ~\anaconda3\envs\OpenCV_Face\lib\site-packages\pandas\core\frame.py in __getitem__(self, key) 2900 if self.columns.nlevels > 1: 2901 return self._getitem_multilevel(key) -> 2902 indexer = self.columns.get_loc(key) 2903 if is_integer(indexer): 2904 indexer = [indexer] ~\anaconda3\envs\OpenCV_Face\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance) 2893 casted_key = self._maybe_cast_indexer(key) 2894 try: -> 2895 return self._engine.get_loc(casted_key) 2896 except KeyError as err: 2897 raise KeyError(key) from err pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc() TypeError: '(array([ True, False, False, False, False, False, True, False, False, True, True, False, False, False, True, False, True, True, True, False, False, True, False, False, False, False, True, True, False, False, False, False, True, True, True, True, True, True, False, False, True, False, False, False, True, True, False, False, False, False, False, True, True, False, False, True, True, True, False, False, True, True, False, False, False, False, False, False, False, True, False, False, False, True]), slice(None, None, None))' is an invalid key

該当のソースコード

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
PCA(copy=True, n_components=None, whiten=False)
pca.fit(data1)

data1_2d = pca.transform(data1)
data1_2d = pd.DataFrame(data1_2d)
data1_2d.index = data1.index
data1_2d.columns = ['PC1','PC2']
data1_2d

ax = data1_2d.plot(kind='scatter', x='PC2', y='PC1', figsize=(16,8))

from sklearn.cluster import KMeans
kmeans_model = KMeans(n_clusters=3, random_state=10).fit(data1.iloc[:, 1:])

labels = kmeans_model.labels_

labels
array([0, 2, 2, 1, 1, 1, 0, 2, 2, 0, 0, 1, 1, 1, 0, 2, 0, 0, 0, 1, 1, 0,
2, 1, 1, 1, 0, 0, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 1, 0, 1, 1, 1, 0])
#ちゃんとクラスターに割り振られてはいます

markers = ["+", "*", "o"]
color = ['r', 'b', 'g']
for i in range(3):
p = data1[labels == i, :]
plt.scatter(p[:, 0], p[:, 1], marker = markers[i], color = color[i])

plt.show()
#ここでエラー発生

### 試したこと 様々なサイトを参考にさせていただき、思いつく内容を複数試したのですが、描画されることはありませんでした。 ### 補足情報(FW/ツールのバージョンなど) 基礎的なところで詰まっている可能性もあると思いますのどうぞお手柔らかにご教示いただければと思います。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

ppaul
ppaul

2021/10/25 00:49

print(type(data1)) を実行すると何が表示されますか?
jbpb0
jbpb0

2021/10/25 00:53

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
jbpb0
jbpb0

2021/10/25 01:36 編集

> data1_2d.index = data1.index をやってることから、「data1」はpandasのデータフレームのようなので、 p = data1[labels == i, :] plt.scatter(p[:, 0], p[:, 1], marker = markers[i], color = color[i]) ↓ 修正 p = data1[labels == i] plt.scatter(p.iloc[:, 0], p.iloc[:, 1], marker = markers[i], color = color[i]) で、どうでしょうか?
jbpb0
jbpb0

2021/10/25 01:57 編集

直接の質問内容のエラーの対策とは違いますが、「data1」はPCAで処理する前のデータなので、 > PCAで次元削減をした後クラスタリングを行い、その結果をグラフの描画 とするのなら、 kmeans_model = KMeans(n_clusters=3, random_state=10).fit(data1.iloc[:, 1:]) ↓ 変更 kmeans_model = KMeans(n_clusters=3, random_state=10).fit(data1_2d) として、PCA処理後の「data1_2d」をクラスタリングで使うのではないのでしょうか?
jbpb0
jbpb0

2021/10/25 01:56

もし、最後の「plt.scatter()」で表示したいのが、PCA処理で2次元化した「ax = data1_2d.plot(...」でプロットしたものを、さらにクラスタリング結果で記号・色で区別したいということなら、私の「2021/10/25 10:25」のコメントの修正の代わりに、 p = data1[labels == i, :] plt.scatter(p[:, 0], p[:, 1], marker = markers[i], color = color[i]) ↓ 修正 p = data1_2d[labels == i] plt.scatter(p.iloc[:, 1], p.iloc[:, 0], marker = markers[i], color = color[i]) としてみてください (私の一つ前のコメントの修正と合わせて)
jbpb0
jbpb0

2021/10/25 02:06

もし、最後の「plt.scatter()」で表示したいのが、PCA処理で2次元化した「data1_2d」ではなく、元データ「data1」の0, 1列目の散布図なら、クラスタリングの入力では kmeans_model = KMeans(n_clusters=3, random_state=10).fit(data1.iloc[:, 1:]) として「data1」の0列目を除外してるのに、グラフ表示では0列目を使うのは不思議な気がする

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。