LogoMark.png

データサイエンス/06 のバックアップソース(No.4)

#author("2023-08-29T11:02:25+09:00;2023-08-17T15:33:00+09:00","default:inoue.ko","inoue.ko")
*第5回 Python プログラミング2
[[データサイエンス/2023]]
~

***CONTENTS
#contents2_1
~
~

**制御文
***ブロックとインデント
if 文や for 文などの制御では複合文の記載が必要になります。JavaScript や PHP では { から } までが複合文が書かれる「ブロック」となりますが、Pythonでは、囲み記号を使わず、同じインデント(字下げ)がなされている文をブロックとして扱います。
 if 条件式:
     ブロック内の処理1
     ブロック内の処理2

インデントの位置をさらにずらすことでブロックの「入れ子」が実現します。
 if 条件式:
     ブロック内の処理1
     ブロック内の処理2
     if 条件式:
         ブロック内の処理1
         ブロック内の処理2
~

***比較演算子
Python でよく用いる比較演算子は以下。結果は True または False です。 
|演算子|意味|h
|x == y|x と y が等しい|
|x != y|x と y が等しくない|
|x > y|x は y よりも大きい|
|x < y|x は y よりも小さい|
|x >= y|x は y と等しいか大きい|
|x <= y|x は y と等しいか小さい|
~

***条件分岐|if
 if 条件式1:
     条件式1が真の時に実行する文
     ...
 elif 条件式2:
     条件式1が偽で条件式2が真の時に実行する文
     ...
 else:
     すべての条件式が偽のときに実行する文
      ...
~

***繰り返し| for 
-for 文は一定回数処理を繰り返します。基本的な書式は次の通りです。
 for 変数 in イテラブルオブジェクト:
     実行する文 1
     実行する文 2
     実行する文 3

-イテラブルオブジェクトとは「要素を順番に取り出すことができるオブジェクト」のことで、文字列、リスト、タプル、辞書などがそれに該当します。イテラブルオブジェクトの要素の数だけその後の「ブロック」を順に実行します。

-記載例1:リストを使った一定回数の繰り返し
 x = [ "Orange", "Apple", "Lemon" ]
 for val in x:
     print( val )
 
 Orange
 Apple
 Lemon

-記載例2:range関数を使った一定回数の繰り返し
 for i in range(10):
     print( i )
 
 0
 1
 :
~

***繰り返し|while
-while 文は条件が真の間処理を繰り返します。基本的な書式は次の通りです。
 while 条件式:
     条件式が真の時に実行する文1
     条件式が真の時に実行する文2
     条件式が真の時に実行する文3

-条件式が真の間、その後に記述された「ブロック」の実行を繰り返します。

-記載例
 n = 0
 while n < 6:
     print( "n = " + str( n ) )
     n += 1
 
 n = 1
 n = 2
 n = 3
 n = 4
 n = 5
~
~

**関数について
プログラムの基本は ''入力 > 処理 > 出力'' です。プログラムのことを関数と呼ぶことがありますが、関数は英語で ''function'' つまり「何らかの機能を持ったもの」という意味で、世の中のあらゆるアプリケーションは、function の集合体と捉えることができます。

中学・高校の数学で登場する「関数」を思い出して下さい。例えば・・
 y = 2x + 1 ・・・ y = f ( x ) と書いたりします  
は、入力データ x を受け入れて、これに処理 f ( ) つまり「2倍して1加える」を施して、その結果を y として返す・・・つまり、入力>処理>出力の機能を数式で表現したものと言えます。

データサイエンスの演習では、その大半理を、各種ライブラリーに定義された関数を利用するだけで実現させていますが、自分自身でオリジナルの関数を作って利用することもできます。以下のように記述します。

 # 自作関数の定義
 def myFunc(x):  # 入力:引数(ひきすう)として x を受け取る
   y = 2*x+1        # 処理
   return y           # 出力:戻り値として y を返す
 
 # 自作関数を利用したプログラム
 s = input("数を入力して下さい >>>")   # 入力
 x = float(s)                                             # 処理(文字列を数値に変換)
 y = myFunc(x)                                       # 処理(計算)
 print("計算結果:", y)                            # 出力
 
 --- 実行結果 ---
 数字を入力して下さい >>> 2.5
 計算結果: 6
&small(この事例は、演習の最初に作成した PythonBasics.ipnbに追記しておくことをおすすめします。);
&small(def は define(定義)という意味の英語の略です。);

