
Python超基礎1: 変数型と変数化
*授業資料をnoteに移植することにしたので、改訂しつつ上げていきます。
*この授業の目的はプログラミングを習得することではないため、情報学的な観点から見るとかなり大雑把な内容になっています。
今回はインターネット環境さえあれば誰でも簡単にプログラミング言語Python(パイソン)を用いて解析を行うことができるGoogle Colaboratory(以後
Colab)を利用した解析例を示す。(使用にはGoogleアカウントでのログインが必要だが、名城生はメイネットIDを用いたシングルサインオンで利用できる)
1. Colabへのアクセスと基本操作
まずはアクセスしないと始まらない。以下のURLから
https://colab.research.google.com/

Colabはバージョンアップなどで見た目がコロコロ変わるので、多少画面が違っても気にせず進めてください(明らかにおかしければ授業で相談してください)。新美はダークモードで使いますので暗い画面でスクショを貼ります。
1.1 Colabの基本用語など
右上からGoogleアカウントでログインしたら、左上[ファイル]から「Python 3の新しいノートブック」を選択して空のプロジェクトを作成する。

この1枚の画面をNotebook(ノートブック、拡張子はipynb)と呼ぶ。基本的に分析やプロジェクトひとつに対してひとつのNotebookを作成するようなイメージ。また、Colabではセルと呼ばれるブロックごとにコードを書き、結果を確認しながら書き進めていくことができる。
とりあえず何も考えず、試しにセルに2+3と入力して実行してみる。
左側の再生ボタンを押すかShift + Enterする。

結果(2+3の計算結果としての5)が出力される。
こんな感じでブロックごとにやりたい分析や処理を書き進めていく。
1.2 メモを書くためのコメントアウト
作業するなかでは色々とメモしたいことも出てくるかと思います。そういった場合に、セルに直接的にメモを書いてしまうとエラーになります。たとえば…

まあ簡単にいえば「そんな文はプログラムとして解釈できないよ!」といった感じでエラーになってしまうわけです。そのため、コード上にメモを書くときにはコメントアウトという機能を使うことが必要です。Pythonでのコメントアウトには#(ハッシュ)を用います。

うまくいきました。コメントアウトでは「その行のハッシュより先を全て読み飛ばす」という処理が行われます。これでメモを書きながらコーディングできるようになりました。
2. データ型と変数化
ここからはPythonの基礎として、データ型や変数化について非常に簡単に触れます。型によって動作や文法が多少異なってくるので気をつけてください。
2.1 数値 (intやfloatなど)
まず基本として数値があります。具体的には整数のみを扱うint型(integer: 整数)や小数点を扱えるfloat型(float: 浮動小数)など。変数型を調べるtype関数に整数や小数を投入すると、

こんな感じで型が判別できるわけですね。とはいえ、数値型はそのまま使えばいいのであまり深く意識する必要はありません。特に、この授業で扱う程度の範囲の計算においてはある程度自動的に最適なものが選択されます。
2.2 数値を用いた簡単な計算
そして数値型では計算として、たとえば以下のような四則演算を行うことができます。

Colabでは一番下の行に入力されたもの以外は結果が表示されないので、print関数を使って全ての計算結果を表示させています。
その他に、あまり見慣れなさそうなものとして「比較」を紹介しておくと、

命題「100は10以上である」に対してTrue(真)
命題「3は1未満である」に対してFalse(偽)
命題「25は25.00と同一である」に対してTrue(真)
命題「7は5と異なっている」に対してTrue(真)
といった感じで比較ができます。なんとなく差の検定などで役立ちそうですね。
2.3 文字列(str)
次に文字型(正確にはテキストシーケンス型)について。
ここに至るまでにprintという関数を用いて結果を表示させるようなことも紹介した。しかしそれは、あくまでも数値型をprintするだけだったので特に何も意識することなく進んでこれたのであって、ではprintという文字列をprintするにはどうすればいいだろうか?
ためしにprint(print)とすると、

print関数に関する情報が表示され、printという文字列を表示させることはできていない。つまり、Pythonに文字列を読み込ませるには、それがただの文字列であることを明示的に指定しなければならないというわけだ。これには”クォーテーション”を用いる。

