= Jupyter LabでPythonを使う = == Jupyter Lab/Notebook == Pythonは手軽に利用できるスクリプト言語で、数値や文字列を使ったプログラムを簡単に開発・実行できる。自分のデスクトップPCにPythonの開発・実行環境をインストールして利用することもできるが、[[https://jupyter.org/|Jupyterプロジェクト]]では、様々なプログラミング言語に対して、ウェブ・ブラウザを使ったプログラミング言語の実行環境を提供している。 [[https://jupyter.org/try|Jupyter/try]]から!JupyterLabを選択し、新規にPython用のノートブックを作成するとコードを入力するための画面が表示される。 {{attachment:jupyterTry.png||width=30%,align="top"}} {{attachment:jupyterNbNew.png||width=30%,align="top"}} {{attachment:jupyterNbPython.png||width=30%,align="top"}} この演習では、!JupyterLabでPython用のNotebookを新たに作成してコードを記述していく。 * ALH1のノートブック: [[https://nbviewer.org/github/tkono17/BasicExpPhys/blob/main/notebooks/2022ALH1.ipynb|閲覧のみ]] * ALH2のノートブック: [[https://github.com/tkono17/BasicExpPhys/blob/main/notebooks/2022ALH2.ipynb|閲覧のみ]] == Pythonの基礎 == PythonはC/C++やJava言語と比べて以下の特徴があり、手軽に利用できるプログラミング言語である。 * 変数の型宣言が不要である * コードをコンパイルせずに直接実行できる * main関数も不要である * 数値や文字データ、配列(リスト)も簡単にコーディング可能である === 整数値データの演算 === 整数データの演算を行って、結果を出力する。 {{{ a = 11 b = 23 c = a + b print('%d + %d = %d' % (a, b, c) ) }}} === 実数値データの演算 === 実数データを使って計算する。標準的な数学関数(平方根や三角関数など)を使う。 {{{ import math a = 2.0 b = math.sqrt(a) print('sqrt(%f) = %f' % (a, b) ) }}} === 配列データ === 複数のデータをデータの配列としてまとめて扱う。また、配列の各要素に添え字を使ってアクセスする。新しい配列にデータを追加する。 {{{ a = [ 1.0, 2.0, 3.0, 4.0, 5.0 ] print(a) print(sum(a)) b = [] for x in a: b.append(x*x) print(b) }}} === Numpyの使用 === 配列データや多次元配列(行列やテンソル)の演算をするのに、numpyというライブラリの機能を使うことで、多次元配列に対する処理のみを記述することで実行できる。これにより、各要素にアクセスするためのループを書かずに済むため、簡潔なコードを書けることと高速化が可能になる。 {{{ import numpy as np a = np.arange(0.0, 10.0, 1.0) b = a*a print(a) print(b) }}} === Matplotlibによる描画 === データをグラフ化するためにMatplotlibというライブラリを利用できる。以下のコードでは次のようなデータを描画している。 * X, Y座標、それぞれの配列データから散布図を作る * Y座標の配列データをヒストグラムに詰めている(ヒストグラムの範囲とビン数を指定) また、最後にX, Y座標のデータをファイルに出力する方法を示す。ファイルは../dataという別のフォルダに作成されるようにファイル名を指定している。 {{{ import numpy as np import matplotlib.pyplot as plt x = np.arange(0.0, 100.0, 0.1) y = np.sin(x) plt.plot(x, y) plt.show() plt.hist(y, bins=100, range=(-1.0, 1.0)) plt.xlabel('Y') plt.ylabel('Counts') plt.show() fout = open('../data/2022ALH1_sindata.dat', 'w') for i in range(len(x)): fout.write('%10.5f %10.5f\n' % (x[i], y[i]) ) fout.close() }}} == 2次元データのフィット == === 線形モデル === 未知のパラメータに関して1次関数として表される関数を線形モデルと呼ぶ。線形モデルについては、カイ2乗を最小化するパラメータを解析的に求めることが可能である。具体的の定式化は[[https://tkono17.github.io/wf/notes/structures/fitLinearModel.html|ここ]]を参照。 === 直線のフィット === {{{ a, b = 2.0, -3.0 x = np.arange(1.0, 10.0, 1.0) y = a*x + b plt.plot(x, y) }}} === 2次関数によるフィット === === ガウス分布のフィット === === データファイルのアップロード ===