🏠
🌡️ 📆 令和6年2月26日

python(パイソン)


プログラミング言語

表   1 プログラミング言語の種類
種類 分類 言語 特徴
インタプリタ Webアプリ JavaScript Webブラウザ上で動作(クライアントサイド)
vb script(vbs,vba,asp) 1 )
AI Webアプリ python ( パイソン ) 2 ) * データサイエンス * 、 マテリアルズインフォマティクス *、AI
教育 Scratch ビジュアルプログラミング
コンパイル OS C 3 ) ポインタ、構造体
汎用 VB.NET オブジェクト指向(多重継承なし)
汎用 Kotlin アンドロイドアプリ向け
OS C++ オブジェクト指向
colab jupyter

ファイルベースのシステムでは、コンパイラ言語は実行可能なファイルを生成し、 インタプリタ言語はそれを生成しないという違いがありました。 しかし、クラウドベースになって、実行ファイルそのものをクライアントにダウンロードしなくなり、 ジャストインコンパイルで実行結果だけを利用するようになると コンパイラ言語とインタプリタ言語の違いは、あまり本質的でなくなりました。

科学技術用の伝統的な言語としては、FORTRANがあります。 FORTRAN系列の言語としては、BASIC、pythonがあります。 統計用言語としてRがあります。

アルゴリズム重視の伝統的な言語としてALGOLがあります。 ALGOLは、Pascal, C, C++, C#,java, javascript, typescript, Kotlinと進化してきました。 juliaはCに迫る計算速度を誇ります。

サーバーサイドで使われてきたPerlや Ruby もクラウドで利用できるようになってきました。

人工知能で伝統的な言語Lispは、F#、 Schemeもクラウドで利用できるようになってきました。

人気 プログラミング言語 は、java script、そしてpython*と続きます。 *


注釈(コメント)

表   2 注釈(コメント)
言語 例 説明
html <!-- コメント -- >
Python (パイソン)
# 注釈
#(クロスハッチ)を使います。
Basic (ベーシック)
REM 注釈
' 注釈
予約語REMを使うか、'(アポストロフィー)を使います。
javascript
// 1行コメント
/* 1行コメント */

/*
複数行に渡る
コメント
*/

ほとんどの言語には、注釈機能があります。 人間がよみやすくするためです。 (可読性)


変数

表   3 変数
言語 記述例 説明
Basic Dim A As Integer 整数、浮動小数点、文字列、配列
C 厳密な型宣言
Python
# タプルの配列を円の座標で初期化
t = np.arange(start = 0, stop = 2 * math.pi, step = 0.05)
xy = [ (math.sin(p), math.cos(p))  for p in t]
複素数、リスト、タプル 配列の初期化の記述が柔軟

変数には変数名を付けます。 ほとんどの言語では、予約語があり、予約語は変数名に使えません。

変数名の命名規則にはいろいろありますが、スネークキャストがおすすめです。 *


関数

表   4 関数
言語 呼び出し 説明
Basic Function Sub 変数のスコープに注意。
C 関数名は、関数のポインタの変数とほとんど同義。
Python
#関数定義 再帰呼び出しに挑戦
def func(xy,x1,y1,x2,y2,i):
  if i < 0:
def ():で宣言。呼び出す前にボディが記述されている必要があります。 関数の記述は、インデントされている必要があります。

2dグラフィクス

表   5 2dグラフィクス
言語 形式
java script canvas png インタラクティブ、 アニメーションが可能。 Webアプリ向け。 3次ベジェ曲線 実装。
svg svg htmlに埋め込み可能。 ベクトルグラフィックスに関する機能が豊富。 3次ベジェ曲線 実装。 viewBox=を設定することで、ワールド座標系でグラフィクス可能。 一旦、svgファイルにしてpptにインポートすれば、pngに変換可能。 asp(Basic、サーバーサイド)で記述することも可能。
python matplotlib png

ワールド座標系でグラフィクス可能。ビュー座標系 / スクリーン座標系への煩わしい変換から解放されます。 ベジェ曲線とか、コーディングが必要かも。 縦軸、横軸にTeXが使えるので超便利。

svg matplotlibから svgに出力するには、
plt.savefig('fig1.SVG')
files.download("fig1.SVG")
plt.show()
のようにする。 *
PIL png Colaboからでは、img.show()ではなく、IPython.display のdisplay(img)を使うなど、ちょっと変則的。
OpenCV png グラフィックスというより画像処理向け。 Colaboからは、 matplotlib を使った出力になるので、ベクトルグラフィックスならば、matplotlib.patchesを使うのとあまり変わらないかも。

python(パイソン)

表   6 python
応用例
Django
cgi
静的png

回帰

図   1 回帰

回帰

先日作成した https://a.yamagata-u.ac.jp/py/regression.py はCGIでpythonがうごいてますので,リクエストが 来るたびにpythonが起動します.リソースを消費するので CGIではなくDjnagoみたいなフレームワークをつかう 方向のようです.pythonのcgiパッケージは ver3.11(現行版)で非推奨,ver3.13で削除とのこと. 現在の設定だと,Djangoは16プロセスまで起動されます. Edgeで https://a.yamagata-u.ac.jp/dj/regression/ を表示させ,F5を連打してみてください.30回とか 添付の図みたいなのが出ると思います. うまい書き方があるんだろうなとは思います. (IISの再起動が必要かもしれません) まあCGIで連打されるとサーバーが落ちると思うので どっちもどっちだと思いますが.


回帰分析

図   3 回帰分析
©K.Tachibana

colabの概要


python(パイソン)

表   7 python 言語の使い方
応用例
無作為抽出
extracted = random.sample(data, 10)
平均
average = statistics.mean(data)
average = np.mean(data)
標準偏差
std = statistics.stdev(data)
std = np.std(data)
std = np.std(data, ddof=1) # 標本標準偏差
散布図 *
import numpy as np
import matplotlib.pyplot as plt
 
# 乱数を生成
x = np.random.rand(100)
y = np.random.rand(100)
 
# 散布図を描画
plt.scatter(x, y)
ヒストグラム
import matplotlib.pyplot as plt
ax1 = fig.add_subplot(211)
ax1.hist(x1, bins=bins)
画像 (matplotlib) の例:

ともひろてすと

可読性重視の科学計算向け。 4 ) 5 )

Phthon (パイソン)は、多様なデータ構造が組み込まれているので、データ処理しやすい 言語です。 Anaconda(アナコンダ)や、 Google Colaboratoy などの開発環境があります。 Phthonには、数値計算ライブラリNumPyがあります。 NumPyは、CやふFORTRANで、実装されていて、高速で実行できます。 ほかにも、Matplotlib(グラフ描画ライブラリ) pandas(データ分析ライブラリ) TensorFlow(機械学習ライブラリ) OpenCV(画像処理ライブラリ) など便利なライブラリが多数あります。

pymatgenライブラリは、まだあまり普及していない。 *

Webアプリ を書くには、 django プラットフォームがあったほうがいいかも。


Matplotlib

図   4 母平均の有意差検定( t 検定)
python (colab)→ png→ svg→ html

Matplotlib では、 色や 数式の表現も豊富です。


2dグラフィクス

表   8 2dグラフィクス
言語 形式
java script canvas png インタラクティブ、 アニメーションが可能。 Webアプリ向け。 3次ベジェ曲線 実装。
svg svg htmlに埋め込み可能。 ベクトルグラフィックスに関する機能が豊富。 3次ベジェ曲線 実装。 viewBox=を設定することで、ワールド座標系でグラフィクス可能。 一旦、svgファイルにしてpptにインポートすれば、pngに変換可能。 asp(Basic、サーバーサイド)で記述することも可能。
python matplotlib png

ワールド座標系でグラフィクス可能。ビュー座標系 / スクリーン座標系への煩わしい変換から解放されます。 ベジェ曲線とか、コーディングが必要かも。 縦軸、横軸にTeXが使えるので超便利。

svg matplotlibから svgに出力するには、
plt.savefig('fig1.SVG')
files.download("fig1.SVG")
plt.show()
のようにする。 *
PIL png Colaboからでは、img.show()ではなく、IPython.display のdisplay(img)を使うなど、ちょっと変則的。
OpenCV png グラフィックスというより画像処理向け。 Colaboからは、 matplotlib を使った出力になるので、ベクトルグラフィックスならば、matplotlib.patchesを使うのとあまり変わらないかも。

SOC-OCV曲線

図   5 SOC-OCV曲線
python (colab)→ png→ svg→ html

電池の電圧は、充電率(State of charge、SOC) 6 ) によって変化します。


パイソンで描いたコールコールプロット

図   6 コールコールプロット(ナイキストプロット)
©K. Tachibana

python では、複素数が使えるので、短いプログラムでコールコールプロットのシミュレーションができます。

# ■■■ コールコールプロット
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import cmath
import math
from google.colab import files

R= 2000
C = 0.1e-6
Rs = 500

t = np.arange(start = 0, stop = 5, step = 0.05)
f = [pow(10,p) for p in t]
z = [1/(1/R+1j*2*np.pi*p*C) + Rs for p in f]
x = [ p.conjugate().real for p in z]
y = [ p.conjugate().imag for p in z]
r = [ abs(p.conjugate()) for p in z]
ph = [ cmath.phase(p.conjugate())/math.pi*180 for p in z]
#ph = [ math.atan2(p.imag, p.real) for p in z]

ax = plt.subplot2grid((2, 2), (0, 0), rowspan=2)
ax.set_aspect('equal')
ax.set_xlabel("$Z^{\prime}$ / $\Omega$")
ax.set_ylabel("$-Z^{\prime \prime}$ / $\Omega$")
plt.scatter(x, y,alpha=0)
x_min, x_max = ax.get_xlim()
y_min, y_max = ax.get_ylim()
ax.set_xlim(0, x_max)
ax.set_ylim(0, y_max)

for t in np.arange(start = 500, stop = 2000, step = 500):
  ax.add_patch(patches.Circle(xy=(0, 0), radius=t, fc='none', ec='#B0FFFF'))

for t in np.arange(start = 1, stop = 12, step = 1):
  ax.axline((0, 0), slope=math.tan(math.pi*t/24), color='#B0FFFF')

plt.plot(x, y)

ax = plt.subplot2grid((2, 2), (0, 1))
ax.set_xlabel("$f$ / Hz")
ax.set_ylabel("$|Z|$ / $\Omega$")
plt.xscale('log')
plt.plot(f, r)

ax=plt.subplot2grid((2, 2), (1, 1))
ax.set_xlabel("$f$ / Hz")
ax.set_ylabel("$\u03b8$ / deg") # \theta では表示できない
plt.xscale('log')
plt.plot(f, ph)

plt.savefig('fig_cole_cole_python.SVG');files.download("fig_cole_cole_python.SVG")
plt.savefig('fig_cole_cole_python.PNG');files.download("fig_cole_cole_python.PNG")

# ■■■ コールコールプロット


QRコード

🎄🎂🌃🕯🎉
3号館(物質化学工学科棟) 3-3301
准教授 伊藤智博
0238-26-3573

Copyright ©1996- 2024 Databese Amenity Laboratory of Virtual Research Institute,  Yamagata University All Rights Reserved.