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

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

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

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

Python

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

Q&A

解決済

2回答

305閲覧

notebookではなく.pyファイルを用いる意味

nouken

総合スコア369

機械学習

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

Python

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

0グッド

1クリップ

投稿2019/03/14 05:36

編集2019/03/14 07:27

機械学習のコンペティションであるkaggleなどに参加していると、上位入賞者のgithub repositoryなどをみる機会があるのですが、可視化などのEDAにjupyter notebookを用い、特徴量エンジニアリングやモデリングの部分はnotebookではなく.pyファイル(スクリプトファイル)を用いています。私個人としては、EDAに始まりモデリングなども含めてnotebookを用いており、notebookを用いた方が正しく計算できているかの確認や試行錯誤ができ、便利だと感じているのですが、.pyファイルにすることに何か利点があるのでしょうか?もしくは、皆さんモデリング等にもnotebookを用いていても、最終的にスクリプトファイルにまとめるような作業をなさっているんでしょうか?その場合の動機はどのようなものなのでしょうか?

かなり答えづらい質問かもしれませんが、どうぞよろしくお願いします。

[追記]そもそもコマンドラインから実行することのメリットがいまいちわかっていません。。。

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

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

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

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

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

guest

回答2

0

ベストアンサー

複雑なものになってくると、単純に記述量が多かったりモジュール化したかったりといった要件が出てきて、jupyterではきつくなると思います。開発環境がやってくれる支援などもjupyterは劣りますので・・・

あとはkaggleなんかだと、高性能なサーバで条件を変えながら延々と走らせるバッチを組んでやる場合もあると思うので、なおさらjupyterであるメリットがなくなります。

投稿2019/03/14 12:33

hayataka2049

総合スコア30933

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

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

nouken

2019/03/14 13:14

回答ありがとうございます。一応、正しく理解できているか確認させてください。 記述量が多い場合、単に管理が大変になるため、スクリプトに分けて管理したいという動機でしょうか? また支援についてはjupyterは例えば実行後でないと、その後の自動補完がされないなどでしょうか? 最後の点については、ただ単に計算を走らせるだけならnotebook形式である必要がないということですね?
hayataka2049

2019/03/14 13:22 編集

>記述量が多い場合、単に管理が大変になるため、スクリプトに分けて管理したいという動機でしょうか? >また支援についてはjupyterは例えば実行後でないと、その後の自動補完がされないなどでしょうか? 当然それもありますし、他にもいろいろな事情があると思います。デバッガ使いたいとか、引数の説明出してほしいとか・・・jupyterでもある程度の支援は得られますが、拡張入れまくったvscodeやemacsなど本格的なエディタに劣るレベルで、ちゃんとしたIDEには太刀打ちできません。 >最後の点については、ただ単に計算を走らせるだけならnotebook形式である必要がないということですね? そういうことです。かえってjupyterの方が扱いづらくなるようなシチュエーションもあると思います(リモートのサーバでjupyter動かしてブラウザで叩いて、寝てる間中回すとしたらブラウザ立ち上げっぱなしにして繋いでおくの? とか)。 あとはけっきょく、使い慣れたエディタ(IDE)で書きたいという動機が強いかも(爆)
nouken

2019/03/14 13:39

vscodeなどでは関数の引数などの説明が出るんですね、知らなかったです。。。 >そういうことです。かえってjupyterの方が扱いづらくなるようなシチュエーションもあると思います(リモートのサーバでjupyter動かしてブラウザで叩いて、寝てる間中回すとしたらブラウザ立ち上げっぱなしにして繋いでおくの? とか)。 実際今はブラウザで計算回したまま、画面だけ暗くして寝るとかいうこともあるんですが、コマンドからスクリプトファイルを実行する場合にも結局つけたままじゃないでしょうか? >あとはけっきょく、使い慣れたエディタ(IDE)で書きたいという動機が強いかも(爆) なるほどです、実際僕はnotebookから始めた者ですので、なかなかエディタでコーディングしてコマンドラインから実行ということにあまり慣れておらずいまいちピンときません。。
hayataka2049

2019/03/14 13:42

docstringから説明を引っ張ってきてくれるとか、型ヒントに基づいて警告出してくれるとか、いろいろあるでしょうね。 >コマンドからスクリプトファイルを実行する場合にも結局つけたままじゃないでしょうか? バックグラウンド実行でもさせて端末は適当に切るとか、いろいろやり方はあります。
guest

0

試行錯誤はともかく、いったん手順が定まったら、同じコードを何度も何度も打ち直すのはタルくないですか?

一回限りの作業のように思えていても、何日も経ってから疑問が出てきて、あのときの作業に抜けやミスがなかったか改めて確認したいということはないですか? そのときにnotebookの書捨てだけで対応できないでしょう。 スクリプトにしておけば、それ自体が作業記録になります。
pythonに限らず、一行・二行のコマンドラインでの作業ですむような仕事でも私は極力スクリプトにしますよ。20190314.shみたいなのを作業ディレクトリにたくさん保存しています。ドキュメントも作るけれど、私は粗忽なのでそのときに興味がない(でも大事な)項目をしばしば書き忘れます。あとで見ると途中の2ステップぐらいの記述がごっそり抜けていたりします。スクリプトファイルは嘘をつきません。

投稿2019/03/14 06:26

KojiDoi

総合スコア13671

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

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

nouken

2019/03/14 07:29

回答ありがとうございます。自分の作業プロセスとしては、何かしらの変更や新しいことを試す際にはnotebookをコピーして付け足していくという風にしています。そのため、同じコードを何度も書くという経験はあまりしていません。また、元のnotebookを残しているので、後から確認しに戻ることもできます。
KojiDoi

2019/03/14 08:15

なるほど。私はコードの保存やメモはテキストエディタで必要十分で、notebookなんだか回りくどく感じてしまう(なのでちらっと触っただけで止めてしまった)のですが、使いこなせば質問者さんのようになるのかもしれませんね。 まあこういう感じ方の人間もいるという参考としてみていただければ幸いです。 python本体さえあれば私のような人間にも問題なくスクリプトを使わせられるということが成果物を.pyで持っておく「利点」ではないでしょうか。
nouken

2019/03/14 08:38

プログラミングを全く触ったことがなく、Pythonを始めた時に、notebookから入ったのが大きいんじゃないかと思っています。そのため、エディタを使ってスクリプトを書き、コマンドラインから一気に実行する(notebookだと細々実行できる)ことに違和感(?)を感じてしまいます。違和感というよりは単に面倒臭いといった方が良いかもしれません。 なるほど、そういう考え方もありますね。 あとは、よく使うような関数とかをモジュールとして持っていれば、別のスクリプトで import hoge するだけで使える、といったことなどでしょうか。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問