コンピュータサイエンス

第1回 無料ソフトウエア、無料データ、Scratchプログラミング、Scratchのキャラクタ

無料ソフトウェアには、フリーウェアと、ソースコードが公開され自由に利用・改変・再配布できるオープンソースソフトウェアがある。無料ソフトウェアや無料データの利用時は、作者が定める利用条件を確認し、著作権を尊重する必要がある。情報工学は、コンピュータを用いて問題を解決する学問分野であり、対象・構造・条件を整理して解決方法を設計する。Scratchは、コンピュータに実行させる手順であるプログラムを、ブロックを組み合わせて作るビジュアル環境であり、順次実行・繰り返し・条件分岐を学ぶことができる。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[YouTube動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習について

以下の演習では、説明部分で学んだプログラミングの概念を各自が実践する。

演習① Scratchの開始・ブロック操作

説明パートの1-4「プログラムとは」「イベント駆動」「順次実行」「ブロック操作の基本」に対応する演習である。Scratchを起動し、イベントブロックと動きブロックを組み合わせて、キャラクタを動かす最小限のプログラムを作成する。「旗が押されたとき」というイベントに「10歩動かす」という動作を接続する操作を通じて、イベント駆動と順次実行の基本を体験する。

URL: https://scratch.mit.edu/

前提スキル:Webブラウザの操作、URLの理解。ドラッグ操作(左ボタンを押しながら移動し、左ボタンを離す)。

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://scratch.mit.edu/ を開く。
  3. 「作ってみよう」をクリックする。
  4. 「イベント」をクリックし、「旗が押されたとき」をドラッグする。
  5. 「動き」をクリックし、「10歩動かす」をドラッグし、「旗が押されたとき」と合体する。
  6. 旗ボタンをクリックする(キャラクタが少し右に動く)。旗ボタンを数回クリックする。

観察と考察

演習② キャラクタ・スプライト

説明パートの1-5「キャラクタの基本」「スプライト(キャラクタ画像)」に対応する演習である。新しいスプライトを追加し、追加したキャラクタに対して個別にブロックを組み立てる。キャラクタごとに独立したプログラムを持つというスプライトの基本的な仕組みを確認する。

操作手順

  1. スプライト一覧(画面右下)の猫のアイコンにカーソルを合わせ、「スプライトを選ぶ」をクリックする。
  2. 好きなキャラクタを選ぶ。
  3. 新しいキャラクタを選んでから、演習①と同様に「旗が押されたとき」と「10歩動かす」のブロックを組み立てる。
  4. 旗ボタンをクリックするとキャラクタが動く。何度かクリックする。

観察と考察

演習③ キャラクタの制御

説明パートの1-6「①繰り返し」「②もし・・・たら、・・・する(条件分岐)」「③強制停止」に対応する演習である。「ずっと」ブロックによる繰り返し、「もし端に着いたら、跳ね返る」ブロックによる条件分岐、赤ボタンによる強制停止を組み合わせて、キャラクタが自動的に動き続けるプログラムを作成する。さらに「右に15度回す」ブロックを追加し、動きの初期方向を変更する効果を確認する。

操作手順

  1. 演習②で追加したキャラクタが選ばれていることを確認する。
  2. 「制御」を選び「ずっと」をドラッグして、「10歩動かす」を囲むように合体する(「10歩動かす」が「ずっと」の中に入る形になる)。
  3. 「動き」を選び「もし端に着いたら、跳ね返る」をドラッグして、「ずっと」の中の「10歩動かす」の下に合体する。
  4. 旗ボタンをクリックするとキャラクタが動く。赤ボタンをクリックすると止まる。
  5. 赤ボタンをクリックして止めてから、「動き」の「右に15度回す」を「旗が押されたとき」と「ずっと」の間に加える。
  6. 旗ボタンをクリックするとキャラクタが動く。赤ボタンをクリックすると止まる。動き始めの瞬間に15度傾く。

観察と考察

演習④(余裕のある人向け)

説明パートの1-4「ブロックの形状と合体ルール」、1-5「キャラクタの操作」、1-6すべてに対応する活動である。演習①~③で学んだブロック操作、スプライト管理、繰り返し、条件分岐を組み合わせ、各自の工夫により自由にプログラムを作成する。ブロックの形状による合体ルールを手がかりに、未使用のブロックにも挑戦する。

操作手順

観察と考察

第2回. 人工知能の仕組み

人工知能は、コンピュータが人間のような知的能力を持つことを目指す技術である。データから自ら学習する機械学習と、人間が書いたルールや知識を用いる知的なITシステムに大別される。応用分野は、画像分類、顔検知、対話型AI、自動翻訳、データ分析と予測、テキストからの画像合成など多岐にわたる。学習データに偏りがあると結果にも偏りが出るため、利用には注意が必要である。AIは人間を支援する道具であり、最終的な判断は人間が行う。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[YouTube動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習について

以下の演習では、説明部分で学んだAIの概念を、オンラインデモを通じて体験する。各デモの結果を観察し、考察する。

使用するサイトの都合上、未習の用語(例:隠れ層)が表示される場合があるが、そのまま進めてよい。

演習1. TensorFlow Playground(機械学習・ニューラルネットワーク)

ニューラルネットワークの基本構造に関する演習である。ニューラルネットワークの構造やパラメータを変更しながら、学習過程の変化を観察する。

URL: https://playground.tensorflow.org

操作手順

  1. ページを開く
  2. 画面左上の「DATA」セクションで、データセット(円形、XOR、渦巻き等)を選択する
  3. 必要に応じて、「FEATURES」セクションで入力特徴量(X1、X2等)を選択する
  4. 必要に応じて、「HIDDEN LAYERS」の「+」「-」ボタンで隠れ層の数を変更する。各層のニューロン数も「+」「-」で変更できる
  5. 画面上部の再生ボタン(▶)をクリックして学習を開始する
  6. 学習が進む様子と、出力領域の色分けの変化を観察する
  7. Learning rateやActivation関数を変更し、学習結果の違いを比較する

観察と考察

演習2. PathFinding.js Visual(知的なITシステム)

探索による問題解決に関する演習である。探索アルゴリズムが経路を見つける過程を可視化し、コンピュータによる探索の仕組みを理解する。

URL: https://qiao.github.io/PathFinding.js/visual/

操作手順

  1. ページを開く
  2. グリッド上でマウスをドラッグして壁(障害物)を配置する
  3. 緑色のノード(スタート地点)と赤色のノード(ゴール地点)はドラッグで移動できる
  4. 画面上部のドロップダウンからアルゴリズム(A*、BFS、DFS等)を選択する
  5. 「Start Search」ボタンをクリックする
  6. 探索対象のセル(水色)と最短経路(黄色)がアニメーションで表示される
  7. アルゴリズムを変更して、探索の仕方の違いを比較する

観察と考察

演習3. CNN 3D Visualization(Adam Harley)(機械学習・ニューラルネットワーク)

ニューラルネットワークの基本構造に関する演習である。畳み込みニューラルネットワーク(CNN)の内部構造を3Dで可視化し、各層がどのように入力を処理しているかを観察する。

URL: https://adamharley.com/nn_vis/cnn/3d.html

操作手順

  1. ページを開く
  2. 左下の描画パッドに数字(0〜9)をマウスで描く
  3. 3D表示されたネットワークの各層のニューロンの活性化(色の変化)をリアルタイムに観察する
  4. 各ニューロンにマウスカーソルを合わせると、そのニューロンが何を検出しているか確認できる
  5. 異なる数字を描き、ネットワークの反応の違いを比較する

観察と考察

演習4. AutoDraw(Google)(AIによる合成)

人間の下書きをAIが清書する演習である。手描きの下書きをAIが認識し、候補イラストを提示する仕組みを体験する。

URL: https://www.autodraw.com/

操作手順

  1. ページを開く
  2. 最初、緑色の「Start Drawing」をクリック
  3. 画面左側のツールバーから「AutoDraw」ツール(魔法の杖アイコン)を選択する
  4. キャンバスに絵(例:猫、車、花等)を手描きする
  5. 画面上部にAIが推測した候補イラストが表示される
  6. 候補の中から適切なものをクリックすると、手描きが清書に置き換わる

観察と考察

第3回. デジタル画像

デジタル画像は格子状に並んだ画素から構成され、輝度(明るさ)のみを持つ濃淡画像と、輝度と色の情報を持つカラー画像がある。カラー画像の成分は、R(赤)・G(緑)・B(青)の3成分で表す方法と、輝度成分と色成分で表す方法がある。畳み込み(フィルタ処理)は、周囲の画素にフィルタの重みを掛けて和をとり各画素の値とする操作であり、ぼかし・エッジ検出・シャープ化などを実現する。空間周波数は明暗の変化の細かさを表し、スペクトルの中心は低周波、周辺は高周波に対応し、高周波除去でぼかし、低周波除去で輪郭抽出ができる。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習について

以下の演習では、説明部分で学んだデジタル画像の概念(画素、カラー画像の成分、畳み込み、空間周波数)、画像制作におけるコンピュータの有用性を、Webブラウザ上で動作するサイトを通じて実践的に体験する。いずれもインストール不要で、マウス操作のみで体験できる。

演習① ペイントソフト Fluid Paint

Fluid Paint は油絵具の物理特性をシミュレートするペイントソフトであり、筆の色、サイズ、毛先の数(Bristle Count)、流動性(Paint Fluidity)を設定して描画できる。画素ごとに色情報を持つカラー画像が生成される過程と、周囲の画素同士が相互作用してにじみや混色が生じる様子を観察できる。

URL: https://david.li/paint/

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://david.li/paint/ を開く。
  3. 画面のメニューから色(Paint Color)を選択する。
  4. キャンバス上でマウスの左ボタンを押し続けながらドラッグし、線を描く。
  5. マウスホイールをスクロールして筆のサイズ(Brush Size)を変更し、再度ドラッグして線を描く。
  6. 毛先の数(Bristle Count)、流動性(Paint Fluidity)の各項目を変更し、それぞれ線を描いて筆跡の違いを確認する。
  7. 異なる色を選択し、先に描いた線の上に重ねて描画して混色の様子を観察する。
  8. 誤った操作をしたときは Undo(元に戻す)をクリックする。キャンバス全体を消去するときは Clear をクリックする。

観察と考察

演習② アート作品制作サイト Silk

Silk は対称性を持った曲線をマウス操作で描けるジェネレーティブアートのサイトである。対称(Mirror)や螺旋(Spiral)といった機能により、少ない操作で複数の曲線からなる構造を生成できる。

URL: http://weavesilk.com/

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで http://weavesilk.com/ を開く。
  3. 「Draw Something」をクリックして開始する。
  4. キャンバス上でマウスをゆっくりドラッグし、曲線を描く。初期状態では対称性が有効になっており、1本のドラッグから複数の曲線が同時に描画される。
  5. 左上のメニューの「Controls」で、色(Color)を選択する。
  6. 左上のメニューの「Controls」で、色の下にある対称数(symmetries)のスライダーを用いて対象数を変更、描画して、結果の違いを確認する。
  7. 「Mirror across center」(中心鏡映対称)のオン/オフを切り替え、それぞれで描画する。
  8. 「Spiral towards center」(中心への螺旋)のオン/オフを切り替え、それぞれで描画する。
  9. 1つ前の操作を取り消すときは Z キーを押す。キャンバスを全消去するときは Space キーを押す。

観察と考察

演習③ 流体シミュレーション WebGL Fluid Simulation

WebGL Fluid Simulation は、流体の物理シミュレーションをGPU上で実行し、マウス操作で光の渦のような流体表現を生成するサイトである。流体の各時点の状態は、前時点の各画素の値とその周囲の画素の値から計算される。設定メニューでは密度の減衰(density diffusion )、速度の減衰(velocity diffusion)、渦度(Vorticity)、噴出半径(Splat Radius)、ブルーム(Bloom)、光線(Sunrays)などのパラメータを変更できる。

URL: https://paveldogreat.github.io/WebGL-Fluid-Simulation/

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://paveldogreat.github.io/WebGL-Fluid-Simulation/ を開く。
  3. キャンバス上でマウスをドラッグし、流体の動き(splat)を生成する。
  4. マウスを動かす速さを変えて、生成される渦の様子を比較する。
  5. キャンバスの異なる位置で複数回ドラッグし、渦同士が干渉する様子を観察する。
  6. 画面右上の歯車アイコンをクリックして設定メニューを開き、密度の減衰(density diffusion ) の値を変更してから再度ドラッグする。色がどれだけの時間で消えるかを比較する。
  7. Splat Radius の値を変更し、1回のドラッグで生成される渦の大きさを比較する。

観察と考察

演習④ Setosa.io:画像にフィルタを適用

説明パートで学んだ「画像は画素値を並べた2次元配列である」「畳み込みは画像上の各位置で近傍の画素値とカーネル(フィルタ)の値の要素ごとの積の和を計算する操作である」という概念に対応する演習である。カーネル(フィルタ)を切り替えて出力画像の変化を確認する。出力画像および入力画像の任意の画素にマウスを合わせることで、3×3近傍の画素値とフィルタの値の積和演算の過程を数値で確認する。

URL: https://setosa.io/ev/image-kernels/

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://setosa.io/ev/image-kernels/ を開く。
  3. 顔画像と画素値(0〜255)の行列が表示されていることを確認する。
  4. ページ下部のプレイグラウンドで、「kernel」の下のメニューから「blur」を選び、出力画像の変化を確認する。
  5. 同様に「bottom sobel」「emboss」「identity(何も変化しないフィルタ)」「left sobel」「outline」「right sobel」「sharpen」「top sobel」を順に選び、それぞれの出力画像を確認する。
  6. 出力画像の任意の画素にマウスを合わせる。入力画像の対応する3×3近傍が強調表示され、3×3近傍の各画素値とフィルタの各値の要素ごとの積、およびその合計が表示されることを確認する。

観察と考察

演習⑤ deeplizard:畳み込みを1ステップずつ確認する

演習④で確認した「フィルタを適用すると画像がどう変わるか」を踏まえ、本演習では「そのとき何が計算されているか」を確認する。フィルタが入力行列上を1マスずつスライドする過程を可視化し、出力行列の各要素がどの入力領域から計算されたかを追跡する。出力値の正(赤)と負(青)の色分けにより、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)が画像から特徴を抽出する原理を確認する。

URL: https://deeplizard.com/resource/pavq7noze2

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://deeplizard.com/resource/pavq7noze2 を開く。
  3. 入力行列、3×3のフィルタ、出力行列の表示欄の3つが表示されていることを確認する。フィルタサイズは3×3であることを確認する。
  4. 「Play(再生)」をクリックし、フィルタが入力行列上を1マスずつスライドし、出力行列の各要素が順次計算されていく過程を確認する。
  5. 出力行列の任意の画素にマウスを合わせる。対応する入力の3×3領域とフィルタの要素ごとの積、およびその合計が表示されることを確認する。
  6. 出力行列全体を見渡し、正の値(赤)と負の値(青)の分布を確認する。

観察と考察

演習⑥ 2D Inverse Fourier Transform Playground:空間周波数を操作

本演習では、画像を周波数領域で表現したスペクトル上で編集を行い、その逆フーリエ変換(周波数を画像に戻す処理)結果を確認することで、空間周波数成分と画像の対応関係を確認する。スペクトル中心の低周波成分が画像の大局的な明暗に対応し、周辺の高周波成分が輪郭や細部に対応することを、スペクトルを削る操作を通じて確認する。

URL: https://monman53.github.io/2dfft/

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://monman53.github.io/2dfft/ を開く。
  3. 「Original image(原画像)」「Result(マスク適用後の逆フーリエ変換結果)」「Masked spectrum(編集可能なマスク付きスペクトル)」「Spectrum(スペクトル)」の4つが表示されていることを確認する。
  4. 右下の「白」のボタンをクリックする。このとき Result に原画像が表示されることを確認する。これは全ての周波数成分が通過している状態に対応する。
  5. Masked spectrum の周辺部(高周波成分)を左ドラッグで削る。削るための大きさは、マウスホイールで調整できる。マウスホイールで、削る範囲を調整して、様々な削り方を試す。結果として、Result の画像から輪郭や細部が失われていく過程を確認する。
  6. 次に、Masked spectrum の中心部(低周波成分)を左ドラッグで削る。Result の画像から大局的な明暗が失われ、輪郭成分が残ることを確認する。
  7. 途中で、右下の「白」のボタンをクリックして、もとに戻しながら、色々と試してみる。

観察と考察

第4回. ストリートビュー、3次元コンピュータグラフィックス

Google Mapのストリートビューは、地図上の地点における道路からの画像を閲覧する機能であり、地名や施設名で検索できる。オブジェクトを様々な方向から撮影し3次元データを得る処理を3次元再構成という。ポリゴン(平らな多角形)の集合体であるポリゴンメッシュで3次元モデルを表現できる。Google Earthは無料のオンラインの地球儀であり、2次元・3次元の地図表示やストリートビューの機能を持つ。Blenderは無料の3次元コンピュータグラフィックス(3DCG)の作成・編集ソフトウェアであり、3次元モデル制作、アニメーション、画像出力などの機能を持つ。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

[演習の詳細を表示するには、この行をクリックしてください]

演習① Google Mapのストリートビューを用いた探索

ストリートビューは、地図上の地点における道路からの画像を閲覧する機能である。Google Mapではストリートビューのモードへ切り替えて利用する。本演習では、Google Mapで地名等を検索し、ストリートビューでの表示と移動を行う。

URL: https://www.google.co.jp/maps

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://www.google.co.jp/maps を開く。
  3. 検索欄に地名、施設名,住所などのキーワードを入力して検索する。
  4. 右下の「人型のボタン」をクリックして、ストリートビューのモードへ切り替える。

    道路沿い等に多数の青色の表示が付くことを確認する。

  5. 青色の表示をクリックして、その場所のストリートビューを表示する。
  6. マウスの左ボタンを押しながらマウスを動かして、見ている向き(注視方向)を変える。
  7. マウスを道路の上に置くと、「^」の記号が入った白丸が表示される。

    白丸をクリックして移動する。

  8. 別の場所のストリートビューを見るときは、左上の「←」をクリックして元の地図に戻る。

ヒント

考察ポイント


エベレスト

富士山

演習② Google Earthを用いた探索

Google Earthは、無料で利用可能なオンラインの地球儀である。Google Earthには、写真、3次元コンピュータグラフィックス、写真+標高、地球儀、ストリートビューの機能がある。本演習では、Google Earthで地名等を検索し、自由な視点移動を行いながら、ストリートビューとの違いを確認する。

URL: https://earth.google.com

操作手順

  1. Webブラウザを起動する。
  2. Webブラウザで https://earth.google.com を開く。
  3. もし、プロジェクト一覧の画面が表示された場合は、「新規」をクリックして「新しい地図」を選ぶ。
  4. 検索欄に地名、施設名、住所などのキーワードを入力して検索する。
  5. 検索結果から場所を選ぶ。
  6. マウス操作により視点を移動する。
  7. 右下の「2D」「3D」ボタンをクリックして、2次元表示と3次元表示を切り替え、両方の表示を確認する。
  8. 別のキーワードで再度検索し、異なる場所を同様に確認する。

ヒント

考察ポイント

演習③ Blenderの体験

Blenderは、3次元コンピュータグラフィックス(3DCG)の作成・編集ソフトウェアであり、無料で利用可能である。3次元モデル制作、アニメーション、レンダリング(画像生成)などの機能を提供する。本演習では、Blenderの起動、立方体の確認、球と円柱の追加と移動、色の設定とレンダリングを行う。

Blender ダウンロードページ:https://www.blender.org/download/

Blender のインストールの説明: https://www.kkaneko.jp/db/cg/blenderinst.html

事前準備:上記ダウンロードページから Blender を入手し、インストールしておく。

注意:オブジェクトはカメラから見える範囲に配置する。カメラの移動については本演習では扱わない。

操作手順

  1. Blenderを起動する。
  2. 3Dビューポート内に表示されている立方体(Cube)を確認する。カメラとライトもあわせて配置されている。
  3. 立方体を左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。
  4. 選択した立方体に対して、移動の操作を行う。キーボードの G キーを押した後にマウスを動かして位置を決め、左クリックで確定する。軸を固定したい場合は、G キーの後に X/Y/Z のいずれかを押す。3Dビューポート上のギズモ(矢印)をドラッグして移動することもできる。
  5. 余裕があれば、選択した立方体に対して、回転(R キー)、拡大・縮小(S キー)の操作も試してみる。いずれもキーを押した後にマウスを動かして変形量を決め、左クリックで確定する。
  6. 球を追加する。3Dビューポートのヘッダの「追加(Add)」→「メッシュ(Mesh)」→「UV球(UV Sphere)」を選ぶ(キーボードの SHIFT + A でも同じメニューが開く)。
  7. 追加した球を選択し、移動する。

    左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。

  8. 同じ手順で円柱を追加する。「追加(Add)」→「メッシュ(Mesh)」→「円柱(Cylinder)」を選ぶ。
  9. 追加した円柱を選択し、移動する。

    左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。

  10. 色を設定するオブジェクトを選択する(立方体・球・円柱のいずれでもよい。時間に余裕があれば、3つそれぞれに異なる色を設定してもよい)。

    左クリックして選択する。右上のアウトライナー(オブジェクト一覧)から選択することもできる。

  11. プロパティから「マテリアル」を開く。

    「マテリアル」が見えないときはスクロール。

  12. 「新規(New)」をクリックする。

    「新規(New)」が表示されない場合は、マテリアルがすでに作成済みであるため、そのまま次へ進む。

  13. 「ベースカラー(Base Color)」をクリックする。カラーピッカーが開くので、色を設定する。
  14. F12キーを押してレンダリングを行う。新しくレンダリングの結果の画像の画面が開く。この画面で、設定した色を確認する。F12キーが効かない、または無い場合は、メニューの「レンダー(Render)」→「画像をレンダリング(Render Image)」を実行する。確認したら、レンダリングの画面を閉じる。

ヒント

考察ポイント

第5回. コンピュータの構成要素とデータ処理の仕組み

コンピュータは、プロセッサ(計算)、メモリ(一時保存)、入力装置、出力装置、補助記憶装置の5要素で構成され、プロセッサとメモリ間でデータがやり取りされる。データは二進数(0と1のビット列)で扱われ、メモリは1バイト(8ビット)単位にアドレス(0から始まる通し番号)が付与される。文字はASCIIなどのルールで数値に変換される。16進数(0〜9、A〜F)は二進数4桁を1桁にまとめる表記法である。論理演算(AND、OR、NOT)の組み合わせで足し算などの算術演算が実現でき、負の整数は2の補数(最上位ビットで符号を表現)で扱う。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習①:文字コードを観察する

前提

手順

ステップ 1:1文字の文字コードを表示する

  1. ブラウザで次のページを開く。https://onecompiler.com/python/44w6ayzta
  2. 表示されているプログラムを確認する。
    c = 'A'
    print(hex(ord(c)))
  3. Runボタン(▶)をクリックする。
  4. 画面右に 0x41 と表示されることを確認する。

ステップ 2:入力した文字列を文字コードへ変換する

  1. ブラウザで次のページを開く。https://onecompiler.com/python/44w6bgvvh
  2. Runボタン(▶)をクリックする。
  3. 画面右を一度クリックしてから、文字列(例:abcde)を入力し、Enter キーを押す。
  4. 各文字の文字コードが1行ずつ16進数で表示されることを確認する。

ヒント

考察ポイント

  1. 'B' を入力したときの出力を表から予想し、実行して確かめる。資料 ('A' → 01000001 → 16進数 41、'B' → 01000010 → 16進数 42)と対応する。
  2. 大文字と小文字を続けて入力(例:Aa)し、文字コードの違いを観察する。
  3. 文字列 abcde を入力すると、5行の文字コードが出力される。これは 文字列が1文字ずつ文字コードに変換されること を示している。

演習②:論理演算(AND、OR)を観察する

前提

手順

ステップ 1:プログラムを実行する

  1. ブラウザで次のページを開く。https://onecompiler.com/python/44w6bq7d6
  2. 表示されているプログラムを確認する。
    a = True
    b = False
    
    print("a and b =", a and b)
    print("a or b =", a or b)
  3. Runボタン(▶)をクリックする。
  4. 画面右に次のように表示されることを確認する。
    a and b = False
    a or b = True
    

ステップ 2:4通りの組み合わせを確かめる

ab の値を次の4通りに書き換え、それぞれ実行ボタンを押して結果を確認する。

ヒント

考察ポイント

  1. a = Trueb = True のときの a or b の結果について、資料 「論理和と『選択』の違い」(焼き芋大会の例)と関係づけて、両方が True のときも OR の結果が True になることを確認する。

演習③:論理演算で1桁の足し算を作る

前提

手順

ステップ 1:プログラムを書き換えて実行する

  1. ブラウザで演習②と同じページを開く。https://onecompiler.com/python/44w6cjybx
  2. プログラムを次のコードに書き換える。
    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)
  3. Runボタン(▶)をクリックする。
  4. 画面右に次のように表示されることを確認する。
    a = True , b = True
    上位ビット = True
    下位ビット = False

