コンピュータサイエンス
第1回 無料ソフトウエア、無料データ、Scratchプログラミング、Scratchのキャラクタ
無料ソフトウェアには、フリーウェアと、ソースコードが公開され自由に利用・改変・再配布できるオープンソースソフトウェアがある。無料ソフトウェアや無料データの利用時は、作者が定める利用条件を確認し、著作権を尊重する必要がある。情報工学は、コンピュータを用いて問題を解決する学問分野であり、対象・構造・条件を整理して解決方法を設計する。Scratchは、コンピュータに実行させる手順であるプログラムを、ブロックを組み合わせて作るビジュアル環境であり、順次実行・繰り返し・条件分岐を学ぶことができる。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
以下の演習では、説明部分で学んだプログラミングの概念を各自が実践する。
説明パートの1-4「プログラムとは」「イベント駆動」「順次実行」「ブロック操作の基本」に対応する演習である。Scratchを起動し、イベントブロックと動きブロックを組み合わせて、キャラクタを動かす最小限のプログラムを作成する。「旗が押されたとき」というイベントに「10歩動かす」という動作を接続する操作を通じて、イベント駆動と順次実行の基本を体験する。 前提スキル:Webブラウザの操作、URLの理解。ドラッグ操作(左ボタンを押しながら移動し、左ボタンを離す)。 操作手順 観察と考察 説明パートの1-5「キャラクタの基本」「スプライト(キャラクタ画像)」に対応する演習である。新しいスプライトを追加し、追加したキャラクタに対して個別にブロックを組み立てる。キャラクタごとに独立したプログラムを持つというスプライトの基本的な仕組みを確認する。 操作手順 観察と考察 説明パートの1-6「①繰り返し」「②もし・・・たら、・・・する(条件分岐)」「③強制停止」に対応する演習である。「ずっと」ブロックによる繰り返し、「もし端に着いたら、跳ね返る」ブロックによる条件分岐、赤ボタンによる強制停止を組み合わせて、キャラクタが自動的に動き続けるプログラムを作成する。さらに「右に15度回す」ブロックを追加し、動きの初期方向を変更する効果を確認する。 操作手順 観察と考察 説明パートの1-4「ブロックの形状と合体ルール」、1-5「キャラクタの操作」、1-6すべてに対応する活動である。演習①~③で学んだブロック操作、スプライト管理、繰り返し、条件分岐を組み合わせ、各自の工夫により自由にプログラムを作成する。ブロックの形状による合体ルールを手がかりに、未使用のブロックにも挑戦する。 操作手順 観察と考察
[YouTube動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
演習① Scratchの開始・ブロック操作
演習② キャラクタ・スプライト
演習③ キャラクタの制御
演習④(余裕のある人向け)
第2回. 人工知能の仕組み
人工知能は、コンピュータが人間のような知的能力を持つことを目指す技術である。データから自ら学習する機械学習と、人間が書いたルールや知識を用いる知的なITシステムに大別される。応用分野は、画像分類、顔検知、対話型AI、自動翻訳、データ分析と予測、テキストからの画像合成など多岐にわたる。学習データに偏りがあると結果にも偏りが出るため、利用には注意が必要である。AIは人間を支援する道具であり、最終的な判断は人間が行う。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
以下の演習では、説明部分で学んだAIの概念を、オンラインデモを通じて体験する。各デモの結果を観察し、考察する。
使用するサイトの都合上、未習の用語(例:隠れ層)が表示される場合があるが、そのまま進めてよい。
ニューラルネットワークの基本構造に関する演習である。ニューラルネットワークの構造やパラメータを変更しながら、学習過程の変化を観察する。 URL: https://playground.tensorflow.org 操作手順 観察と考察 探索による問題解決に関する演習である。探索アルゴリズムが経路を見つける過程を可視化し、コンピュータによる探索の仕組みを理解する。 URL: https://qiao.github.io/PathFinding.js/visual/ 操作手順 観察と考察 ニューラルネットワークの基本構造に関する演習である。畳み込みニューラルネットワーク(CNN)の内部構造を3Dで可視化し、各層がどのように入力を処理しているかを観察する。 URL: https://adamharley.com/nn_vis/cnn/3d.html 操作手順 観察と考察 人間の下書きをAIが清書する演習である。手描きの下書きをAIが認識し、候補イラストを提示する仕組みを体験する。 URL: https://www.autodraw.com/ 操作手順 観察と考察
[YouTube動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
演習1. TensorFlow Playground(機械学習・ニューラルネットワーク)
演習2. PathFinding.js Visual(知的なITシステム)
演習3. CNN 3D Visualization(Adam Harley)(機械学習・ニューラルネットワーク)
演習4. AutoDraw(Google)(AIによる合成)
第3回. デジタル画像
デジタル画像は格子状に並んだ画素から構成され、輝度(明るさ)のみを持つ濃淡画像と、輝度と色の情報を持つカラー画像がある。カラー画像の成分は、R(赤)・G(緑)・B(青)の3成分で表す方法と、輝度成分と色成分で表す方法がある。畳み込み(フィルタ処理)は、周囲の画素にフィルタの重みを掛けて和をとり各画素の値とする操作であり、ぼかし・エッジ検出・シャープ化などを実現する。空間周波数は明暗の変化の細かさを表し、スペクトルの中心は低周波、周辺は高周波に対応し、高周波除去でぼかし、低周波除去で輪郭抽出ができる。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
以下の演習では、説明部分で学んだデジタル画像の概念(画素、カラー画像の成分、畳み込み、空間周波数)、画像制作におけるコンピュータの有用性を、Webブラウザ上で動作するサイトを通じて実践的に体験する。いずれもインストール不要で、マウス操作のみで体験できる。
Fluid Paint は油絵具の物理特性をシミュレートするペイントソフトであり、筆の色、サイズ、毛先の数(Bristle Count)、流動性(Paint Fluidity)を設定して描画できる。画素ごとに色情報を持つカラー画像が生成される過程と、周囲の画素同士が相互作用してにじみや混色が生じる様子を観察できる。 操作手順 観察と考察 Silk は対称性を持った曲線をマウス操作で描けるジェネレーティブアートのサイトである。対称(Mirror)や螺旋(Spiral)といった機能により、少ない操作で複数の曲線からなる構造を生成できる。 操作手順 観察と考察 WebGL Fluid Simulation は、流体の物理シミュレーションをGPU上で実行し、マウス操作で光の渦のような流体表現を生成するサイトである。流体の各時点の状態は、前時点の各画素の値とその周囲の画素の値から計算される。設定メニューでは密度の減衰(density diffusion )、速度の減衰(velocity diffusion)、渦度(Vorticity)、噴出半径(Splat Radius)、ブルーム(Bloom)、光線(Sunrays)などのパラメータを変更できる。 URL: https://paveldogreat.github.io/WebGL-Fluid-Simulation/ 操作手順 観察と考察 説明パートで学んだ「画像は画素値を並べた2次元配列である」「畳み込みは画像上の各位置で近傍の画素値とカーネル(フィルタ)の値の要素ごとの積の和を計算する操作である」という概念に対応する演習である。カーネル(フィルタ)を切り替えて出力画像の変化を確認する。出力画像および入力画像の任意の画素にマウスを合わせることで、3×3近傍の画素値とフィルタの値の積和演算の過程を数値で確認する。 URL: https://setosa.io/ev/image-kernels/ 操作手順 観察と考察 演習④で確認した「フィルタを適用すると画像がどう変わるか」を踏まえ、本演習では「そのとき何が計算されているか」を確認する。フィルタが入力行列上を1マスずつスライドする過程を可視化し、出力行列の各要素がどの入力領域から計算されたかを追跡する。出力値の正(赤)と負(青)の色分けにより、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)が画像から特徴を抽出する原理を確認する。 URL: https://deeplizard.com/resource/pavq7noze2 操作手順 観察と考察 本演習では、画像を周波数領域で表現したスペクトル上で編集を行い、その逆フーリエ変換(周波数を画像に戻す処理)結果を確認することで、空間周波数成分と画像の対応関係を確認する。スペクトル中心の低周波成分が画像の大局的な明暗に対応し、周辺の高周波成分が輪郭や細部に対応することを、スペクトルを削る操作を通じて確認する。 URL: https://monman53.github.io/2dfft/ 操作手順 観察と考察
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
演習① ペイントソフト Fluid Paint
演習② アート作品制作サイト Silk
演習③ 流体シミュレーション WebGL Fluid Simulation
演習④ Setosa.io:画像にフィルタを適用
演習⑤ deeplizard:畳み込みを1ステップずつ確認する
演習⑥ 2D Inverse Fourier Transform Playground:空間周波数を操作
第4回. ストリートビュー、3次元コンピュータグラフィックス
Google Mapのストリートビューは、地図上の地点における道路からの画像を閲覧する機能であり、地名や施設名で検索できる。オブジェクトを様々な方向から撮影し3次元データを得る処理を3次元再構成という。ポリゴン(平らな多角形)の集合体であるポリゴンメッシュで3次元モデルを表現できる。Google Earthは無料のオンラインの地球儀であり、2次元・3次元の地図表示やストリートビューの機能を持つ。Blenderは無料の3次元コンピュータグラフィックス(3DCG)の作成・編集ソフトウェアであり、3次元モデル制作、アニメーション、画像出力などの機能を持つ。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
ストリートビューは、地図上の地点における道路からの画像を閲覧する機能である。Google Mapではストリートビューのモードへ切り替えて利用する。本演習では、Google Mapで地名等を検索し、ストリートビューでの表示と移動を行う。 URL: https://www.google.co.jp/maps 操作手順
道路沿い等に多数の青色の表示が付くことを確認する。
白丸をクリックして移動する。 ヒント 考察ポイント Google Earthは、無料で利用可能なオンラインの地球儀である。Google Earthには、写真、3次元コンピュータグラフィックス、写真+標高、地球儀、ストリートビューの機能がある。本演習では、Google Earthで地名等を検索し、自由な視点移動を行いながら、ストリートビューとの違いを確認する。 操作手順 ヒント 考察ポイント Blenderは、3次元コンピュータグラフィックス(3DCG)の作成・編集ソフトウェアであり、無料で利用可能である。3次元モデル制作、アニメーション、レンダリング(画像生成)などの機能を提供する。本演習では、Blenderの起動、立方体の確認、球と円柱の追加と移動、色の設定とレンダリングを行う。 Blender ダウンロードページ:https://www.blender.org/download/ Blender のインストールの説明: https://www.kkaneko.jp/db/cg/blenderinst.html
事前準備:上記ダウンロードページから Blender を入手し、インストールしておく。 注意:オブジェクトはカメラから見える範囲に配置する。カメラの移動については本演習では扱わない。 操作手順 左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。 左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。 左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。 「マテリアル」が見えないときはスクロール。 「新規(New)」が表示されない場合は、マテリアルがすでに作成済みであるため、そのまま次へ進む。 ヒント 考察ポイント
[演習の詳細を表示するには、この行をクリックしてください]
演習① Google Mapのストリートビューを用いた探索
エベレスト
富士山
演習② Google Earthを用いた探索
演習③ Blenderの体験
第5回. コンピュータの構成要素とデータ処理の仕組み
コンピュータは、プロセッサ(計算)、メモリ(一時保存)、入力装置、出力装置、補助記憶装置の5要素で構成され、プロセッサとメモリ間でデータがやり取りされる。データは二進数(0と1のビット列)で扱われ、メモリは1バイト(8ビット)単位にアドレス(0から始まる通し番号)が付与される。文字はASCIIなどのルールで数値に変換される。16進数(0〜9、A〜F)は二進数4桁を1桁にまとめる表記法である。論理演算(AND、OR、NOT)の組み合わせで足し算などの算術演算が実現でき、負の整数は2の補数(最上位ビットで符号を表現)で扱う。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
前提 手順 ステップ 1:1文字の文字コードを表示する ステップ 2:入力した文字列を文字コードへ変換する ヒント 考察ポイント 前提 手順 ステップ 1:プログラムを実行する ステップ 2:4通りの組み合わせを確かめる ヒント 考察ポイント 前提 手順 ステップ 1:プログラムを書き換えて実行する ステップ 2:4通りの組み合わせを確かめる ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習①:文字コードを観察する
0x:先頭に付けると、その数値が16進数であることを示す目印。
c = 'A'
print(hex(ord(c)))0x41 と表示されることを確認する。
abcde)を入力し、Enter キーを押す。
0x41 のうち 0x は16進数を示す目印。値そのものは 41(16進数)。A を探すと、列が 4、行が 1 の位置にある。これが 16進数 41 に対応し、プログラムの出力 0x41 と一致する。A と小文字の a は別の文字コードになる。
'B' を入力したときの出力を表から予想し、実行して確かめる。資料 ('A' → 01000001 → 16進数 41、'B' → 01000010 → 16進数 42)と対応する。Aa)し、文字コードの違いを観察する。abcde を入力すると、5行の文字コードが出力される。これは 文字列が1文字ずつ文字コードに変換されること を示している。演習②:論理演算(AND、OR)を観察する
True(真)と False(偽)の2つの値を扱う。ここでは、1 が True、0 が False に対応する。
a = True
b = False
print("a and b =", a and b)
print("a or b =", a or b)a and b = False
a or b = True
a と b の値を次の4通りに書き換え、それぞれ実行ボタンを押して結果を確認する。
a = True、b = True のとき
a = True、b = False のとき
a = False、b = True のとき
a = False、b = False のとき
True / False と書く(true や TRUE ではエラーになる)。a = ... の右辺を書き換えたあとは、必ず実行ボタンを押し直す。
a = True、b = True のときの a or b の結果について、資料 「論理和と『選択』の違い」(焼き芋大会の例)と関係づけて、両方が True のときも OR の結果が True になることを確認する。演習③:論理演算で1桁の足し算を作る
x AND y(x OR y) AND NOT (x AND y)not(否定 NOT に対応)が加わる。not は値を反転する。
a = True
b = True
upper = a and b
lower = (a or b) and not (a and b)
print("a =", a, ", b =", b)
print("上位ビット =", upper)
print("下位ビット =", lower)a = True , b = True
上位ビット = True
下位ビット = Falsea と b の値を次の4通りに書き換え、それぞれ実行ボタンを押して結果を確認する。
a = False、b = False のとき
a = False、b = True のとき
a = True、b = False のとき
a = True、b = True のとき
not は True を False に、False を True に変えるもの。True を 1、False を 0 と読み替えると、4通りの結果は資料「1桁足し算の2ビット表現と、論理演算との関係」の表の各行と対応する。
a = True、b = True のときの結果(上位ビット True、下位ビット False)が、二進数の足し算 1 + 1 = 10 に対応していることを確認する。
第6回. デジタル社会でのマナー、情報セキュリティ―デジタル時代のガイド ー
情報の真偽は、疑問を持つ姿勢、情報源の確認、および複数の情報源との照合により判断する。個人情報や私的な内容は、一度発信すると取り消せず世界中に拡散する可能性があるため、慎重に扱う必要がある。不審な警告やオファーには応じず、落ち着いて対処したうえで、他者に相談して被害を防ぐ。AIに入力した情報は学習データとして利用される場合があるため、個人情報の入力は控える。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
概要 ウェブブラウザでの情報アクセスについて、実際の通信内容を確認する。Google Chrome に標準搭載されているデベロッパーツール(ブラウザに付属する開発者向けの確認ツール)を用いて観察する。 体験内容 使用するツール 安全性について デベロッパーツールは、ブラウザがすでに受信したデータを表示するだけの機能であり、外部への送信やPC内のファイルの書き換えは行わない。アクセス先の www.fukuyama-u.ac.jp は公開サイトであるため、アクセスに問題はない。 手順 ネットワーク (Network) タブが見当たらない場合は、タブ列の右端にある「»」マーク(隠れたタブを展開する記号)をクリックし、一覧から選ぶ(下図)。 暗号化通信であるHTTPSであっても、ブラウザのデベロッパーツールでは送受信されたデータが画面上で読める形式で表示される。これは、ブラウザが受け取ったデータを復号した後の状態(暗号化を解いた後の元のデータ)を表示しているためである。通信自体は暗号化されている。
考察ポイント 概要 画像生成AI(指示文に基づき画像を自動生成するAI)を利用し、特定の属性(職業、役割など)を含むプロンプト(AIへの指示文)を入力することで、AIの出力に現れる偏り(バイアス)と、AIの責任ある利用について検討する。 体験内容 使用するツール 安全性について Microsoft 365 Copilot Chat は、大学契約の Microsoft 365 環境に含まれる正式なサービスである。操作はブラウザ内で完結し、追加のソフトウェアはインストールしない。Microsoft の公式仕様(エンタープライズデータ保護。組織契約者向けに入力データの取り扱いを保護する仕組み)により、大学アカウントでのサインイン時に入力したプロンプトと応答は、Microsoft の大規模言語モデル(テキストを生成するAIの基盤)の再学習には用いられない。利用者側で守る点は、自身や他人の氏名、住所、顔写真、未公表の研究内容などをプロンプトに入力しないことである。 手順 ヒント 考察ポイント 概要 公開されている安全性チェックサービス(URLを入力するとそのサイトの安全性に関する情報を返すサービス)を用いて、Webサイトの安全性を確認するためのヒントを得る手順を学ぶ。 体験内容 使用するツール 安全性について 使用するサービスは公開された Web サービスであり、ブラウザのみで動作する。送信されるのは利用者が入力した URL の文字列のみであり、利用者の PC がスキャンされることはない。 手順 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習1:ウェブブラウザでの通信内容
F12 キーを押し、画面の右側または下部にデベロッパーツールを表示する(F12 が反応しない場合は、ページ上で右クリックし「検証」を選択する)。デベロッパーツールは、ブラウザの画面内に分割表示される。閉じるときは右上の「×」ボタンを押す。
Ctrl+R キーを押す)。タブ内のリストに、ページ表示時に発生した通信が一覧表示される(再読み込みを行うのは、デベロッパーツールを開く前に発生した通信が記録されていないためである)。
演習2:AIのバイアスの観察
画像を作成してください: を付与する。
画像を作成してください:ナース画像を作成してください:ソフトウエアエンジニア画像を作成してください:社長
画像として出力してください と追記して再送信する。
画像を作成してください という指示を含めることで、Copilot Chat はテキスト応答ではなく画像生成として応答する。指示を省略すると職業の説明文が返る場合があるため、毎回付与する。
演習3:サイトの安全性チェックサービス
www.example.com の形式。https:// は省略可)を入力する。本演習では、次の3つを順に入力する。
www.fukuyama-u.ac.jpgoogle.com
第7回. プログラミング思考の基礎
プログラミング思考には、分解・パターン・抽象化・アルゴリズム化などの要素がある。プログラムの書き方の基本は「オブジェクト.メソッド(引数)」である。変数は値に貼る名札、オブジェクトはその先の実体と捉えると理解しやすい。LLMはプログラミング学習にも役立つが、AIが生成したコードは必ず検証する必要がある。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
CodeCombat(コードコンバット)は、ゲームをクリアするために必要なプログラムを書くことで、Python の基本を楽しく学ぶことができるオンライン教材である。登録不要・無料の範囲で、クラスコードを使わずに Python の最初の 5 つのレベルを学ぶことができる。本演習では、オブジェクト・メソッド・引数というプログラミング思考を支える基本概念を、キャラクタを動かす操作を通じて体験する。 CodeCombat のサイト:https://codecombat.com 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習① CodeCombat(コードコンバット)による Python プログラミング入門
hero.moveDown() という行を追加し、「実行」をクリックしてキャラクタの動きを確認する。hero.moveRight() で右に、hero.moveDown() で下にキャラクタが動くことを確かめる。
オブジェクト.メソッド(引数)」の形で書く。例えば hero.moveRight() は、hero というオブジェクトに対して moveRight というメソッドを呼び出している。引数がある場合もあれば、ない場合もある。
hero というオブジェクトに対して、moveRight()、moveDown() など異なるメソッドを呼ぶことで、キャラクタの動きが変わることを確認する。
第8回. Python プログラミング基礎①
プログラミングはアイデアを形にする創造的作業である。変数は値(オブジェクト)を指す名札であり、代入「左辺=変数、右辺=式」で値を結びつけ書き換える。計算(演算子)・出力(print)・入力(input)・外部機能の取り込み(import)が基本要素である。タートルグラフィックスでは図形描画を通じ、発想力・自主性・省察(ふりかえり)の姿勢を育てる。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
変数に値を代入し、print() と + による文字列連結で、変数の内容を画面に表示する演習である。 手順 ヒント 考察ポイント 数値を変数に代入し、それらを使って計算を行い、結果を print() で表示する演習である。 手順 ヒント 考察ポイント 既存の変数に新しい値を代入して更新(再代入)し、変数の値が変更できることを確認する演習である。 手順 ヒント 考察ポイント input() を使ってユーザーからの入力を受け取り、変数に保存して利用する演習である。 手順 ヒント 考察ポイント datetime ライブラリを使い、コンピュータ(オペレーティングシステム)のタイマーを読み取って、今の日時を表示する演習である。 手順 ヒント 考察ポイント math ライブラリの sqrt(平方根)を使い、面積が 7 の正方形の一辺の長さを求める演習である。 手順 ヒント 考察ポイント math ライブラリの円周率(math.pi)を使い、半径 3 の円の面積を求める演習である。 手順 ヒント 考察ポイント math ライブラリの三角関数(math.sin)を使い、2辺の長さが 4 と 6、その間の角度が 60 度の三角形の面積 (1/2) × 4 × 6 × sin(60) を求める演習である。 手順 ヒント 考察ポイント タートル(亀)が線を引きながら進む様子を観察し、さらにプログラムを書き換えて結果が変わることを確認する演習である。 手順 ヒント 考察ポイント 前進(forward)と回転(left)を繰り返して、正六角形を描く演習である。 手順 ヒント 考察ポイント 星形を描くプログラムを実行し、さらに自分でデザインした図形を描くことに挑戦する、自己研鑽の演習である。 手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
演習① 変数と代入、+を用いた文字列連結
name = "太郎" は、「太郎」という文字列を name という名札(変数)に結びつける代入である。print("こんにちは、" + name + "さん!") の + は、文字列どうしを直接つなぐ連結である。
演習② 計算
x = 5、y = 3 と2つの変数に数値を代入し、x + y で足し算を行っている。('x の値:', 5) のように括弧とカンマ付きで表示されることがある。これは表示の違いであり、間違いではない。
演習③ 代入(再代入)
score = 80 と代入し、表示した後で score = 95 と同じ変数に入れ直している。
score = score + 1 のように、今の値をもとにした計算に書き換えると、結果がどうなるかを確認する。演習④ input() による入力
user_name = input("あなたの名前を入力してください: ") は、画面にメッセージを表示して入力を待ち、入力された値を user_name に保存する。
演習⑤ 現在日時の表示(datetime ライブラリ)
import datetime は、datetime ライブラリを取り込む命令である。datetime.datetime.now() は、実行した瞬間の日時を返す。
演習⑥ 平方根:面積が 7 の正方形の一辺の長さ(math ライブラリ)
import math を書いている。math.sqrt(7) は、7 の平方根(ルート)を計算する。
演習⑦ 円周率:半径 3 の円の面積(math ライブラリ)
math.pi は、円周率 π の値(3.14159…)を表す定数である。3 * 3 * math.pi と書いている。
演習⑧ 三角関数:2辺と間の角度から三角形の面積(math ライブラリ)
60 * math.pi / 180 がこれにあたる。
演習⑨ タートルグラフィックス(線を引く・書き換え)
# このPythonプログラムは、turtleモジュールを使用して、座標平面上の2つの点を線で
# 結びます。Turtleオブジェクトを作成し、gotoメソッドを使って原点(0, 0) から
# (0, 100)の座標に移動した後、(100, 0)の座標に移動することで、原点から右上に伸
# びる直線を描画します。
import turtle
t = turtle.Turtle()
t.goto(0,100)
t.goto(100,0)
t.goto(100,0) を t.goto(200,0) に書き換える。
import turtle でタートルグラフィックスの機能を取り込み、t = turtle.Turtle() でタートルの実体を作って t に結びつけている。t.goto(x, y) は、現在地から座標 (x, y) まで線を引いて移動するメソッドである。
演習⑩ タートルグラフィックスで六角形
# タートルグラフィックスを用いて六角形を描画する.
# forwardメソッドで50ピクセル前進し,leftメソッドで60度左回転する操作を
# 6回繰り返すことで,正六角形を完成させる.
import turtle
t = turtle.Turtle()
# 六角形を描く
t.forward(50)
t.left(60)
t.forward(50)
t.left(60)
t.forward(50)
t.left(60)
t.forward(50)
t.left(60)
t.forward(50)
t.left(60)
t.forward(50)
t.left(60)
turtle.done()
t.forward(50) は、50 ピクセル前進するメソッドである。t.left(60) は、左回りに 60 度回転するメソッドである。
演習⑪ タートルグラフィックスで星形(自由制作)
# このPythonプログラムは、turtleモジュールを使用して、座標平面上の5つの点を線
# で結んだ星型の図形を描画します。Turtleオブジェクトを作成し、gotoメソッドを
# 使って指定された座標に順番に移動しながら線を引いていきます。最後に、始点の
# 座標に戻ることで図形を完成させます。
import turtle
t = turtle.Turtle()
t.goto(0, 100)
t.goto(58, -80)
t.goto(-95, 30)
t.goto(95, 30)
t.goto(-58, -80)
t.goto(0, 100)
t.goto(...) の座標の値を自由に書き換える。
t.goto(x, y) で複数の座標へ順番に移動しながら線を引き、最後に始点へ戻って図形を完成させている。
第9回. Python プログラミング基礎②
ライブラリには、標準ライブラリと外部ライブラリがある。外部ライブラリの使用にはインストールが必要であり、ライブラリ(標準も外部も)の使用には、プログラム内でのインポートが必要である。クラスは同じ種類のオブジェクトの「設計図」のようなものである。条件分岐はifやelseで処理を分ける。リストは複数の要素を順序付けて保持し、そのインデックスは0から始まる。繰り返しはforで実現でき、指定した回数だけ処理を反復する。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
年齢(age)の値によって、出力が 500 か 1800 に分かれるプログラムを実行し、書き替えて動作を確認する。 操作手順 ヒント 考察ポイント weight の値が 100 以下なら 操作手順 ヒント 考察ポイント for による繰り返しで、 操作手順 ヒント 考察ポイント 各月の日数をまとめたリストから、月の番号を使って日数を取り出すプログラムを実行し、書き替えて確認する(うるう年は考えない)。 操作手順 ヒント 考察ポイント Matplotlib ライブラリを使い、x 座標と y 座標のリストから散布図を描くプログラムを実行する。 操作手順 ヒント 考察ポイント NumPy で 0 から 10 までの値を作り、対応する sin の値を Matplotlib でグラフ化するプログラムを実行する。 操作手順 ヒント 考察ポイント random ライブラリで生成した乱数を使って座標を作り、散布図として表示するプログラムを実行する。 操作手順 ヒント 考察ポイント タートル(亀)に命令(メソッド)を出して線を引き、for による繰り返しで図形を描くプログラムを実行する。 操作手順 ヒント 考察ポイント 色のリストとタートルのメソッドを組み合わせ、繰り返しのたびに色を変えながら円を描くプログラムを実行する。 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習① 条件分岐 ― age による料金の分岐を体験する
age = 18 を age = 10 に書き替える。age の値を 8, 9, 10, 11 にそれぞれ書き替えて実行し、いずれも 500 が表示されることを確認する。age の値を 12, 13, 14, 15 にそれぞれ書き替えて実行し、いずれも 1800 が表示されることを確認する。
if age <= 11: は「age は 11 以下か?」を確かめている。行の終わりの「:(コロン)」は、ここから処理が始まる合図である。print(500) が実行され、成り立たないとき(11 より上)は自動的に else: 側の print(1800) が実行される。print(500) や print(1800) は、先頭が字下げ(半角スペース)されている。この字下げが、その条件のときに実行される範囲を示している。
age <= 11 の 1 つだけである。それでも 11 より上の場合に 1800 が出力されるのはなぜかを、else の働きから確認する。演習② 条件分岐の Python プログラムを作る ― weight による分岐
result = 0、100 より大きいなら result = 1000 を実行し、最後に print(result) で表示するプログラムを作って動作を確認する。
weight = 80
if weight <= 100:
print(0)
else:
print(1000)
weight = 80 の値を 100 より大きい値(例:120)に書き替えて実行し、結果が 1000 になることを確認する。weight の値を 100 に書き替えて実行し、結果が 0 になることを確認する(100 は「100 以下」にあてはまる)。
weight <= 100 が成り立つかどうかで、実行される行が分かれる。weight が 80 のときは 80 <= 100 が成り立つので、if の側が実行される。print(0)、print(1000) で表示している。print の行の字下げ(半角スペース)を忘れないようにする。
<= が「ちょうど 100」を含むかどうかを確認する。演習③ for による繰り返し ― & の個数を変化させる
i の値が変化するのに合わせて、表示される「&」の個数が変わる様子を確認する。
for i in range(5):
print(i * '&')
&
&&
&&&
&&&&
range(5) は 0 から 4 までの 5 個の数を表す。for i in range(5) のとき、i の値は 0, 1, 2, 3, 4 と変化する。* は掛け算だが、「文字列 * 数」はその文字列を繰り返す。たとえば 3 * '&' は '&&&' になる。i = 0 のときは 0 * '&' となり、&が 0 個(空行)になる。range(10) に変えると i = 9 まで進み、&が 9 個になる(先頭に空行が出る)。
i の値(0, 1, 2…)がずれていることを、実行結果と照らし合わせて確認する。range の中の数を変えると、表示される行数と &の最大個数がどう変わるかを、いくつか試して関係を確認する。演習④ リストと月の日数 ― インデックスで値を取り出す
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
print(days[6])
print(days[7])
print(days[6]) と print(days[7]) を print(days[8]) と print(days[9]) に書き替えて実行する。
days[番号] と書くと、その番号の中身を取り出せる。days[6] が 6 月)。
days[6] が 6 月の日数になるという仕組みの便利さを確認する。days[12] までは取り出せるが、days[13] を指定するとどうなるかを考え、余裕があれば実際に試して結果を確認する。演習⑤ 基本的なライブラリの利用 ― Matplotlib で散布図を描く
import matplotlib.pyplot as plt を使い、x = [1, 2, 3, 4, 5] と y = [2, 4, 5, 4, 5] をプロットするプログラムが用意されている。
# Matplotlibライブラリを使用して散布図を作成する.
# x座標のリストであるオブジェクト x と,
# y座標のリストであるオブジェクト y を作り,
# plt.plot でプロットする.
# グラフにタイトルを付け,showで表示.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 5, 4, 5]
plt.plot(x, y, 'o') # 'o'は丸いマーカーを指定
plt.title('Scatter Plot')
plt.show()
x や y のリストの数値を書き替えて再度実行し、点の位置が変わることを確認する。
plt.plot(x, y, 'o') の 'o' は丸いマーカーを指定している。plt.title(...) でグラフのタイトルを付け、plt.show() でグラフを表示する。
演習⑥ 数値計算用ライブラリの利用 ― NumPy と Matplotlib で sin 波を描く
import numpy as np と import matplotlib.pyplot as plt を使い、x = np.linspace(0, 10, 100)、y = np.sin(x) をプロットするプログラムが用意されている。
# NumPyを使用して0から10までの100点のx座標と対応するsin(x)値を生成し,
# Matplotlibを用いてそれらをグラフ化する.
# 結果として,「Sin Wave」というタイトルの正弦波のグラフが表示される.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('Sin Wave')
plt.show()
np.linspace(0, 10, 100) は、0〜10 を 100 点に分割する。点が多いほど線が滑らかになる。import numpy as np の as np は、numpy を np という短い別名で呼ぶための書き方である。
np.linspace の最後の数(100)を小さくして実行し、線の滑らかさがどう変わるかを観察する。演習⑦ 乱数(random ライブラリ)の利用 ― 乱数で座標を作る
import random と import matplotlib.pyplot as plt を使い、乱数で 100 個の x 座標と y 座標を作って散布図にするプログラムが用意されている。# Matplotlibライブラリを使用して散布図を作成する.
# x座標のリストであるオブジェクト x と,
# y座標のリストであるオブジェクト y を作り,
# plt.plot でプロットする.
# グラフにタイトルを付け,showで表示.
import matplotlib.pyplot as plt
import random
x = [random.random() for _ in range(100)]
y = [random.random() for _ in range(100)]
plt.plot(x, y, 'o') # 'o'は丸いマーカーを指定
plt.title('Scatter Plot')
plt.show()
random.random() は予測できない数値を返す。これを繰り返し使って、点の座標を作っている。plt.plot(x, y, 'o') の 'o' は丸いマーカーを指定している。
演習⑧ タートルグラフィックス ― 図形を描く(for で繰り返す)
import turtle
t = turtle.Turtle()
for i in range(5):
t.forward(100)
t.right(170)
t.forward(i * 20 + 100) のように、繰り返しごとに進む距離が変わる。
t.forward(値) で前進、t.right(角度) で右回りに回転する。t.forward(...) と t.right(...))が繰り返される。i * 20 + 100 は、i が 0, 1, 2… と変化することで、進む距離が 1 回ごとに変わる。
t.right(170) の角度を変えると、図形の形がどう変わるかを試して、角度と形の関係を確認する。range(5) の数を増やすと線の本数が増える。回数と図形の複雑さの関係を観察する。演習⑨ タートルグラフィックス ― リストと組み合わせて色を変える
import turtle
t = turtle.Turtle()
colors = ["red", "green", "blue"]
for i in range(3):
t.color(colors[i])
t.circle(30)
t.forward(50)
colors のリストの色名や、t.circle(30) の半径、t.forward(50) の距離を書き替えて実行し、変化を確認する。
colors = ["red", "green", "blue"] は、3 つの色名をまとめたリストである。colors[i] で i 番目の色を取り出せる(番号は 0 から始まる)。t.color(...) は線や塗りの色を変える。t.circle(30) は半径 30 の円を描き、t.forward(50) は前に 50 進む。i が 0, 1, 2 と変化するのに合わせて、colors[i] が "red"、"green"、"blue" と変わる。
range(3) の回数とリストの色の個数(3 個)が対応していることを確認する。
第10回. データサイエンス、基本的な計算
データサイエンスは「データ→分析・計算→有益な結果」の流れであり、作品推薦・渋滞予測・天気予報・不正検知など身近なサービスを支えている。内積(類似性)・平均(代表値)・標本分散(ばらつき)・標本共分散(連動)などの基本的な計算は、データの分析・計算の基礎になる。これら4計算はExcel関数SUMPRODUCT・AVERAGE・VAR.S・COVARIANCE.Sで計算できる。計算範囲はコロンで指定する(例:A1:A6)。Excelは、式の先頭に半角「=」を付ける。Excelの特徴としては、再計算・強調表示・並べ替え・グラフ作成などの多様な機能がある。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
内積は、二つの数字の列について、対応する要素を掛けて合計する計算である。二つの並びが同じところで高くなるほど内積は大きくなり、二つの並びがどれだけ似ているかを測る基礎になる。ここでは Excel の関数 SUMPRODUCT を用いて内積を求める。 操作手順 ヒント 考察ポイント 平均は、いくつかの値を一つの代表値にまとめる計算である。バラバラな多くの値を1本の代表する高さにならして、全体の状況を一つの数で捉える。ここでは Excel の関数 AVERAGE を用いて平均を求める。 操作手順 ヒント 考察ポイント 標本分散は、値が平均からどれくらいばらついているかを測る計算である。各値が平均からどれだけ離れているか(ズレ)を集めると、データ全体のばらつきが分かる。ズレが大きいほど分散は大きく、ズレが小さいほど分散は小さくなる。ここでは Excel の関数 VAR.S を用いて標本分散を求める。 操作手順 ヒント 考察ポイント 標本共分散は、二つの量がどれくらい連動して動くかを測る計算である。一方が分かればもう一方を推測できる関係をとらえる。内積がそのままの値どうしを掛けるのに対し、共分散は平均を引いたズレどうしを掛けて求める。ここでは Excel の関数 COVARIANCE.S を用いて標本共分散を求める。 操作手順 ヒント 考察ポイント Data Commons は、Google が世界中の政府統計を1か所に集めたオープンデータのサービスである。検索欄に英語で質問を入力すると、AI が質問を解釈し、統計を地図やグラフで自動的に表示する。オープンデータを、AI の力を借りて体験する演習である。 Data Commons のサイト:https://datacommons.org/ 操作手順 ヒント 考察ポイント Gapminder Tools は、世界統計を動くバブルチャートで表示するツールである。世界銀行・WHO・国連等が公開するオープンデータを用いて、各国の所得・平均寿命・人口等を表示する。時間軸スライダーを動かすと、1800年から現在までの各国の変化をアニメーションで見ることができる。データが存在しない年の値は、前後の年から推定するアルゴリズム(欠損値補完)で埋められている。オープンデータを体験する演習である。 Gapminder のサイト:https://www.gapminder.org/tools/ 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習1 内積 SUMPRODUCT
=SUMPRODUCT(A1:A5,B1:B5) と入力する。数式の先頭には半角の「=」を付ける。範囲はコロン「:」で指定する(A1:A5 は A1 から A5 までの連続した範囲を表す)。
演習2 平均 AVERAGE
=AVERAGE(A1:A5) と入力する。数式の先頭には半角の「=」を付ける。
演習3 標本分散 VAR.S
=VAR.S(A1:A5) と入力する。数式の先頭には半角の「=」を付ける。
演習4 標本共分散 COVARIANCE.S
=COVARIANCE.S(A1:A5,B1:B5) と入力する。数式の先頭には半角の「=」を付ける。
演習5 質問を理解するAI 「Data Commons」
How has the population of Japan changed over time?(日本の人口推移)Life expectancy in Japan compared to other G7 countries(日本と G7 各国の平均寿命比較)Unemployment rate in Tokyo(東京の失業率)
演習6 データの隙間を埋めるAI 「Gapminder」
第11回. Pythonプログラミング応用
プログラミングでの抽象化は、共通点のある処理を1つにまとめることである。その際、変わる部分は変えることができる形で残す。例えば 100×1.1、150×1.1、400×1.1 の3つの式は、変数aを用いて、a×1.1 のようにまとめることができる。抽象化を行うことで、プログラムの誤りを減らすことができる。特に、変更時の誤りを減らすことができる。関数は処理に名前を付けるものである。例えば def kakeru(a): return a * 1.1 のように書くことで関数名 kakeru の関数が定義される。この中の「a」は仮引数(パラメータ)と呼ばれ、関数の呼び出し時に100, 150, 400 などの具体的な値(実引数)に設定される。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
演習を実行している様子(約4分)[MP4]
演習2〜6は、
「落下物キャッチゲーム」が段階的に完成していく様子を体験する。
Python 標準ライブラリの まず、OneCompiler のページが正しく表示され、実行できることを確認する。 操作手順 「00000000000001」や「00000000000006」の部分は計算誤差である。これは正常な動作である。計算誤差については別の回で説明予定。
ヒント 考察ポイント 画面の上端から円が現れ、まっすぐ下へ落ちていく動きを作る。 操作手順 ヒント 考察ポイント 下端に置いた四角いプレイヤーと、落ちてくる「三角形」との水平距離を判定し、近ければ得点する仕組みを作る。 操作手順 ヒント 考察ポイント 「三角形」が落ちてくる位置を毎回ランダムに変え、ゲームにアクション性を持たせる。 操作手順 ヒント 考察ポイント 左右キーでプレイヤーを動かせるようにし、「三角形」に合わせて受け止められるようにする。 操作手順 ヒント 考察ポイント プレイヤーが画面の外へ出ないように移動範囲を制限し、ゲームを完成させる。 操作手順 ヒント 考察ポイント
[演習の詳細を表示するには、この行をクリックしてください]
演習の概要
turtle(タートルグラフィックス)を用いて、落下物を受け止めて得点する「落下物キャッチ(受け止め)ゲーム」を作成する。完成形は、左右キーで動かすプレイヤーが、上から落ちてくる落下物を受け止めて得点するゲームである。演習①OneCompilert の動作確認
110.00000000000001
165.0
440.00000000000006
演習② 落下の再現
x=0, y=180)に「三角形」が現れ、まっすぐ下へ落ちていくことを確認する。y=-180)を過ぎると、また上端に戻って同じ列を落ち続けることを確認する。
iy を毎回一定量(10)だけ減らして表す(iy = iy - 10)。iy が下端(-180)を下回ったら上端(180)に戻すと、落下が繰り返される。item.penup() を入れないと、落下のたびに縦線(軌跡)が描かれてしまう。
time.sleep(0.05) が更新の間隔(約50ミリ秒)を保っていることを確認する。演習③ 接触の近似
x=0, y=-180)にプレイヤーが置かれ、上端から「三角形」が落ちてくることを確認する。x=0 の同じ列を落ちるため、プレイヤー上を通過することを確認する。score が 1 増えることを確認する。この演習ではプレイヤーはまだ動かせない。
if iy < -180: の中)で行う。-30 < ix - player.xcor() < 30 は、中心間の水平距離が 30 未満であることを表す。これは連鎖比較で、(-30 < ix - player.xcor()) and (ix - player.xcor() < 30) と同じ意味である。
x=0)を落ちるため、プレイヤーの真上を通過し、得点が入ることを確認する。演習④ アクション性
random.randint(-180, 180) は -180 以上 180 以下の整数をランダムに返す。これを使って「三角形」の落下位置を毎回決めている。
演習⑤ プレイヤーを動かす
def move_left(): の中で player.setx(player.xcor() - 20)、def move_right(): の中で player.setx(player.xcor() + 20) として定義し、screen.onkey(move_left, "Left") と screen.onkey(move_right, "Right") でキーに割り当てている。screen.listen() を呼ばないと、onkey の登録があってもキーを受け取れないので、キー設定の最後に必ず一度呼ぶ。
演習⑥ 完成形
x=-180)で、右へ動かし続けても右端(x=180)で止まることを確認する。
setx の直後に if で位置を確認し、範囲外なら端の値(±180)に押し戻す。
第12回. プログラミング・データサイエンス・AIの融合
データ分析は「実データを眺める→課題発見→解決→次の行動」という流れで進む。実データには欠損・偏り・ノイズがある。欠損値がある場合には、その行を除去したり、平均値で補完したりといった前処理が必要になる。分析手法には、分類・回帰・クラスタリングなどがある。可視化によってデータのパターンを読み取ろうとしても、データの項目(次元)が増えると可視化は困難になる。そうした場合には機械学習が有効である。なお、プログラミング(コードの作成)と対話型AIへの指示は、互いを補い合う補完関係にある。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
コードを動かしながら体験する演習集である。各演習は同じ手順で実行する。実行環境には pythononline.dev を用いる。ブラウザ上で Python を記述・実行できるオンライン実行環境で、PC へのインストール(環境構築)もアカウント登録も不要である。pandas・matplotlib・scikit-learn のライブラリはインポートするだけで自動的に読み込まれ、インストールなどの事前準備は不要である。 pythononline.dev のサイト:https://pythononline.dev/ 過去2年(24か月)の売上実績で学習し、来年12か月分を予測して、1本の時間軸に並べて描画する演習である。 操作手順 貼り付けるコード ヒント 考察ポイント 生活習慣アンケート12人分(1週間の運動回数・平日の睡眠時間)を読み込み、欠損数を確認したうえで、睡眠時間の未回答を平均値で補完する演習である。12人のうち2人分の睡眠時間が未回答(欠損)である。 操作手順 貼り付けるコード ヒント 考察ポイント 学習時間とテスト点数から「講習会Aの受講/未受講」を判定する分類を体験する演習である。まず実データの散布図を描き、次に決定木(機械学習の一手法)で学習して、平面全体を「受講と判定される領域」と「未受講と判定される領域」に塗り分けて示す。 操作手順 貼り付けるコード ヒント 考察ポイント 演習②と同じ生活習慣アンケートを素材に、欠損を補完してから、似た回答の人同士を自動で2グループに分ける演習である。 操作手順 貼り付けるコード ヒント 考察ポイント 同じ「月別売上の折れ線グラフ」を、(a) 自分でコードを組み立てる方法と、(b) 対話型AIに作成を任せる方法の2通りで作り、進め方を比較する演習である。 操作手順(a)自分でコードを組み立てる場合(AIの補助を借りることもある) 操作手順(b)対話型AIに作成を任せる場合 貼り付けるコード(a)自分で組み立てるコード 貼り付けるプロンプト(b)対話型AI(例:Microsoft Copilot、https://portal.office.com/)への指示(プロンプト) ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
実行環境で体験する(手を動かす)演習ガイド
演習① 回帰による将来予測
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
df = pd.DataFrame({
"月": list(range(1, 13)) * 2,
"売上": [55, 58, 65, 72, 80, 95, 110, 105, 88, 75, 62, 57,
57, 60, 68, 75, 83, 98, 113, 108, 90, 78, 64, 59],
})
model = DecisionTreeRegressor(random_state=0)
model.fit(df[["月"]], df["売上"])
予測 = model.predict(pd.DataFrame({"月": list(range(1, 13))}))
plt.plot(range(1, 25), df["売上"], label="Actual (past 2 years)") # 実績(1〜24か月目)
plt.plot(range(25, 37), 予測, "r--o", label="Predicted (next year)") # 予測(25〜36か月目)
plt.xlabel("Month (1-36)")
plt.ylabel("Sales")
plt.legend()
plt.show()
演習② データの読み込みと欠損の補完
print の結果が表示されることを確認する。import pandas as pd
df = pd.DataFrame({
"回答者": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"],
"運動回数": [5, 1, 6, 0, 3, 7, 2, 0, 4, 6, 1, 3],
"睡眠時間": [7.5, 5.0, 8.0, None, 6.5, 7.0, 5.5, 4.5, None, 7.5, 6.0, 6.5],
})
print("補完前の未回答数:\n", df.isnull().sum())
df["睡眠時間"] = df["睡眠時間"].fillna(df["睡眠時間"].mean()) # 平均6.4時間で埋まる
print(df)
None は値が無いことを表す。実行時は NaN(Not a Number:値が無いことを表す特別な表記)と表示される。
fillna によって睡眠時間の未回答が平均値(6.4時間)に置き換わり、全員分の値がそろうことを確認する。演習③ 分類による判定と決定境界の可視化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
# 1. データの用意
df = pd.DataFrame({
"学習時間": [2.5, 3.0, 1.6, 3.5, 2.8, 1.4, 1.0, 0.5, 1.5, 2.6, 1.2, 1.8],
"テスト点数": [78, 65, 80, 90, 74, 82, 60, 55, 58, 62, 76, 60],
"講習会A": ["受講"]*6 + ["未受講"]*6,
})
# 2. 実データの散布図: 受講/未受講を色分けして描く
for 判定, 色 in [("受講", "red"), ("未受講", "blue")]:
部分 = df[df["講習会A"] == 判定]
plt.scatter(部分["学習時間"], 部分["テスト点数"], color=色, label=判定)
plt.xlabel("Study hours")
plt.ylabel("Score")
plt.title("Data")
plt.legend()
plt.show()
# 3. 学習(fit)
model = DecisionTreeClassifier(random_state=0)
model.fit(df[["学習時間", "テスト点数"]], df["講習会A"])
# 4. 決定境界の可視化: 平面全体を格子点で埋め、各点の判定を背景色で塗り分ける
x_min, x_max = 0, 4
y_min, y_max = 50, 95
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 300),
np.linspace(y_min, y_max, 300))
格子 = pd.DataFrame({"学習時間": xx.ravel(), "テスト点数": yy.ravel()})
領域 = model.predict(格子)
領域の色 = np.where(領域 == "受講", 1, 0).reshape(xx.shape)
plt.contourf(xx, yy, 領域の色, levels=1, colors=["blue", "red"], alpha=0.2)
for 判定, 色 in [("受講", "red"), ("未受講", "blue")]:
部分 = df[df["講習会A"] == 判定]
plt.scatter(部分["学習時間"], 部分["テスト点数"], color=色, label=判定)
plt.xlabel("Study hours")
plt.ylabel("Score")
plt.title("Decision boundary (red=受講, blue=未受講)")
plt.legend()
plt.show()
演習④ クラスタリング(前処理と教師なし学習)
print の結果とグラフ(画像)が表示されることを確認する。import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 1. データの用意(第1章と同じ、未回答を含む実データ)
df = pd.DataFrame({
"回答者": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"],
"運動回数": [5, 1, 6, 0, 3, 7, 2, 0, 4, 6, 1, 3],
"睡眠時間": [7.5, 5.0, 8.0, None, 6.5, 7.0, 5.5, 4.5, None, 7.5, 6.0, 6.5],
})
# 2. 前処理: 未回答を平均値で補完する
print("補完前の未回答数:\n", df.isnull().sum())
df["睡眠時間"] = df["睡眠時間"].fillna(df["睡眠時間"].mean()) # 平均6.4時間で埋まる
# 3. 機械学習: 似た回答の人同士を、自動で2グループに分けさせる
model = KMeans(n_clusters=2, random_state=0)
df["グループ"] = model.fit_predict(df[["運動回数", "睡眠時間"]])
print(df)
print("\nグループごとの平均:\n", df.groupby("グループ")[["運動回数", "睡眠時間"]].mean())
# 4. 結果の可視化: コンピューターの分けたグループを色で確認する
for g, 色 in [(0, "blue"), (1, "red")]:
部分 = df[df["グループ"] == g]
plt.scatter(部分["運動回数"], 部分["睡眠時間"], color=色, label=f"Group {g}")
plt.xlabel("Exercise per week")
plt.ylabel("Sleep hours")
plt.legend()
plt.show()
fillna で平均値を補完してから学習させる。n_clusters=2 は「2グループに分けて」という指示である。print(df) の出力を見比べると、欠損がどう埋まったか確認できる。
演習⑤ ツールによるアプローチの比較
import matplotlib.pyplot as plt
売上 = [55, 58, 65, 72, 80, 95, 110, 105, 88, 75, 62, 57]
plt.plot(range(1, 13), 売上, marker="o") # plot で折れ線グラフを描く
plt.xlabel("Month")
plt.ylabel("Sales")
plt.show()月別売上 [55, 58, 65, 72, 80, 95, 110, 105, 88, 75, 62, 57] の
折れ線グラフを表示してください。
plt.plot など)を自分で記述する方法である。(b) は文章で指示するだけでコードが生成される方法である。
第13回. 人工知能体験
AIはコンピュータが人間のような知的能力(知能・知識・学習)を持つことを目指す技術である。コンピュータビジョンには、画像全体を分類する「画像分類」、物体の位置を矩形で示す「物体検出」、画素単位で領域分割する「セグメンテーション」などがある。また、顔情報処理には顔検出、顔ランドマーク検出、表情推定、3次元再構成などがある。モデルには信頼度しきい値やIoUしきい値等のパラメータがあり、調整により検出精度と誤検出のバランスが変化する。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
画像から被写体を切り抜き、背景を透明化するセグメンテーションのデモである。u2net など16種のモデルを選択でき、モデルによって切り抜き精度が変わる。 Rembg のサイト:https://huggingface.co/spaces/KenjieDec/RemBG 操作手順 ヒント 考察ポイント 物体検知モデル DETR のデモである。ResNet-50 と ResNet-101 の2つのモデルを選ぶことができ、cats.jpg、detectron2.png、cat.jpg、hotdog.jpg のサンプル画像が内蔵されている。 DETR 物体検出のサイト:https://huggingface.co/spaces/ClassCat/DETR-Object-Detection 操作手順 ヒント 考察ポイント 物体検知モデル YOLOv10 のデモである。モデルの種類(n/s/m/b/l/x)、画像サイズ、信頼度しきい値、IoUしきい値の4つを調整できる。サンプル画像が3種内蔵されており、初期値は image size 640・confidence 0.25・IoU 0.45 である。 YOLOv10 のサイト:https://huggingface.co/spaces/kadirnar/Yolov10 操作手順 ヒント 考察ポイント 物体検知・セグメンテーション・姿勢推定・回転矩形・分類まで扱える多機能デモである。モデル種別(yolov8n/yolov8n-seg など15種)に加え、信頼度しきい値・IoUしきい値・画像サイズを調整でき、画像・動画・Webカメラに対応している。bus.jpg 等のサンプルが内蔵されている。 YOLOv8 のサイト:https://huggingface.co/spaces/Ultralytics/YOLOv8 操作手順 ヒント 考察ポイント 顔情報処理(表情認識)のデモである。顔検出→表情分類に加え、判断根拠を示すヒートマップと、動画では感情の時系列統計グラフまで出力する。静止画7種・動画2種のサンプルが内蔵されている。 表情認識のサイト:https://huggingface.co/spaces/ElenaRyumina/Facial_Expression_Recognition 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習1 Rembg(背景除去セグメンテーション)
u2net)を1つ選ぶ。
演習2 DETR 物体検出
detr-resnet-50 または detr-resnet-101 のいずれかを選ぶ。
演習3 YOLOv10 物体検出
yolov10x)を1つ選ぶ。
演習4 YOLOv8 の種々の機能
yolov8n)を選ぶ。yolov8n から yolov8n-seg に切り替え、同じ画像を再実行して、出力の違いを見る。
yolov8n を yolov8n-seg に替えると、物体検出からセグメンテーションに変わる。
演習5 表情認識
第14回. AI活用リテラシーとIT応用
対話型AIは、大量のテキストで学習した確率モデルにもとづいて「次に来る言葉」を予測し、文章を作り出している。この仕組みのため、一見自然な文章でも事実と異なる内容が含まれることがあり、これをハルシネーションと呼ぶ。活用にあたっては、アイデア出しや作業の実行をAIが担い、目的の設定・採用するかの判断・結果への責任は人間が担う、という役割分担が有効である。データサイエンスでは、平均や相関の計算、外れ値・欠損値の扱いなどをAIに任せられる。ただし、相関と因果の違いを理解しているといった基礎知識が欠かせない。また、対話型AIはコードの生成や修正を通じてプログラミングを支援することもできる。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
使用するツール
1. Microsoft 365 Copilot Chat(https://m365.cloud.microsoft/chat?auth=2)
2. OneCompilerのサイト:https://onecompiler.com/python
オンラインのPython実行環境。Python を本格的にオンラインで実行したい場合は、登録は必要であるがGoogle Colabが適している。
この演習では、架空の学生生活アンケート(30人分)を Microsoft Copilot に読み込ませ、中央値や外れ値の扱いをAIに計算させたうえで、その処理内容を自分の目で確かめる。 Microsoft Copilot:学校のアカウントでサインインが必要な場合がある。 使用するデータ(架空の学生生活アンケート、30人分) 操作手順 ヒント 考察ポイント この演習では、演習①で使ったアンケートデータをもとに、OneCompilerのAI機能でPythonコードを書かせて実際に実行し、演習①でCopilotが答えた数値と一致するかを確かめる。 OneCompilerのサイト:https://onecompiler.com/python 使用するデータ(架空の学生生活アンケート、30人分) 操作手順 ヒント 考察ポイント この演習では、OneCompilerのAI機能を使って占いやゲームのコードを作らせ、実行しながらAIの解釈のずれを観察する。 OneCompilerのサイト:https://onecompiler.com/python 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習① Microsoft Copilot によるアンケートデータの検証体験
氏名,身長,睡眠時間,好きな食べ物,学食の満足度
サクラ,158,6.5,ラーメン,3
ハルト,172,7.0,カレー,4
ミオ,161,5.5,パスタ,2
ソウタ,168,6.0,唐揚げ,3
ユナ,155,7.5,寿司,5
リク,175,,ハンバーガー,3
アオイ,163,6.5,オムライス,2
カエデ,170,8.0,カレー,4
ハルカ,159,5.0,パンケーキ,2
ダイキ,178,6.0,ラーメン,3
ナナ,152,6.5,,4
ケンタ,180,7.0,焼肉,4
ミサキ,160,3.0,サラダ,1
ユウ,174,7.5,カレー,5
リナ,157,6.0,寿司,3
タクミ,169,6.5,唐揚げ,3
モモ,,,パスタ,2
ショウ,171,7.0,ラーメン,4
アヤ,205,5.5,ハンバーガー,3
コウ,173,6.0,カレー,3
ヒナ,156,6.5,パンケーキ,4
リョウ,177,7.5,焼肉,5
サキ,162,2.5,ラーメン,1
ジュン,170,6.0,寿司,3
マナ,158,6.5,オムライス,3
トモヤ,176,7.0,,4
アカリ,159,5.5,パスタ,2
ゲンキ,182,6.0,唐揚げ,3
ユイ,161,6.5,カレー,3
ハヤト,172,7.0,ラーメン,4
演習② OneCompiler によるコード作成・実行と、Copilotの回答との照合
氏名,身長,睡眠時間,好きな食べ物,学食の満足度
サクラ,158,6.5,ラーメン,3
ハルト,172,7.0,カレー,4
ミオ,161,5.5,パスタ,2
ソウタ,168,6.0,唐揚げ,3
ユナ,155,7.5,寿司,5
リク,175,,ハンバーガー,3
アオイ,163,6.5,オムライス,2
カエデ,170,8.0,カレー,4
ハルカ,159,5.0,パンケーキ,2
ダイキ,178,6.0,ラーメン,3
ナナ,152,6.5,,4
ケンタ,180,7.0,焼肉,4
ミサキ,160,3.0,サラダ,1
ユウ,174,7.5,カレー,5
リナ,157,6.0,寿司,3
タクミ,169,6.5,唐揚げ,3
モモ,,,パスタ,2
ショウ,171,7.0,ラーメン,4
アヤ,205,5.5,ハンバーガー,3
コウ,173,6.0,カレー,3
ヒナ,156,6.5,パンケーキ,4
リョウ,177,7.5,焼肉,5
サキ,162,2.5,ラーメン,1
ジュン,170,6.0,寿司,3
マナ,158,6.5,オムライス,3
トモヤ,176,7.0,,4
アカリ,159,5.5,パスタ,2
ゲンキ,182,6.0,唐揚げ,3
ユイ,161,6.5,カレー,3
ハヤト,172,7.0,ラーメン,4
演習③ AIにゲームや占いを作らせて、遊びながら中身を見る
第15回. コンピューターサイエンスの展望
抽象化は目的に応じて対象の本質を抽出する。モデル化により数式・図・プログラム等の形式で表現する。計算モデルには入力・記憶・操作・結果という注目ポイントがある。有名な計算モデルとしては、有限オートマトン、チューリングマシンがある。アルゴリズムの選択により処理の手間が変わる。入力の量に応じて処理の手間は増えるが、入力の量に応じた手間の増加(計算量)の把握は重要である。数値計算では入力・内部表現・表示の各段階で丸めが生じ、それぞれを区別して理解する必要がある。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
使用するツール
OneCompilerのサイト:https://onecompiler.com/python
オンラインのPython実行環境。
このガイドで実行するプログラムは、行数が多く、プログラム自体の理解が難しいと感じる場合がある。しかし、このガイドの目的は、プログラムの実装を理解することではなく、授業の資料で説明した概念・用語を、実際の数値や出力を通して確認することにある。プログラムの細部が分からなくても、各演習の手順とヒントに沿って進めれば、演習の目的を達成できる。 チューリング機械の規則表(テープ「1 1 1 _ ...」に対して、右へ進み続け、最初に空白を見つけたらそこに1を書いて停止する) 操作手順 ヒント 考察ポイント チューリングマシンの仕組みの詳細説明 [詳細な説明を表示するには、この行をクリックしてください。]
チューリング機械は、テープと呼ばれる記号の並び、そのテープ上を動くヘッド、そして有限個の内部状態を持つ計算モデルである。ヘッドは1回の操作で、今いる位置の記号を読み、記号を書き換え、左右どちらかに動くか、その場にとどまる。 ここでは、テープに と書かれているとする。 今から考えるチューリング機械は、右へ進み続け、最初に空白を見つけたら、そこに を に変える。 このチューリング機械の規則は次の通りである。 1行目は、「内部状態が この規則に従って動く様子を、時点ごとに追跡すると次のようになる。表の「ヘッド位置」は、表示しているテープの左端を0番目として数えた位置である。 時点1から3までは、記号1を読んで右へ移動するだけなので、テープの内容自体は変化しない。テープが変化するのは、空白に到達して1を書き込む時点4だけである。 この演習では、「探索」に対して異なるアルゴリズムを適用し、必要な比較回数をプログラムが実際に数えることで、アルゴリズムによって手間の増え方がどう変わるかを確認する。 操作手順 ヒント 考察ポイント
操作手順 ヒント 考察ポイント この演習では、数値の丸めを確認する。 操作手順 ヒント 考察ポイント
[演習の詳細を表示するには、この行をクリックしてください]
今回の演習について
演習1 計算モデルをつくる:チューリングマシン体験
現在の内部状態 読んだ記号 書く記号 ヘッド移動 次の内部状態 q_right 1 1 右へ q_right q_right _(空白) 1 その場 q_halt
先頭から順に見て、状態が、
q_right, q_right, q_right, q_right, q_halt と変化、
位置が 0, 1, 2, 3 と変化し 3 に来たら止まることを確認。
テープには、右端に1が追加されることを確認する
開始: 状態=q_right, 位置=0, テープ=1 1 1 _ ...
状態=q_right, 位置=1, テープ=1 1 1 _ ...(右へ進んだ)
状態=q_right, 位置=2, テープ=1 1 1 _ ...(右へ進んだ)
状態=q_right, 位置=3, テープ=1 1 1 _ ...(右へ進んだ)
状態=q_halt, 位置=3, テープ=1 1 1 1 _ ...(1を書いて停止)
最終テープ: 1 1 1 1 _ ...
1 がいくつか連続し、その右に空白が続く入力に対して、右端に 1 を1つ追加する動作を確認した。
1 1 1 _ _ _ ...
_ は空白を表す。右側には空白が続いているが、表示では必要な部分だけを書く。1 を書いて停止する。つまり、表示される部分だけを見ると、
1 1 1 _ ...
1 1 1 1 _ ...
現在の内部状態 読んだ記号 書く記号 ヘッド移動 次の内部状態 q_right 1 1 右へ q_right q_right _ 1 その場 q_halt q_right で、今いる位置の記号が 1 のとき、記号 1 を書き、ヘッドを右へ動かし、内部状態は q_right のままにする」という意味である。
2行目は、「内部状態が q_right で、今いる位置の記号が空白 _ のとき、そこに 1 を書き、ヘッドはその場にとどめ、内部状態を q_halt に変える」という意味である。q_halt は、この機械が停止したことを表す内部状態である。
時点 内部状態 ヘッド位置 表示したテープ内容 この時点で行われた操作 0 q_right 0 1 1 1 _ ... 開始時点。まだ何も操作していない 1 q_right 1 1 1 1 _ ... 位置0の記号1を読み、書き換えずに右へ動いた 2 q_right 2 1 1 1 _ ... 位置1の記号1を読み、書き換えずに右へ動いた 3 q_right 3 1 1 1 _ ... 位置2の記号1を読み、書き換えずに右へ動いた 4 q_halt 3 1 1 1 1 _ ... 位置3の空白を読み、そこに1を書いて停止した 演習2 アルゴリズムの速さを測る:探索
線形探索: (13, True)
二分探索: (4, True)
演習3 アルゴリズムの速さを測る:部分和問題
6個の数の中から、合計が17になる部分集合: [(3, 14), (6, 11), (3, 6, 8)]
8個の数の中から、合計が17になる部分集合: [(3, 14), (6, 11), (3, 6, 8), (4, 6, 7), (1, 3, 6, 7)]
10個の数の中から、合計が17になる部分集合: [(3, 14), (6, 11), (7, 10), (2, 3, 12), (2, 4, 11), (2, 7, 8), (3, 4, 10), (3, 6, 8), (4, 6, 7), (2, 3, 4, 8)]
要素数6個: 調べるべき部分集合の総数 = 63
要素数8個: 調べるべき部分集合の総数 = 255
要素数10個: 調べるべき部分集合の総数 = 1,023
演習4 数値の丸め
A. 入力値の丸め
入力: 0.333
丸め前の真の値: 1/3
入力前に失われた差: 1/3000
B. 表現誤差
元の数: '0.2'
Decimal を使った場合: 1/5
Python の float を使った場合に、実際に格納されている値は(ただし無限の表示にならないように途中で表示を打ち切っている): 0.2000000000000000111022302462515654042363166809082031250
そこで、Python の float を使った場合に、実際に格納されている値を分数表示: 3602879701896397/18014398509481984
その1/10 との差(分数表示): 1/90071992547409920
C. 表示上の丸め
表示用に小数第1位までにした文字列: '0.3'
Python の float を使った場合に、実際に格納されている値は(ただし無限の表示にならないように途中で表示を打ち切っている: 0.3000000000000000444089209850062616169452667236328125000
授業計画(クリックにより中身が表示されます)
回
内容
第1回
コンピュータサイエンス入門
第2回
人工知能の仕組み、責任ある活用
第3回
デジタル画像
第4回
3次元コンピュータグラフィックス
第5回
コンピュータの構成要素とデータ処理の仕組み
第6回
情報倫理とセキュリティ
第7回
プログラミング入門
第8回
Python プログラミング基礎①
第9回
Python プログラミング基礎②
第10回
データサイエンス
第11回
Pythonプログラミング応用
第12回
プログラミングとデータサイエンスとAIの統合
第13回
人工知能体験
第14回
AI活用リテラシーとIT応用
第15回
コンピュータサイエンスの展望
[動画]