pythonによる【高等学校情報科 情報Ⅰ・情報Ⅱ】教員研修用教材まとめ

#はじめに

高等学校の新しい学習指導要領の共通教科「情報」では、必修科目として「情報Ⅰ」、選択科目として「情報Ⅱ」が定められております。
これに伴い文部科学省のHPにて、「情報Ⅰ」「情報Ⅱ」の教員研修用教材が公開されています。
この教員研修用教材は高校生でなくても情報技術を学ぶ入門テキストとして優れていると思うのですが、実装例の説明に使われている言語としてpythonとRが多く、「情報Ⅰ」の一部領域に限り他の言語(JavaScript,VBA,ドリトル,swift)の記載が載っており、統一感のない印象を受けました。
様々なスキルの教員の指導用や高校生の学習の為に書かれた教材なので、色々な言語で説明するのは良いとは思うのですが、気になる点がございました。

- 「情報Ⅰ」の「コンピュータとプログラミング」の領域では、python,JavaScript,VBA,ドリトル、swiftの実装例での説明があるが、「情報Ⅱ」では、主にpython,Rで説明されている。
- 高等学校における「情報Ⅰ」「情報Ⅱ」の標準単位数は、それぞれ2単位である。教育の専門家でもないので詳しくはわからないが、この単位数に換算される授業時間でいくつものプログラミング言語も学べるのだろうか？（学習コストの問題）
- 「情報Ⅱ」情報システムとプログラミングの学習内容の発展形として実際にシステム開発をプロセスを学びながらそれなりのアプリケーションを作ろうとなったとき、今までに挙がった言語の中ではpython,JavaScript,VBA,swiftあたりは良さそうだが、ドメイン固有言語のRなどはどうだろうか？
- 「情報Ⅰ」「情報Ⅱ」全体として俯瞰してみたとき、データサイエンス分野に偏っているように思える。
- データサイエンスの項目では深層学習まで踏み込んでいる。深層学習までの内容を説明する際に、pythonとRのどちらが適しているだろうか？
- 高校と大学の接続を考えてRを多くしているのか？大学の先生はデータサイエンスに関してRを使っている人が多いから？pythonだけで解説できない理由がわからない。

上記より「全てpythonで実装・解説したほうがよいのでは？」という結論に至り、主にR→pythonに書き換えを行った記事を書いてきました。

前置きが長くなりましたが、この記事は教員研修用教材内の実装例や解説をpythonベースで学習しようと思ったときに参考になるようにまとめたものです。

他の方が書いてくださった資料や自分で書いた記事などをまぜこぜにしてまとめておりますのでご注意ください。

# 教材
[高等学校情報科（各学科に共通する教科）：文部科学省](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416746.htm "高等学校情報科（各学科に共通する教科）：文部科学省")

# 環境