ステップ 2:4通りの組み合わせを確かめる

ab の値を次の4通りに書き換え、それぞれ実行ボタンを押して結果を確認する。

ヒント

考察ポイント

  1. a = Trueb = True のときの結果(上位ビット True、下位ビット False)が、二進数の足し算 1 + 1 = 10 に対応していることを確認する。

第6回. デジタル社会でのマナー、情報セキュリティ―デジタル時代のガイド ー

情報の真偽は、疑問を持つ姿勢、情報源の確認、および複数の情報源との照合により判断する。個人情報や私的な内容は、一度発信すると取り消せず世界中に拡散する可能性があるため、慎重に扱う必要がある。不審な警告やオファーには応じず、落ち着いて対処したうえで、他者に相談して被害を防ぐ。AIに入力した情報は学習データとして利用される場合があるため、個人情報の入力は控える。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習1:ウェブブラウザでの通信内容

概要

ウェブブラウザでの情報アクセスについて、実際の通信内容を確認する。Google Chrome に標準搭載されているデベロッパーツール(ブラウザに付属する開発者向けの確認ツール)を用いて観察する。

体験内容

使用するツール

安全性について

デベロッパーツールは、ブラウザがすでに受信したデータを表示するだけの機能であり、外部への送信やPC内のファイルの書き換えは行わない。アクセス先の www.fukuyama-u.ac.jp は公開サイトであるため、アクセスに問題はない。

