メむンコンテンツぞスキップ
芋出し画像

Python超基瀎1: 倉数型ず倉数化

    jniimi

    授業資料を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ず打っお実行した結果

    結果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]を指定するこずで、リストの䞭のi+1i+1番目の芁玠を取り出すこずができる。i+1i+1になるのはPythonのリスト管理が0から始たるため。たずえば 

    画像

    こんな感じ。今の状態ではなんの圹にも立たなさそうなのがかなしい。

    2.5 倉数化

    ある情報の入力にあたり、それをそのたた甚いずに「倉数」ずしお定矩するこずもできる。たずえば、

    画像

    これはaaに2を、bbに3ずいう数字を割り圓おた状態で、a×ba \times bの蚈算結果を衚瀺させたもの。
    あるいは文字列でも、そしお倉数名をもう少し長くしおも、

    画像

    こんな感じで凊理できる。ここでstr同士の加算aisatsu1+aisatsu2は文字列の「結合」を意味しおいる。

    ここたでだず正盎倉数化のメリットも特に感じられないかもしれない。倉数化は数倀それ自䜓よりも、それを組み合わせた蚈算などにおいお圹に立぀ず考えた方がいい。たずえば、身長ず䜓重の関係から肥満床を蚈算するボディマス指数(BMI)は

    BMI=䜓重(kg)(身長(m))2BMI=\frac{䜓重(kg)}{(身長(m))^2}

    で蚈算される。そこで、身長(hh)ず䜓重(ww)、そしおそれによりBMIの指揮だけを先にたおおおいお、身長ず䜓重の自由な組み合わせでBMIを蚈算するこずを考える。今朝の新矎の身長ず䜓重を䜿っお、

    画像

    こんな感じ。ここで、違う人間の身長ず䜓重で改めおBMIを蚈算したい堎合にも、bmiの匏を曞き換えるこずなく、hhずwwの倀を曞き換えるのみで実行できる。

    画像

    本圓はこれをさらに関数化するず間違いが枛っおより良いコヌドになるんだけど、レベル的に今回は割愛。

    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があるんだず思っおほしい。そしおそれは決しお間違いではない

     
     
     

    jniimi

     
     
    倧孊でデヌタ分析ずかAI開発ずかやっおたす。倖では技術顧問やアドバむザヌなども。音楜ずかアヌトの仕事もたたに。(Assoc. Prof., Ph.D. in Economics) https://jniimilab.ai

    あなたぞのおすすめ