🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

1913閲覧

クラスのインスタンス化の際のimportのエラー(ModuleNotFoundError)

KKNN

総合スコア2

Python

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

0グッド

0クリップ

投稿2020/12/28 15:35

編集2020/12/28 15:59

作成したクラスのimportがエラーになる

ある本でPythonの勉強をしており、その中でクラスのインスタンス化を実行したのですが、その際のクラスのimportがエラーを出してしまいます。

まず初めに、以下のようなコードでクラス作成を行っており、housePriceDataという散布図プロットのクラスを作成しています。

Python

1class housePriceData: 2 3 def __init__(self,path): 4 self.data = pd.read_csv(path) 5 6 def plotScatter(self,titles,levels): 7 8 fig=plt.figure() 9 10 xrange = [np.min(self.data['GrLivArea'].values), 11 np.max(self.data['GrLivArea'].values)] 12 yrange = [np.min(self.data['SalePrice'].values), 13 np.max(self.data['SalePrice'].values)] 14 15 ncol = int(len(titles)/2) 16 17 for ind in np.arange(len(titles)): 18 19 ax = fig.add_subplot(2,ncol,ind+1) 20 ax.set_title(titles[ind]) 21 ax.plot(self.data['MSSubClass']==levels[ind]['GriLivArea'].values, 22 self.data['MSSubClass']==levels[ind]['SalePrice'].values,'.') 23 ax.set_xlim([xrange[0],xrange[1]]) 24 ax.set_ylim([yrange[0],yrange[1]]) 25 ax.set_xlabel('GrLivArea',fontSize=14) 26 ax.set_ylabel('SalePrice',fontSize=14) 27 28 plt.tight_layout() 29 30 plt.show()

書籍ではその次のステップとしてクラスの実行例が記載されているのですが、そのファーストステップが「housePriceDataクラスをmyData としてインスタンス化」と説明されており、以下のようなコードとなっています。

Python

1import housePriceData as hpd 2myData = hpd.housePriceData(r"C:(略)\train.csv")

上記コードを実行すると、以下のようなエラーが表示されます。

ModuleNotFoundError Traceback (most recent call last)

<ipython-input-358-ed2d401d8f85> in <module>
----> 1 import housePriceData as hpd
2
3 myData = hpd.housePriceData(r"C:(略)\train.csv")
ModuleNotFoundError: No module named 'housePriceData'

疑問点

・housePriceDataはクラスですから、No module named 'housePriceData'となってしまうのは当然のようにも感じるのですが、クラスをimportするというのはどういう流れの動きなのでしょうか?
・なぜエラーになってしまうのでしょうか?

初心者のため、基本も分かっておりません。どうぞよろしくお願いいたします。

(使用書籍:ゼロからつくるPython機械学習プログラミング入門)

追記
環境はjupyter notebookです。
この質問内の1つ目のコードを1つのセルの中で実行し、2つ目のコード(import~)をその次のセルで実行しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/28 15:51

1番目の「class housePriceData:」のコードが書かれてあるファイルと、2番目の「import housePriceData as hpd ~」のコードが書かれてあるファイルは別でしょうか? それとも同じファイル内に2つのコードを書いているのでしょうか?
KKNN

2020/12/28 15:56

情報不足で失礼いたしました。 環境はjupyter notebookで、別々のセルで実行しています。 この質問内の1つ目のコードを1つのセルで実行し、その次のセルで2つ目のコードを実行しています。 よろしくお願いいたします。
guest

回答2

0

クラスをimportすることはできません。

元の書籍をよく読めば、以下の事が書かれているはずです。(読んではいませんが)

クラス定義をファイル housePriceData.py に保存する。
対話モードで、import housePriceData as hpd 以下を実行する。

投稿2020/12/28 16:25

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

エラー理由及び正しい解決法はppaulさんの御記載の通りと思います。
もしjupyter notebookのセルで実行したいという場合は、2番目のコードを下記のようにしてみてください。

# import housePriceData as hpd <---この行は不要 myData = housePriceData(r"C:(略)\train.csv") # 「hpd.」を削除

投稿2020/12/28 16:25

編集2020/12/28 16:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KKNN

2021/03/21 05:07

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問