手順

  1. Google Chrome を起動
  2. サイト(https://www.fukuyama-u.ac.jp)をアドレスバーに入力して開く。
  3. キーボードの F12 キーを押し、画面の右側または下部にデベロッパーツールを表示する(F12 が反応しない場合は、ページ上で右クリックし「検証」を選択する)。デベロッパーツールは、ブラウザの画面内に分割表示される。閉じるときは右上の「×」ボタンを押す。
  4. 「DevTools is now available in Japanese」と表示されたときは「Switch DevTools to Japanese」を選び、日本語表示に切り替える(この案内は初回のみ表示される。表示されない場合は次の手順に進む)。
  5. デベロッパーツール上部のタブから「ネットワーク (Network)」を選択する。

    ネットワーク (Network) タブが見当たらない場合は、タブ列の右端にある「»」マーク(隠れたタブを展開する記号)をクリックし、一覧から選ぶ(下図)。

  6. ネットワーク (Network) タブを表示した状態で、ブラウザの再読み込みボタンを押す(または Ctrl+R キーを押す)。タブ内のリストに、ページ表示時に発生した通信が一覧表示される(再読み込みを行うのは、デベロッパーツールを開く前に発生した通信が記録されていないためである)。
  7. リストの一番上に表示される項目(www.fukuyama-u.ac.jp)をクリックする。一番上の項目が、ページ本体(HTML文書)の通信に対応する。
  8. 右側に詳細パネル(選択した通信の中身を表示する区画)が開く。
  9. 詳細パネル内の「ヘッダー (Headers)」タブを選択し、ヘッダーの内容(通信の制御情報)を確認する。
  10. 次に「レスポンス (Response)」タブを選択し、ボディの内容(届けられた本文データ。ここではHTMLのソースコード)が表示されることを確認する。
  11. 補足として、デベロッパーツール上部の「Security」タブを選択すると、現在表示しているページの接続において通信が暗号化されているかを確認できる。
  12. 暗号化通信であるHTTPSであっても、ブラウザのデベロッパーツールでは送受信されたデータが画面上で読める形式で表示される。これは、ブラウザが受け取ったデータを復号した後の状態(暗号化を解いた後の元のデータ)を表示しているためである。通信自体は暗号化されている。

考察ポイント

  1. 1つのページの表示にあたり、画像、スタイルシート(ページの見た目を指定するファイル)等の取得を目的として複数の通信が発生していることを観察する。

演習2:AIのバイアスの観察

概要

画像生成AI(指示文に基づき画像を自動生成するAI)を利用し、特定の属性(職業、役割など)を含むプロンプト(AIへの指示文)を入力することで、AIの出力に現れる偏り(バイアス)と、AIの責任ある利用について検討する。

体験内容

使用するツール

安全性について

Microsoft 365 Copilot Chat は、大学契約の Microsoft 365 環境に含まれる正式なサービスである。操作はブラウザ内で完結し、追加のソフトウェアはインストールしない。Microsoft の公式仕様(エンタープライズデータ保護。組織契約者向けに入力データの取り扱いを保護する仕組み)により、大学アカウントでのサインイン時に入力したプロンプトと応答は、Microsoft の大規模言語モデル(テキストを生成するAIの基盤)の再学習には用いられない。利用者側で守る点は、自身や他人の氏名、住所、顔写真、未公表の研究内容などをプロンプトに入力しないことである。

手順

  1. ブラウザで Microsoft 365 Copilot Chat のページ(https://m365.cloud.microsoft/chat?auth=2)にアクセスする。
  2. 大学から付与されたアカウントでサインインする。サインイン後、チャット入力欄が表示される画面に遷移する。
  3. チャット入力欄に、画像生成を指示するプロンプトを入力する。本演習では、次の3つのプロンプトを1つずつ順に試行する(3つをまとめて1回で入力するのではなく、1回の入力につき1つのプロンプトを送信する)。プロンプトの先頭には、いずれも 画像を作成してください: を付与する。
    • 画像を作成してください:ナース
    • 画像を作成してください:ソフトウエアエンジニア
    • 画像を作成してください:社長
  4. 画像が生成されるまで待機する(生成には数秒から数十秒を要する場合がある)。生成結果が表示されない(テキスト応答のみが返る)場合は、画像として出力してください と追記して再送信する。
  5. 各プロンプトについて、生成された人物の性別、人種、年齢、服装、背景などの属性を観察し、偏り(バイアス。特定の属性に出力が偏る現象)の有無を考察する。
  6. 生成結果に偏りが見られた場合、同じプロンプトを再実行し、偏りが継続するか観察する(生成AIは実行のたびに異なる画像を出力するため、複数回実行して傾向を確認する)。そのうえで、偏りの原因として考えられる事項(学習データの構成、社会通念上の典型的なイメージの反映など)を考察する。

ヒント

考察ポイント

  1. 3つのプロンプトの生成結果について、性別、人種、年齢、服装、背景の各属性に偏りが見られたかを確認する。
  2. 偏りが見られた場合、学習データの構成や社会通念上のイメージなど、考えられる原因を整理する。
  3. AI生成物を SNS で公開する際に注意すべき点(出典の明示、事実の確認、個人情報の取り扱い)を考察する。

演習3:サイトの安全性チェックサービス

概要

公開されている安全性チェックサービス(URLを入力するとそのサイトの安全性に関する情報を返すサービス)を用いて、Webサイトの安全性を確認するためのヒントを得る手順を学ぶ。

体験内容

使用するツール

安全性について

使用するサービスは公開された Web サービスであり、ブラウザのみで動作する。送信されるのは利用者が入力した URL の文字列のみであり、利用者の PC がスキャンされることはない。

手順

  1. Google Transparency Report の Safe Browsing site status のページ(https://transparencyreport.google.com/safe-browsing/search)を開く。
  2. ページ中央の検索ボックスに、確認したいサイトのURL(ドメイン名。例:www.example.com の形式。https:// は省略可)を入力する。本演習では、次の3つを順に入力する。
    • 福山大学公式サイト:www.fukuyama-u.ac.jp
    • google.com
    • 自身がよく利用するサイト(公開されたサイトに限る。限定公開などにしている自分のSNSのURLは入力しない)
  3. 表示される内容を確認する(「No unsafe content found」と表示された場合は、Google の調査時点で不正な内容が検出されなかったことを示す。検出された場合は、その旨が表示される)。

考察ポイント

  1. フィッシング詐欺への対策(メールに記載されたURLの確認など)における本サービスの利用方法を考察する。
  2. 診断結果のみではサイトの信頼性を100%判断できない理由を、自分の言葉でまとめる(例:Google の調査が及んでいない新規サイト、調査時点以降に不正化したサイトの存在など)。

第7回. プログラミング思考の基礎

プログラミング思考には、分解・パターン・抽象化・アルゴリズム化などの要素がある。プログラムの書き方の基本は「オブジェクト.メソッド(引数)」である。変数は値に貼る名札、オブジェクトはその先の実体と捉えると理解しやすい。LLMはプログラミング学習にも役立つが、AIが生成したコードは必ず検証する必要がある。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習① CodeCombat(コードコンバット)による Python プログラミング入門

CodeCombat(コードコンバット)は、ゲームをクリアするために必要なプログラムを書くことで、Python の基本を楽しく学ぶことができるオンライン教材である。登録不要・無料の範囲で、クラスコードを使わずに Python の最初の 5 つのレベルを学ぶことができる。本演習では、オブジェクト・メソッド・引数というプログラミング思考を支える基本概念を、キャラクタを動かす操作を通じて体験する。

CodeCombat のサイト:https://codecombat.com

操作手順

  1. Web ブラウザで https://codecombat.com を開く。
  2. 表示が日本語になっていない場合は、右上のメニューで、言語設定を「日本語」に変更する。アカウント登録やログインは行わない。
  3. トップ画面の「Start Playing」をクリックする。
  4. クラスコード入力画面にクラスコードは入力せず、そのまま「今すぐプレイ」をクリックする。
  5. コース一覧の中から 「KITHGARD DUNGEON(キースガードのダンジョン)」を選び、「ゲームスタート」をクリックする。音が出るので、このときに各自で音量を調整する。
  6. 「キースガードのダンジョン」の最初のダンジョンを選ぶ。いまから4つのレベルのクリアを目指す(そこから先は有料で各自の会員登録が必要)。
  7. レベル開始画面で「ゲームスタート」をクリックする。
  8. 使用言語の選択画面で 「Python(デフォルト)」を選び、「次へ」をクリックする。
  9. 使用可能なアイテムをダブルクリックして装備する。
  10. 「ゲームスタート」をクリックし、続いて「レベルスタート」をクリックする。
  11. 編集画面が表示されたら、試しに hero.moveDown() という行を追加し、「実行」をクリックしてキャラクタの動きを確認する。hero.moveRight() で右に、hero.moveDown() で下にキャラクタが動くことを確かめる。
  12. 画面に表示されている「ミッション(目標)」を読み、目標達成に必要なメソッド呼び出しを編集画面に書き加える。書き換えと「実行」を繰り返し、「目標:成功!」と表示されるまで進める。
  13. 成功したら「完了」をクリックし、完了確認画面で「続ける」をクリックする。
  14. マップに戻ったら、青い旗をたどって次のレベルに進む。新しい装備が増えた場合は、ダブルクリックして装備する。
  15. 無料・登録不要の範囲で進められる 4 つのレベルを順にクリアする。「プラチナを購入」とあるものは、有料で各自の会員登録が必要
  16. クラスコードを入れると、別の種類の演習になる

ヒント

考察ポイント

第8回. Python プログラミング基礎①

プログラミングはアイデアを形にする創造的作業である。変数は値(オブジェクト)を指す名札であり、代入「左辺=変数、右辺=式」で値を結びつけ書き換える。計算(演算子)・出力(print)・入力(input)・外部機能の取り込み(import)が基本要素である。タートルグラフィックスでは図形描画を通じ、発想力・自主性・省察(ふりかえり)の姿勢を育てる。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習について

演習① 変数と代入、+を用いた文字列連結

変数に値を代入し、print() と + による文字列連結で、変数の内容を画面に表示する演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6cxhh3」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「こんにちは、太郎さん!」と表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習② 計算

数値を変数に代入し、それらを使って計算を行い、結果を print() で表示する演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6d5thx」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「x の値: 5」「y の値: 3」「x + y の結果: 8」の3行が表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習③ 代入(再代入)

既存の変数に新しい値を代入して更新(再代入)し、変数の値が変更できることを確認する演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6dtssm」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「元のスコア: 80」「更新後のスコア: 95」の2行が表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習④ input() による入力

input() を使ってユーザーからの入力を受け取り、変数に保存して利用する演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6dy9qg」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「あなたの名前を入力してください:」と表示されたら、その欄に自分の名前(例:kaneko)を入力し、Enterキーを押す
  4. 入力した名前を使って、「ようこそ、(入力した名前)さん!」と表示されることを確認する。
  5. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑤ 現在日時の表示(datetime ライブラリ)

datetime ライブラリを使い、コンピュータ(オペレーティングシステム)のタイマーを読み取って、今の日時を表示する演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6dnfjs」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「2026-06-04 20:37:22.313700」のような形式で、現在の日時が表示されることを確認する(具体的な日時は実行した時刻による)。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑥ 平方根:面積が 7 の正方形の一辺の長さ(math ライブラリ)

math ライブラリの sqrt(平方根)を使い、面積が 7 の正方形の一辺の長さを求める演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6dy9qg」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「2.64575131106」と表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑦ 円周率:半径 3 の円の面積(math ライブラリ)

math ライブラリの円周率(math.pi)を使い、半径 3 の円の面積を求める演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6e9dsn」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「28.2743338823」と表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑧ 三角関数:2辺と間の角度から三角形の面積(math ライブラリ)

math ライブラリの三角関数(math.sin)を使い、2辺の長さが 4 と 6、その間の角度が 60 度の三角形の面積 (1/2) × 4 × 6 × sin(60) を求める演習である。

手順

  1. Webブラウザで、URL「https://onecompiler.com/python/44w6emtve」を開く
  2. Runボタン(▶)をクリックする。
  3. 画面右に、「10.3923048454」と表示されることを確認する。
  4. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑨ タートルグラフィックス(線を引く・書き換え)

タートル(亀)が線を引きながら進む様子を観察し、さらにプログラムを書き換えて結果が変わることを確認する演習である。

手順

  1. Webブラウザで、URL「https://trinket.strivemath.org/python/f29bfe71cd」を開く
  2. ソースコードを確認
    # このPythonプログラムは、turtleモジュールを使用して、座標平面上の2つの点を線で
    # 結びます。Turtleオブジェクトを作成し、gotoメソッドを使って原点(0, 0) から
    # (0, 100)の座標に移動した後、(100, 0)の座標に移動することで、原点から右上に伸
    # びる直線を描画します。
    
    import turtle
    t = turtle.Turtle()
    t.goto(0,100)
    t.goto(100,0)
    
  3. 画面左上の「Run」(実行)ボタンをクリックする。
  4. 画面右に、原点(0,0)から上の(0,100)へ、そこから右下の(100,0)へ線が引かれた図形が表示されることを確認する。
  5. 次に、画面左のプログラムの中の t.goto(100,0)t.goto(200,0) に書き換える
  6. もう一度「Run」(実行)ボタンをクリックし、描かれる図形が変わることを確認する。
  7. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑩ タートルグラフィックスで六角形

前進(forward)と回転(left)を繰り返して、正六角形を描く演習である。

手順

  1. Webブラウザで、URL「https://trinket.strivemath.org/python/ddb861147133」を開く
  2. ソースコードを確認
    
    # タートルグラフィックスを用いて六角形を描画する.
    # 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()
    
  3. 画面左上の「Run」(実行)ボタンをクリックする。
  4. 画面右に、正六角形が描かれることを確認する。
  5. 実行が始まらないときは、もう一度「Run」(実行)ボタンをクリックする。

ヒント

考察ポイント

演習⑪ タートルグラフィックスで星形(自由制作)

星形を描くプログラムを実行し、さらに自分でデザインした図形を描くことに挑戦する、自己研鑽の演習である。

手順

  1. Webブラウザで、URL「https://trinket.strivemath.org/python/5366def2f4」を開く
  2. ソースコードを確認
    # この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)
    
  3. 画面左上の「Run」(実行)ボタンをクリックする。
  4. 画面右に、星形(星型)の図形が描かれることを確認する。
  5. 次に、画面左のプログラムの中の t.goto(...) の座標の値を自由に書き換える
  6. もう一度「Run」(実行)ボタンをクリックし、自分がデザインした図形が描かれることを確認する。

ヒント

考察ポイント

第9回. Python プログラミング基礎②

ライブラリには、標準ライブラリと外部ライブラリがある。外部ライブラリの使用にはインストールが必要であり、ライブラリ(標準も外部も)の使用には、プログラム内でのインポートが必要である。クラスは同じ種類のオブジェクトの「設計図」のようなものである。条件分岐はifやelseで処理を分ける。リストは複数の要素を順序付けて保持し、そのインデックスは0から始まる。繰り返しはforで実現でき、指定した回数だけ処理を反復する。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習① 条件分岐 ― age による料金の分岐を体験する

年齢(age)の値によって、出力が 500 か 1800 に分かれるプログラムを実行し、書き替えて動作を確認する。

操作手順

  1. ページ https://onecompiler.com/python/44w6f6bvs を開く。
  2. Runボタン(▶)をクリックする。画面右に 1800 が表示されることを確認する。
  3. 左側のプログラム1行目の age = 18age = 10 に書き替える。
  4. もう一度「Run」をクリックして実行する。結果に 500 が表示されることを確認する。
  5. age の値を 8, 9, 10, 11 にそれぞれ書き替えて実行し、いずれも 500 が表示されることを確認する。
  6. 続けて age の値を 12, 13, 14, 15 にそれぞれ書き替えて実行し、いずれも 1800 が表示されることを確認する。

ヒント

考察ポイント

演習② 条件分岐の Python プログラムを作る ― weight による分岐

weight の値が 100 以下なら result = 0、100 より大きいなら result = 1000 を実行し、最後に print(result) で表示するプログラムを作って動作を確認する。

操作手順

  1. ページ https://onecompiler.com/python/44w6ffxat を開く。このページには、次のプログラムが用意されている。
    weight = 80
    if weight <= 100:
        print(0)
    else:
        print(1000)
  2. Runボタン(▶)をクリックする。weight が 80 のとき、結果に 0 が表示されることを確認する。
  3. 1行目の weight = 80 の値を 100 より大きい値(例:120)に書き替えて実行し、結果が 1000 になることを確認する。
  4. weight の値を 100 に書き替えて実行し、結果が 0 になることを確認する(100 は「100 以下」にあてはまる)。

ヒント

考察ポイント

演習③ for による繰り返し ― & の個数を変化させる

for による繰り返しで、i の値が変化するのに合わせて、表示される「&」の個数が変わる様子を確認する。

操作手順

  1. ページ https://onecompiler.com/python/44yjhbq8n を開く。このページには、次のプログラムが用意されている。
    for i in range(5):
        print(i * '&')
  2. 「Run」をクリックして実行する。結果が次のように表示されることを確認する(1 行目は空行になる)。
    &
    &&
    &&&
    &&&&
  3. 確認クイズ:「&」を 9 個まで表示したいとき、プログラムをどのように書き替えればよいか、自分で考えて書き替え、実行して確かめる。

ヒント

考察ポイント

演習④ リストと月の日数 ― インデックスで値を取り出す

各月の日数をまとめたリストから、月の番号を使って日数を取り出すプログラムを実行し、書き替えて確認する(うるう年は考えない)。

操作手順

  1. ページ https://onecompiler.com/python/44w6fp2hy を開く。このページには、次のプログラムが用意されている。
    days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    print(days[6])
    print(days[7])
  2. 「Run」をクリックして実行する。結果に 3031 が表示されることを確認する(6 月は 30 日、7 月は 31 日)。
  3. print(days[6])print(days[7])print(days[8])print(days[9]) に書き替えて実行する。
  4. 結果に 31(8 月)と 30(9 月)が表示されることを確認する。

ヒント

考察ポイント

演習⑤ 基本的なライブラリの利用 ― Matplotlib で散布図を描く

Matplotlib ライブラリを使い、x 座標と y 座標のリストから散布図を描くプログラムを実行する。

操作手順

  1. ページ https://onecompiler.com/matplotlib/44yjhn25u を開く。このページには、import matplotlib.pyplot as plt を使い、x = [1, 2, 3, 4, 5]y = [2, 4, 5, 4, 5] をプロットするプログラムが用意されている。
  2. ソースコードを確認
    
    # 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()
    
  3. 「Run」をクリックして実行する。実行が開始しないときは、実行ボタンをもう一度押す。
  4. 結果側に「Scatter Plot」というタイトルの散布図(丸いマーカーの点)が表示されることを確認する。
  5. 余裕があれば、xy のリストの数値を書き替えて再度実行し、点の位置が変わることを確認する。

ヒント

考察ポイント

演習⑥ 数値計算用ライブラリの利用 ― NumPy と Matplotlib で sin 波を描く

NumPy で 0 から 10 までの値を作り、対応する sin の値を Matplotlib でグラフ化するプログラムを実行する。

操作手順

  1. ページ https://onecompiler.com/matplotlib/44yjhsbwj を開く。このページには、import numpy as npimport matplotlib.pyplot as plt を使い、x = np.linspace(0, 10, 100)y = np.sin(x) をプロットするプログラムが用意されている。
  2. ソースコードを確認
    
    # 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()
  3. 「Run」をクリックして実行する。実行が開始しないときは、実行ボタンをもう一度押す。
  4. 結果側に「Sin Wave」というタイトルの正弦波(波のグラフ)が表示されることを確認する。

ヒント

考察ポイント

演習⑦ 乱数(random ライブラリ)の利用 ― 乱数で座標を作る

random ライブラリで生成した乱数を使って座標を作り、散布図として表示するプログラムを実行する。

操作手順

  1. ページ https://onecompiler.com/matplotlib/44yjhvrw4 を開く。このページには、import randomimport matplotlib.pyplot as plt を使い、乱数で 100 個の x 座標と y 座標を作って散布図にするプログラムが用意されている。
  2. ソースコードを確認
    # 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()
  3. 「Run」をクリックして実行する。実行が開始しないときは、実行ボタンをもう一度押す。
  4. 結果側に、乱数で生成された点がばらばらに散らばった散布図が表示されることを確認する。
  5. もう一度「Run」をクリックして実行し、点の配置が前回と変わることを確認する。

ヒント

考察ポイント

演習⑧ タートルグラフィックス ― 図形を描く(for で繰り返す)

タートル(亀)に命令(メソッド)を出して線を引き、for による繰り返しで図形を描くプログラムを実行する。

操作手順

  1. ページ https://trinket.strivemath.org/python/895c3ea5b6 を開く。このページには、次のプログラムが用意されている。
    import turtle
    t = turtle.Turtle()
    for i in range(5):
        t.forward(100)
        t.right(170)
  2. 「Run」をクリックして実行する。結果側に、前進と回転を繰り返して描かれた線の図形が表示されることを確認する。
  3. 続けて ページ https://trinket.strivemath.org/python/0d8dbc1139 を開く。このページでは t.forward(i * 20 + 100) のように、繰り返しごとに進む距離が変わる。
  4. 「Run」をクリックして実行し、図形が表示されることを確認する。
  5. プログラム内の「5」「20」「100」「170」の数値をいろいろ書き替えて実行し、図形がどう変わるかを確認する。

ヒント

考察ポイント

演習⑨ タートルグラフィックス ― リストと組み合わせて色を変える

色のリストとタートルのメソッドを組み合わせ、繰り返しのたびに色を変えながら円を描くプログラムを実行する。

操作手順

  1. ページ https://trinket.strivemath.org/python/f8cd554693 を開く。このページには、次のプログラムが用意されている。
    import turtle
    t = turtle.Turtle()
    colors = ["red", "green", "blue"]
    for i in range(3):
        t.color(colors[i])
        t.circle(30)
        t.forward(50)
  2. 「Run」をクリックして実行する。結果側に、赤・緑・青の 3 つの円が横に並んで描かれることを確認する。
  3. 余裕があれば colors のリストの色名や、t.circle(30) の半径、t.forward(50) の距離を書き替えて実行し、変化を確認する。

ヒント

考察ポイント

第10回. データサイエンス、基本的な計算

データサイエンスは「データ→分析・計算→有益な結果」の流れであり、作品推薦・渋滞予測・天気予報・不正検知など身近なサービスを支えている。内積(類似性)・平均(代表値)・標本分散(ばらつき)・標本共分散(連動)などの基本的な計算は、データの分析・計算の基礎になる。これら4計算はExcel関数SUMPRODUCT・AVERAGE・VAR.S・COVARIANCE.Sで計算できる。計算範囲はコロンで指定する(例:A1:A6)。Excelは、式の先頭に半角「=」を付ける。Excelの特徴としては、再計算・強調表示・並べ替え・グラフ作成などの多様な機能がある。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習1 内積 SUMPRODUCT

内積は、二つの数字の列について、対応する要素を掛けて合計する計算である。二つの並びが同じところで高くなるほど内積は大きくなり、二つの並びがどれだけ似ているかを測る基礎になる。ここでは Excel の関数 SUMPRODUCT を用いて内積を求める。

操作手順

  1. Excel を起動し、新しいブックを開く。
  2. データを2列に入力する。セル A1 から A5 に「8、2、6、3、6」を上から順に入力し、セル B1 から B5 に「4、6、5、6、4」を上から順に入力する。
  3. 結果を表示するセル(例:D1)をクリックし、=SUMPRODUCT(A1:A5,B1:B5) と入力する。数式の先頭には半角の「=」を付ける。範囲はコロン「:」で指定する(A1:A5 は A1 から A5 までの連続した範囲を表す)。
  4. Enter キーを押す。セル D1 に計算結果「116」が表示される。

ヒント

考察ポイント

演習2 平均 AVERAGE

平均は、いくつかの値を一つの代表値にまとめる計算である。バラバラな多くの値を1本の代表する高さにならして、全体の状況を一つの数で捉える。ここでは Excel の関数 AVERAGE を用いて平均を求める。

操作手順

  1. Excel を起動していなければ、Excel を起動し、新しいブックを開く。
  2. データを1列に入力する。セル A1 から A5 に「8、2、6、3、6」を上から順に入力する。
  3. 結果を表示するセル(例:C1)をクリックし、=AVERAGE(A1:A5) と入力する。数式の先頭には半角の「=」を付ける。
  4. Enter キーを押す。セル C1 に計算結果「5」が表示される。

ヒント

考察ポイント

演習3 標本分散 VAR.S

標本分散は、値が平均からどれくらいばらついているかを測る計算である。各値が平均からどれだけ離れているか(ズレ)を集めると、データ全体のばらつきが分かる。ズレが大きいほど分散は大きく、ズレが小さいほど分散は小さくなる。ここでは Excel の関数 VAR.S を用いて標本分散を求める。

操作手順

  1. Excel を起動していなければ、Excel を起動し、新しいブックを開く。
  2. データを1列に入力する。セル A1 から A5 に「8、2、6、3、6」を上から順に入力する。
  3. 結果を表示するセル(例:C1)をクリックし、=VAR.S(A1:A5) と入力する。数式の先頭には半角の「=」を付ける。
  4. Enter キーを押す。セル C1 に計算結果「6」が表示される。

ヒント

考察ポイント

演習4 標本共分散 COVARIANCE.S

標本共分散は、二つの量がどれくらい連動して動くかを測る計算である。一方が分かればもう一方を推測できる関係をとらえる。内積がそのままの値どうしを掛けるのに対し、共分散は平均を引いたズレどうしを掛けて求める。ここでは Excel の関数 COVARIANCE.S を用いて標本共分散を求める。

操作手順

  1. Excel を起動していなければ、Excel を起動し、新しいブックを開く。
  2. データを2列に入力する。セル A1 から A5 に「8、2、6、3、6」を上から順に入力し、セル B1 から B5 に「4、6、5、6、4」を上から順に入力する。
  3. 結果を表示するセル(例:D1)をクリックし、=COVARIANCE.S(A1:A5,B1:B5) と入力する。数式の先頭には半角の「=」を付ける。
  4. Enter キーを押す。セル D1 に計算結果「−2.25」が表示される。

ヒント

考察ポイント

演習5 質問を理解するAI 「Data Commons」

Data Commons は、Google が世界中の政府統計を1か所に集めたオープンデータのサービスである。検索欄に英語で質問を入力すると、AI が質問を解釈し、統計を地図やグラフで自動的に表示する。オープンデータを、AI の力を借りて体験する演習である。

Data Commons のサイト:https://datacommons.org/

操作手順

  1. Web ブラウザで https://datacommons.org/ を開く。
  2. 画面の上部中央にある検索欄をクリックする。検索欄には英語で質問を入力する。
  3. 次の質問例のいずれかをコピーして検索欄に貼り付け、Enter キーを押す。英語が苦手な場合は、質問例をそのままコピーして貼り付ければよい。
    • How has the population of Japan changed over time?(日本の人口推移)
    • Life expectancy in Japan compared to other G7 countries(日本と G7 各国の平均寿命比較)
    • Unemployment rate in Tokyo(東京の失業率)
  4. 画面に折れ線グラフ・地図・ランキング表などが、質問に応じて自動的に表示されることを確認する。
  5. グラフ付近にある「About this data」をクリックすると、どの公的機関のオープンデータが使われているかを確認できる。
  6. 画面左上の「DC」のロゴをクリックしてトップページに戻り、別の質問で手順3から繰り返す。最低3つの質問を試す。

ヒント

考察ポイント

演習6 データの隙間を埋めるAI 「Gapminder」

Gapminder Tools は、世界統計を動くバブルチャートで表示するツールである。世界銀行・WHO・国連等が公開するオープンデータを用いて、各国の所得・平均寿命・人口等を表示する。時間軸スライダーを動かすと、1800年から現在までの各国の変化をアニメーションで見ることができる。データが存在しない年の値は、前後の年から推定するアルゴリズム(欠損値補完)で埋められている。オープンデータを体験する演習である。

Gapminder のサイト:https://www.gapminder.org/tools/

操作手順

  1. Web ブラウザで https://www.gapminder.org/tools/ を開く。
  2. 初期画面でバブルチャートが表示されることを確認する。画面上部のタブが「Bubbles」になっていることを確認する。初期画面では、バブル=国、バブルの大きさ=人口、バブルの色=地域、横軸=1人あたり所得、縦軸=平均寿命を表す。
  3. 画面右側の国名リストで「Japan」を探してクリックするか、検索欄に「Japan」と入力する。日本のバブルがハイライト表示される。
  4. 画面下部の再生ボタン(▶)をクリックし、1800年から現在までのアニメーションを見る。日本のバブルがどのように動くかに注目する。
  5. アニメーション終了後、時間軸スライダーを左右に動かし、日本の軌跡を確認する。
  6. 横軸または縦軸のラベルのメニュー(「Income」「Life expectancy」等)をクリックし、別の指標に変える。例として「Children per woman」(女性1人あたりの子どもの数)や「CO2 emissions」(CO2 排出量)を選ぶ。
  7. 画面下部のボタンで「Bubbles」から「Maps」(地図)や「Ranks」(順位)などに切り替え、同じデータを別の形式で見る。
  8. 他の指標についても、横軸や縦軸のラベルを変更し、日本と他国(例:韓国、米国、ブラジル)を比べる。

ヒント

考察ポイント

第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 標準ライブラリの turtle(タートルグラフィックス)を用いて、落下物を受け止めて得点する「落下物キャッチ(受け止め)ゲーム」を作成する。完成形は、左右キーで動かすプレイヤーが、上から落ちてくる落下物を受け止めて得点するゲームである。

演習①OneCompilert の動作確認

まず、OneCompiler のページが正しく表示され、実行できることを確認する。

操作手順

  1. 次の URL をブラウザで開く。

    https://onecompiler.com/python/44w6g9fe6

  2. Runボタン(▶)をクリックする。
  3. 画面右に、資料の例と同じように結果が表示されることを確認する。
  4. 110.00000000000001
    165.0
    440.00000000000006
    

    「00000000000001」や「00000000000006」の部分は計算誤差である。これは正常な動作である。計算誤差については別の回で説明予定。

ヒント

考察ポイント

演習② 落下の再現

画面の上端から円が現れ、まっすぐ下へ落ちていく動きを作る。

操作手順

  1. 次の URL をブラウザで開く。

    演習2のページ:https://trinket.strivemath.org/python/e0c1d1c0f8af

  2. 実行ボタン(「Run」)をクリックして実行する。
  3. 画面中央の上端(x=0, y=180)に「三角形」が現れ、まっすぐ下へ落ちていくことを確認する。
  4. 「三角形」が下端(y=-180)を過ぎると、また上端に戻って同じ列を落ち続けることを確認する。

ヒント

考察ポイント

演習③ 接触の近似

下端に置いた四角いプレイヤーと、落ちてくる「三角形」との水平距離を判定し、近ければ得点する仕組みを作る。

操作手順

  1. 次の URL をブラウザで開く。

    演習3のページ:https://trinket.strivemath.org/python/216f2ddb6b40

  2. 実行ボタン(「Run」)をクリックして実行する。
  3. 下端の中央(x=0, y=-180)にプレイヤーが置かれ、上端から「三角形」が落ちてくることを確認する。
  4. 「三角形」は毎回 x=0 の同じ列を落ちるため、プレイヤー上を通過することを確認する。
  5. 「三角形」が下端に達するたびに、プレイヤーとの水平距離が 30 未満かどうかが判定され、近ければ score が 1 増えることを確認する。この演習ではプレイヤーはまだ動かせない。

ヒント

考察ポイント

演習④ アクション性

「三角形」が落ちてくる位置を毎回ランダムに変え、ゲームにアクション性を持たせる。

操作手順

  1. 次の URL をブラウザで開く。

    演習4のページ:https://trinket.strivemath.org/python/b2bde1e50f7d

  2. 実行ボタン(「Run」)をクリックして実行する。
  3. 「三角形」が落ちてくる左右の位置が毎回ランダムに変わることを確認する。-180 から 180 の間でばらばらに決まる。
  4. プレイヤーは下端中央に固定されたままなので、「三角形」がたまたまプレイヤーの近く(水平距離 30 未満)に落ちたときだけ得点が入ることを確認する。

ヒント

考察ポイント

演習⑤ プレイヤーを動かす

左右キーでプレイヤーを動かせるようにし、「三角形」に合わせて受け止められるようにする。

操作手順

  1. 次の URL をブラウザで開く。

    演習5のページ:https://trinket.strivemath.org/python/1a7d4df094b4

  2. 実行ボタン(「Run」)をクリックして実行する。これまでと同じく「三角形」がランダムな位置を落ちてくる。
  3. 右側の描画領域(タートルの絵が表示される部分)を一度クリックして、フォーカスを与える。これをしないと矢印キーが効かない。
  4. 左矢印キー(←)を押すとプレイヤーが左へ 20、右矢印キー(→)を押すと右へ 20 だけ動くことを確認する。
  5. 落ちてくる「三角形」の真下にプレイヤーを移動させ、受け止めて得点をねらう。
  6. 移動範囲の制限はまだ無いので、キーを押し続けるとプレイヤーが画面の外まで出て行ってしまうことを確認する。

ヒント

考察ポイント

演習⑥ 完成形

プレイヤーが画面の外へ出ないように移動範囲を制限し、ゲームを完成させる。

操作手順

  1. 次の URL をブラウザで開く。

    演習6のページ:https://trinket.strivemath.org/python/826f3b473886

  2. 実行ボタン(「Run」)をクリックして実行する。操作感は演習⑤と同じである。
  3. 右側の描画領域を一度クリックして、フォーカスを与える
  4. 左矢印キー(←)・右矢印キー(→)でプレイヤーを左右に動かす。左へ動かし続けても左端(x=-180)で、右へ動かし続けても右端(x=180)で止まることを確認する。
  5. 落ちてくる「三角形」の真下にプレイヤーを移動させ、受け止めて得点をねらう。プレイヤーが画面の外へ出て見えなくなることがなくなったことを確認する。

ヒント

考察ポイント

第12回. プログラミング・データサイエンス・AIの融合

データ分析は「実データを眺める→課題発見→解決→次の行動」という流れで進む。実データには欠損・偏り・ノイズがある。欠損値がある場合には、その行を除去したり、平均値で補完したりといった前処理が必要になる。分析手法には、分類・回帰・クラスタリングなどがある。可視化によってデータのパターンを読み取ろうとしても、データの項目(次元)が増えると可視化は困難になる。そうした場合には機械学習が有効である。なお、プログラミング(コードの作成)と対話型AIへの指示は、互いを補い合う補完関係にある。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

実行環境で体験する(手を動かす)演習ガイド

コードを動かしながら体験する演習集である。各演習は同じ手順で実行する。実行環境には pythononline.dev を用いる。ブラウザ上で Python を記述・実行できるオンライン実行環境で、PC へのインストール(環境構築)もアカウント登録も不要である。pandas・matplotlib・scikit-learn のライブラリはインポートするだけで自動的に読み込まれ、インストールなどの事前準備は不要である。

pythononline.dev のサイト:https://pythononline.dev/

演習① 回帰による将来予測

過去2年(24か月)の売上実績で学習し、来年12か月分を予測して、1本の時間軸に並べて描画する演習である。

操作手順

  1. ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要)。
  2. 最初のコードセルの中身をすべて削除する。
  3. 下の「貼り付けるコード」をすべてコピーし、空にしたコードセルに貼り付ける。
  4. 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる)。
  5. セルの下にグラフ(画像)が表示されることを確認する。

貼り付けるコード

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()

ヒント

考察ポイント

演習② データの読み込みと欠損の補完

生活習慣アンケート12人分(1週間の運動回数・平日の睡眠時間)を読み込み、欠損数を確認したうえで、睡眠時間の未回答を平均値で補完する演習である。12人のうち2人分の睡眠時間が未回答(欠損)である。

操作手順

  1. ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要)。
  2. 最初のコードセルの中身をすべて削除する。
  3. 下の「貼り付けるコード」をすべてコピーし、空にしたコードセルに貼り付ける。
  4. 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる)。
  5. セルの下に 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)

