【Jupyter】マジックコマンドstoreで変数を保存する
今回は、JupyterNotebook(とJupyterLab)のマジックコマンド%store
の使い方。変数を保存できます。
【実行環境】
目次
マジックコマンド%store
の機能
Jupyterのセルで使用している変数を保存することができる。これを使うことにより、別のipynbファイルと変数が共有できたりするらしい。便利そうですね! (*´・ω・`)b。
保存した変数は、Jupyter上のデータベースにファイルとして保存されるとのこと。
保存場所は、
~/.ipython/profile_default/db/autorestore
。ホームディレクトリの隠しフォルダ.ipython
の中。あとで覗いてみます。
たとえば
pandas.read_csv(url)
やpandas.read_html(url)
を使って、
ネット上のcsvファイルやWebページのテーブルを読み込むとします。データフレームにして変数df
に格納した。
一旦ipynbファイルを閉じてしまった後で再び変数df
をOut
で出力表示させようとすると、またネットからPandasで読み込む必要があります。
毎回同じファイルを同じネット上からダウンロードするのもアレですので、変数ごと保存しておけば手間が省けそうです。
ファイルに書き出しても出来ますけど、マジックコマンドで済むならそっちが早いだろう。
よし、使ってみましょう。\\\٩( 'ω' )و ////
マジックコマンド%store
の使用法
マジックコマンド | 説明 |
---|---|
%store | 変数の一覧表示 |
%store -r | 保存されている全ての変数の読込 |
%store 変数 | 変数をDBに保存 |
%store -d 変数 | 変数をDBから削除 |
%store -z | 保存されている全ての変数の削除 |
%store
保存された変数の一覧取得
何も保存しておりませんので、何も表示されない筈ですが、一応。
%store
Stored variables and their in-db values:
空ということでよろしいのかな。
%store -r
保存された全ての変数の読み込み
空なので、読み込んでも空でしょうが、一応。
%store -r
何の表示もなし。
%store 変数
変数をデータベースに保存
適当に変数に値を代入して保存してみます。
文字列と、リストと、データフレームと3つ行ってみよう。
# 文字列 text = '本日は、晴天なり。' # リスト lst = [1, "二", ["three"]] # データフレーム import pandas as pd df = pd.DataFrame([[1,2,3],[4,5,6]])
3つ同時に保存してみる。
# 変数を保存
%store text lst df
Stored 'text' (str)
Stored 'lst' (list)
Stored 'df' (DataFrame)
変数名と型が表示され、保存されたっぽい。
再び%store
で保存変数一覧を取得
# 保存された変数一覧を取得
%store
Stored variables and their in-db values:
df -> 0 1 2
0 1 2 3
1 4 5 6
lst -> [1, '二', ['three']]
text -> '本日は、晴天なり。'
データベースに保存されている変数名と中身の一覧が表示された。
マジックコマンド%who
で変数名を確認
%who
を使うと、現在メモリ上に格納されている変数名が取得できる。
いま↑で作った変数名だけが表示される筈なので、見てみましょう。
# メモリ上の変数確認
%who
df lst text
3つ出てきました。
メモリ上にない変数を使うと、
NameError:name '変数' is not defined
というエラーが出る。
# 未定義の変数を出力
v
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/data/data/com.termux/files/usr/tmp/ipykernel_17506/2743148443.py in <module>
1 # 未定義の変数を出力
----> 2 v
NameError: name 'v' is not defined
再び%store -r
で保存された変数の呼び出し
一旦ipynbファイルを閉じます。そして↑の方で変数に値を代入したセルを実行せずに%store -r
で保存変数を呼び出し、中身が表示されるかを確かめます。
(束の間)
と言うことで、ipynbを閉じて開きました。いきなり次を実行します。
# メモリ上の変数
%who
Interactive namespace is empty.
メモリ上は空です。
# データベースの変数を呼び出し
%store -r
相変わらず何も表示されない。
しかし、データベースの変数全てを読み込んだので、メモリに確保されたはず。
# メモリ上に確保された変数名
%who
df lst text
おお、変数が読み込まれている。
コードセルに書いて実行すれば、とうぜん値が表示される。トイヤッ!
# 文字列 print(text) # リスト print(lst) # データフレーム(print関数を使わず表示) df
本日は、晴天なり。
[1, '二', ['three']]
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
表示されました。ナイスです (^_^)v
別のipynbファイルで変数を共有する
別のファイルで%store 変数
コマンドを使って変数をデータベースに保存し、このファイルで呼び出してみます。
(束の間)
別のipynbファイルで変数保存してきました。
データベースに保存された変数一覧を取得します。
# 保存変数一覧
%store
Stored variables and their in-db values:
comments -> 'この変数とコメントは別のファイルでデータベースに保存しました。'
df -> 0 1 2
0 1 2 3
1 4 5 6
lst -> [1, '二', ['three']]
text -> '本日は、晴天なり。'
comments
という名前の変数が追加されています(追加しました)。
# メモリ上の変数名
%who
df lst text
まだ変数comments
はメモリ上に無い。
保存の変数を読み込みます。
# 変数を読み込み %store -r print(comments)
この変数とコメントは別のファイルでデータベースに保存しました。
変数を共有できました。便利ね、これ。
%store -d 変数
で変数をデータベースから削除
変数comments
とtext
を削除してみます。
# 変数をデータベースから削除
%store -d comments text
何も表示されません。
メモリ上とデータベース上の変数を確認します。
# メモリ上の変数
%who
comments df lst text
メモリ上にはまだ残っています。
# データベース上の変数一覧
%store
Stored variables and their in-db values:
df -> 0 1 2
0 1 2 3
1 4 5 6
lst -> [1, '二', ['three']]
text -> '本日は、晴天なり。'
データベース上からは削除されています。しかし、text
は残ったままですね。1つずつしか削除できないのか。
%store -z
でデータベース上の全ての変数を削除
全ての変数を削除します。
その前に、ホームディレクトリの隠しフォルダの中にある変数保存先のファイルを確認しておこう。
# 変数保存先データベース
%ls ~/.ipython/profile_default/db/
autorestore/ dhist
ここのautorestore/
というディレクトリの中に変数がファイルで保存されているらしい。
# 変数保存先データベース
%ls ~/.ipython/profile_default/db/autorestore
df lst text
catコマンドで直接読めるんだろうか?
%cat ~/.ipython/profile_default/db/autorestore/text
�X本日は、晴天なり。q.
読めるが、一部文字化けしてる。
%store -z
でデータベース上の変数を全て削除
全部削除します。
# データベース上の変数一覧
%store
Stored variables and their in-db values:
df -> 0 1 2
0 1 2 3
1 4 5 6
lst -> [1, '二', ['three']]
text -> '本日は、晴天なり。'
# データベース上の変数を全て削除
%store -z
何も表示されず。
# データベース上の変数一覧取得
%store
Stored variables and their in-db values:
空になりました。
参考
Jupyter Notebookの基本操作を学ぶ - Qiita
【JupyterNotebook】マジックコマンド使用法基礎 - よちよちpython
おわりに
複数のipynbファイル間で共有したいデータや、ネットから読み込んだデータを一時的に変数で保存しておきたい時に使えば重宝しそうです。型も気にしなくて出来る。
以上です。