-[[参考:Pythonの文法>Python/Syntax]]
-[[参考:JavaScriptの場合>JavaScript/Function]]
~

''付記''
プログラマーは、世界のあらゆる現象を関数(入力・処理・出力)として捉える思考を身につけることで、問題を効率的に解決しています。プログラミング教育の目的は、特定の言語によるコーディングの技術を身につけることではなく、プログラマー的思考を身につけることにあります。

~
~

**オブジェクト指向プログラミングについて
データの集合体(プロパティ)と、それを操作する手続き(メソッド)を、ひとまとめにしたものをオブジェクトと言います。オブジェクト指向プログラミング(OOP)とは、このオブジェクトを要素単位として、それらの関係を記述するプログラミング手法です。

プロパティやメソッドを利用する際は、以下のように [ . ] 接続で記述します。

-オブジェクト名.変数名:プロパティ
-オブジェクト名.関数名( ):メソッド

>__[[ObjectOrientedProgramming]]__
~
~



**演習5:MonteCarloMethod

***モンテカルロ法を用いて ''π'' の近似値を求める
__[[Python/MonteCarloMethod]]__
~

***学科サイトにリンク掲載
「モンテカルロ法で π の近似値を求める」プログラムのノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

-1. 自分のノートを開いた状態で、右上の「共有」をクリック

-2. 共有設定を変更して、以下のように表示される状態にします。
 このリンクを知っているインターネット上の全員が閲覧できます。

-3. 「リンクをコピー」をクリックして、そのアドレスを、以下の形式で、学科サイトの「Jupyter Notebooks」の部分に掲載して下さい。
 -[[MonteCarloMethod>https://colab.research.go・・=sharing]]

-4. 以下のようになればOKです。
https://design.kyusan-u.ac.jp/socialdesign/?JohnSmith/DataScience
~
~

**APPENDIX|プログラミングとデザイン思考
***オブジェクト指向と現代社会
人間と道具は「共進化」するものです。今日の社会は、オブジェクト指向でプログラミングされたアプリケーションがその基盤を支えていることから、私たち自身、日常の様々な手続きや情報交換を通して、無意識のうちに、その思考的枠組の影響を受けていると言えます。逆に言えば、それを意識化することができれば、我々をとりまく社会システムをクリアに捉えることができます。
 
 コンピュータの設計と人間の活動は、共に進化しなければならない
&small(Apple Computer, 1987, Human Interface Guidelines);
 
 道具の使い方を学ぶことが私たち自身を変える・・
 という点に人間と道具の関係の本質がある。
&small(アラン・ケイ, 1994, 人間のためのコンピュータ, Addison Wesley Publisher JP);
~

***従来型のプログラミングとオブジェクト指向の違い
従来の「手続き型プログラミング」では、「データ」と「処理」はバラバラに捉えられていて、プログラマーは、処理を担う「関数(引数>処理>戻り値)」を、いかに独立性の高いものに仕立てるか・・ということに関心を集中させていましたが、機能、手続きを中心に構成されたプログラムには、以下のような問題がありました。
-プログラムの規模が大きくなるにつれて全体像の把握が難しく、プログラミングにかかるコストが膨大になる
-機能の追加・拡張・変更が難しい
-コードの再利用が難しい

オブジェクト指向プログラミングでは「''データ(プロパティ)''」と「''処理(メソッド)''」をセットにした「オブジェクト」を構成単位と見なすとともに「オブジェクトのデータは、オブジェクトが持つメソッドによって処理される」と考えることで、プログラマーは、それがいかに単品としてうまく動くかということに専念できるようになりました。これは、画期的な意識改革です。

オブジェクトを具体的な「モノ・コト」に例えみましょう。例えば「車」は以下のようなデータと処理機能を持ったオブジェクトであると言えます。
//[[参考 w3schools.com>https://www.w3schools.com/js/js_objects.asp]]

-''プロパティ'':車の名前、型式、重量、色、現在位置、スピード・・・
-''メソッド'':エンジン始動、エンジン停止、走る、止まる、点灯する・・

我々が使っている自然言語で例えると・・・
-''プロパティ'':名詞・形容詞(title,  place, time, size, color・・)
-''メソッド'':自動詞・他動詞(Start(), Stop(), EditText(), PutImage(… ), ・・ )
~

***身近な事例をオブジェクト指向で記述すると・・
> [[ObjectOrientedProgramming#ObjectSample]]
~
~
~