ヒント

考察ポイント

演習③ 分類による判定と決定境界の可視化

学習時間とテスト点数から「講習会Aの受講/未受講」を判定する分類を体験する演習である。まず実データの散布図を描き、次に決定木(機械学習の一手法)で学習して、平面全体を「受講と判定される領域」と「未受講と判定される領域」に塗り分けて示す。

操作手順

  1. ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要)。
  2. 最初のコードセルの中身をすべて削除する。
  3. 下の「貼り付けるコード」をすべてコピーし、空にしたコードセルに貼り付ける。
  4. 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる)。
  5. セルの下に2枚のグラフ(画像)が表示されることを確認する。

貼り付けるコード

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()

ヒント

考察ポイント

演習④ クラスタリング(前処理と教師なし学習)

演習②と同じ生活習慣アンケートを素材に、欠損を補完してから、似た回答の人同士を自動で2グループに分ける演習である。

操作手順

  1. ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要)。
  2. 最初のコードセルの中身をすべて削除する。
  3. 下の「貼り付けるコード」をすべてコピーし、空にしたコードセルに貼り付ける。
  4. 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる)。
  5. セルの下に 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()

ヒント

考察ポイント

演習⑤ ツールによるアプローチの比較

同じ「月別売上の折れ線グラフ」を、(a) 自分でコードを組み立てる方法と、(b) 対話型AIに作成を任せる方法の2通りで作り、進め方を比較する演習である。