ipython
[Colaboratory - Google Colab](https://colab.research.google.com/notebooks/welcome.ipynb "Colaboratory - Google Colab")


# 情報Ⅰ

教材：[高等学校情報科「情報Ⅰ」教員研修用教材（本編）：文部科学省](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1416756.htm "高等学校情報科「情報Ⅰ」教員研修用教材（本編）：文部科学省")

## 第1章　情報社会の問題解決

実装例なし

## 第2章 コミュニケーションと情報デザイン

### 学習6　デジタルにするということ

#### （９）ファイルの圧縮 図表13　ハフマン木の作成手順の例

解説：[【高等学校情報科 情報Ⅰ】【高等学校情報科 情報Ⅰ】教員研修用教材：ハフマン法についてのpythonによる実装 - Qiita](https://qiita.com/ereyester/items/b1e074bca5abfdf97ec1 "【高等学校情報科 情報Ⅰ】【高等学校情報科 情報Ⅰ】教員研修用教材：ハフマン法についてのpythonによる実装 - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/6a37027afa322d1b76e72b774aa406e8/jouhou1_2_6_huffman.ipynb

### 学習7～学習10

実装例なし

## 第3章 コンピュータとプログラミング

「第3章 コンピュータとプログラミング」に準拠した内容は、以下のサイトからたくさん引用しております。

[基本的なプログラミング（Python入門）- IPSJ MOOC情報処理学会 公開教材](https://sites.google.com/view/ipsjmooc/list/C3-1 "基本的なプログラミング（Python入門）- IPSJ MOOC情報処理学会 公開教材")

### 学習11　コンピュータの仕組み

#### （２）プログラミングで誤差を体験する

解説＆ソースコード：[プログラムの構造，順次処理，計算 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1p9pSDwnozHR7tYctQuNFsuCTo0fLcDch?usp=sharing プログラムの構造，順次処理，計算 - IPSJ MOOC情報処理学会 公開教材)
→「オーバーフローと誤差」参照

### 学習12　外部装置との接続

####（５）センサの値をもとにLED を制御するプログラム
ブラウザベースで実行できる
https://python.microbit.org/v/2.0
がおすすめです。
教材のソースコードをコピペで実行。

### 学習13　基本的プログラム

#### 順次の例 - 図表7　コード
解説＆ソースコード：[プログラムの構造，順次処理，計算 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1p9pSDwnozHR7tYctQuNFsuCTo0fLcDch?usp=sharing プログラムの構造，順次処理，計算 - IPSJ MOOC情報処理学会 公開教材)
→「順次処理」参照

#### 分岐の例 - 図表10　コード
解説＆ソースコード：[分岐処理 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/19ieYeHeSSmodPkkO2dcWz06_KQxaerCq?usp=sharing "分岐処理 - IPSJ MOOC情報処理学会 公開教材")
→「分岐処理(2分岐)」参照

#### 反復の例 - 図表13　コード
解説＆ソースコード：[反復処理 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1gwUs1jp9U_zQ4xGc3J9k54EQe67D42ZK?usp=sharing "反復処理 - IPSJ MOOC情報処理学会 公開教材")
→「反復処理(for)」参照

#### 分岐と反復を組み合わせた例
解説＆ソースコード：[反復処理 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1gwUs1jp9U_zQ4xGc3J9k54EQe67D42ZK?usp=sharing "反復処理 - IPSJ MOOC情報処理学会 公開教材")
→「反復処理と分岐処理の組み合わせ」参照

### 学習14　応用的プログラム

#### （１）リスト - 図表2　リストを用いたプログラムの例1
解説＆ソースコード：[応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1ONXeLMq3lpmHJN55UGctxq_rAc-zLXWC?usp=sharing "応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材")
→「リスト」参照

#### （１）リスト - 図表3　リストを用いたプログラムの例2
解説＆ソースコード：[応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1ONXeLMq3lpmHJN55UGctxq_rAc-zLXWC?usp=sharing "応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材")
→「リスト」参照

#### （２）乱数 - 図表4　乱数を用いたプログラムの例1
解説＆ソースコード：[応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1ONXeLMq3lpmHJN55UGctxq_rAc-zLXWC?usp=sharing "応用的プログラミング1 - IPSJ MOOC情報処理学会 公開教材")
→「乱数」参照

#### （３）関数 - 図表9　関数で分割したプログラムの例
解説＆ソースコード：[応用的プログラミング2 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/11C6Z_4cX9OW8heGiyGGQJuaqelss_UWs?usp=sharing "応用的プログラミング2 - IPSJ MOOC情報処理学会 公開教材")
→「関数」参照

#### （４）WebAPI - 図表11　WebAPI を用いたプログラムの例
解説＆ソースコード：[応用的プログラミング2 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/11C6Z_4cX9OW8heGiyGGQJuaqelss_UWs?usp=sharing "応用的プログラミング2 - IPSJ MOOC情報処理学会 公開教材")
→「WebAPI」参照

### 学習15　アルゴリズムの比較

解説＆ソースコード：[リストと組み込みの関数 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/108BqyMSO-NvF7lD7WEARG58U7EWq3-5H?usp=sharing "リストと組み込みの関数 - IPSJ MOOC情報処理学会 公開教材")
→「リストと組み込みの関数」参照

#### （１）探索アルゴリズム　線形探索と二分探索 - 図表３　コード
解説＆ソースコード：[基本的な探索  - 線形探索 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1OnJiQZ0Wh0iklECTZcajv4c2D5zLheAK?usp=sharing "基本的な探索  - 線形探索 - IPSJ MOOC情報処理学会 公開教材")
→「線形探索」参照

#### （１）探索アルゴリズム　線形探索と二分探索 - 図表６　コード
解説＆ソースコード：[基本的な探索  - 二分探索 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1gjH_OxYZh_M3g03OWq6zIZIotBxVFrzW?usp=sharing "基本的な探索 - 二分探索 - IPSJ MOOC情報処理学会 公開教材")
→「二分探索」参照

#### （１）探索アルゴリズム　線形探索と二分探索 - 図表７　線形探索と二分探索での最大探索回数の比較
解説＆ソースコード：[基本的な探索 - 線形探索と二分探索の比較 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1NcTe_AmiE8SwYDURPfVOity_HP94yjqp?usp=sharing "基本的な探索 - 線形探索と二分探索の比較 - IPSJ MOOC情報処理学会 公開教材")
→「線形探索と二分探索の比較」参照

#### （２）ソートアルゴリズム　選択ソートとクイックソート - 選択ソート - 図表９　コード
解説＆ソースコード：[基本的なソート - 選択ソート - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1ICcRAzGXZOpjzBJkOMZ2K7IibCtbJMva?usp=sharing "基本的なソート - 選択ソート - IPSJ MOOC情報処理学会 公開教材")
→「選択ソート」参照

#### （２）ソートアルゴリズム　選択ソートとクイックソート - クイックソート - 図表11　コード
解説＆ソースコード：[基本的なソート - クイックソート　 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/12WQ2a8LwU8V_L_05Y9AVt8iGMRAPI8xE?usp=sharing	 "基本的なソート - クイックソート　 - IPSJ MOOC情報処理学会 公開教材")
→「クイックソートの実装例」参照

#### （３）選択ソートとクイックソートの比較
解説＆ソースコード：[基本的なソート - 選択ソートとクイックソートの比較　 - IPSJ MOOC情報処理学会 公開教材](https://colab.research.google.com/drive/1RjOj9UmdDw4lY-VAzn9vNnyJMKiDbNZE?usp=sharing "基本的なソート - 選択ソートとクイックソートの比較　 - IPSJ MOOC情報処理学会 公開教材")
→「4-2. 基本的なソート - 選択ソートとクイックソートの比較」参照

### 学習16　確定モデルと確率モデル

教材記載の実装例(python)を参照 (TBD)

### 学習17　自然現象のモデル化とシミュレーション

教材記載の実装例(python)を参照 (TBD)

## 第4章 情報通信ネットワークとデータの活用

### 学習18　情報通信ネットワークの仕組み

実装例なし

### 学習19　情報通信ネットワークの構築

実装例なし

### 学習20　情報システムが提供するサービス

実装例なし

### 学習21　さまざまな形式のデータとその表現形式

教材記載の実装例(python)を参照 (TBD)

### 学習22　量的データの分析

教材記載の実装例(Excel)を参照 (TBD)

### 学習23　質的データの分析

解説：[【高等学校情報科 情報Ⅰ】教員研修用教材：MeCabによる形態素解析とWordCloudの作り方（python） - Qiita](https://qiita.com/ereyester/items/7c220a49c15073809c33 "【高等学校情報科 情報Ⅰ】教員研修用教材：MeCabによる形態素解析とWordCloudの作り方（python） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/5f1a93311f434b08f1e57fda4fb5398f/jouhou1_4_23.ipynb

### 学習24　データの形式と可視化

解説：[【高等学校情報科 情報Ⅰ】教員研修用教材：データの形式と可視化（python） - Qiita](https://qiita.com/ereyester/items/cbebd3d2316e06db581c "【高等学校情報科 情報Ⅰ】教員研修用教材：データの形式と可視化（python） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/68b781bd6668005c157b300c5bf22905/jouhou1_4_24.ipynb

#情報Ⅱ

教材：[高等学校情報科「情報Ⅱ」教員研修用教材(本編)：文部科学省](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/mext_00742.html "高等学校情報科「情報Ⅱ」教員研修用教材(本編)：文部科学省")

## 第1章 情報社会の進展と情報技術

実装例なし

## 第2章 コミュニケーションとコンテンツ

実装例なし

## 第3章 情報とデータサイエンス

### 学習11 データと関係データベース

教材記載の実装例(python)を参照

### 学習12 大量のデータの収集と整理・整形

教材記載の実装例(python)を参照

### 学習13 重回帰分析とモデルの決定

解説：[【高等学校情報科 情報Ⅱ】教員研修用教材：重回帰分析とモデルの決定（python） - Qiita](https://qiita.com/ereyester/items/59110aabab9983d096cc "【高等学校情報科 情報Ⅱ】教員研修用教材：重回帰分析とモデルの決定（python） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/5c6e5a9b8aa55ba826c7c96a4daf7814/jouhou2_3_13_python.ipynb

### 学習14 主成分分析による次元削減

解説：[pythonで主成分分析(Scikit-learn版,pandas&numpy版)（【高等学校情報科　情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/b78b22a76a8f50006880 "pythonで主成分分析(Scikit-learn版,pandas&numpy版)（【高等学校情報科　情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/3c2173eb61cbcd64b61f23b3d4d6480c/jouhou2_3_14.ipynb

### 学習15 分類による予測

#### 2 決定木による二値分類
解説：[pythonによる決定木による二値分類（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/6db7065d72d0f5f551e0 "pythonによる決定木による二値分類（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/dfb4fd6fb3e58c5d0539866f7e2622b4/jouhou2_3_15.ipynb

#### 3 k-近傍法による分類
解説：[pythonによるk-近傍法(kNN)による分類（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/7b3c42bc6051482de96e "pythonによるk-近傍法(kNN)による分類（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/01237a69f6b8ae73c55ccca33c931ade/jouhou2_3_15_2.ipynb

### 学習16 クラスタリングによる分類

教材記載の実装例(python)を参照

### 学習17 ニューラルネットワークとその仕組み

教材記載の実装例(python)を参照

### 学習18 テキストマイニングと画像認識

#### 2 MeCabを利用したテキストマイニング
解説：[pythonによるword2vec等によるテキストマイニング（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/2b87d7aa191e2c5a923d "pythonによるword2vec等によるテキストマイニング（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/101ae0da17e747b701b67fe9fe137b84/jouhou2_3_18.ipynb

#### 3 TinyYOLOを利用した物体検出
解説：[YOLOを利用した物体検出（python）（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/4cd0dc3a449369e7f1f4 "YOLOを利用した物体検出（python）（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/46a25e70c866c581320a66a77153aa2d/jouhou2_3_18_2.ipynb

## 第4章 情報システムとプログラミング

### 学習19～学習22

実装例なし

### 学習23 分割したシステムの制作とテスト
解説＆ソースコード：[情報II教員研修資料4章.ipynb](https://colab.research.google.com/drive/1r26wcPi3jcVfe0BhzbyTj0-oGhi8AgBC 情報II教員研修資料4章.ipynb")
→「学習２３　分割したシステムの制作とテスト」参照

### 学習24 分割したシステムの結合とテスト
解説＆ソースコード：[情報II教員研修資料4章.ipynb](https://colab.research.google.com/drive/1r26wcPi3jcVfe0BhzbyTj0-oGhi8AgBC 情報II教員研修資料4章.ipynb")
→「学習２４　分割したシステムの結合とテスト」参照

### 学習25 情報システムの評価・改善
解説＆ソースコード：[情報II教員研修資料4章.ipynb](https://colab.research.google.com/drive/1r26wcPi3jcVfe0BhzbyTj0-oGhi8AgBC 情報II教員研修資料4章.ipynb")
→「学習２５　情報システムの評価・改善」参照

## 第5章 情報と情報技術を活用した問題発見・解決の探究

### 活動例１ 情報社会と情報技術

実装例なし

### 活動例２ コミュニケーションのための情報技術の活用

実装例なし

### 活動例３ データを活用するための情報技術の活用

解説：[k-means法を使用したクラスタリングによるデータ分析（python）（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita](https://qiita.com/ereyester/items/bc251ea3c329a38b5b82 "k-means法を使用したクラスタリングによるデータ分析（python）（【高等学校情報科 情報Ⅱ】教員研修用教材） - Qiita")
ソースコード：https://colab.research.google.com/gist/ereyester/ce9370e3022f05f4d7548a8ccaed33cc/jouhou2_5_3.ipynb

### 活動例４ コンピュータや情報システムの基本的な仕組みと活用

実装例なし

# コメント

 (TBD)の個所はIPSJ MOOC情報処理学会様などで更新がありそうな箇所です。