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

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

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

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

Python

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

Q&A

解決済

1回答

6487閲覧

.ipynbで複数コードセルを対象にfor文を回したい

gegege

総合スコア15

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/04/09 15:29

編集2020/04/09 15:31

質問の概要

探索的データ解析(EDA)のお作法的な質問です。
ipynbを使った効率的なデータ分析の方法について知りたいです。
なお構造化データに対する、機械学習を用いた典型的な回帰問題を解いています。

現状実施している、データ分析の手順

以下のような手順で取り組んでいます。

1. 全体のデータを、ある程度互いに独立していることが見込めるカテゴリ(データ群)に分割
EDAを高速に行いたいこと、全データがメモリに乗り切らないことがデータ分割の理由です。
例えば小売店の売り上げの予測でいえば「食品の売上」「衣類の売上」のように、互いに比較的独立していそうなデータ群ごとに分割しています。

2. 分割された一部のデータだけを用いて前処理やアルゴリズム(学習と予測)を検討
前処理や分析の過程を理解するため、セルごとに可視化をしながら実行しています。

3. 全データに対して、同じ前処理やアルゴリズム(学習と予測)を実装
前処理から学習、予測までの一連の流れを、それぞれのデータ群に対して実行します。
最後に全データに対する予測結果をもって、予測結果の評価をします。

困っていること

上記の手順のうち、手順2と手順3は繰り返しいったりきたりするわけですが

ノートブック上には30~50くらいのセルが存在し、手順2ではセルごとに逐次実行している

手順3の実施時には、異なるデータに対して上記の30~50のセル全体を繰り返し実行したい

という事情があり、どうすれば効率的に実施できるか困っています。
イメージとしては、複数のコードセルに対してfor文を回す、という感じです。

苦し紛れに以下のようにしました。

  • 手順2で使っている「逐次処理用Notebook」からコードセルを一つずつコピー
  • 新規に作成した「バッチ処理用Notebook」の1つのコードセルに上記を全てペースト
  • 「バッチ処理用Notebook」の当該コードセルをfor文で囲み、まとめて実行(手順3)

が、当然ダブルメンテになるのでしんどいです。

ど素人で恐縮ですが、うまく回していらっしゃる方、アドバイスをいただけないでしょうか。

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

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

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

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

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

tiitoi

2020/04/09 16:16

for 文で回したい中身の処理 (No 2, 3) を関数化できないのでしょうか?
guest

回答1

0

ベストアンサー

Jupyterが気に入らなくてインタラクティブシェルでデータ分析やる人間ですが、参考までに。

1.

とりあえずデータの形式を先にある程度固定してしまうことが大切で、「食品の売上」と「衣類の売上」がまったく同じコードで処理できるようにします。普通はpandasのDataFrameで表現すればいいでしょう(列名は揃えないと不便です)。

2.

一つのまとまった分析処理は、原則として関数で書きます。集計して可視化、くらいで関数を一つ作るイメージです。

そういう関数は引数にdfだけ取る、というのが理想ですが、多少オプションが増えても構いません。でも数個くらいが快適に使える限界でしょう。

Jupyterのセルの中で関数を定義しても別に良いのですが、長くなると見づらいので別モジュールに書いてJupyterでimportして使ったりします。

3.

一連の流れを実行する関数を作ります。関数を順番に呼び出すだけの関数です。あとはループです。

投稿2020/04/09 17:49

編集2020/04/09 18:27
hayataka2049

総合スコア30935

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

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

gegege

2020/04/10 00:27

haytaka2049さま ありがとうございます!よく分かりました。早速やってみました。色々やっていたら関数のネストが3くらいになってきたのですが、ネストの深さについてもし推奨などあればアドバイスいただけると嬉しいです。
hayataka2049

2020/04/10 16:11

なぜそうなるのかわからず。returnしないで関数の中から他の関数を呼び出しているとか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問