操作手順(a)自分でコードを組み立てる場合(AIの補助を借りることもある)

  1. ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要)。
  2. 最初のコードセルの中身をすべて削除する。
  3. 下の「貼り付けるコード」の (a) をすべてコピーし、空にしたコードセルに貼り付ける。
  4. 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる)。
  5. セルの下にグラフ(画像)が表示されることを確認する。

操作手順(b)対話型AIに作成を任せる場合

  1. 対話型AI(例:Microsoft Copilot、https://portal.office.com にアクセス。大学のアカウントでサインイン)へ指示(プロンプト)を与える
  2. グラフを確認する。

貼り付けるコード(a)自分で組み立てるコード

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()

貼り付けるプロンプト(b)対話型AI(例:Microsoft Copilot、https://portal.office.com/)への指示(プロンプト)

月別売上 [55, 58, 65, 72, 80, 95, 110, 105, 88, 75, 62, 57] の
折れ線グラフを表示してください。

ヒント

考察ポイント

第13回. 人工知能体験

AIはコンピュータが人間のような知的能力(知能・知識・学習)を持つことを目指す技術である。コンピュータビジョンには、画像全体を分類する「画像分類」、物体の位置を矩形で示す「物体検出」、画素単位で領域分割する「セグメンテーション」などがある。また、顔情報処理には顔検出、顔ランドマーク検出、表情推定、3次元再構成などがある。モデルには信頼度しきい値やIoUしきい値等のパラメータがあり、調整により検出精度と誤検出のバランスが変化する。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

動画

[動画]

[演習の詳細を表示するには、この行をクリックしてください]

演習1 Rembg(背景除去セグメンテーション)

画像から被写体を切り抜き、背景を透明化するセグメンテーションのデモである。u2net など16種のモデルを選択でき、モデルによって切り抜き精度が変わる。

Rembg のサイト:https://huggingface.co/spaces/KenjieDec/RemBG

  1. Rembg のサイト(https://huggingface.co/spaces/KenjieDec/RemBG)にアクセスする。
  2. 画面の「Input Image」の欄で、内蔵のサンプル画像を1つ選ぶ。または、自分の画像をアップロードする。
  3. モデルを選択する欄で、使用するモデル(例:u2net)を1つ選ぶ。
  4. 「Process」ボタンをクリックする。
  5. 「Output Image」に、背景が透明化された切り抜き結果が表示される。あわせて「Output Mask」に、被写体の領域を白、それ以外を黒で示したマスク画像が表示される。
  6. モデルを別の種類に変更し、再度「Process」をクリックして、同じ画像に対する結果を見比べる。

演習2 DETR 物体検出

物体検知モデル DETR のデモである。ResNet-50 と ResNet-101 の2つのモデルを選ぶことができ、cats.jpg、detectron2.png、cat.jpg、hotdog.jpg のサンプル画像が内蔵されている。

DETR 物体検出のサイト:https://huggingface.co/spaces/ClassCat/DETR-Object-Detection

  1. DETR 物体検出のサイト(https://huggingface.co/spaces/ClassCat/DETR-Object-Detection)にアクセスする。
  2. 「Model name」の欄で、detr-resnet-50 または detr-resnet-101 のいずれかを選ぶ。
  3. 画面下部に表示されているサンプル画像のサムネイル(cats.jpg、detectron2.png、cat.jpg、hotdog.jpg)のいずれかをクリックする。または、自分の画像をアップロードする。
  4. 「Infer」ボタンをクリックする。
  5. CPU での処理のため、約10秒待つ。
  6. 「Output image with predicted instances」に表示された検出枠(ラベルと信頼度つきの四角形)を確認する。
  7. モデルを ResNet-50 から ResNet-101 に切り替え(またはその逆)、同じ画像に対して再度「Infer」を実行し、結果を見比べる。

演習3 YOLOv10 物体検出

物体検知モデル 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

  1. YOLOv10 のサイト(https://huggingface.co/spaces/kadirnar/Yolov10)にアクセスする。
  2. 内蔵されているサンプル画像の1つを選ぶ。または、自分の画像をアップロードする。
  3. 「Model」の欄で、モデルの種類(例:yolov10x)を1つ選ぶ。
  4. 「Image Size」のスライダーで画像サイズを設定する(初期値は640)。
  5. 「Confidence Threshold」のスライダーで信頼度しきい値を設定する(初期値は0.25)。
  6. 「IoU Threshold」のスライダーでIoUしきい値を設定する(初期値は0.45)。
  7. 「Detect Objects」ボタンをクリックし、検出結果(ラベルと信頼度つきの四角形)を確認する。
  8. 画像サイズ・信頼度しきい値・IoUしきい値のいずれかを変更し、「Detect Objects」を再度クリックして、検出結果の変化を観察する。

演習4 YOLOv8 の種々の機能

物体検知・セグメンテーション・姿勢推定・回転矩形・分類まで扱える多機能デモである。モデル種別(yolov8n/yolov8n-seg など15種)に加え、信頼度しきい値・IoUしきい値・画像サイズを調整でき、画像・動画・Webカメラに対応している。bus.jpg 等のサンプルが内蔵されている。

YOLOv8 のサイト:https://huggingface.co/spaces/Ultralytics/YOLOv8

  1. YOLOv8 のサイト(https://huggingface.co/spaces/Ultralytics/YOLOv8)にアクセスする。
  2. 内蔵されているサンプル画像(例:bus.jpg)の1つを選ぶ。または、自分の画像をアップロードする。
  3. モデルの種別を選ぶ欄で、物体検出用のモデル(例:yolov8n)を選ぶ。
  4. 信頼度しきい値とIoUしきい値を設定する。
  5. 実行ボタンをクリックし、検出結果を確認する。
  6. 信頼度しきい値を上下させて再実行し、検出数がどう変化するかを観察する。
  7. モデルの種別を yolov8n から yolov8n-seg に切り替え、同じ画像を再実行して、出力の違いを見る。

演習5 表情認識

顔情報処理(表情認識)のデモである。顔検出→表情分類に加え、判断根拠を示すヒートマップと、動画では感情の時系列統計グラフまで出力する。静止画7種・動画2種のサンプルが内蔵されている。

表情認識のサイト:https://huggingface.co/spaces/ElenaRyumina/Facial_Expression_Recognition

  1. 表情認識のサイト(https://huggingface.co/spaces/ElenaRyumina/Facial_Expression_Recognition)にアクセスする。
  2. 静止画タブで、内蔵されているサンプル画像(7種)の1つを選ぶ。
  3. 表情の判定結果と、判断根拠を示すヒートマップを確認する。
  4. 動画タブに切り替え、内蔵されているサンプル動画(2種)の1つを選んで実行する。
  5. 時系列で感情がどのように変化するかを、グラフ(Statistics of emotions)で観察する。

第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が適している。

演習① Microsoft Copilot によるアンケートデータの検証体験

この演習では、架空の学生生活アンケート(30人分)を Microsoft Copilot に読み込ませ、中央値や外れ値の扱いをAIに計算させたうえで、その処理内容を自分の目で確かめる。

Microsoft Copilot:学校のアカウントでサインインが必要な場合がある。

使用するデータ(架空の学生生活アンケート、30人分)

氏名,身長,睡眠時間,好きな食べ物,学食の満足度
サクラ,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

操作手順

  1. WEBブラウザで、Microsoft 365 Copilot Chat(https://m365.cloud.microsoft/chat?auth=2)を開く。サインインが求められた場合は大学のIDとパスワードでサインインする。左のメニューで「新しいチャット」をクリック。
  2. 上記の30人分のデータ(見出し行を含む)全体コピーする。入力欄をクリックし、コピーしていたデータを貼り付ける。
  3. 貼り付けたデータの下に、続けて「このデータの身長の中央値を出して」と入力する。
  4. 入力欄の右にある送信ボタンをクリックし、Copilotの回答が表示されるまで待つ。
  5. Copilotの回答を読み、中央値を確認する。
  6. 貼り付けたデータの下に、「身長の外れ値をどのように扱ったかを説明して」と入力する。
  7. 入力欄の右にある送信ボタンをクリックし、Copilotの回答が表示されるまで待つ。
  8. Copilotがどの値を外れ値と判断し、どのように扱ったかを確認する。
  9. 次に、「空欄になっている回答をどのように扱ったかを説明して」と入力する。
  10. 入力欄の右にある送信ボタンをクリックし、Copilotの回答が表示されるまで待つ。
  11. このデータの場合、平均値、中央値のどちらが良いのですか?その理由は何ですか」「このデータから言える結論はなんですか?」「30人分のデータで、この結論を全大学生に当てはめて大丈夫ですか」の3つを、順番にCopilotへ入力し、回答を確認する。

ヒント

考察ポイント

演習② OneCompiler によるコード作成・実行と、Copilotの回答との照合

この演習では、演習①で使ったアンケートデータをもとに、OneCompilerのAI機能でPythonコードを書かせて実際に実行し、演習①でCopilotが答えた数値と一致するかを確かめる。

OneCompilerのサイト:https://onecompiler.com/python

使用するデータ(架空の学生生活アンケート、30人分)

氏名,身長,睡眠時間,好きな食べ物,学食の満足度
サクラ,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

操作手順

  1. OneCompilerのサイト(https://onecompiler.com/python)にアクセスする。登録は不要である。
  2. ここから先の実行は OneCompiler への登録を各自で行う必要がある。登録には個人情報の提供を伴うため、内容を確認したうえで進める。
  3. 画面内のAIボタンをクリック。AIのチャット欄に「次のCSVデータの身長の中央値を計算するPythonコードを書いて」と入力し、 続けて、上記の30人分のデータ(見出し行を含む)全体コピーする。入力欄をクリックし、コピーしていたデータを貼り付ける。
  4. AIが生成したコードを確認
  5. 右側の編集画面に、AIが生成したコードをコピーするために、「Apply」ボタンをクリック (Apply ボタンの場所はわかりにくい。AIの回答の中をスクロールして探す)
  6. 画面の「Run」ボタンでコードを実行する。
  7. 実行結果として表示された中央値の数値を確認する。

ヒント

考察ポイント

演習③ AIにゲームや占いを作らせて、遊びながら中身を見る

この演習では、OneCompilerのAI機能を使って占いやゲームのコードを作らせ、実行しながらAIの解釈のずれを観察する。

OneCompilerのサイト:https://onecompiler.com/python

操作手順

  1. OneCompilerのサイト(https://onecompiler.com/python)にアクセスする。
  2. 画面内のAIボタンをクリック。AIのチャット欄に「Pythonでおみくじを作って」など、おみくじ・じゃんけん・対戦ゲームなどの好きなものを考えて依頼する。
  3. AIが生成したコードを確認
  4. 右側の編集画面に、AIが生成したコードをコピーするために、「Apply」ボタンをクリック(Apply ボタンの場所はわかりにくい。AIの回答の中をスクロールして探す)
  5. 画面の「Run」ボタンでコードを実行する。
  6. AIボタンをクリック。AIに「このコードを1行ずつ説明して」と依頼し、コードの説明を読む。
  7. 続けて、わざと曖昧な指示(例:「もっと面白くして」)または少し変わった指示(例:「凶が出にくいようなインチキをしてほしいが、それが人間にばれないようにして」)を出し、AIがどのように解釈してコードを直したかを、直る前と直った後のコードを見比べて確認する。
  8. 生成されたコードのうち1か所だけを自分でも書き換えてみる。書き換える箇所は、おみくじの結果の種類を増やす、当たりの範囲を変える、など小さな変更でよい。
  9. 書き換えたコードを実行し、自分の変更どおりに動作するかを確認する。

ヒント

考察ポイント

第15回. コンピューターサイエンスの展望

抽象化は目的に応じて対象の本質を抽出する。モデル化により数式・図・プログラム等の形式で表現する。計算モデルには入力・記憶・操作・結果という注目ポイントがある。有名な計算モデルとしては、有限オートマトン、チューリングマシンがある。アルゴリズムの選択により処理の手間が変わる。入力の量に応じて処理の手間は増えるが、入力の量に応じた手間の増加(計算量)の把握は重要である。数値計算では入力・内部表現・表示の各段階で丸めが生じ、それぞれを区別して理解する必要がある。

スライド資料

[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)

[演習の詳細を表示するには、この行をクリックしてください]

使用するツール

OneCompilerのサイト:https://onecompiler.com/python

オンラインのPython実行環境。

今回の演習について

このガイドで実行するプログラムは、行数が多く、プログラム自体の理解が難しいと感じる場合がある。しかし、このガイドの目的は、プログラムの実装を理解することではなく、授業の資料で説明した概念・用語を、実際の数値や出力を通して確認することにある。プログラムの細部が分からなくても、各演習の手順とヒントに沿って進めれば、演習の目的を達成できる。

演習1 計算モデルをつくる:チューリングマシン体験

チューリング機械の規則表(テープ「1 1 1 _ ...」に対して、右へ進み続け、最初に空白を見つけたらそこに1を書いて停止する)

現在の内部状態読んだ記号書く記号ヘッド移動次の内部状態
q_right11右へq_right
q_right_(空白)1その場q_halt
  1. 上のチューリングマシンの規則表を確認する。
  2. 規則表を確認したら、これは【ヘッドを右に動かし続けて、空白を見つけたら止まるマシンだな】と理解する
  3. https://onecompiler.com/python/44w3g45ks を開く
  4. Runボタン(▶)をクリックする。
  5. 次のような出力結果が出る。
    
    開始: 状態=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 _ ...
    
    先頭から順に見て、状態が、 q_right, q_right, q_right, q_right, q_halt と変化、 位置が 0, 1, 2, 3 と変化し 3 に来たら止まることを確認。 テープには、右端に1が追加されることを確認する

チューリングマシンの仕組みの詳細説明

[詳細な説明を表示するには、この行をクリックしてください。]

チューリング機械は、テープと呼ばれる記号の並び、そのテープ上を動くヘッド、そして有限個の内部状態を持つ計算モデルである。ヘッドは1回の操作で、今いる位置の記号を読み、記号を書き換え、左右どちらかに動くか、その場にとどまる。

ここでは、テープに

1 1 1 _ _ _ ...

と書かれているとする。_ は空白を表す。右側には空白が続いているが、表示では必要な部分だけを書く。

今から考えるチューリング機械は、右へ進み続け、最初に空白を見つけたら、そこに 1 を書いて停止する。つまり、表示される部分だけを見ると、

1 1 1 _ ...

1 1 1 1 _ ...

に変える。

このチューリング機械の規則は次の通りである。

現在の内部状態読んだ記号書く記号ヘッド移動次の内部状態
q_right11右へq_right
q_right_1その場q_halt

1行目は、「内部状態が q_right で、今いる位置の記号が 1 のとき、記号 1 を書き、ヘッドを右へ動かし、内部状態は q_right のままにする」という意味である。
2行目は、「内部状態が q_right で、今いる位置の記号が空白 _ のとき、そこに 1 を書き、ヘッドはその場にとどめ、内部状態を q_halt に変える」という意味である。

q_halt は、この機械が停止したことを表す内部状態である。

この規則に従って動く様子を、時点ごとに追跡すると次のようになる。表の「ヘッド位置」は、表示しているテープの左端を0番目として数えた位置である。

時点内部状態ヘッド位置表示したテープ内容この時点で行われた操作
0q_right01 1 1 _ ...開始時点。まだ何も操作していない
1q_right11 1 1 _ ...位置0の記号1を読み、書き換えずに右へ動いた
2q_right21 1 1 _ ...位置1の記号1を読み、書き換えずに右へ動いた
3q_right31 1 1 _ ...位置2の記号1を読み、書き換えずに右へ動いた
4q_halt31 1 1 1 _ ...位置3の空白を読み、そこに1を書いて停止した

時点1から3までは、記号1を読んで右へ移動するだけなので、テープの内容自体は変化しない。テープが変化するのは、空白に到達して1を書き込む時点4だけである。

演習2 アルゴリズムの速さを測る:探索

この演習では、「探索」に対して異なるアルゴリズムを適用し、必要な比較回数をプログラムが実際に数えることで、アルゴリズムによって手間の増え方がどう変わるかを確認する。

  1. 線形探索(先頭から順に1つずつ調べる方法)と二分探索(データが昇順に並んでいることを前提に、中央の値と比較しながら調べる範囲を半分に絞り込む方法)を使って、1から16までのカードの中から13を探す 2つの方法の手間の違いを確認する。
  2. https://onecompiler.com/python/44w3ghzgu を開く
  3. Runボタン(▶)をクリックする。
  4. 次のように表示される。16枚のカード(並べ替え済み)に対して13を探索するときの手間を確認できる。(線形探索・二分探索それぞれの「13」の数と実際のカードの数の比較回数が表示される)。
  5. 
    線形探索: (13, True)
    二分探索: (4, True)
    

演習3 アルゴリズムの速さを測る:部分和問題

  1. {3, 4, 6, 8, 11, 14} (要素数6個)や、要素数8個、要素数10個の3通りについて、 それぞれの中から要素を選んで「合計すると17になる」のものをすべて見つける。そして、その総数を表示することを行う。
  2. https://onecompiler.com/python/44w3hdqjc を開く。
  3. Runボタン(▶)をクリックする。
  4. 合計が17になる部分集合の一覧を確認する。そして、要素数6個・8個・10個のぞれぞれについて、調べるべき部分集合の総数が表示されるので確認する。
  5. 
    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 数値の丸め

この演習では、数値の丸めを確認する。

  1. https://onecompiler.com/python/44w3m3esr を開く。
  2. Runボタン(▶)をクリックする。
  3. 次のように表示される。
    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
    

授業計画(クリックにより中身が表示されます)

シラバス(全15回)
内容
第1回 コンピュータサイエンス入門
  • コンピュータサイエンスの概要
  • 情報化社会における役割
  • 無料ソフトウェアとデータの活用
  • エコシステムの基本概念
第2回 人工知能の仕組み、責任ある活用
  • AIの基本的能力と限界
  • 機械学習の概念
  • ニューラルネットワークの基礎
  • AI利用の具体例
第3回 デジタル画像
  • デジタル画像の構造
  • 画像処理入門
  • 画像制作とコンピュータ
第4回 3次元コンピュータグラフィックス
  • 3次元コンピュータグラフィックスの基本概念
  • ポリゴンモデリングの基礎
  • Blenderの紹介
  • ストリートビュー
第5回 コンピュータの構成要素とデータ処理の仕組み
  • プロセッサの仕組みと役割
  • メモリと構造
  • 文字コードと情報の表現
  • 論理演算と2の補数
第6回 情報倫理とセキュリティ
  • 情報倫理の基本原則
  • 個人情報の保護
  • 情報セキュリティの重要性
  • 具体的な対策と事例研究
第7回 プログラミング入門
  • プログラミング思考の基礎
  • Pythonプログラミングを行うGDBonlineの基本操作
  • 簡単なゲーム作成
第8回 Python プログラミング基礎①
  • Pythonの特徴と基本文法
  • 変数
  • データの種類
  • 基本的な入出力処理
  • 演算子の使用
第9回 Python プログラミング基礎②
  • 制御構文の基礎
  • 条件分岐(if文)
  • 繰り返し処理(for、while文)
  • 基本的なアルゴリズム
第10回 データサイエンス
  • データサイエンスの基本概念
  • 基本的な計算:内積(類似性)・平均(代表値)・標本分散(ばらつき)・標本共分散(連動)
  • Excelの基本操作、Excelでの計算と範囲指定
  • Excel の関数SUMPRODUCT・AVERAGE・VAR.S・COVARIANCE.S
第11回 Pythonプログラミング応用
  • 抽象化
  • 関数の定義と使用
  • 実引数、仮引数(パラメータ)、戻り値
  • 複数の関数を組み合わせたプログラムの実行
第12回 プログラミングとデータサイエンスとAIの統合
  • データ処理でのAIとプログラミング
  • データの可視化
  • AIによる機械学習の基礎的活用
  • 実データの分析
  • Microsoft Copilot をAIアシスタントとして用いてコードの改善に役立てる
第13回 人工知能体験
  • 人工知能との対話
  • セグメンテーション・顔検知のデモ体験(Teachable Machine/MediaPipe Webデモ等)
  • パラメータや入力を変えながらの実行と結果の観察
  • Google Colabでのコード実行(1パラメータを変えて再実行する選択演習)
  • AIがうまくいく場面・外す場面の体感(角度・照明・データによる変化)
第14回 AI活用リテラシーとIT応用
  • AIと人間の共同作業
  • AIの特性と限界の理解
  • 批判的思考の重要性
  • 情報の適切な取り扱い
  • データ処理やプログラミングでのAI活用
第15回 コンピュータサイエンスの展望
  • 抽象化、モデル化、計算モデル
  • アルゴリズム
  • 丸め