Jupyter Notebook
の特徴と利便性
1. 対話的なコーディング
- セルごとの実行: コードをセル単位で実行できるため、プログラム全体を再実行する必要がない。エラーや結果をすぐに確認し、必要な箇所だけ修正・再実行が可能。
- 即時フィードバック: コードを実行するとすぐに結果が表示されるため、デバッグや検証が非常に効率的。
2. リッチな出力のサポート
-
グラフや図表の表示:
matplotlib
などのライブラリを使って、コードの結果をグラフや図表として表示できる。画像、ビデオ、HTMLコンテンツなどもインラインで表示可能。 - Markdown サポート: セル内で Markdown を使ってテキストや数式、リンクを記述できる。これにより、コードに注釈を付けたり、ドキュメントとしても活用できる。
3. ドキュメントとコードの一体化
- ノートの共有: コードとその結果、説明、注釈を一つのファイルで保存できる。データサイエンスや教育現場で、実行例とともに文書化されたノートブックを他人と簡単に共有できる。
- プレゼンテーションの代用: ノートブックは、コードの解説や結果のプレゼンテーションとしても使える。MarkdownやHTMLサポートにより、視覚的に見やすい形式で内容を伝えられる。
4. 再現性のある研究
- コードと結果の一貫性: ノートブック内に実行したすべてのコードとその結果が残るため、後で再現可能。研究やデータ分析の結果を再現しやすく、他人に共有する際にも役立つ。
- 順番通りにコードを実行可能: セルごとにコードを実行できるが、全セルを順に再実行する機能もあり、全体を通して再現性を持たせることができる。
5. 複数言語サポート
- Python以外の言語も対応: Pythonだけでなく、RやJulia、Scalaなど他のプログラミング言語のカーネルも使える。複数の言語を組み合わせたデータ分析や実験に最適。
6. データサイエンスや機械学習との親和性
- データの可視化と分析: 大規模なデータセットを扱う際、データの可視化やリアルタイムでのデータ処理がしやすい。データサイエンスや機械学習のワークフローにおいて、コードと結果を逐一確認しながら進められる。
-
インタラクティブなウィジェット:
ipywidgets
を使って、スライダーやボタンなどのウィジェットを作成し、インタラクティブなUIを追加できる。これにより、動的にパラメータを変更しながらコードの結果を確認することが可能。
7. 容易な拡張性
- プラグインや拡張機能: Jupyterには様々な拡張機能があり、デバッグ、コーディング支援、セルの統合など、機能を拡張して使いやすくできる。
8. クラウドでの実行
- Google Colab などのクラウド環境での実行: Jupyter Notebook のフォーマットはクラウドサービスでもサポートされている。Google Colab などで、GPUを利用して機械学習モデルのトレーニングを行うことも簡単。
WindowsにPythonをインストールして、仮想環境を作成し、Jupyter Notebook
を実行する手順は以下の通り。
1. Python のインストール
- Python公式サイト から最新版の Python をダウンロード。
- インストーラを起動し、以下の2つにチェックを入れる:
- "Add Python to PATH"(これを忘れずにチェックする)
- "Install Now" か "Customize installation"(Customizeで詳細な設定が可能)
- インストールが完了したら、コマンドプロンプト(
cmd
)を開き、インストールが成功しているか確認する。
python --version
Pythonのバージョンが表示されればインストール成功。
2. 仮想環境の作成
次に、仮想環境を作成する。
- コマンドプロンプト(
cmd
)を開く。 - プロジェクトのディレクトリに移動するか、仮想環境を作成したい場所に移動する。
- 仮想環境を作成するコマンドを実行する。
python -m venv myenv
myenv
という名前の仮想環境が作成される。
3. 仮想環境の有効化
仮想環境を有効化する。
myenv\Scripts\activate
これで仮想環境がアクティブになり、以降の作業はこの仮想環境内で行われる。
4. 必要なパッケージのインストール
仮想環境内に numpy
、matplotlib
、そして jupyter
をインストールする。
pip install numpy matplotlib jupyter
これで、numpy
と matplotlib
がインストールされ、Jupyter Notebook も使用できるようになる。
5. Jupyter Notebook の起動
次に、Jupyter Notebook を起動する。
jupyter notebook
コマンドを実行すると、ブラウザが自動的に開き、Jupyter Notebook のインターフェースが表示される。
6. 簡単なpythonスクリプトを実行してみる。
以下NewでPythonを選択しnotebookeを新規作成。以下の「モンテカルロ法で円周率を求めるスクリプト」をJupyter Notebookのセルに貼り付け、実行してみる。
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
%matplotlib inline
# 初期化
N_in = 0
N_out = 0
N = 1000000 # 試行回数
ran_x = random.rand(N) # Xの乱数
ran_y = random.rand(N) # Yの乱数
ran_point = np.hypot(ran_x, ran_y) # X^2 + Y^2の平方根
# 点が円の内部か外部かをカウント
for i in ran_point:
if i <= 1:
N_in += 1
else:
N_out += 1
# パイの近似値
Pie = N_in / N * 4 # パイの近似式
# 結果の表示
print("IN: {} ".format(N_in))
print("OUT: {} ".format(N_out))
print("ALL: {} ".format(N))
print("Pi: {} ".format(Pie))
# グラフの描画
plt.scatter(ran_x, ran_y, marker=".", color="orange", label="POINT")
c1 = plt.Circle((0, 0), radius=1, fc="None", ec="blue", linewidth=2, color="black")
ax = plt.gca()
ax.add_patch(c1)
plt.axis("scaled")
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("PLOT")
plt.show()
7. 実行結果
8. ヒストグラム作成
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
%matplotlib inline
from statistics import mean, median,variance,stdev
N_in = 0
N_out = 0
N = 1000000 #試行回数
list_pi = []
def culculate():
global N_in, N_out
for i in range(1,100):
ran_x = random.rand(N) #Xの乱数
ran_y = random.rand(N) #Yの乱数
ran_point = np.hypot(ran_x,ran_y) #X^2 + Y^2の平方根
for i in ran_point:
if i <= 1:
N_in += 1
else:
N_out += 1
Pie = N_in/N*4
list_pi.append(Pie)
N_in = 0
N_out = 0
def print_all():
print("IN: {} ".format(N_in))
print("OUT: {} ".format(N_out))
print("ALL: {} ".format(N))
print("Pi: {} ".format(Pie))
def draw_hist():
kwargs = dict(histtype = "stepfilled", alpha = 0.7, density = True, bins = 20, color = "yellow", ec = "black")
plt.hist(list_pi, **kwargs)
plt.title("pi-list")
plt.show()
culculate()
draw_hist()
stdev_pi = stdev(list_pi)
print(stdev_pi)
. 実行結果(ヒストグラム)
(参考)モンテカルロ法で円周率を求めるロジック
単位正方形内にランダムな点を打ち、その点が1/4円の内側にあるかを判定する。全点のうち、1/4円の内側にある点の割合を使って円周率を近似するという手法。