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

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

ただいまの
回答率

89.89%

保存したアイリスデータの散布図の作成

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 60

k2r

score 3

前提・実現したいこと

保存したアイリスデータの散布図の作成(6種類)
それぞれの特徴量から6種類の散布図を作成したいのですが、エラーがでて困っています。
どのようにしたらできますでしょうか。教えてください。

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

AttributeError                            Traceback (most recent call last)
<ipython-input-181-893180ca08ff> in <module>
33 
34 if name == 'main':
---> 35     main()

<ipython-input-181-893180ca08ff> in main()

4      特徴量の入ったデータ (4 次元)
----> 5     features = iris.data
6      各特徴量の名前
7     feature_names = iris.feature_names

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in getattr(self, name)
5065             if self._info_axis._can_hold_identifiers_and_holds_name(name):
5066                 return self[name]
-> 5067             return object.getattribute(self, name)
5068 
5069     def setattr(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'data'

該当のソースコード

python

iris_data2 = pd.read_csv("iris_learn2.csv")
print(iris_data2)

  SepalLength  SepalWidth  PetalLength  PetalWidth             Name
0          7.0         3.2          4.7         1.4  Iris-versicolor
1          6.4         3.2          4.5         1.5  Iris-versicolor
2          6.9         3.1          4.9         1.5  Iris-versicolor
3          5.5         2.3          4.0         1.3  Iris-versicolor
4          6.5         2.8          4.6         1.5  Iris-versicolor
5          6.3         3.3          6.0         2.5   Iris-virginica
6          5.8         2.7          5.1         1.9   Iris-virginica
7          7.1         3.0          5.9         2.1   Iris-virginica
8          6.3         2.9          5.6         1.8   Iris-virginica
9          6.5         3.0          5.8         2.2   Iris-virginica

def main():
iris = pd.read_csv("iris_learn2.csv")

features = iris.data

feature_names = iris.feature_names

targets = iris.target

plt.figure(figsize=(12, 8))

for i, (x, y) in enumerate(itertools.combinations(range(4), 2)):

plt.subplot(2, 3, i + 1)

for t, marker, c in zip(range(3), '>ox', 'rgb'):
plt.scatter(
features[targets == t, x],
features[targets == t, y],
marker=marker,
c=c,
)
plt.xlabel(feature_names[x])
plt.ylabel(feature_names[y])
plt.autoscale()
plt.grid()

plt.show()

if name == 'main':
main()

の後に上記のエラーが出てきます。

試したこと

def main():
iris = datasets.load_iris()

features = iris.data

feature_names = iris.feature_names

targets = iris.target

plt.figure(figsize=(12, 8))

for i, (x, y) in enumerate(itertools.combinations(range(4), 2)):

plt.subplot(2, 3, i + 1)

for t, marker, c in zip(range(3), '>ox', 'rgb'):
plt.scatter(
features[targets == t, x],
features[targets == t, y],
marker=marker,
c=c,
)
plt.xlabel(feature_names[x])
plt.ylabel(feature_names[y])
plt.autoscale()
plt.grid()

plt.show()

if name == 'main':
main()

パッケージに保存されているデータだと上手に動きましたが、保存したものだと動きませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

iris = load_iris()


で得られたデータと

iris = pd.read_csv("iris_learn2.csv")


で得られたデータは、データの内容は同じ物(かもしれない)ですが、データの形式が全く別物となります。

違う形式のデータを同じコードで動作させることはできませんので、後者のデータ形式に合わせて移植する必要があるかと思います。

一応、簡単に移植したものをサンプルとして記述しましたので参考にしてください。
データが無いので動作未確認です。

import pandas as pd
import matplotlib.pyplot as plt
import itertools

def main():
    iris = pd.read_csv("iris_learn2.csv")
    print(iris)
    plt.figure(figsize=(12, 8))

    for i, (x, y) in enumerate(itertools.combinations(range(4), 2)):
        plt.subplot(2, 3, i + 1)

        for (name, d), marker, c in zip(iris.groupby('Name'), '>ox', 'rgb'):
            plt.scatter(
                d.iloc[:, x],
                d.iloc[:, y],
                marker=marker,
                c=c
            )
        plt.xlabel(iris.columns[x])
        plt.ylabel(iris.columns[y])
        plt.autoscale()
        plt.grid()
    plt.tight_layout()
    plt.show()

if __name__ == '__main__':
    main()

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.89%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる