研究者のPython活用で必要な8つのポイント
はじめに
「プログラミングって難しそう…?」
そう思っている化学者研究者の皆さん、ちょっと待ってください!
化学者研究者がPythonを使いこなすために押さえておくべきポイントは8つだけです。
本当はもっと奥が深く、複雑だと思いますが、研究者にとって、あくまでPythonは「手段」です。
プロのプログラマーを目指すわけではないので、「使える」「読める」レベルを目指してください!
本記事では、8つの基本要素をベースにして、全体像を掴むことを目的に「ざっくり」とご紹介します。
「これだけなら、なんだか自分にもできそう!」と感じてもらえるはずです。
先に全体像を把握しておくことで学習も効率的になります。
長い航海に出るとき、先に海図でルートの全体像を確認しておくイメージです。
なお、各ポイントの詳細な解説は別記事でまとめる予定です。
基礎文法の全体像
8つのポイントの図解
8つのポイントを図解しました。
研究者のPython活用では、これらを押さえておけばプログラムの読み書きには困りません。
別記事で紹介している業務自動化のサンプルプログラムも、この8つのポイントを理解できていれば難なく読めます。
PythonによるExcel業務の自動化を体感 はじめに 本記事では、複数のスペクトル生データ(csvファイル)を集約し、エクセルに書き出して、さらにグラフを描画するまでの作業を自動化したプログラムを解説します。 そのまま使えるサ[…]
以降でそれぞれについて簡単なコードを交えて説明していきますが、その前に読み進めるのに必要な超基本ルールを紹介しておきます。
変数、print関数、コメントアウト
変数
Pythonでは以下のように自由に変数を定義できます。
a = 1
b = "Hello Chemist!"
「a」「b」という勝手につけた名前の変数に、「1」「Hello Chemist!」という値を定義しました。
例えば、「Hello Chemist!」という文字をプログラム中で繰り返し使用したいときや、これを全部大文字に変える処理をしたいときなど、変数で定義していおいたほうがコードを書くのが楽だし、可読性も上がるというメリットがあります。
print関数
次にprint関数ですが、これは以下コードのようにカッコの中に入れたものを出力する機能です。
print(a)
# 先ほど定義した「1」が出力
print(b)
# 先ほど定義した「Hello Chemist」が出力
print関数は主に変数の中身を確認するために使用します。
上述したように、プログラムでは自分で定義した変数に何らかの処理を加えたりするので、その処理が思い通りにいっているかを確認するために使うことが多いです。
コメントアウト
コードの中にメモ書きを残したい時、#を使います。
print('これは出力される')
# print('これは出力されない')
#の後の記述はコードと認識されず、実行もされないし、エラーとして検出もされません。
以下では具体的なコードを交えて解説していきますが、コメントアウトでコードや出力結果を記述しています。
データ型
まずはPythonの「データ型」について見ていきましょう。
Pythonではデータに応じた「型」があり、それぞれに特徴があり、施せる処理も異なります。
初心者のうちは、数値、文字列、そして複数のデータをまとめて扱うコンテナ型の3つを押さえるだけで十分です。
「どんなデータなのか」を意識することで、書けるコードの幅がぐんと広がっていきます。
数値計算
数字を扱う型です。基本のキです。
すんなり理解できると思います。
「int型」という整数と、「float型」という小数の2つの型があります。
整数を意味する”integer”、浮動小数点数を意味する”float”という英単語が元です。
数値型は以下コードのように数字を入力するだけで定義でき、四則演算が可能です。
簡単ですね。
c = 1 + 2
print(c)
# 3(int型)と出力
d = 8
e = 3
f = 8 / 3
print(f)
# 2.666666...(float型)と出力
数値計算についてさらに詳しい解説は以下の記事を読んでください。
Pythonでの数値計算 はじめに 化学研究者のPython活用には数値計算技術は必須です! 理由は説明不要ですね。 本記事では、基本となる数値型の四則演算、より大規模な計算処理や行列演算が可能なライブラリ「NumPy」について[…]
文字列
文字を扱う「str型」と呼ばれる型です。
文字を意味する”string”という英単語が元です。
文字列は以下コードのようにシングルクオーテーションやダブルクォーテーションで囲うことで定義できます。
g = '文字列です'
print(g)
# 「文字列です」と出力
h = "125"
print(h)
# 125と出力されるが、これはstr型
ちなみに以下のコードはエラーになります。
このように「どうすればエラーになるのか」が分かることで理解が進みます。
i = 文字列です
# クォーテーションで囲っていない
j = h + 2
# hは先ほど定義したstr型なので足し算ができない
さらに詳しい解説は別記事にまとめる予定です。
文字列操作をマスターして業務を自動化しよう! 化学研究者がPythonを活用する上で、とくに業務自動化のために「文字列操作」は重要です。 機械学習の活用にしか興味がない方は、大まかに理解しておく程度でも問題ないです。 業務を自動化[…]
コンテナ
複数のデータを扱うための型です。
これまでの数値型、文字列型では、一つの変数に一つのデータを定義していました。
しかし当然、実験データは必ず複数個存在しますよね。
その複数のデータをひとまとめに解析したり、分析することで次のアクションを判断すると思います。
ですので、複数データをPythonで扱うためにコンテナ型が必要ということです。
コンテナには「リスト型」、「辞書型」、「タプル型」、「集合型」と主に4つの型が存在します。
この中でもリスト型が最も基本的で、使用頻度も高いので、本記事ではこちらを簡単に解説します。
以下コードのようにリストは、[ ]で囲って、カンマで区切ることで複数のデータを収納できます。
これで「lst」という一つの変数に、複数のデータを入れることができます。
収納されている個々のデータを要素と呼んだりします。
lst = [1, 2, 3, "list", 5, "container"]
# 数値型と文字列型が混在しても大丈夫
print(lst)
# [1, 2, 3, 'list', 5, 'container']とリスト全体が出力
さらに詳しい解説は以下記事をぜひどうぞ。
業務自動化と機械学習に必須のリスト操作 Pythonを使った化学研究の自動化や、最近注目を集める機械学習による開発効率化において、コンテナ型(データをまとめて扱う型)の理解は欠かせません。 コンテナ型にはいくつか種類がありますが、特にリ[…]
処理
「同じ処理を繰り返しする」「条件によって処理を変える」といったことは、Pythonでよく使う基本中の基本。
この2つを使いこなせると、ただの計算機から「使えるプログラム」へと一歩進むことができます。
非常に複雑そうなプログラムでも、大抵はこの2つの処理をベースに成り立っています。
逆に言うと、この2つを使いこなせれば大抵のプログラムを作れるんです!
繰り返し処理
同じ処理を繰り返し行う処理方法です。ループ処理と言われたりします。
面倒な定型作業には、コピペやグラフ作成など同じ動作の繰り返しが含まれることがほとんどです。
これを高速で処理できるようになります。
繰り返し処理には主に以下の2種類があります。
- for文:リストなどの繰り返し処理が可能な型(イテラブル)の各要素に対して処理を繰り返す。
— - while文:設定した条件が真(True)である間、処理を繰り返す。
—
以下のコードはfor文の例です。
まずnumsという変数にリストを定義します。
そして「リストの各要素を2倍した結果(x)を出力」という処理をfor文で書いています。
nums = [1, 2, 3]
for num in nums:
x = num * 2
print(x)
# 2, 4, 6と順番に出力される
さらに詳しい解説は別記事にまとめる予定です。
条件分岐
条件式に応じて異なる処理を実行するための仕組みです。
このときはこうする、あのときはああする、と条件設定することで汎用的なプログラムを作ることができます。
以下コードのように、ifで条件分岐が始まり、条件が複数ある場合はelifでつながり、最後はelse、という形になります。
自分で最初のxの値を適当に変えてみて、出力結果が変わることを確認してください。
x = 10
# xの値によって処理を変える条件分岐
if x < 10: # xが10未満の場合
print('xは10以下です')
elif x == 10: # x=10の場合
print('xは10です')
else: # それ以外、つまりxが10より大きい場合
print('xは10以上です')
# このコードでは「xは10です」が出力
さらに詳しい解説は別記事にまとめる予定です。
抽象化と設計
ここからの内容は初心者がつまづきやすいところです。
本記事では概念だけ理解していただき、詳しい内容は別記事を参照ください。
基本のキから一歩先に行くために、「まとめる」「再利用する」「仕組みをつくる」といった考え方が必要になってきます。
よく使う処理をまとめる「関数」、それらの関数や変数をファイル単位で整理する「モジュール」、そしてデータと処理をひとまとめにした「クラス」を紹介します。
これらは、コードを読みやすくしたり、大きなプログラムを効率よく作るための「設計の基本」です。
それぞれの役割や使いどころを、具体的な例えを交えて見ていきましょう。
関数
関数は、プログラムの中でよく使う「処理」を一つにまとめた部品のようなものです。
基本的にプログラムは部品を組み立てて構成されています。
たとえば「2つの数を足す」「文字を整える」といった処理を部品にしておけば、何度でもその部品を呼び出して使うことができます。
上の例では処理が非常に単純なので部品化する必要性は高くないですが、複雑な処理をプログラム中で何度も実行したいときに、いちいち長いコードを書くことはミスにつながります。
一度部品(=関数)にしてしまえば、関数を呼び出すだけでその処理が実行できるため、コードがすっきりし、ミスも減らせます。
また、途中で処理の修正が必要になったときにも関数化のメリットがあります。
関数化していれば、関数の修正だけで済みます。
関数化していないと、その処理が出てくる箇所をすべて修正しなければならないので、これもミスにつながります。
以下コードは簡単な例です。
「def」で始まる行で「add」という勝手に名付けた関数を定義しています。
「add」関数は、a, bという2つの変数を受け取ってその和を出力する、という構成になっています。
最後に作った関数を呼び出していますが、呼び出す際にaに1を、bに2を渡しているので、その和である3を出力します。
# 関数の定義
def add(a, b):
print(a + b)
# 関数の呼び出し
add(1, 2)
# 1と2を足し合わせた3が出力される
さらに詳しい解説は別記事にまとめる予定です。
モジュール
関数などの部品をたくさん作っていくと、それらを整理したくなります。
モジュールは、こうした部品をツールボックスのようにファイル単位でまとめる仕組みです。
たとえば、「計算用の関数をまとめたファイル」「文字列を扱う関数をまとめたファイル」など、目的ごとに整理できます。
Pythonにはあらかじめ用意されたモジュールがたくさんあるため、それらを使うことで、前項の関数のように自分でゼロから部品を作らなくても済む場面が多々あります。
よく耳にする「ライブラリ」は複数のモジュールをまとめた“道具セット”のようなものです。
本ブログでは過去の記事でライブラリを”パワーアップアイテム”と例えたりしていますが、同じようなイメージです。
一括インストールから用途別に徹底解説 はじめに 化学研究や実験データ解析、さらには自動化や機械学習による開発加速が求められる中、Pythonはこうした業務を大幅に効率化するための強力なツールです。 本記事では、化学[…]
以下コードは簡単な例です。
mathモジュールを使って対数計算を行っています。
import文でmathモジュールを呼び出して、log関数で対数を計算しています。
# モジュールの呼び出し
import math
# 対数の計算
math.log(10, 5)
# 5を底とした10の対数 = 1.43~が出力される
モジュールやライブラリの詳細解説は別記事にまとめる予定です。
クラス
初学者が最もつまづくポイントです。
ここではそんなものがあるのか、という程度で大丈夫です。
クラスは自分で書ける必要はなく、概念を理解して、読めて、使えれば十分ですので、そのくらいの気持ちで頑張ってください。
クラスのイメージはずばり「職業」です。
たとえば「医者」や「大工」という職業には、それぞれ特有のスキルや行動がありますよね。
ゲームの世界では、「僧侶」や「格闘家」は使える呪文や技が違いますよね。
クラスでは、そのような「属性(名前や資格)」と「メソッド(診察する、家を建てる)」をひとまとめにして表現できます。
同じ職業の人たちは、共通のふるまいを持ちつつ、それぞれ個性がある(=別のデータを持てる)というのがポイントです。
この仕組みによって、「まとめて扱いたいけど、個別の違いも必要」といった複雑な状態をスマートに表現できます。
とても重要なことですが、Pythonはすべてこの「クラス」という概念で作られています。
というのも、最初に学んだ数値型や文字列型、リストといったデータ型もすべてクラスなんです。
以下のコードのように、type()関数で変数のデータ型を出力すると、「class ‘~’」とclass名(=データ型)が返ってきます。
つまり、数値は ‘ int ‘ というクラスで定義されており、四則演算ができるという性質を持たされています。
a = 1
b = "class"
c = [1, 2, 3]
print(type(a))
print(type(b))
print(type(c))
# <class 'int'>、<class 'str'>、<class 'list'>と出力
これだけだとよく分からないかもしれませんが、こんなものもあるのか、で大丈夫です。
さらに詳しい解説は別記事にまとめる予定です。
おわりに
今回紹介した8つのポイントは、Pythonのほんの入口にすぎません。
でも、この入り口を通ったあなたには、データ解析、自動化、機械学習など、新しい可能性の扉がいくつも開かれています。
ぜひ次の記事も読みながら、自分のペースでその世界を探検していってください。
基礎文法の詳説記事一覧
Pythonでの数値計算 はじめに 化学研究者のPython活用には数値計算技術は必須です! 理由は説明不要ですね。 本記事では、基本となる数値型の四則演算、より大規模な計算処理や行列演算が可能なライブラリ「NumPy」について[…]