クォーテーションを用いて文字列の範囲を囲んであげることで、文字を出力することができた。見て分かる通り、アルファベットだけでなく数字・日本語・記号もクォーテーションで囲むことでstrオブジェクトとして扱いprintできるようになる。
2.4 リスト
リストではその名前のとおり、複数の要素をひとつのリストとして管理することができる。リストはブラケット[ ]を用いて定義する。

たとえばこの授業の履修者の学籍番号を一覧にするとか、あるいは商品IDのリストを作りたいとか、何かをひとつにまとめておきたい場合の一番基礎的な方法。
リストでは後ろに$${[i]}$$を指定することで、リストの中の$${i+1}$$番目の要素を取り出すことができる。$${i+1}$$になるのはPythonのリスト管理が0から始まるため。たとえば…

こんな感じ。今の状態ではなんの役にも立たなさそうなのがかなしい。
2.5 変数化
ある情報の入力にあたり、それをそのまま用いずに「変数」として定義することもできる。たとえば、

これは$${a}$$に2を、$${b}$$に3という数字を割り当てた状態で、$${a \times b}$$の計算結果を表示させたもの。
あるいは文字列でも、そして変数名をもう少し長くしても、

こんな感じで処理できる。ここでstr同士の加算(aisatsu1+aisatsu2)は文字列の「結合」を意味している。
ここまでだと正直変数化のメリットも特に感じられないかもしれない。変数化は数値それ自体よりも、それを組み合わせた計算などにおいて役に立つと考えた方がいい。たとえば、身長と体重の関係から肥満度を計算するボディマス指数(BMI)は
$$
BMI=\frac{体重(kg)}{(身長(m))^2}
$$
で計算される。そこで、身長($${h}$$)と体重($${w}$$)、そしてそれによりBMIの指揮だけを先にたてておいて、身長と体重の自由な組み合わせでBMIを計算することを考える。今朝の新美の身長と体重を使って、

こんな感じ。ここで、違う人間の身長と体重で改めてBMIを計算したい場合にも、bmiの式を書き換えることなく、$${h}$$と$${w}$$の値を書き換えるのみで実行できる。

本当はこれをさらに関数化すると間違いが減ってより良いコードになるんだけど、レベル的に今回は割愛。
3. パッケージのインポート
最後に、Pythonを扱うにあたって避けては通れないパッケージについて簡単に説明しておきます。Pythonではさまざまな第三者が(あるいはPythonが公式に)追加的な機能を提供しています。しかしながら、あまりにも多くのパッケージが存在しており、それら全てをはじめから使えるようにするには色々と面倒なことが起きてしまいます(dependencyやnamespaceなど…)。
そこで、必要なパッケージのみをimportすることにより使用できるようになります。
3.1 datetimeで日付計算
先ほど数値の四則演算などをやった。あれはただの数値だから、極論手計算でもそんなに大変ではない。しかし一方で、面倒な計算の一つでありマーケティング分野で避けて通れない処理として、日付計算がある。たとえば、2024年2月21日から2024年4月15日までの間には何日あるんだろうか?そういった、日付や時間を扱うパッケージとしてdatetimeがある。
まずはインポートする。そのまま書いて実行し、特に何も起こらないことだろうと思う。

パッケージのなかには基本的に複数の機能が収録されている。たとえば、datetimeパッケージの中の日付を扱うdateという関数を利用するには、datetime.dateと記述する。

date関数は年月日を順に整数で指定していけばいいので、これが2024年2月21日を表すオブジェクトであるわけです。せっかくなのでこれを変数化してstartという名前をつけておいて、もうひとつendという名前で2024年4月15日を作ってみる。やりたいのはもちろん差をとること。

計算結果をみると、timedelta(days=54)という表示が出ていることがわかる。これは計算結果として時間差が54日分あることを意味している。注意してほしいこととして、これはあくまでも差(=何日離れているか)であるということ。たとえば3-1は2だが、1月1日から1月3日までは3日間である。つまり、差が54日ということは、2/21~4/15までは55日間あるわけです。
こんな感じで、パッケージを使うことでいろいろな計算が簡単にできたりする。もちろんある程度信頼できるパッケージを用いるべきなのは大前提だけど。
とりあえずここまでを基本の1としておきたい。基礎とは概してつまらないものであるが、この積み重ねの先に今のChatGPTがあるんだと思ってほしい。(そしてそれは決して間違いではない)