LogoMark.png

データサイエンス/05 の変更点


#author("2023-10-16T13:30:32+09:00","default:inoue.ko","inoue.ko")
#author("2023-10-16T14:12:51+09:00","default:inoue.ko","inoue.ko")
*第5回 Python プログラミング1 
[[データサイエンス/2023]]|[[受講生一覧>https://design.kyusan-u.ac.jp/socialdesign/?%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9]]|[[汎用シート>https://docs.google.com/spreadsheets/d/1g-6TyzeQg3md55l9SGnqN-USBsoCNYOwSDDUOKVBJu8/edit?usp=sharing]]
~

***CONTENTS
#contents2_1
~
~

**はじめに
***事務連絡
来週23日(月)14:00 - 14:30 、4年 大石修悟さんにグッドデザイン賞審査会に関する体験報告をしていただきます。ソーシャルデザイン学科の2年生全員に聞いていただきたく、この授業中にその場を設定させていただく次第です。
~

***便利な技術のリスク
前回、前々回のみなさんのシートを確認したところ、データがずれている、あるいは、計算の対象となる範囲がズレているといった問題が散見されました。

スプレッドシートによる統計値の自動計算は、作業を大幅に効率化する点で非常に便利なものではありますが、わずか1ヶ所のデータのズレでも、それによって結果が大きく変わることがあります。便利さの裏側にそれを上回るリスクがあることを十分に意識してください。

これからの時代を生きていく上での選択肢は・・・
-自分自身が高度な技術を正しくつかいこなす
-高度な技術を持った人を仲間にする
-高度な技術に依存しない生き方を考える
~

***プログラミング言語の学習について
プログラミングは短期間で習得できるものではなく、授業を聞くだけでマスターできるものでもありません。使えば使うほど疑問や問題が出てくるのが常で、その都度、自力でそれに対処することで、少しずつ経験値が上げるものだとお考えください。この授業では、細かい文法の話は(初心者には意味不明なことが多いので)後回しにして、様々なサンプルでプログラミングの可能性に触れていただくことを主軸に据えています。まずはサンプルを「真似する」ことから入って、「ここをこうしたい」「ここを変えるとどうなる」といった、自らの好奇心で、サンプルを改変しながら、経験値を上げてください。

Pythonプログラミングへの関心が高まった方、あるいは、その必要性を感じた方は、自分自身の目で「読みやすい」と思う参考書を一冊購入して、初歩から順に読むことをおすすめします。> [[Amazon:Python 入門]]
~
~


**Python 言語について
今回からは Python というプログラミング言語を使います。データサイエンスの世界では、スプレッドシートを用いた統計処理と並んで、Python言語による統計処理が主流となっており、インターネット検索でも、様々な手法を知ることができます。 

Pythonはさまざまな分野のアプリケーションで使われている''インタープリタ型のプログラミング言語''です。クリーンで読みやすい文法、手続き型のコードによる自然な表現、直感的なオブジェクト指向、事実上すべてのタスクをこなせる広範な標準ライブラリとサードパーティのモジュール、アプリケーションに組み込んでスクリプトインタフェースとして利用することが可能・・など様々な利点があります。

開発環境を含めて__[[オープンソース>OpenSource]]__です。無償でダウンロード>インストールして利用することができます。

-詳細はこちら>__[[Python]]__
~

***Google Colaboratoryについて
Python言語を使うには、パソコンに開発環境をインストールする方法もありますが、ここでは Python の学習環境として様々なテキストで紹介されている Google Colaboratory を使用します。

Google Colaboratory とは、Googleの仮想マシン上で動く [[Jupyter Notebook>https://jupyter.org]]((Jupyter Notebook は、ブラウザ上で Python のコードの編集とインタラクティブな実行ができるだけでなく、テキストドキュメントを挿入したノートとして情報共有する仕組みを実現したオープンソースのWebアプリケーションです。数値シミュレーション、統計モデリング、データの視覚化、機械学習などを得意とする、総合的なデータサイエンスツールです。)) をベースとした開発環境です。Googleアカウントがあれば、日常的に用いているブラウザから誰でも無料で利用できます。

-https://colab.research.google.com
-詳細はこちら >__[[GoogleColaboratory]]__
~
~

**Python 初体験
***Google にアクセスしてログイン
-https://www.google.co.jp/  に、ご自身のアカウントでログインして下さい。
~

***Colaboratoryについて
#image(GoogleColaboratory/login.jpg,right,35%)
-公式サイト
https://colab.research.google.com
#clear
~

***新規のノートブックを作成
#image(GoogleColaboratory/rename.jpg,right,35%)
-DetaScience のフォルダの中で、右クリック>その他>GoogleColaboratory
-DetaScience のフォルダの中で、右クリック>その他>+ アプリを追加
-GoogleColaboratory を追加して下さい。
-以後、右クリック>その他>GoogleColaboratory で使えます。

-Untitled0.ipynb というファイル名を以下に変更。このノートを学科サイト上でリンク公開することが今回の演習課題となります。
 PythonBasics.ipynb
#clear

-コードセルが1つ表示されて、プログラムが書ける状態になっていることを確認して下さい。
#image(GoogleColaboratory/code_cell.jpg,,80%)
#clear
~

'''では、はじめましょう'''
~

***Jupyter Notebook の概要
[[Jupyter Notebook>https://jupyter.org]]には、コード(プログラム)を書くための''コードセル''と、テキスト(ノート)を書くための''テキストセル''の2つがあります。この2つのセルを使うことで、見出し・解説・プログラムを文字通り「ノート」のようにまとめることができます。

-''コードを追加する場合''は「+コード」をクリックします。
-新たなコードセルが追加されるので、そこにプログラムを書きます。
-コードを実行する場合は「▶」をクリックします。
-コードセルの直下に結果が表示されます(変数の値は保持されています)。

-''ノートを書く場合''は「+テキスト」> テキストセルが追加されます。
-[[Markdown]]記法を用いて、見出しや箇条書き等のスタイルが使えます。

-セルの上下(処理の順序)は、セルに付随して表示されるアイコン「 ↑ ↓ 」を使って変更することができます。

-ノートは [[GoogleDrive]] の ''Colab Notebooks''というフォルダに自動保存されるので安心です。

~

***対話処理の初期体験
-コードセル(▶のボタンのある枠内)に、以下のように書いてみて下さい。1行目は「 5 x 3 の計算結果を a に代入する」という意味で、2行目は「 a の内容を表示する」という意味です。
 a = 5 * 3
 a

-▶(実行)のクリックでプログラムが実行され、処理結果が表示されます。
 15

-「+コード」でコードセルを追加して、以下のように書いてみて下さい。
 b = a *2
 b

-当該セルの▶のボタンをクリックすると処理結果が表示されます。なお、前のセルで定義した変数( a:15 )は、後のセルで使用できる前提です。
 30
#image(GoogleColaboratory/result.jpg,,80%)

-と、こんな感じで、対話的に作業を進めることができます。

//#image(GoogleColaboratory/save.jpg,right,40%)
-マイドライブを確認してみて下さい。 ''Colab Notebooks''というフォルダにノートが保存されていることが確認できると思います。
#clear
~


***Colaboratory 利用上の留意事項
Googleアカウントがあれば、誰でも無料で利用できますが・・
-連続使用が12時間を経過すると対話がシャットダウンされます。
-90分間アクセスがない場合もシャットダウンされます。
-シャットダウンされた場合、変数に記憶されたデータは初期化されます(次回ノートを開いた際は、最初のコードから順に処理することになります)。
-とは言っても、ノートに書かれたコードやテキストは GoogleDrive に保存されていますので、Pythonの学習目的での利用では問題ありません。
~
~

**入力・処理・出力
プログラムの基本は、以下の流れです。
 データの入力 > 計算処理 > 結果の出力
~

***サンプルプログラム
以下のソースを「コード」として コピー&ペーストしてお試し下さい。
 a = input( "a = " )
 b = input( "b = " )
 a = int( a )
 b = int( b )
 c= a*b
 print( "a x b = ", c )
~

***変数について
プログラミングの世界では「データを入れる器」のことを変数と言います。
Python の予約語以外であれば、自由な変数名を使うことができます。
 x = 256
 a = "hello"

変数には、数値・文字列・リストなど、様々なタイプがあります。
> 詳細:__[[Python/Syntax]]__
~

***コメントについて
Python では # 記号以降はコメントとして扱われます。プログラム上で文の機能を一時的に無効にする(コメントアウト)場合にも利用可能です。

-インラインコメント
#から行末までは実行時に無視されます。#より前のコードは有効です。
 a = 1  # comment

-ブロックコメント(行全体)
行頭に#を書くと、行全体コメントとなり、実行時には無視されます。
 a = 1
 # b = 2
 # c = 3
 d = 4
~
~
**制御文
***ブロックとインデント
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
~

***制御文を含むプログラムの例
1から100までの整数の総和を求めるプログラム

-1から100までの整数の総和|for文
 s = 0
 for i in range(1,101):
   s = s + i
 print(s)
--range関数は、終了値そのものを含まないので、101までとしています
例えば、range( 1,5 ) は、1,2,3,4 を意味します。
--s = s + 1 は、「現在の s に i を加えて新たな s にする」という意味

-1から100までの整数の総和|while文
 s = 0
 i = 1
 while i<=100:
   s = s + i
   i += 1
 print(s)
-i += 1 は、現在の i に 1 加算。つまり「カウンター」として機能します。
~
~

**演習5|Pythonプログラミングの基礎

***学科サイトにリンク掲載
ここまでで紹介したサンプルプログラムを含むノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

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

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

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

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

このようなファイルを作っておくと、今後ちょっとしたコードの動作確認を行うためのノートとして活用することができます。

~
~
~