「コンピュータサイエンス」サポートページ
授業担当教員:金子邦彦(情報工学科), サポートページ:https://www.kkaneko.jp/cs/index.html, 場所:4号館3階PC1室(04201室), 福山大学キャンパスマップ:https://www.fukuyama-u.ac.jp/about/access/, 時間:金曜日2時限
お知らせ
受講生が各自のノートパソコンを持参し、授業中に、学修のために利用することを歓迎しています。ただし、演習は、パソコン教室でのパソコンを利用するため、ノートパソコンの持参が必要というわけではありません。
コンピューターサイエンス・ガイダンス [動画],
[パワーポイント] (Gemini, Vrew を用いて作成)
今年度(2026年度)の資料について
第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], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習①:文字コードを観察する前提
- ASCII:1文字を7ビットで表現する文字コード。128種類の文字(英数字・記号・制御文字)を表す。
- 16進数:0〜9 と A〜F を使う表記。A〜F は 10〜15 に対応する。
0x:先頭に付けると、その数値が16進数であることを示す目印。- ord 関数:文字を文字コード(整数)に変換する。
- hex 関数:整数を16進数表記の文字列に変換する。
手順
ステップ 1:1文字の文字コードを表示する
- ブラウザで次のページを開く。https://trinket.io/python/595c091dd9
- 表示されているプログラムを確認する。
c = 'A' print(hex(ord(c))) - 実行ボタン(▶)を押す。
- 結果欄に
0x41と表示されることを確認する。
ステップ 2:入力した文字列を文字コードへ変換する
- ブラウザで次のページを開く。https://trinket.io/python/17fb2ed2d5
- 実行ボタンを押す。
- 結果欄を一度クリックしてから、文字列(例:
abcde)を入力し、Enter キーを押す。 - 各文字の文字コードが1行ずつ16進数で表示されることを確認する。
ヒント
0x41のうち0xは16進数を示す目印。値そのものは41(16進数)。- 資料 5-5 の ASCII 文字コード表で
Aを探すと、列が4、行が1の位置にある。これが 16進数41に対応し、プログラムの出力0x41と一致する。 - 入力時に文字が入らないときは、結果欄を一度クリックしてから入力する。
- 大文字の
Aと小文字のaは別の文字コードになる。
考察ポイント
'B'を入力したときの出力を表から予想し、実行して確かめる。資料 ('A'→ 01000001 → 16進数 41、'B'→ 01000010 → 16進数 42)と対応がとれるはず。- 大文字と小文字を続けて入力(例:
Aa)し、文字コードの違いを観察する。 - 文字列
abcdeを入力すると、5行の文字コードが出力される。これは 文字列が1文字ずつ文字コードに変換されること を示している。
演習②:論理演算(AND、OR)を観察する
前提
- 論理積 AND:両方が1のときのみ結果が1となる演算。
- 論理和 OR:少なくとも片方が1のとき結果が1となる演算。
- 真偽値:Python では
True(真)とFalse(偽)の2つの値を扱う。ここでは、1がTrue、0がFalseに対応する。
手順
ステップ 1:プログラムを実行する
- ブラウザで次のページを開く。https://trinket.io/python/7f31113af9
- 表示されているプログラムを確認する。
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)
ステップ 2:4通りの組み合わせを確かめる
a と b の値を次の4通りに書き換え、それぞれ実行ボタンを押して結果を確認する。
a = True、b = Trueのときa = True、b = Falseのときa = False、b = Trueのときa = False、b = Falseのとき
ヒント
- Python の真偽値は 先頭が大文字 で
True/Falseと書く(trueやTRUEではエラーになる)。 a = ...の右辺を書き換えたあとは、必ず実行ボタンを押し直す。- 資料 の AND と OR の表(2行2列)と比べる。
考察ポイント
a = True、b = Trueのときのa or bの結果について、資料 「論理和と『選択』の違い」(焼き芋大会の例)と関係づけて、両方がTrueのときも OR の結果がTrueになることを確認する。
演習③:論理演算で1桁の足し算を作る
前提
- 1桁の二進数同士の足し算の結果は2ビット(上位ビットと下位ビット)になる。
- 上位ビット =
x AND y - 下位ビット =
(x OR y) AND NOT (x AND y) - Python の論理演算子に
not(否定 NOT に対応)が加わる。notは値を反転する。
手順
ステップ 1:プログラムを書き換えて実行する
- ブラウザで演習②と同じページを開く。https://trinket.io/python/7f31113af9
- プログラムを次のコードに書き換える。
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 下位ビット = False
ステップ 2:4通りの組み合わせを確かめる
a と 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], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
このガイドは,ブラウザだけで Python を実行できる学習サイト Trinket を用いた演習である.各演習は,trinket のページを開いて実行結果を確認することが基本である.Trinket は,画面左で編集,画面右の「Result」で結果を確認し,「Run」で実行,「STOP」で停止する. ブラウザだけで Python を実行できる学習サイト Trinket を用いた演習である.各演習は,trinket のページを開いて実行結果を確認することが基本である.Trinket は,画面左で編集,画面右の「Result」で結果を確認し,「Run」で実行,「STOP」で停止する. 変数に値を代入し,print() と + による文字列連結で,変数の内容を画面に表示する演習である. 使用する trinket のページ:https://trinket.io/python/abafd851480a 手順 ヒント 考察ポイント 数値を変数に代入し,それらを使って計算を行い,結果を print() で表示する演習である. 使用する trinket のページ:https://trinket.io/python/9870e86d63b9 手順 ヒント 考察ポイント 既存の変数に新しい値を代入して更新(再代入)し,変数の値が変更できることを確認する演習である. 使用する trinket のページ:https://trinket.io/python/b869619b0874 手順 ヒント 考察ポイント input() を使ってユーザーからの入力を受け取り,変数に保存して利用する演習である. 使用する trinket のページ:https://trinket.io/python/45f0bed92360 手順 ヒント 考察ポイント datetime ライブラリを使い,コンピュータ(オペレーティングシステム)のタイマーを読み取って,今の日時を表示する演習である. 使用する trinket のページ:https://trinket.io/python/2b804ab19a 手順 ヒント 考察ポイント math ライブラリの sqrt(平方根)を使い,面積が 7 の正方形の一辺の長さを求める演習である. 使用する trinket のページ:https://trinket.io/python/597e5771ff 手順 ヒント 考察ポイント math ライブラリの円周率(math.pi)を使い,半径 3 の円の面積を求める演習である. 使用する trinket のページ:https://trinket.io/python/4e3559f879 手順 ヒント 考察ポイント math ライブラリの三角関数(math.sin)を使い,2辺の長さが 4 と 6,その間の角度が 60 度の三角形の面積 (1/2) × 4 × 6 × sin(60) を求める演習である. 使用する trinket のページ:https://trinket.io/python/bdcce27488 手順 ヒント 考察ポイント タートル(亀)が線を引きながら進む様子を観察し,さらにプログラムを書き換えて結果が変わることを確認する演習である. 使用する trinket のページ:https://trinket.io/python/f29bfe71cd 手順 ヒント 考察ポイント 前進(forward)と回転(left)を繰り返して,正六角形を描く演習である. 使用する trinket のページ:https://trinket.io/python/ddb861147133 手順 ヒント 考察ポイント 星形を描くプログラムを実行し,さらに自分でデザインした図形を描くことに挑戦する,自己研鑽の演習である. 使用する trinket のページ:https://trinket.io/python/5366def2f4 手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
演習オンラインガイド
演習① 変数と代入,+を用いた文字列連結
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 がこれにあたる.
演習⑨ タートルグラフィックス(線を引く・書き換え)
t.goto(100,0) を t.goto(200,0) に書き換える.
import turtle でタートルグラフィックスの機能を取り込み,t = turtle.Turtle() でタートルの実体を作って t に結びつけている.t.goto(x, y) は,現在地から座標 (x, y) まで線を引いて移動するメソッドである.
演習⑩ タートルグラフィックスで六角形
t.forward(50) は,50 ピクセル前進するメソッドである.t.left(60) は,左回りに 60 度回転するメソッドである.
演習⑪ タートルグラフィックスで星形(自由制作)
t.goto(...) の座標の値を自由に書き換える.
t.goto(x, y) で複数の座標へ順番に移動しながら線を引き,最後に始点へ戻って図形を完成させている.
第9回. Python プログラミング基礎2⃣
ライブラリには、標準ライブラリと外部ライブラリがある。外部ライブラリの使用にはインストールが必要。そして、ライブラリ(標準も外部も)の使用には、プログラム内でのインポートが必要。クラスは同じ種類のオブジェクトの「設計図」のようなものである。条件分岐はifやelseで処理を分ける。リストは複数の要素を順序付けて保持する。リストのインデックスは0から始まる。・繰り返しはforで実現でき、指定した回数だけ処理を反復する。
スライド資料
[PDF], [パワーポイント] (同じ内容, クリックしてダウンロード)
動画
このガイドは,ブラウザだけで Python を実行できる学習サイト Trinket を用いた演習である.各演習は,trinket のページを開いて実行結果を確認することが基本である.Trinket は,画面左で編集,画面右の「Result」で結果を確認し,「Run」で実行,「STOP」で停止する. 年齢(age)の値によって,出力が 500 か 1800 に分かれるプログラムを実行し,書き替えて動作を確認する. 操作手順 ヒント 考察ポイント weight の値が 100 以下なら 操作手順 ヒント 考察ポイント for による繰り返しで, 操作手順 ヒント 考察ポイント 各月の日数をまとめたリストから,月の番号を使って日数を取り出すプログラムを実行し,書き替えて確認する(うるう年は考えない). 操作手順 ヒント 考察ポイント Matplotlib ライブラリを使い,x 座標と y 座標のリストから散布図を描くプログラムを実行する. 操作手順 ヒント 考察ポイント NumPy で 0 から 10 までの値を作り,対応する sin の値を Matplotlib でグラフ化するプログラムを実行する. 操作手順 ヒント 考察ポイント random ライブラリで生成した乱数を使って座標を作り,散布図として表示するプログラムを実行する. 操作手順 ヒント 考察ポイント タートル(亀)に命令(メソッド)を出して線を引き,for による繰り返しで図形を描くプログラムを実行する. 操作手順 ヒント 考察ポイント 色のリストとタートルのメソッドを組み合わせ,繰り返しのたびに色を変えながら円を描くプログラムを実行する. 操作手順 ヒント 考察ポイント
[動画]
[演習の詳細を表示するには、この行をクリックしてください]
演習について
Trinket の基本操作
x = 200 が ('x =', 200) のように表示されることがある.これは表示の違いであり,間違いではない.演習① 条件分岐 ― 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] をプロットするプログラムが用意されている.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) をプロットするプログラムが用意されている.
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 座標を作って散布図にするプログラムが用意されている.
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は、式の先頭に半角「=」を付ける。Exlceの特徴としては、再計算・強調表示・並べ替え・グラフ作成などの多様な機能にある。
スライド資料
[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プログラミング応用
休校、補講となった回です 。演習のためにURL,ヒントなどを見たい場合は、下の「[演習の詳細を表示するには、この行をクリックしてください]】をクリックして展開してください。
プログラミングでの抽象化は、共通点のある処理を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 標準ライブラリの まず,trinket のページが正しく表示され,実行できることを確認します. 操作手順 ヒント 考察ポイント 画面の上端から円が現れ,まっすぐ下へ落ちていく動きを作ります. 操作手順 ヒント 考察ポイント 下端に置いた四角いプレイヤーと,落ちてくる「三角形」との水平距離を判定し,近ければ得点する仕組みを作ります. 操作手順 ヒント 考察ポイント 「三角形」が落ちてくる位置を毎回ランダムに変え,ゲームにアクション性を持たせます. 操作手順 ヒント 考察ポイント 左右キーでプレイヤーを動かせるようにし,「三角形」に合わせて受け止められるようにします. 操作手順 ヒント 考察ポイント プレイヤーが画面の外へ出ないように移動範囲を制限し,ゲームを完成させます. 操作手順 ヒント 考察ポイント
[演習の詳細を表示するには、この行をクリックしてください]
演習の概要
turtle(タートルグラフィックス)を用いて,落下物を受け止めて得点する「落下物キャッチ(受け止め)ゲーム」です.完成形は,左右キーで動かすプレイヤーが,上から落ちてくる落下物を受け止めて得点するゲームです.演習① trinket の動作確認
演習② 落下の再現
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本の時間軸に並べて描画する演習である.
操作手順
- ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要).
- 最初のコードセルの中身をすべて削除する.
- 下の「貼り付けるコード」をすべてコピーし,空にしたコードセルに貼り付ける.
- 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる).
- セルの下にグラフ(画像)が表示されることを確認する.
貼り付けるコード
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()
ヒント
- 実線が実績(1〜24か月目/過去2年),赤い破線が予測(25〜36か月目/来年)であり,1本の軸に並べて表示される.
考察ポイント
- 赤い破線(予測)が,過去2年の山と谷の形をそのまま引き継いでいることを確認する.コンピューターが季節パターンを学習し,来年も同じ形になると結論づけたと読み取れる.
- 人間がルールを教えず,コンピューターが24個の数値から自力で季節パターン(夏の山が約111,冬の谷が約56)を見つけ出した点に注目する.
- 出力を図で確かめることは重要である.
演習② データの読み込みと欠損の補完
生活習慣アンケート12人分(1週間の運動回数・平日の睡眠時間)を読み込み,欠損数を確認したうえで,睡眠時間の未回答を平均値で補完する演習である.12人のうち2人分の睡眠時間が未回答(欠損)である.
操作手順
- ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要).
- 最初のコードセルの中身をすべて削除する.
- 下の「貼り付けるコード」をすべてコピーし,空にしたコードセルに貼り付ける.
- 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる).
- セルの下に
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:値が無いことを表す特別な表記)と表示される. - 睡眠時間の未回答2件は,有効な10人分の平均(6.4時間)で埋まる.
考察ポイント
- 「補完前の未回答数」の表示で,睡眠時間の列に未回答が2件あることを確認する.
fillnaによって睡眠時間の未回答が平均値(6.4時間)に置き換わり,全員分の値がそろうことを確認する.
演習③ 分類による判定と決定境界の可視化
学習時間とテスト点数から「講習会Aの受講/未受講」を判定する分類を体験する演習である.まず実データの散布図を描き,次に決定木(機械学習の一手法)で学習して,平面全体を「受講と判定される領域」と「未受講と判定される領域」に塗り分けて示す.
操作手順
- ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要).
- 最初のコードセルの中身をすべて削除する.
- 下の「貼り付けるコード」をすべてコピーし,空にしたコードセルに貼り付ける.
- 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる).
- セルの下に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()
ヒント
- 1枚目の図は,12人の実データ(赤が受講,青が未受講)をそのまま散布図で表示したものである.
- 2枚目は,平面を300×300の格子点で埋め,各点をコンピューターに判定させて背景を塗り分けたものである.薄い赤が受講と判定される領域,薄い青が未受講と判定される領域であり,その上に元の12人の点を重ねて表示している.
考察ポイント
- 背景の色分けは,未知のデータ(任意の学習時間・テスト点数)を与えたときに,コンピューターがどちらと判定するかを表していることを確認する.
- 学習時間が長く点数が高い側が受講と判定される領域,短く低い側が未受講と判定される領域になっているかを確認する.
- 数値の列だけでは分からない「何を根拠にどう分けたか」が図で見えることに注目する.
演習④ クラスタリング(前処理と教師なし学習)
演習②と同じ生活習慣アンケートを素材に,欠損を補完してから,似た回答の人同士を自動で2グループに分ける演習である.
- 欠損があるため前処理(生データを分析可能な形に整える作業)が必要である.多くのモデルは欠損(NaN)を受け付けずエラーになるためである.
- 欠損への対処には2つの方針がある.欠損を含む行を取り除く「削除」と,欠損箇所を値で埋める「補完」である.ここでは最も簡単な「列の平均値で埋める」補完を使う.
- 演習③との違いは「正解」がない点である(教師なし学習=クラスタリング).演習③は受講/未受講の答えを与えて学習させたが,今回は答えを与えず「似ている人同士を自動で2グループに分けて」と任せる.
- どんなグループになるかは結論が出るまで人間にも分からない.だからこそ結果の可視化が欠かせない.
操作手順
- ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要).
- 最初のコードセルの中身をすべて削除する.
- 下の「貼り付けるコード」をすべてコピーし,空にしたコードセルに貼り付ける.
- 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる).
- セルの下に
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()
ヒント
- モデルは欠損(NaN)があるとエラーになるため,
fillnaで平均値を補完してから学習させる. n_clusters=2は「2グループに分けて」という指示である.- 「補完前の未回答数」と,補完後の
print(df)の出力を見比べると,欠損がどう埋まったか確認できる.
考察ポイント
- 散布図で青(Group 0)と赤(Group 1)のグループの分かれ方を確認する.運動が多く睡眠も長い側と,少なく短い側のような,意味のある分離になっているかを見る.
- 「グループごとの平均」で,2グループの運動回数・睡眠時間の平均の差を読み取る.
- 自動でグループができる点に注目する.結果は,図にして人間が確認・解釈することが欠かせない.
演習⑤ ツールによるアプローチの比較
同じ「月別売上の折れ線グラフ」を,(a) 自分でコードを組み立てる方法と,(b) 対話型AIに作成を任せる方法の2通りで作り,進め方を比較する演習である.
操作手順(a)自分でコードを組み立てる場合(AIの補助を借りることもある)
- ブラウザで https://pythononline.dev/ を開く(登録・ログイン不要).
- 最初のコードセルの中身をすべて削除する.
- 下の「貼り付けるコード」の (a) をすべてコピーし,空にしたコードセルに貼り付ける.
- 画面の「Run All」ボタンをクリックする(初回はライブラリの自動読み込みで少し時間がかかる).
- セルの下にグラフ(画像)が表示されることを確認する.
操作手順(b)対話型AIに作成を任せる場合
- 対話型AI(例:Microsoft Copilot,https://portal.office.com にアクセス。大学のアカウントでサインイン)へ指示(プロンプト)を与える
- グラフを確認する.
貼り付けるコード(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] の
折れ線グラフを表示してください。
ヒント
- (a) はグラフの描き方(
plt.plotなど)を自分で記述する方法である.(b) は文章で指示するだけでコードが生成される方法である. - (b) で生成されたコードも,実行・確認は (a) と同じく pythononline.dev で行う.
考察ポイント
- (a) と (b) で,同じグラフに至るまでの手間や,正確性を考察する.
- (a) は描き方を自分で把握しながら進めるものである.(b) は素早く作成できる.ただし (b) の場合でも,出力されたグラフを自分の目で確かめてから使う姿勢は変わらない.
スライド資料と演習手順の資料は,https://www.kkaneko.jp/cs/index.html で,各回の授業開始時刻までに掲載します。
セレッソのコースニュースで授業に関するお知らせを配信します。また,小テスト機能で課題を出します。あわせて確認してください。
本科目の資料は,以下の2種類で構成されています。
- スライド資料:授業中にプロジェクタで説明するスライド(パワーポイント,PDF同じ内容)
- 演習手順の資料:演習で使用する
昨年度(2025年度)の資料について(クリックにより中身が表示されます)
昨年度のスライド資料を以下に掲載しています。予習などでの参考にしてください。ただし,今年度とは内容や順序が異なる場合があります。今年度の最新資料はこちらのページで随時公開していきます。
授業計画(クリックにより中身が表示されます)
詳しくは「シラバス」を参照してください。
最新技術の反映、パソコン教室のパソコンを用いた演習の充実などにより、一部内容が変更になる場合があります。
| 回 | 内容 |
|---|---|
| 第1回 | コンピュータサイエンス入門
|
| 第2回 | 人工知能の仕組み、責任ある活用
|
| 第3回 | デジタル画像
|
| 第4回 | 3次元コンピュータグラフィックス
|
| 第5回 | コンピュータの構成要素とデータ処理の仕組み
|
| 第6回 | 情報倫理とセキュリティ
|
| 第7回 | プログラミング入門
|
| 第8回 | Python プログラミング基礎①
|
| 第9回 | Python プログラミング基礎②
|
| 第10回 | データサイエンス
|
| 第11回 | Pythonプログラミング応用
|
| 第12回 | プログラミングとデータサイエンスとAIの統合
|
| 第13回 | 人工知能体験
|
| 第14回 | AI活用リテラシーとIT応用
|
| 第15回 | コンピュータサイエンスの展望
|
[動画]
[動画]