├── .gitignore ├── images ├── all-1.png ├── fig1-1.png ├── fig1-2.png ├── fig1-3.png ├── fig2-1.png ├── fig2-2.png ├── fig2-3.png ├── fig3-1.png ├── hyoshi.png ├── chap3-1.png ├── chap4-1.png └── chap4-2.png ├── refs ├── index.md ├── faqs.md ├── errors.md └── notebooks.md ├── notebooks ├── ch01_02.ipynb ├── ch01_10_ans.ipynb ├── ch01_03_ans.ipynb ├── ch01_04_ans.ipynb ├── ch01_06_ans.ipynb ├── ch01_07_ans.ipynb ├── ch01_05_ans.ipynb ├── ch01_10.ipynb ├── ch01_08_ans.ipynb ├── ch02_02_ans.ipynb ├── ch01_09_ans.ipynb ├── ch01_06.ipynb ├── ch01_03.ipynb ├── ch02_01.ipynb ├── ch01_05.ipynb ├── ch01_09.ipynb ├── ch01_04.ipynb ├── ch01_07.ipynb ├── ch02_03.ipynb ├── ch03_05.ipynb ├── ch03_02.ipynb ├── ch01_08.ipynb ├── ch03_03.ipynb ├── ch03_04.ipynb ├── ch03_07.ipynb └── ch02_02.ipynb ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | local 3 | -------------------------------------------------------------------------------- /images/all-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/all-1.png -------------------------------------------------------------------------------- /images/fig1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig1-1.png -------------------------------------------------------------------------------- /images/fig1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig1-2.png -------------------------------------------------------------------------------- /images/fig1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig1-3.png -------------------------------------------------------------------------------- /images/fig2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig2-1.png -------------------------------------------------------------------------------- /images/fig2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig2-2.png -------------------------------------------------------------------------------- /images/fig2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig2-3.png -------------------------------------------------------------------------------- /images/fig3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/fig3-1.png -------------------------------------------------------------------------------- /images/hyoshi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/hyoshi.png -------------------------------------------------------------------------------- /images/chap3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/chap3-1.png -------------------------------------------------------------------------------- /images/chap4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/chap4-1.png -------------------------------------------------------------------------------- /images/chap4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/makaishi2/data_analysis_book_info/main/images/chap4-2.png -------------------------------------------------------------------------------- /refs/index.md: -------------------------------------------------------------------------------- 1 | ### 1章 Pythonプログラミング入門 2 | 3 | #### 1.1 Pythonとその実行環境 4 | #### 1.2 Google Colabの基本操作 5 | #### 1.3 変数 6 | #### 1.4 データ型と算術演算 7 | #### 1.5 条件分岐 8 | #### 1.6 関数呼び出しとメソッド呼び出し 9 | #### 1.7 リストとループ処理 10 | #### 1.8 タプルと集合、辞書 11 | #### 1.9 関数定義 12 | #### 1.10 やや高度なループ処理 13 | 14 | ### 2章 データ分析ライブラリ入門編 15 | #### 2.1 ライブラリ入門 16 | #### 2.2 NumPy入門 17 | #### 2.3 Matplotlib入門 18 | #### 2.4 pandas入門 19 | 20 | ### 3章 データ分析ライブラリ中級編 21 | #### 3.1 データ分析の主要タスク 22 | #### 3.2 データ読み込み 23 | #### 3.3 データ確認・加工(前処理) 24 | #### 3.4 データ集計 25 | #### 3.5 データ可視化 26 | #### 3.6 データ検索・結合 27 | #### 3.7 日付データの処理 28 | 29 | ### 4章 データ分析実践編 30 | #### 4.1 タイタニック・データセット 31 | #### 4.2 データ読み込み 32 | #### 4.3 データ確認・加工(前処理) 33 | #### 4.4 データ集計 34 | #### 4.5 データ可視化 35 | #### 4.6 仮説立案・検証 36 | #### 4.7 深掘り分析 37 | 38 | [メインページに戻る](../README.md) 39 | 40 | -------------------------------------------------------------------------------- /refs/faqs.md: -------------------------------------------------------------------------------- 1 | ### FAQ 2 | 3 | 4 | |章|ページ |質問       |回答|最終更新日| 5 | |---|---|---|---|---| 6 | |(全体)|(全体)|ローカルPCのAnaconda環境で実習を動かすことはできますか|プログラミング経験のない初心者でも実習を始めることができるよう、実習はGoogle Colabを前提とした詳細手順を書籍で記載しています。ある程度プログラミングやLinuxに習熟した方は、ローカルで動かすことも可能ですが、下記の事象が想定され、これらの事象に自力で対応できることが条件となります。

1. サポートページのリンクはGoogle Colabと連携して動かすことが前提のURLです。ローカルで動かす場合は、GithubのUIを用いてzip形式でリポジトリ全体をダウンロードするか、git cloneコマンドでローカルにリポジトリをPULLするかしてください。

2. 一部のNotebookでは、Colab導入先の仮想OSであるLinuxを前提としたコマンドが実行できることが必要です。具体的に利用しているコマンドはtail, wget, unzip, headなど。特にWindows PCで動かす場合は、それぞれのコマンドの目的を理解し、Windowsでどのようにしたら代替可能かを考える必要があります。

3. ごく一部ですが、書籍内でGoogle Colab固有のUI機能の解説があります(2.4節など)そこをLocal PCのAnaconda上Jupyter Notebookの場合の話に読み替える必要があります。

4. 不足しているライブラリがあった場合、自力でライブラリの追加導入が必要です。このことに伴って、ライブラリ間のバージョン不整合の問題が発生する可能性があります。|2022-11-29| 7 | |3章|p.277以降|コード3-5-2 などのグラフで方眼表示がされていますが、どうやって描画したいのですすか|共通処理のセルで``plt.rcParams['axes.grid'] = True``というコードがあります。この設定により、方眼表示がされるようになります。|2023-02-25| 8 | 9 | 10 | 11 | [メインページに戻る](../README.md) 12 | -------------------------------------------------------------------------------- /notebooks/ch01_02.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "g480zMgEVOZt" 7 | }, 8 | "source": [ 9 | "## 1.2 階乗計算" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": { 16 | "id": "QHGz2T8uVId7" 17 | }, 18 | "outputs": [], 19 | "source": [ 20 | "# 階乗計算\n", 21 | "\n", 22 | "# ループカウントNの定義\n", 23 | "N = 10\n", 24 | "\n", 25 | "# 階乗結果の保存先\n", 26 | "fact = 1\n", 27 | "\n", 28 | "# ループ処理\n", 29 | "for i in range(1, N + 1):\n", 30 | "\n", 31 | " # 階乗計算\n", 32 | " fact *= i\n", 33 | "\n", 34 | " # 結果表示\n", 35 | " print(i, 'の階乗は', fact)\n" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "id": "pULSj9kZWNmp" 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "" 47 | ] 48 | } 49 | ], 50 | "metadata": { 51 | "colab": { 52 | "collapsed_sections": [], 53 | "name": "ch01_02.ipynb", 54 | "provenance": [], 55 | "toc_visible": true 56 | }, 57 | "kernelspec": { 58 | "display_name": "Python 3", 59 | "name": "python3" 60 | }, 61 | "language_info": { 62 | "name": "python" 63 | } 64 | }, 65 | "nbformat": 4, 66 | "nbformat_minor": 0 67 | } -------------------------------------------------------------------------------- /notebooks/ch01_10_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "bGhO03r02LFF" 7 | }, 8 | "source": [ 9 | "## 1.10 やや高度なループ処理" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "lB2SbrYL2TqT" 16 | }, 17 | "source": [ 18 | "### 演習課題\n", 19 | "cabins = ['B5', 'C22', 'G6']を処理対象として、各要素の文字列の長さを要素にした新しいリストlengthsを作って下さい。" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 1, 25 | "metadata": { 26 | "colab": { 27 | "base_uri": "https://localhost:8080/" 28 | }, 29 | "id": "7Fh0Q-4U2ALd", 30 | "outputId": "0a161835-2d03-4bfc-f5b1-0e44c57511bd" 31 | }, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "[2, 3, 2]\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "# 処理対象のリスト\n", 43 | "cabins = ['B5', 'C22', 'G6']\n", 44 | "\n", 45 | "# 内包表記を用いて新しいリストlengthsを作る\n", 46 | "lengths = [len(x) for x in cabins]\n", 47 | "\n", 48 | "# 結果の確認\n", 49 | "print(lengths)\n" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "metadata": { 56 | "id": "P7txKMni2eWL" 57 | }, 58 | "outputs": [], 59 | "source": [] 60 | } 61 | ], 62 | "metadata": { 63 | "colab": { 64 | "collapsed_sections": [], 65 | "name": "ch01_12_ans.ipynb", 66 | "provenance": [] 67 | }, 68 | "kernelspec": { 69 | "display_name": "Python 3", 70 | "name": "python3" 71 | }, 72 | "language_info": { 73 | "name": "python" 74 | } 75 | }, 76 | "nbformat": 4, 77 | "nbformat_minor": 0 78 | } 79 | -------------------------------------------------------------------------------- /notebooks/ch01_03_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "rZAoI8mrA8Zr" 7 | }, 8 | "source": [ 9 | "## 1.3 変数" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "3GyhSJotBq4s" 16 | }, 17 | "source": [ 18 | "### 問題\n", 19 | " 3つの変数a, b, cを使います。 \n", 20 | " 変数cの値は、変数aと変数bにより、「c = b - a」の計算により求められる関係性を持っているものとします。 \n", 21 | " 今、変数aの値が3, 変数bの値が10であるとします。この時、変数cの値を変数a, bを経由して求め、結果をprint関数で表示して下さい。\n" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": { 28 | "colab": { 29 | "base_uri": "https://localhost:8080/" 30 | }, 31 | "id": "aLR00pu3aWHm", 32 | "outputId": "4b90b941-dcd6-4b64-b179-80d9dee29e26" 33 | }, 34 | "outputs": [ 35 | { 36 | "name": "stdout", 37 | "output_type": "stream", 38 | "text": [ 39 | "3\n", 40 | "10\n", 41 | "7\n" 42 | ] 43 | } 44 | ], 45 | "source": [ 46 | "# 変数aの値を「代入」により設定します\n", 47 | "# 1.3.2項 コード1-3-1参照\n", 48 | "a = 3\n", 49 | "\n", 50 | "# 変数bの値を「代入」により設定します\n", 51 | "b = 10\n", 52 | "\n", 53 | "# 変数aと変数bを用いて変数cの値を計算し、代入します\n", 54 | "# 1.3.4項 コード1-3-5参照\n", 55 | "c = b - a\n", 56 | "\n", 57 | "# print関数を用いて、変数a, 変数b, 変数cの値を順番に表示します\n", 58 | "# 1.3.5項 コード1-3-11参照\n", 59 | "print(a)\n", 60 | "print(b)\n", 61 | "print(c)\n" 62 | ] 63 | } 64 | ], 65 | "metadata": { 66 | "colab": { 67 | "collapsed_sections": [], 68 | "name": "ch01_03_ans.ipynb", 69 | "provenance": [], 70 | "toc_visible": true 71 | }, 72 | "kernelspec": { 73 | "display_name": "Python 3", 74 | "name": "python3" 75 | }, 76 | "language_info": { 77 | "name": "python" 78 | } 79 | }, 80 | "nbformat": 4, 81 | "nbformat_minor": 0 82 | } 83 | -------------------------------------------------------------------------------- /notebooks/ch01_04_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "Os7nTmf9CJHF" 7 | }, 8 | "source": [ 9 | "## 1.4 データ型と算術演算" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "_sADjAnOCYpX" 16 | }, 17 | "source": [ 18 | "### 問題\n", 19 | " 変数a, b, cにそれぞれ値1000, 2000, 3000を代入します。 \n", 20 | " 次に、3つの変数それぞれを整数の範囲で7で割ったあまりを計算し、3つのあまりをすべて足した結果をdに代入して下さい。 \n", 21 | " dの計算方法はいろいろありますが、1-4-3項で説明した累算代入演算子をうまく使って計算して下さい。\n" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": { 28 | "colab": { 29 | "base_uri": "https://localhost:8080/" 30 | }, 31 | "id": "Vs2Rt17PaZN5", 32 | "outputId": "9db9527e-f1c3-4bc3-d7b2-8264d481def4" 33 | }, 34 | "outputs": [ 35 | { 36 | "name": "stdout", 37 | "output_type": "stream", 38 | "text": [ 39 | "15\n" 40 | ] 41 | } 42 | ], 43 | "source": [ 44 | "# 変数a, b, cの値をそれぞれ設定します\n", 45 | "a = 1000\n", 46 | "b = 2000\n", 47 | "c = 3000\n", 48 | "\n", 49 | "# aを7で割った余りを変数dに代入」します\n", 50 | "# 1.4.2項 コード1-4-11参照\n", 51 | "d = a % 7\n", 52 | "\n", 53 | "# 上の結果に、累算代入演算子を利用してbを7で割ったあまりを加えて下さい\n", 54 | "# 1.4.3項 コード1-4-13参照\n", 55 | "d += b % 7\n", 56 | "\n", 57 | "# 更にその結果に、cを7で割った余りを加えます\n", 58 | "d += c % 7\n", 59 | "\n", 60 | "# print関数で結果を表示します。\n", 61 | "print(d)\n" 62 | ] 63 | } 64 | ], 65 | "metadata": { 66 | "colab": { 67 | "collapsed_sections": [], 68 | "name": "ch01_04_ans.ipynb", 69 | "provenance": [], 70 | "toc_visible": true 71 | }, 72 | "kernelspec": { 73 | "display_name": "Python 3", 74 | "name": "python3" 75 | }, 76 | "language_info": { 77 | "name": "python" 78 | } 79 | }, 80 | "nbformat": 4, 81 | "nbformat_minor": 0 82 | } 83 | -------------------------------------------------------------------------------- /notebooks/ch01_06_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "6mcoQBL0Jtrj" 7 | }, 8 | "source": [ 9 | "## 1.6 関数とメソッド" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "kcy5YUKzJuHY" 16 | }, 17 | "source": [ 18 | "### 問題\n", 19 | " 変数s1に文字列 'I like an apple.'を、変数s2に文字列 'apple' を代入します。 \n", 20 | "次にfindメソッド、比較演算子、条件分岐をうまく使って、変数s1の中に変数s2が含まれているかどうかを判断し、結果をprint関数で出力するプログラムを作って下さい。 \n", 21 | "結果のメッセージは、次のようなものにします。 \n", 22 | " \n", 23 | "s2が 'apple' の場合: \n", 24 | "「I like an apple.はappleを含んでいます。」\n", 25 | "\n", 26 | "\n", 27 | "s2が 'orange' の場合: \n", 28 | "「I like an apple.はorangeを含んでいません。」\n" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "metadata": { 35 | "colab": { 36 | "base_uri": "https://localhost:8080/" 37 | }, 38 | "id": "XhusvKXgJJhM", 39 | "outputId": "4e2f1172-7495-475a-e04d-dc8073eb50b5" 40 | }, 41 | "outputs": [ 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "I like an apple. は apple を含んでいます。\n" 47 | ] 48 | } 49 | ], 50 | "source": [ 51 | "# 変数s1に文字列''を、s2に文字列''を代入します。\n", 52 | "s1 = 'I like an apple.'\n", 53 | "s2 = 'apple'\n", 54 | "\n", 55 | "# 条件分岐\n", 56 | "if s1.find(s2) >= 0:\n", 57 | "\n", 58 | " # 条件を満たす場合の処理\n", 59 | " m1 = 'を含んでいます。'\n", 60 | "\n", 61 | "# それ以外の条件\n", 62 | "else:\n", 63 | "\n", 64 | " # 条件を満たさない場合の処理\n", 65 | " m1 = 'を含んでいません。'\n", 66 | "\n", 67 | "# 結果表示\n", 68 | "print(s1, 'は', s2, m1)\n" 69 | ] 70 | } 71 | ], 72 | "metadata": { 73 | "colab": { 74 | "collapsed_sections": [], 75 | "name": "ch01_06_ans.ipynb", 76 | "provenance": [], 77 | "toc_visible": true 78 | }, 79 | "kernelspec": { 80 | "display_name": "Python 3", 81 | "name": "python3" 82 | }, 83 | "language_info": { 84 | "name": "python" 85 | } 86 | }, 87 | "nbformat": 4, 88 | "nbformat_minor": 0 89 | } 90 | -------------------------------------------------------------------------------- /notebooks/ch01_07_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "7_B5SQpUXwP-" 7 | }, 8 | "source": [ 9 | "## 1.7 リストとループ処理" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "GL-bII-cX46G" 16 | }, 17 | "source": [ 18 | "### 問題\n", 19 | " 変数s1に文字列 'サンプル文字列' を代入します。 \n", 20 | " このとき、range関数やループ処理をうまく使って、次のような結果を出力するプログラムを作って下さい。 \n", 21 | "\n", 22 | "```\n", 23 | "1 番目の文字は  サ\n", 24 | "2 番目の文字は  ン\n", 25 | "3 番目の文字は  プ\n", 26 | "4 番目の文字は  ル\n", 27 | "5 番目の文字は  文\n", 28 | "6 番目の文字は  字\n", 29 | "7 番目の文字は  列\n", 30 | "```" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": null, 36 | "metadata": { 37 | "colab": { 38 | "base_uri": "https://localhost:8080/" 39 | }, 40 | "id": "X8YFBlwFMHAz", 41 | "outputId": "64c78113-4c23-4f33-856f-b67c55565e00" 42 | }, 43 | "outputs": [ 44 | { 45 | "name": "stdout", 46 | "output_type": "stream", 47 | "text": [ 48 | "1 番目の文字は  サ\n", 49 | "2 番目の文字は  ン\n", 50 | "3 番目の文字は  プ\n", 51 | "4 番目の文字は  ル\n", 52 | "5 番目の文字は  文\n", 53 | "6 番目の文字は  字\n", 54 | "7 番目の文字は  列\n" 55 | ] 56 | } 57 | ], 58 | "source": [ 59 | "# 変数s1に文字列を代入します\n", 60 | "s1 = 'サンプル文字列'\n", 61 | "\n", 62 | "# 文字数を計算します\n", 63 | "# 1.6.1項 コード1-6-2参照\n", 64 | "N = len(s1)\n", 65 | "\n", 66 | "# range関数を使ってループ処理をします\n", 67 | "# 1.7.2項 コード1-7-9参照\n", 68 | "for i in range(N):\n", 69 | "\n", 70 | " # print関数には3つの引数を渡して表示します\n", 71 | " # 1.7.1項 コード1-7-6参照\n", 72 | " print(i+1, '番目の文字は ', s1[i])\n" 73 | ] 74 | } 75 | ], 76 | "metadata": { 77 | "colab": { 78 | "collapsed_sections": [], 79 | "name": "ch01_07_ans.ipynb", 80 | "provenance": [], 81 | "toc_visible": true 82 | }, 83 | "kernelspec": { 84 | "display_name": "Python 3", 85 | "name": "python3" 86 | }, 87 | "language_info": { 88 | "name": "python" 89 | } 90 | }, 91 | "nbformat": 4, 92 | "nbformat_minor": 0 93 | } 94 | -------------------------------------------------------------------------------- /notebooks/ch01_05_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "eHpLuxl3FX7R" 7 | }, 8 | "source": [ 9 | "## 1.5 条件分岐" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "br8-2aHOFYYc" 16 | }, 17 | "source": [ 18 | "### 問題 \n", 19 | "1. 変数xに12を代入します。\n", 20 | " 次にコード1-5-3を参考に、「xが10以上でかつxは3で割り切れる」を判断する論理演算の計算をして、その結果を条件分岐の条件とするようなif文を作ります。 \n", 21 | " そして、上の条件を満たしている場合は、'Success!'を、満たしていない場合は'Fail!'をprint関数で出力するようにして下さい。 \n", 22 | " 正しくコーディングできている場合、結果は'Success!' になるはずなので、それを確認します。 \n", 23 | "\n", 24 | " 2. 変数 xの値を9, 13, 15に変更した場合、結果がそれぞれどうなるか確認します。\n" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 1, 30 | "metadata": { 31 | "colab": { 32 | "base_uri": "https://localhost:8080/" 33 | }, 34 | "id": "-E0gL9iWapr3", 35 | "outputId": "5b9a027a-b48f-4942-aec5-92924be3c0f9" 36 | }, 37 | "outputs": [ 38 | { 39 | "name": "stdout", 40 | "output_type": "stream", 41 | "text": [ 42 | "Success!\n" 43 | ] 44 | } 45 | ], 46 | "source": [ 47 | "# 変数xに12を代入します\n", 48 | "x = 12\n", 49 | "\n", 50 | "# 「xが10以上でかつxは3で割り切れる」を条件にしたif文を作ります\n", 51 | "# 次のif文の実装には以下で学んだことをすべて利用します\n", 52 | "# 1.5.3項 コード1-5-4( 条件分岐)\n", 53 | "# 1.5.1項 表1-5-1 (比較演算)\n", 54 | "# 1.5.2項 コード1-5-3 (論理演算)\n", 55 | "if x >= 10 and x % 3 == 0:\n", 56 | "\n", 57 | " # 上の条件を満たした場合の処理\n", 58 | " print('Success!')\n", 59 | "\n", 60 | "# 「それ以外の場合」の条件\n", 61 | "# 1.5.3項 コード1-5-5 (else文)\n", 62 | "else:\n", 63 | " # 上の条件を満たさない場合の処理\n", 64 | " print('Fail!')\n" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": null, 70 | "metadata": { 71 | "id": "2ooFNgSoCpgq" 72 | }, 73 | "outputs": [], 74 | "source": [] 75 | } 76 | ], 77 | "metadata": { 78 | "colab": { 79 | "collapsed_sections": [], 80 | "name": "ch01_05_ans.ipynb", 81 | "provenance": [], 82 | "toc_visible": true 83 | }, 84 | "kernelspec": { 85 | "display_name": "Python 3", 86 | "name": "python3" 87 | }, 88 | "language_info": { 89 | "name": "python" 90 | } 91 | }, 92 | "nbformat": 4, 93 | "nbformat_minor": 0 94 | } 95 | -------------------------------------------------------------------------------- /notebooks/ch01_10.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "2-fEZI6tWfZP" 7 | }, 8 | "source": [ 9 | "## 1.10 やや高度なループ処理" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "FPRLd9WnWsk-" 16 | }, 17 | "source": [ 18 | "### 1.10.1 enumerate関数の利用" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": { 25 | "id": "OPN40k25clYX" 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "# enumerate関数の挙動の確認\n", 30 | "s1 = 'サンプル文字列'\n", 31 | "\n", 32 | "list(enumerate(s1))" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "id": "BO93L8p6WbaF" 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "# enumerate関数を利用したループ処理\n", 44 | "# s: 元のリストの各要素\n", 45 | "# i: その時のインデックスの値(何番目か)\n", 46 | "for i, s in enumerate(s1):\n", 47 | "\n", 48 | " # print関数には3つの引数を渡して表示します\n", 49 | " print(i+1, '番目の文字は ', s)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": { 55 | "id": "vkWie2ElW4pZ" 56 | }, 57 | "source": [ 58 | "### 1.10.2 内包表記" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "metadata": { 65 | "id": "AZbLgE4rW8Wn" 66 | }, 67 | "outputs": [], 68 | "source": [ 69 | "# 処理対象のリスト\n", 70 | "cabins = ['B5', 'C22', 'G6']\n", 71 | "\n", 72 | "# 内包表記を用いて新しいリストflloorsを作る\n", 73 | "floors = [x[0] for x in cabins]\n", 74 | "\n", 75 | "# 結果の確認\n", 76 | "print(floors)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": { 82 | "id": "hg2tVZsLW84w" 83 | }, 84 | "source": [ 85 | "### 演習課題\n", 86 | "cabins = ['B5', 'C22', 'G6']を処理対象として、各要素の文字列の長さを要素にした新しいリストlengthsを作って下さい。" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": { 93 | "id": "7X65Dzbn0x_h" 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "# 処理対象のリスト\n", 98 | "cabins = ['B5', 'C22', 'G6']\n", 99 | "\n", 100 | "# 内包表記を用いて新しいリストlengthsを作る\n", 101 | "\n", 102 | "\n", 103 | "# 結果の確認\n", 104 | "print(lengths)" 105 | ] 106 | } 107 | ], 108 | "metadata": { 109 | "colab": { 110 | "collapsed_sections": [], 111 | "provenance": [], 112 | "toc_visible": true 113 | }, 114 | "kernelspec": { 115 | "display_name": "Python 3", 116 | "name": "python3" 117 | }, 118 | "language_info": { 119 | "name": "python" 120 | } 121 | }, 122 | "nbformat": 4, 123 | "nbformat_minor": 0 124 | } -------------------------------------------------------------------------------- /refs/errors.md: -------------------------------------------------------------------------------- 1 | 2 | # 正誤訂正 3 | 4 | 5 | #### 第1版第1刷 6 | |章 |ページ |内容       |補足|最終更新日| 7 | |---|---|---|---|---| 8 | |1章|p.64|コード1-6-2 1行目
(誤)``xs1 = '文字列のサンプル'``
(正)``s1 = '文字列のサンプル'``|紙面のみ誤りでNotebook上は問題ありません|2023-01-12| 9 | |1章|p.67|コード1-6-5 4行目
(誤)``# 文字列'pen'の場所をfindメソッドで探す``
(正)``# 文字列'apple'の場所をfindメソッドで探す``||2023-02-02| 10 | |1章|p.67|コード1-6-5 8行目
(誤)``# 結果の10は先頭を0としたときの文字'p'の位置を示す``
(正)``# 結果の10は先頭を0としたときの文字'a'の位置を示す``||2023-02-02| 11 | |1章|p.108|問題 2行目
(誤)関数div_chaperを定義して
(正)関数div_titleを定義して||2023-02-02| 12 | |2章|p.144|コード2-2-14 1行目
(誤)0行目と2行目、すべての列
(正)0行目と1行目、すべての列||2023-02-25| 13 | |2章|p.255|コード3-4-2 2行目
(誤) ``!head -5 bank.csv``
(正) ``!head -5 bank-full.csv`` ||2023-02-25| 14 | |2章|p.255|コード3-4-2 4-7行目
(誤)
30;"unemployed";"married";"primary";"no";1787;"no";"no";"cellular";19;"oct";79;1;-1;0;"unknown";"no
33;"services";"married";"secondary";"no";4789;"yes";"yes";"cellular";11;"may";220;1;339;4;"failure";"no
35;"management";"single";"tertiary";"no";1350;"yes";"no";"cellular";16;"apr";185;1;330;1;"failure";"no
30;"management";"married";"tertiary";"no";1476;"yes";"yes";"unknown";3;"jun";199;4;-1;0;"unknown";"no"
(正)
58;"management";"married";"tertiary";"no";2143;"yes";"no";"unknown";5;"may";261;1;-1;0;"unknown";"no
44;"technician";"single";"secondary";"no";29;"yes";"no";"unknown";5;"may";151;1;-1;0;"unknown";"no
33;"entrepreneur";"married";"secondary";"no";2;"yes";"yes";"unknown";5;"may";76;1;-1;0;"unknown";"no
47;"bluecollar";"married";"unknown";"no";1506;"yes";"no";"unknown";5;"may";92;1;-1;0;"unknown";"no"||2023-02-25| 15 | |3章|p.267|コード3-4-14
(正) 一番下に次の行を追加 All, 0.1574, 0.5355, 0.3070 ||2023-02-25| 16 | |3章|p.300|コード3-6-4 表中の項目「貸出日時」のデータ書式
(誤) .000
(正)  小数部分なし||2023-02-25| 17 | |3章|p.301|コード3-6-5 表中の項目「貸出日時」のデータ書式
(誤) .000
(正)  小数部分なし||2023-02-25| 18 | |3章 | p.304 |コード3-6-8 下から9行目と一番下の一番右のデータ形式
(誤) .000
(正) 小数部分なし||2023-02-25| 19 | |3章 | p.305 |コード3-6-9 下から9行目の一番右のデータ形式
(誤) .000
(正) 小数部分なし||2023-02-25| 20 | |3章|p.307|コード3-6-10 下から5行目-一番下の一番右の項目のデータ書式
(誤) .000
(正)  小数部分なし||2023-02-25| 21 | |3章|p.315|コード3-6-15 表中の項目「貸出日時」のデータ書式
(誤) .000
(正)  小数部分なし||2023-02-25| 22 | |3章|p.316|コード3-6-16 表中の項目「貸出日時」のデータ書式
(誤) .000
(正)  小数部分なし||2023-02-25| 23 | |3章|p.324|コード3-7-1 2行目
(誤)``url1 = 'https://github.com/makaishi2/samples/raw/main/data/rental3-jp.csv'``
(正)``url1 = 'https://github.com/makaishi2/samples/raw/main/data/rental5-jp.csv'``|紙面のみ誤りでNotebook上は問題ありません|2023-02-02| 24 | |3章|p.336|一番上の行
Notebook上にある「# 顧客情報」で始まるセルの実装を補ってください|紙面のみ誤りでNotebook上は問題ありません|2023-02-02| 25 | |4章|p.353|コード4-10 一番下の行
(誤)``df.head(1)``
(正)``df.head(2)``||2023-02-25| 26 | |4章|p.358|コード4-15 2行目
(出版時)
``df.groupby('客室クラス').mean()``
(現在)
``df.groupby('客室クラス').mean(numeric_only=True)``|pandasのバージョンアップに伴い修正が必要|2024-04-26| 27 | |4章|p.364|コード4-21 5,6行目
(出版時)
``x='客室クラス', y='運賃', data=df,``
``palette=['blue', 'cyan', 'grey'])``
(現在)
``x='客室クラス', y='運賃', hue='客室クラス', data=df,``
``palette=['blue', 'cyan', 'grey'], legend=False)``|pandasのバージョンアップに伴い修正が必要|2024-04-26| 28 | |4章|p.365|コード4-22 5,6行目
(出版時)
``x='客室クラス', y='運賃', data=df,``
``palette=['blue', 'cyan', 'grey'])``
(現在)
``x='客室クラス', y='運賃', hue='客室クラス', data=df,``
``palette=['blue', 'cyan', 'grey'], legend=False)``|pandasのバージョンアップに伴い修正が必要|2024-04-26| 29 | 30 |
31 | 32 | [メインページに戻る](../README.md) 33 | 34 | -------------------------------------------------------------------------------- /notebooks/ch01_08_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "Z-mNNFGbgA4Q" 7 | }, 8 | "source": [ 9 | "## 1.8 タプル・集合と辞書" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "9fSIG8_ggBIn" 16 | }, 17 | "source": [ 18 | "### 問題\n", 19 | "\n", 20 | "あるECサイトでは、ある期間内の商品の売り上げが次の表1-8-2のようでした。\n", 21 | "\n", 22 | "表1-8-2 ある期間内の商品の売り上げ数\n", 23 | " \n", 24 | "|商品コード |販売数 |\n", 25 | "|---|---|\n", 26 | "|T254 |12 |\n", 27 | "|A727 |6 |\n", 28 | "|T256 | 4|\n", 29 | "|T254 | 10 |\n", 30 | "|A726 | 7 |\n", 31 | "|A727 | 4 |\n", 32 | "\n", 33 | "\n", 34 | "表1-8-2の情報は、Pythonの変数dataで表現されていることを前提として、商品ごとの売上数集計結果を出して下さい。 \n", 35 | "結果は、次のような辞書形式で欲しいです。\n", 36 | "\n", 37 | "{'T254': 22, 'A727': 10, 'T256': 4, 'A726': 7}\n", 38 | "\n" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 1, 44 | "metadata": { 45 | "colab": { 46 | "base_uri": "https://localhost:8080/" 47 | }, 48 | "id": "-o4E-wowYyiY", 49 | "outputId": "de259db1-7643-4188-c6f8-4bcd34035592" 50 | }, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "{'T254': 22, 'A727': 10, 'T256': 4, 'A726': 7}\n" 57 | ] 58 | } 59 | ], 60 | "source": [ 61 | "# 読み込み対象データの初期設定\n", 62 | "data = [\n", 63 | " ('T254', 12),\n", 64 | " ('A727', 6),\n", 65 | " ('T256', 4),\n", 66 | " ('T254', 10),\n", 67 | " ('A726', 7),\n", 68 | " ('A727', 4)\n", 69 | "]\n", 70 | "\n", 71 | "# 辞書 初期状態は空\n", 72 | "d2 = {}\n", 73 | "\n", 74 | "# この部分を実装します\n", 75 | "# 外側はループ処理\n", 76 | "# 内側はif文で2階層の組み合わせになります。\n", 77 | "\n", 78 | "# 1.8.1項 コード1-8-7参照\n", 79 | "for key, value in data:\n", 80 | " # キーが辞書に存在するかどうかをチェック\n", 81 | " # 1.8.3項 コード1-8-13参照\n", 82 | " if key in d2.keys():\n", 83 | " # 該当キー項目が存在する場合\n", 84 | " # 1.8.3項 コード1-8-12参照\n", 85 | " d2[key] += value\n", 86 | " else:\n", 87 | " # 該当キー項目が存在しない場合\n", 88 | " # 1.8.3項 コード1-8-12参照\n", 89 | " d2[key] = value\n", 90 | "\n", 91 | "# 結果の確認\n", 92 | "print(d2)\n" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": { 99 | "id": "xstKY8TEhknx" 100 | }, 101 | "outputs": [], 102 | "source": [] 103 | } 104 | ], 105 | "metadata": { 106 | "colab": { 107 | "collapsed_sections": [], 108 | "name": "ch01_08_ans.ipynb", 109 | "provenance": [], 110 | "toc_visible": true 111 | }, 112 | "kernelspec": { 113 | "display_name": "Python 3", 114 | "name": "python3" 115 | }, 116 | "language_info": { 117 | "name": "python" 118 | } 119 | }, 120 | "nbformat": 4, 121 | "nbformat_minor": 0 122 | } 123 | -------------------------------------------------------------------------------- /notebooks/ch02_02_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "ch02_02_ans.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [] 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 2.2節 NumPy入門\n" 23 | ], 24 | "metadata": { 25 | "id": "dvDkUgyQ_w9E" 26 | } 27 | }, 28 | { 29 | "cell_type": "code", 30 | "source": [ 31 | "# NumPyのインポート\n", 32 | "import numpy as np\n", 33 | "\n", 34 | "# NumPy表示形式の設定\n", 35 | "np.set_printoptions(\n", 36 | " suppress=True, precision=4, floatmode='fixed'\n", 37 | ")" 38 | ], 39 | "metadata": { 40 | "id": "r1NK-NLn__OX" 41 | }, 42 | "execution_count": 1, 43 | "outputs": [] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "source": [ 48 | "### 演習問題\n", 49 | "行列 n2の最初の列の値が3で割り切れない行を残し、割り切れた行を消す処理をします。 \n", 50 | "その処理の結果、残された行をまとめて新しい行列を作ってください。" 51 | ], 52 | "metadata": { 53 | "id": "yfIvqUqa_6W4" 54 | } 55 | }, 56 | { 57 | "cell_type": "code", 58 | "source": [ 59 | "# array関数による表形式の変数の定義\n", 60 | "n2 = np.array([\n", 61 | " [1, 2, 3, 4],\n", 62 | " [5, 6, 7, 8],\n", 63 | " [9, 10, 11, 12]\n", 64 | "])\n", 65 | "\n", 66 | "# n2の最初の列を抽出し、ベクトル変数a1とします。\n", 67 | "# 2.2.4項 コード2-2-12\n", 68 | "a1 = n2[:, 0]\n", 69 | "print(a1)\n", 70 | "\n", 71 | "# ブロードキャスト機能を用いて、a1の各要素が\n", 72 | "# 3で割った余りを示す配列a2を計算します\n", 73 | "# 2.2.5項 コード2-2-18\n", 74 | "# 割った余りの演算については1.4.2項 コード1-4-11\n", 75 | "a2 = a1 % 3\n", 76 | "print(a2)\n", 77 | "\n", 78 | "# 再度ブロードキャスト機能を用いて、a1の各要素が\n", 79 | "# 3で割り切れるかどうかを示す配列a3を作ります\n", 80 | "# 2.2.5項 コード2-2-18\n", 81 | "# 比較演算については1.5.1項\n", 82 | "a3 = a2 != 0\n", 83 | "print(a3)\n", 84 | "\n", 85 | "# 変数a3を用いて、 n2から必要な行だけを残す計算をし\n", 86 | "# 結果をa4に代入します。\n", 87 | "# 2.2.4項 コード 2-2-14\n", 88 | "a4 = n2[a3]\n", 89 | "print(a4)" 90 | ], 91 | "metadata": { 92 | "colab": { 93 | "base_uri": "https://localhost:8080/" 94 | }, 95 | "id": "FoeAgiYrASNu", 96 | "outputId": "8a3d286c-00fe-4f79-a61f-097df33a6532" 97 | }, 98 | "execution_count": 2, 99 | "outputs": [ 100 | { 101 | "output_type": "stream", 102 | "name": "stdout", 103 | "text": [ 104 | "[1 5 9]\n", 105 | "[1 2 0]\n", 106 | "[ True True False]\n", 107 | "[[1 2 3 4]\n", 108 | " [5 6 7 8]]\n" 109 | ] 110 | } 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "source": [ 116 | "# 以上の処理は慣れてくると1行にまとめることも可能です\n", 117 | "a5 = n2[n2[:, 0] % 3 != 0]\n", 118 | "print(a5)" 119 | ], 120 | "metadata": { 121 | "colab": { 122 | "base_uri": "https://localhost:8080/" 123 | }, 124 | "id": "3OebtJXeAisM", 125 | "outputId": "ac5bb487-ced3-4185-e50a-a75bd55faa18" 126 | }, 127 | "execution_count": 3, 128 | "outputs": [ 129 | { 130 | "output_type": "stream", 131 | "name": "stdout", 132 | "text": [ 133 | "[[1 2 3 4]\n", 134 | " [5 6 7 8]]\n" 135 | ] 136 | } 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "source": [ 142 | "" 143 | ], 144 | "metadata": { 145 | "id": "ay9VWhraBC-2" 146 | }, 147 | "execution_count": 3, 148 | "outputs": [] 149 | } 150 | ] 151 | } -------------------------------------------------------------------------------- /notebooks/ch01_09_ans.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "oHy58F3XCa0H" 7 | }, 8 | "source": [ 9 | "## 1.9 関数定義" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "OTQB_zYhCqwd" 16 | }, 17 | "source": [ 18 | "### 演習問題\n", 19 | "\n", 20 | "(1) 「章番号:章タイトル」の書式の文字列を引数とし「:」によって文字列を章番号、章タイトルに分ける関数div_titleを定義して下さい。 \n", 21 | "\n", 22 | "(2) 上で定義した関数を用いて、次の文字列をそれぞれ章番号、章タイトルに分割し、更に章番号を「キー」に、章タイトルを「値」にする辞書title_dictに登録して下さい。 \n", 23 | "\n", 24 | "'1章:業務と機械学習プロジェクト' \n", 25 | "'2章:機械学習モデルの処理パターン' \n", 26 | "'3章:機械学習モデルの開発手順' \n" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 6, 32 | "metadata": { 33 | "id": "tuAAjF0eCWlx" 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "# (1)の解答\n", 38 | "# 関数定義\n", 39 | "def div_title(line):\n", 40 | " # 1.9.3節 コード1-9-5\n", 41 | " n = line.find(':')\n", 42 | " index = line[:n]\n", 43 | " title = line[n + 1:]\n", 44 | " return index, title\n" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 7, 50 | "metadata": { 51 | "colab": { 52 | "base_uri": "https://localhost:8080/" 53 | }, 54 | "id": "lLxuTaSoCw8z", 55 | "outputId": "c5191441-8a4e-46b7-8899-ec0c742ef5cc" 56 | }, 57 | "outputs": [ 58 | { 59 | "name": "stdout", 60 | "output_type": "stream", 61 | "text": [ 62 | "章番号: 1章 章タイトル: 業務と機械学習プロジェクト\n" 63 | ] 64 | } 65 | ], 66 | "source": [ 67 | "# (1)のテスト\n", 68 | "\n", 69 | "l1 = '1章:業務と機械学習プロジェクト'\n", 70 | "c1, t1 = div_title(l1)\n", 71 | "print('章番号: ', c1, ' 章タイトル: ', t1)\n" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 8, 77 | "metadata": { 78 | "id": "CwMbHlZnCxLY" 79 | }, 80 | "outputs": [], 81 | "source": [ 82 | "# (2)の解答\n", 83 | "# 空の辞書の定義\n", 84 | "title_dict = {}\n", 85 | "\n", 86 | "# 処理対象テキストのリスト\n", 87 | "title_list = [\n", 88 | " '1章:業務と機械学習プロジェクト',\n", 89 | " '2章:機械学習モデルの処理パターン',\n", 90 | " '3章:機械学習モデルの開発手順'\n", 91 | "]\n", 92 | "\n", 93 | "# ループ処理\n", 94 | "for line in title_list:\n", 95 | "\n", 96 | " # 対象テキストを章番号と章タイトルに分離\n", 97 | " # 1.9.3項 コード1-9-6\n", 98 | " index, title = div_title(line)\n", 99 | "\n", 100 | " # 分離結果を用いて辞書登録\n", 101 | " # 1.8.3項 コード 1-8-12\n", 102 | " title_dict[index] = title\n" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 9, 108 | "metadata": { 109 | "colab": { 110 | "base_uri": "https://localhost:8080/" 111 | }, 112 | "id": "yxM9ngb3CxYJ", 113 | "outputId": "aca70dc3-d925-41f4-c031-51b4fa35f15e" 114 | }, 115 | "outputs": [ 116 | { 117 | "name": "stdout", 118 | "output_type": "stream", 119 | "text": [ 120 | "3章 機械学習モデルの開発手順\n" 121 | ] 122 | } 123 | ], 124 | "source": [ 125 | "# (2)の結果テスト\n", 126 | "\n", 127 | "print('3章', title_dict['3章'])\n" 128 | ] 129 | } 130 | ], 131 | "metadata": { 132 | "colab": { 133 | "collapsed_sections": [], 134 | "name": "ch01_11_ans.ipynb", 135 | "provenance": [], 136 | "toc_visible": true 137 | }, 138 | "kernelspec": { 139 | "display_name": "Python 3", 140 | "name": "python3" 141 | }, 142 | "language_info": { 143 | "name": "python" 144 | } 145 | }, 146 | "nbformat": 4, 147 | "nbformat_minor": 0 148 | } 149 | -------------------------------------------------------------------------------- /refs/notebooks.md: -------------------------------------------------------------------------------- 1 | # Notebook一覧 2 | 3 |

1章 Python入門

4 | 5 | |節・タイトル|実習リンク|演習解答例| 6 | |---|---|---| 7 | |1.2節 階乗計算|[ch01_02.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_02.ipynb)|(N/A) 8 | |1.3節 変数|[ch01_03.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_03.ipynb)|[ch01_03_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_03_ans.ipynb) 9 | |1.4節 データ型と算術演算|[ch01_04.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_04.ipynb)|[ch01_04_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_04_ans.ipynb) 10 | |1.5節 条件分岐|[ch01_05.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_05.ipynb)|[ch01_05_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_05_ans.ipynb) 11 | |1.6節 関数とメソッド|[ch01_06.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_06.ipynb)|[ch01_06_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_06_ans.ipynb) 12 | |1.7節 リストとループ処理|[ch01_07.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_07.ipynb)|[ch01_07_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_07_ans.ipynb) 13 | |1.8節 タプル・集合と辞書|[ch01_08.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_08.ipynb)|[ch01_08_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_08_ans.ipynb) 14 | |1.9節 関数定義|[ch01_09.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_09.ipynb)|[ch01_09_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_09_ans.ipynb) 15 | |1.10節 やや高度なループ処理|[ch01_10.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_10.ipynb)|[ch01_10_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch01_10_ans.ipynb) 16 | 17 |
18 |

2章 データ分析ライブラリ入門編

19 | 20 | |節・タイトル|実習リンク|演習解答例| 21 | |---|---|---| 22 | |2.1節 ライブラリ|[ch02_01.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_01.ipynb)|(N/A) 23 | |2.2節 NumPy入門|[ch02_02.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_02.ipynb)|[ch02_02_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_02_ans.ipynb) 24 | |2.3節 Matplotlib入門|[ch02_03.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_03.ipynb)|[ch02_03_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_03_ans.ipynb) 25 | |2.4節 pandas入門|[ch02_04.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_04.ipynb)|[ch02_04_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch02_04_ans.ipynb) 26 | 27 |
28 |

3章 データ分析ライブラリ中級編・4章 データ分析実践編

29 | 30 | 31 | |節・タイトル|実習リンク|演習解答例| 32 | |---|---|---| 33 | |3.2節 データ読み込み|[ch03_02.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_02.ipynb)|[ch03_02_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_02_ans.ipynb) 34 | |3.3節 データ確認・加工|[ch03_03.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_03.ipynb)|[ch03_03_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_03_ans.ipynb) 35 | |3.4節 データ集計|[ch03_04.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_04.ipynb)|[ch03_04_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_04_ans.ipynb) 36 | |3.5節 データ可視化|[ch03_05.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_05.ipynb)|[ch03_05_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_05_ans.ipynb) 37 | |3.6節 データ検索・結合|[ch03_06.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_06.ipynb)|[ch03_06_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_06_ans.ipynb) 38 | |3.7節 日付データの処理|[ch03_07.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_07.ipynb)|[ch03_07_ans.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch03_07_ans.ipynb) 39 | |4節 データ分析実践編|[ch04.ipynb](https://colab.research.google.com/github/makaishi2/data_analysis_book_info/blob/main/notebooks/ch04.ipynb)|(N/A) 40 | 41 | 42 | 43 | --- 44 | 45 | [メインページに戻る](../README.md) 46 | -------------------------------------------------------------------------------- /notebooks/ch01_06.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "PgZrn-lLGyrZ" 7 | }, 8 | "source": [ 9 | "## 1.6 関数呼び出しとメソッド呼び出し" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "AB2Eisk1HBFi" 16 | }, 17 | "source": [ 18 | "### 1.6.1 関数呼び出し" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "PEreXj2JHWmX" 25 | }, 26 | "source": [ 27 | "#### print関数" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "id": "9rnVkCzoHVTy" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "x = 123\n", 39 | "y = 10.01\n", 40 | "\n", 41 | "# print関数に複数引数を渡すパターン\n", 42 | "print('x = ', x, ' y = ', y)\n", 43 | "\n", 44 | "# print関数にオプション引数も渡すパターン\n", 45 | "print(x, y, sep='\\n')" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": { 51 | "id": "yWa2lCnEHadO" 52 | }, 53 | "source": [ 54 | "#### len関数" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "id": "d9jrgzQJHQ8H" 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "s1 = '文字列のサンプル'\n", 66 | "\n", 67 | "# len関数で文字数を調べます\n", 68 | "l = len(s1)\n", 69 | "\n", 70 | "# 結果の確認\n", 71 | "print('文字列の長さ: ', l)" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": { 77 | "id": "aiWB0ZP_HdIU" 78 | }, 79 | "source": [ 80 | "#### int関数とfloat関数" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": null, 86 | "metadata": { 87 | "id": "H96YQvvaHRE8" 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "i1 = 12\n", 92 | "f1 = 10.01\n", 93 | "s1 = '123'\n", 94 | "\n", 95 | "# int関数の利用\n", 96 | "i2 = int(f1)\n", 97 | "i3 = int(s1)\n", 98 | "\n", 99 | "# 結果確認\n", 100 | "print('i2 = ', i2, ' i3 = ', i3)\n", 101 | "\n", 102 | "# float関数の利用\n", 103 | "f2 = float(i1)\n", 104 | "f3 = float(s1)\n", 105 | "\n", 106 | "# 結果確認\n", 107 | "print('f2 = ', f2, ' f3 = ', f3)" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": { 113 | "id": "mjwvLQRkHEnT" 114 | }, 115 | "source": [ 116 | "### 1.6.2 メソッド呼び出し" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": { 123 | "id": "ZsrthL6ISm-w" 124 | }, 125 | "outputs": [], 126 | "source": [ 127 | "s1 = 'I like an apple.'\n", 128 | "\n", 129 | "# upperメソッドで、すべての文字を大文字にする\n", 130 | "s2 = s1.upper()\n", 131 | "\n", 132 | "# 結果確認\n", 133 | "print(s2)" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "id": "H0e3yVtjHIx-" 141 | }, 142 | "outputs": [], 143 | "source": [ 144 | "s1 = 'I like an apple.'\n", 145 | "s2 = 'apple'\n", 146 | "\n", 147 | "# 文字列'apple'の場所をfindメソッドで探す\n", 148 | "p1 = s1.find(s2)\n", 149 | "\n", 150 | "# 結果確認\n", 151 | "# 結果の10は先頭を0としたときの文字'a'の位置を示す\n", 152 | "print(p1)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": { 158 | "id": "bxt_rv2SHJt7" 159 | }, 160 | "source": [ 161 | "### 演習問題" 162 | ] 163 | }, 164 | { 165 | "cell_type": "markdown", 166 | "metadata": { 167 | "id": "U7RJTd_vKaus" 168 | }, 169 | "source": [ 170 | "#### 問題\n", 171 | " 変数s1に文字列 'I like an apple.'を、変数s2に文字列 'apple' を代入します。 \n", 172 | "次にfindメソッド、比較演算子、条件分岐をうまく使って、変数s1の中に変数s2が含まれているかどうかを判断し、結果をprint関数で出力するプログラムを作って下さい。 \n", 173 | "結果のメッセージは、次のようなものにします。 \n", 174 | " \n", 175 | "s2が 'apple' の場合: \n", 176 | "「I like an apple.はappleを含んでいます。」\n", 177 | "\n", 178 | "\n", 179 | "s2が 'orange' の場合: \n", 180 | "「I like an apple.はorangeを含んでいません。」\n" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": null, 186 | "metadata": { 187 | "id": "zMlFcK4JHM0T" 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "# 変数s1に文字列''を、s2に文字列''を代入します\n", 192 | "\n", 193 | "\n", 194 | "# 条件分岐\n", 195 | "\n", 196 | "# 条件を満たす場合の処理\n", 197 | "\n", 198 | "\n", 199 | "# それ以外の条件\n", 200 | "\n", 201 | "# 条件を満たさない場合の処理\n", 202 | "\n", 203 | "\n", 204 | "# 結果表示\n" 205 | ] 206 | } 207 | ], 208 | "metadata": { 209 | "colab": { 210 | "provenance": [], 211 | "toc_visible": true 212 | }, 213 | "kernelspec": { 214 | "display_name": "Python 3", 215 | "name": "python3" 216 | }, 217 | "language_info": { 218 | "name": "python" 219 | } 220 | }, 221 | "nbformat": 4, 222 | "nbformat_minor": 0 223 | } -------------------------------------------------------------------------------- /notebooks/ch01_03.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "ViWp7Gxyl7DI" 7 | }, 8 | "source": [ 9 | "## 1.3 変数" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "IjZMyfdZmILg" 16 | }, 17 | "source": [ 18 | "### 1.3.2 変数の代入" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": { 25 | "id": "_2IE5tH4mNUq" 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "# 変数xに値123を代入\n", 30 | "x = 123" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": null, 36 | "metadata": { 37 | "id": "ht0JPcmOl5oI" 38 | }, 39 | "outputs": [], 40 | "source": [ 41 | "# 右と左を入れ替えると文法エラーになる\n", 42 | "123 = x" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": { 48 | "id": "NeoKEdMymSmK" 49 | }, 50 | "source": [ 51 | "### 1.3.3 変数の参照" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": null, 57 | "metadata": { 58 | "id": "7G74pPgamWPx" 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "# 変数xの値を参照する\n", 63 | "x" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "metadata": { 70 | "id": "flVCnoIumYwc" 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "# print関数の利用\n", 75 | "print(x)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": { 81 | "id": "rsmVW71_me7h" 82 | }, 83 | "source": [ 84 | "### 1.3.4 参照と代入の組み合わせ" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": null, 90 | "metadata": { 91 | "id": "znKcJYL4mgkL" 92 | }, 93 | "outputs": [], 94 | "source": [ 95 | "# 変数xの値に10を加えた結果を変数yに代入\n", 96 | "y = x + 10" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": null, 102 | "metadata": { 103 | "id": "r0AfO-itmgv5" 104 | }, 105 | "outputs": [], 106 | "source": [ 107 | "# 結果の確認\n", 108 | "print(y)" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "id": "VEpuh3tOmg5D" 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "# 変数wに値10を代入\n", 120 | "w = 10\n", 121 | "\n", 122 | "# ここでは何をやっているか??\n", 123 | "w = w + 1" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": { 130 | "id": "6_23WnL1mr8F" 131 | }, 132 | "outputs": [], 133 | "source": [ 134 | "# 結果の確認\n", 135 | "print(w)" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": { 141 | "id": "sxleMECYmudx" 142 | }, 143 | "source": [ 144 | "### 1.3.5 結果表示方法の整理" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "id": "elZAmRyxmx-R" 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "# 変数xと変数yの値を設定\n", 156 | "x = 123\n", 157 | "y = 10" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": null, 163 | "metadata": { 164 | "id": "JwH-CF-xmz1y" 165 | }, 166 | "outputs": [], 167 | "source": [ 168 | "# 変数xと変数の参照\n", 169 | "x\n", 170 | "y" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": { 177 | "id": "Cua6krg7m0Ad" 178 | }, 179 | "outputs": [], 180 | "source": [ 181 | "# print関数呼び出しを並べて書く\n", 182 | "print(x)\n", 183 | "print(y)" 184 | ] 185 | }, 186 | { 187 | "cell_type": "markdown", 188 | "metadata": { 189 | "id": "bYyQ0y-Em8in" 190 | }, 191 | "source": [ 192 | "### 演習問題" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": { 198 | "id": "GSCsRqwdnEXn" 199 | }, 200 | "source": [ 201 | "3つの変数a, b, cを使います。 \n", 202 | " 変数cの値は、変数aと変数bにより、「c = b - a」の計算により求められる関係性を持っているものとします。 \n", 203 | " 今、変数aの値が3, 変数bの値が10であるとします。この時、変数cの値を変数a, bを経由して求め、結果をprint関数で表示して下さい。\n" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": { 210 | "id": "diY-x9qNnDie" 211 | }, 212 | "outputs": [], 213 | "source": [ 214 | "# 変数aの値を「代入」により設定します\n", 215 | "\n", 216 | "\n", 217 | "# 変数bの値を「代入」により設定します\n", 218 | "\n", 219 | "\n", 220 | "# 変数aと変数bを用いて変数cの値を計算し、代入します\n", 221 | "\n", 222 | "\n", 223 | "# print関数を用いて、変数a, 変数b, 変数cの値を順番に表示します\n" 224 | ] 225 | } 226 | ], 227 | "metadata": { 228 | "colab": { 229 | "collapsed_sections": [], 230 | "provenance": [], 231 | "toc_visible": true 232 | }, 233 | "kernelspec": { 234 | "display_name": "Python 3", 235 | "name": "python3" 236 | }, 237 | "language_info": { 238 | "name": "python" 239 | } 240 | }, 241 | "nbformat": 4, 242 | "nbformat_minor": 0 243 | } -------------------------------------------------------------------------------- /notebooks/ch02_01.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "ch02_01.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | } 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "source": [ 23 | "## 2.1 ライブラリ" 24 | ], 25 | "metadata": { 26 | "id": "whlKtsmfYs3N" 27 | } 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "source": [ 32 | "### 2.1.2 import文" 33 | ], 34 | "metadata": { 35 | "id": "Nc3rbUd5Y_ss" 36 | } 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "id": "U-d-S-3dYpVQ" 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "# 標準ライブラリmathを利用することの宣言\n", 47 | "import math\n", 48 | "\n", 49 | "# mathライブラリのsqrt関数は「math.sqrt」の形で呼び出す\n", 50 | "r2 = math.sqrt(2)\n", 51 | "\n", 52 | "# 計算結果の確認 (2の平方根)\n", 53 | "print(r2)" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "source": [ 59 | "# ライブラリ中の特定の関数のみ利用する場合は下記の方法も可\n", 60 | "from math import sqrt\n", 61 | "\n", 62 | "# この場合は、「sqrt」だけで関数を呼び出せる\n", 63 | "r2 = sqrt(2)\n", 64 | "\n", 65 | "# 結果確認\n", 66 | "print(r2)" 67 | ], 68 | "metadata": { 69 | "id": "CLUJOOQhZUMP" 70 | }, 71 | "execution_count": null, 72 | "outputs": [] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "source": [ 77 | "# 外部ライブラリnumpyを利用することの宣言\n", 78 | "# 「as np」は別名定義 利用時は「np.xxx」の形で呼び出すことになる\n", 79 | "import numpy as np\n", 80 | "\n", 81 | "# numpy上の1次元配列宣言(0から2まで0.2刻みの等差数列)\n", 82 | "x = np.linspace(0, 2, 11)\n", 83 | "\n", 84 | "# 結果確認\n", 85 | "print(x)\n", 86 | "\n", 87 | "# numpyのsqrt関数呼び出し\n", 88 | "y = np.sqrt(x)\n", 89 | "\n", 90 | "# 結果確認 (1から10までの平方根が同時に計算できている)\n", 91 | "print(y)" 92 | ], 93 | "metadata": { 94 | "id": "Eqayf-F_Zeii" 95 | }, 96 | "execution_count": null, 97 | "outputs": [] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "source": [ 102 | "# 外部ライブラリのバージョン確認方法\n", 103 | "import numpy\n", 104 | "print(numpy.__version__)" 105 | ], 106 | "metadata": { 107 | "id": "7Kq_HPPCZraI" 108 | }, 109 | "execution_count": null, 110 | "outputs": [] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "source": [ 115 | "### コラム メソッドと間違えやすい関数" 116 | ], 117 | "metadata": { 118 | "id": "rsY0G27wNMN5" 119 | } 120 | }, 121 | { 122 | "cell_type": "code", 123 | "source": [ 124 | "# 関数呼び出しの例\n", 125 | "# npはimport文で定義されている\n", 126 | "\n", 127 | "import numpy as np\n", 128 | "n1 = np.array([1, 7, 5, 2])\n", 129 | "print(n1)" 130 | ], 131 | "metadata": { 132 | "id": "5lNZfbe4NV3j" 133 | }, 134 | "execution_count": null, 135 | "outputs": [] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "source": [ 140 | "# メソッド呼び出しの例\n", 141 | "# s1は代入文で定義されている\n", 142 | "\n", 143 | "s1 = 'I like an apple.'\n", 144 | "s1.upper()\n", 145 | "print(s1)" 146 | ], 147 | "metadata": { 148 | "id": "SA4PJAKdNh1c" 149 | }, 150 | "execution_count": null, 151 | "outputs": [] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "source": [ 156 | "### 2.1.3 !pipコマンド" 157 | ], 158 | "metadata": { 159 | "id": "LYZudPY9Z_mA" 160 | } 161 | }, 162 | { 163 | "cell_type": "code", 164 | "source": [ 165 | "# matplotlib日本語化ライブラリの導入\n", 166 | "!pip install japanize-matplotlib | tail -n 1\n", 167 | "\n", 168 | "# matplotlib日本語化ライブラリのインポート\n", 169 | "import japanize_matplotlib" 170 | ], 171 | "metadata": { 172 | "id": "RHnTIWBhZ6mv" 173 | }, 174 | "execution_count": null, 175 | "outputs": [] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "source": [ 180 | "### コラム Python変数の値をOSコマンドに渡す" 181 | ], 182 | "metadata": { 183 | "id": "vFe3z42aih70" 184 | } 185 | }, 186 | { 187 | "cell_type": "code", 188 | "source": [ 189 | "# 条件を満たすファイル名リストを取得する\n", 190 | "\n", 191 | "import glob\n", 192 | "files = glob.glob('sample_data/*.csv')\n", 193 | "print(files)" 194 | ], 195 | "metadata": { 196 | "id": "RXY-OAX7fmPL" 197 | }, 198 | "execution_count": null, 199 | "outputs": [] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "source": [ 204 | "# filesの2番目の要素を抽出\n", 205 | "\n", 206 | "file = files[1]\n", 207 | "print(file)" 208 | ], 209 | "metadata": { 210 | "id": "gou39E0mlM94" 211 | }, 212 | "execution_count": null, 213 | "outputs": [] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "source": [ 218 | "# 変数fileの内容を!headコマンドに渡す\n", 219 | "\n", 220 | "!head -2 $file" 221 | ], 222 | "metadata": { 223 | "id": "9iFavnWclTyw" 224 | }, 225 | "execution_count": null, 226 | "outputs": [] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "source": [ 231 | "" 232 | ], 233 | "metadata": { 234 | "id": "D0d2t8zplguS" 235 | }, 236 | "execution_count": null, 237 | "outputs": [] 238 | } 239 | ] 240 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 書籍「最短コースでわかるPythonプログラミングとデータ分析」サポートサイト 2 |
3 | 4 |
5 | 6 |
7 | 8 |  当サイトは、書籍「**最短コースでわかるPythonプログラミングとデータ分析**」のサポートサイトです。 9 |  本書は、人気のプログラミング言語「Python」で、データ分析プログラミングができるようになるための本です。 10 |  Python文法の初歩から解説しているので、初心者でも他書に頼らず、**本書1冊で Python によるデータ分析技術をマスター**できます! 11 | 12 | 13 | ## 実習Notebookリンク 14 |  本書の実習コードは、Google Colabで動かすことを前提に、すべてGithub(当サポートサイト)で公開しています。 15 | 16 | 17 | 18 | * [1章 Pythonプログラミング入門](refs/notebooks.md#CH01) 19 | * [2章 データ分析ライブラリ入門編](refs/notebooks.md#CH02) 20 | * [3章 データ分析ライブラリ中級編・4章 データ分析実践編](refs/notebooks.md#CH03_CH04) 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | ## Amazonへのリンク 31 | 32 | [単行本](https://www.amazon.co.jp/dp/4296201123) 33 | 34 | 37 | 38 | 39 | 40 | ## 主な想定読者 41 | 本書は、次のような読者を想定しています。 42 | 43 | 1. データ分析をするためにPythonの文法から学習したい 44 | 45 | 2. Pythonの文法は理解したが、pandasなどのデータ分析用ライブラリの学習で止まっている 46 | 47 | 3. データ分析のライブラリまで一通り学習したが、実際の分析テーマに対してどのように進めたらいいかがわからない 48 | 49 | 50 |   51 | ## 本書の特徴 52 | 本書は、以下の3つ+1つの「ツボ」により「**最短コースでデータ分析技術を習得できる『高速道路』**」を読者に提供します。 53 | 54 | * **必要十分な知識項目の精査** (データ分析の「出る単」) 55 | 56 |  本書では、学習対象の知識項目を必要最小限に抑え、相互の関連性に基づき体系的に学べるようにしています。 57 |  1章と2章の約200ページで、プログラミング経験のない読者も、データ分析で最低限必要な3つのライブラリNumpy, Matplotlib, pandasまで使いこなせるようになります。 58 |  最小限といっても、大事な概念を省略しているわけではありません。 **最初から目標をデータ分析に絞り込み必要十分な内容を精選**し、かつ初心者が理解しにくい重要概念は必ず図をつけて丁寧に解説しています。 59 | 60 | * **「演習問題」でプログラミングスキルの実地訓練** 61 | 62 |  初心者にとってプログラミング習得時の高いハードルの一つは、「要件」をプログラムコードとしての「実装」に落とし込むことのイメージが持てない点です。 63 |  本書では、**各節の最後にある演習問題**を通じて、**抽象的な「要件」を具体的な「実装」に落とし込む訓練を繰り返す**ことにより、この課題に対応します。 64 | 65 | * **試行錯誤によるライブラリ関数の機能の体得** 66 | 67 |   データ分析で必要なライブラリ関数の細かい挙動を理解するためには、**トライアンドエラーを繰り返して実験・体験により理解する**のが第一です。 68 |  本書ではGoogle Colabで動かすことを前提に、すぐに利用可能な実習コードが用意されていて、気軽に試行錯誤の実験ができます。 69 | 70 | * **分析シナリオで洞察導出** (プラス・アルファのツボ) 71 | 72 |  3章・4章では、**公開データセットの活用**で、**実業務に近い分析シナリオを提示**しています。 73 |  これらの例題を通じて、実際のデータ分析で最も重要な**洞察の抽出**がどんなものであるかのイメージを持つことが可能です。 74 | 75 | ## 書籍ハイライト紹介 76 | 77 | 以下に、本書の具体的な内容の一部を紹介します。 78 |
79 | 80 | * **データ分析のためのポイントを囲み記事で紹介(全体)** 81 |  本書は、「データ分析」を最終的な目的とした書籍です。そこで、各章の説明の中で、特にデータ分析との関係で重要な点を下記のような囲み記事の形でまとめました。 82 | 83 | 84 |
85 | 86 |
87 | 88 | 89 |
90 | 91 | * **演習問題はヒント付き(全体)** 92 |  演習問題は、コメントにヒントがついていて、その節で学習したことが理解できていればギリギリ対応できる形にレベル設定されています。 93 | 94 |
95 | 96 |
97 | 98 | 99 |
100 | 101 | 102 | * **重要な文法は図で解説(1章)** 103 | 104 |  1章のPythonプログラミング入門では、重要な文法は図で一つ一つの要素の意味を丁寧に解説します。 105 | 106 |
107 | 108 |
109 | 110 | 115 | 116 | 117 |
118 | 119 | 129 | 130 | 144 | 145 | 146 | * **NumPyブロードキャスト機能も図で説明(2章)** 147 | 148 |  2章のデータ分析ライブラリ入門編の1節でNumPyを解説しています。 149 |  NumPyの特徴的な機能であるブロードキャスト機能も、その動作メカニズムを図で解説しています。 150 | 151 |
152 | 153 |
154 | 155 | 156 |
157 | 158 | * **公開データセット用いたシナリオベースの分析(3章)** 159 | 160 |  3章のデータ分析ライブラリ中級編では、実習の題材に極力公開データセットを用いて、実業務の分析シナリオに近いストーリーを作っています。 161 |  下記に「銀行マーケティング・データセット」から、営業対象の顧客層を分析した結果と、「ピッツバーグ・ブリッジ・データセット」のデータを箱ひげ図で分析し、保守対象の橋の選定をしている事例を示しました。 162 | 163 |
164 | 165 |
166 | 167 | 168 |
169 | 170 | 171 | * **タイタニック・データセットを総合的に分析(4章)** 172 | 173 |  4章では、それまでの学習の総まとめとして「タイタニック・データセット」を徹底的に分析します。下記左は、生存率を「客室クラス」「性別」の2軸で分析した結果、右は「性別」「救命ボード」「生存状況」の3つの項目間の関係を整理した結果です。 174 | 175 |
176 | 177 |
178 | 179 | 180 |
181 | 182 | 183 | 184 | ## 目次 185 | 186 | #### 1章 Pythonプログラミング入門 187 | #### 2章 データ分析ライブラリ入門編 188 | #### 3章 データ分析ライブラリ中級編 189 | #### 4章 データ分析実践編 190 | 191 | [目次詳細](refs/index.md) 192 | 193 | 194 | ## その他解説記事 195 | 196 | 197 | 198 | ## リンク集 199 | 200 | ### 著者発信の情報 201 | 202 | |ソース |タイトルとリンク |補足| 203 | |---|---|---| 204 | |twitter|[@makaishi2](https://twitter.com/makaishi2)|著者のツイッターアカウント。書籍に関連した情報発信とretweetが中心です。| 205 | |IBM Blog|[AI関連書籍三冊目を出版したIBM赤石雅典に聞く「AIと仕事と執筆」](https://www.ibm.com/blogs/solutions/jp-ja/data_science_and_ai_akaishi-san/)|IBM勤務時代、会社のブログにインタビュー記事が紹介されています。| 206 | |異業種データサイエンス研究会招待講演資料|[AI・DS領域を学習したい方に向けて](https://speakerdeck.com/makaishi2/aidsling-yu-woxue-xi-sitaifang-nixiang-kete)|2022-12-03に異業種データサイエンス研究会主催で行われたイベントでの招講演資料です。| 207 | |日経BP XTECH|[はじめに:『最短コースでわかる Pythonプログラミングとデータ分析』](https://bookplus.nikkei.com/atcl/column/032900009/121200245/?n_cid=nbpbkp_twed)|日経BP様のサイトの本書の「はじめに」の全文を掲載いただいています。 208 | |日経BPXTECH|[電話営業の顧客データをPythonで分析~データ分析最短コース](https://xtech.nikkei.com/atcl/nxt/column/18/01687/00283/)|日経BP様のサイトに本書の3.4節の内容を掲載いただいています。| 209 | 210 | 211 | 212 | ### 外部リンク 213 | 214 | 215 | |ソース |タイトルとリンク |補足| 216 | |---|---|---| 217 | |からあげ様ブログ|[「Pythonプログラミングとデータ分析」レビュー](https://karaage.hatenadiary.jp/entry/2022/12/19/073000)|有名なブロガーであるからあげ様からいただいた書籍レビューです| 218 | 219 | 228 | 229 | *** 230 | 231 | 232 | ## 正誤訂正・FAQ 233 | 234 | 237 | 238 | * [正誤訂正](refs/errors.md) 239 | 240 | * [FAQ](refs/faqs.md) 241 | 242 | 243 | -------------------------------------------------------------------------------- /notebooks/ch01_05.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "-RaJ1j1ZrVlm" 7 | }, 8 | "source": [ 9 | "## 1.5 比較・論理演算と条件分岐" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "_X3sBmm3sPb9" 16 | }, 17 | "source": [ 18 | "### 1.5.1 比較演算" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": { 25 | "id": "SceIt5NWsOhX" 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "# 変数xに1を代入\n", 30 | "x = 1\n", 31 | "\n", 32 | "# xの値は10より小さいか\n", 33 | "c = x < 10\n", 34 | "\n", 35 | "# 結果確認\n", 36 | "print(c)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "metadata": { 43 | "id": "q6MHkw3tsOvr" 44 | }, 45 | "outputs": [], 46 | "source": [ 47 | "# 今度はxに10を代入\n", 48 | "x = 10\n", 49 | "\n", 50 | "# xの値は10より小さいか\n", 51 | "c = x < 10\n", 52 | "\n", 53 | "# 結果確認\n", 54 | "print(c)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": { 60 | "id": "K3Xw8mMCsVkZ" 61 | }, 62 | "source": [ 63 | "### 1.5.2 論理演算" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "metadata": { 70 | "id": "AVGC3BFnsfAT" 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "# xの値を10に設定\n", 75 | "x = 10\n", 76 | "\n", 77 | "# xは10以上でかつ奇数\n", 78 | "c = (x >= 10) and (x % 2 == 1)\n", 79 | "\n", 80 | "print(c)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": { 86 | "id": "baPHUIE2IHB2" 87 | }, 88 | "source": [ 89 | "### 1.5.3 条件分岐" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": { 96 | "id": "ia1gwzeCXW71" 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "# 条件分岐 ifパターン\n", 101 | "\n", 102 | "# 変数xに整数値を代入\n", 103 | "x = 123\n", 104 | "\n", 105 | "# xは奇数か\n", 106 | "if x % 2 == 1:\n", 107 | " # xが奇数の場合の処理\n", 108 | " print('xは奇数')\n", 109 | "\n", 110 | "# 次のprint関数は条件分岐の結果に関係なく実行される\n", 111 | "print('x = ', x)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "metadata": { 118 | "id": "A2ItRU8OILMA" 119 | }, 120 | "outputs": [], 121 | "source": [ 122 | "# 条件分岐 if-elseパターン\n", 123 | "\n", 124 | "# 変数xに整数値を代入\n", 125 | "x = 122\n", 126 | "\n", 127 | "# xは奇数か\n", 128 | "if x % 2 == 1:\n", 129 | " # xが奇数の場合の処理\n", 130 | " print('xは奇数')\n", 131 | " print('x = ', x)\n", 132 | "else:\n", 133 | " # xが偶数の場合の処理\n", 134 | " print('xは偶数')" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": { 141 | "id": "VAPAJuT8ILV4" 142 | }, 143 | "outputs": [], 144 | "source": [ 145 | "# 条件分岐 if-elif-elseパターン\n", 146 | "\n", 147 | "# 変数xに整数値を代入\n", 148 | "x = 123\n", 149 | "\n", 150 | "# xを3で割った余りを変数mに代入\n", 151 | "m = x % 3\n", 152 | "\n", 153 | "# xは3の倍数か\n", 154 | "if m == 0:\n", 155 | " # xが3の倍数の場合の処理\n", 156 | " print('xは3の倍数')\n", 157 | " print('x = ', x)\n", 158 | "elif m == 1:\n", 159 | " # xを3で割った余りが1の場合の処理\n", 160 | " print('x+2は3の倍数')\n", 161 | " print('x + 2 =', x + 2)\n", 162 | "else:\n", 163 | " # xを3で割った余りが2の場合の処理\n", 164 | " print('x+1は3の倍数')\n", 165 | " print('x + 1 = ', x + 1)" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": { 171 | "id": "5GZcIrMQssQf" 172 | }, 173 | "source": [ 174 | "### 演習問題" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "metadata": { 180 | "id": "Ky74_Qj-yzi6" 181 | }, 182 | "source": [ 183 | "#### 問題 \n", 184 | "  1. 変数xに12を代入します。 \n", 185 | " 次にコード1-5-3を参考に、「xが10以上でかつxは3で割り切れる」を判断する論理演算の計算をして、その結果を条件分岐の条件とするようなif文を作ります。 \n", 186 | "上の条件を満たしている場合は、'Success!'を、満たしていない場合は'Fail!'をprint関数で出力するようにして下さい。 \n", 187 | " 正しくコーディングできている場合、結果は'Success!' になるはずなので、それを確認します。 \n", 188 | "\n", 189 | " 2. 変数 xの値を9, 13, 15に変更した場合、結果がそれぞれどうなるか確認します。 \n" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": null, 195 | "metadata": { 196 | "id": "nV6mWzBcsweS" 197 | }, 198 | "outputs": [], 199 | "source": [ 200 | "# 変数xに12を代入します\n", 201 | "\n", 202 | "\n", 203 | "# 「xが10以上でかつxは3で割り切れる」を条件にしたif文を作ります\n", 204 | "\n", 205 | "# 上の条件を満たした場合の処理\n", 206 | "\n", 207 | "\n", 208 | "# 「それ以外の場合」の条件\n", 209 | "\n", 210 | "# 上の条件を満たさない場合の処理\n" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": null, 216 | "metadata": { 217 | "id": "xtS-eT8xsxwl" 218 | }, 219 | "outputs": [], 220 | "source": [] 221 | } 222 | ], 223 | "metadata": { 224 | "colab": { 225 | "collapsed_sections": [], 226 | "provenance": [], 227 | "toc_visible": true 228 | }, 229 | "kernelspec": { 230 | "display_name": "Python 3.8.2 64-bit", 231 | "language": "python", 232 | "name": "python3" 233 | }, 234 | "language_info": { 235 | "codemirror_mode": { 236 | "name": "ipython", 237 | "version": 3 238 | }, 239 | "file_extension": ".py", 240 | "mimetype": "text/x-python", 241 | "name": "python", 242 | "nbconvert_exporter": "python", 243 | "pygments_lexer": "ipython3", 244 | "version": "3.8.2" 245 | }, 246 | "vscode": { 247 | "interpreter": { 248 | "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" 249 | } 250 | } 251 | }, 252 | "nbformat": 4, 253 | "nbformat_minor": 0 254 | } -------------------------------------------------------------------------------- /notebooks/ch01_09.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "PTQOawPuTPCd" 7 | }, 8 | "source": [ 9 | "## 1.9 関数定義" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "source": [ 15 | "### 1.9.3 関数の実装例" 16 | ], 17 | "metadata": { 18 | "id": "_zpd5f6p8i44" 19 | } 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "_emQtfnxTnu7" 25 | }, 26 | "source": [ 27 | "#### 1引数1戻り値の関数" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "id": "OZ4OQPaPSwDM" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "# 2次関数 y = x^2 - 2x の定義\n", 39 | "\n", 40 | "def f(x):\n", 41 | " y = x ** 2 - 2 * x\n", 42 | " return y" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": { 49 | "id": "e44QCVFdTXm4" 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "#  定義した関数fの呼び出し\n", 54 | "\n", 55 | "print(f(1))\n", 56 | "print(f(2))\n", 57 | "print(f(3))" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": { 63 | "id": "6PrbgtXx1hEQ" 64 | }, 65 | "source": [ 66 | "#### 2引数1戻り値の関数" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": { 73 | "id": "yeuXNHy5UMiM" 74 | }, 75 | "outputs": [], 76 | "source": [ 77 | "# 文字列の先頭n文字を返す関数の定義\n", 78 | "\n", 79 | "# s 対象文字列\n", 80 | "# n 先頭の文字数\n", 81 | "def head(s, n):\n", 82 | " r = s[:n]\n", 83 | " return r" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": { 90 | "id": "LNLz329l2Tdu" 91 | }, 92 | "outputs": [], 93 | "source": [ 94 | "# 呼び出しテスト\n", 95 | "\n", 96 | "s1 = 'ABCDEFG'\n", 97 | "n1 = 4\n", 98 | "\n", 99 | "h1 = head(s1, n1)\n", 100 | "print(h1)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": { 106 | "id": "q2eGvnwqqkX6" 107 | }, 108 | "source": [ 109 | "#### 1引数2戻り値の関数" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": { 116 | "id": "X7R78StY2meh" 117 | }, 118 | "outputs": [], 119 | "source": [ 120 | "# メールアドレスの文字列を引数として、@の前と後ろを返す関数\n", 121 | "\n", 122 | "def div(s):\n", 123 | " p = s.find('@')\n", 124 | " pre = s[:p]\n", 125 | " post = s[p + 1:]\n", 126 | " return pre, post" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "id": "mfQ_n0VR8iUj" 134 | }, 135 | "outputs": [], 136 | "source": [ 137 | "# 呼び出しテスト\n", 138 | "s1 = 'abc@xyz.com'\n", 139 | "p1, p2 = div(s1)\n", 140 | "\n", 141 | "# 結果確認\n", 142 | "print('@の前: ', p1)\n", 143 | "print('@の後ろ: ', p2)" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": { 149 | "id": "zNrqfawLOaJ_" 150 | }, 151 | "source": [ 152 | "#### 1引数戻り値なしの関数" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": null, 158 | "metadata": { 159 | "id": "MY_batLb8nxE" 160 | }, 161 | "outputs": [], 162 | "source": [ 163 | "# 「値」と「型」を両方print関数で表示する関数\n", 164 | "def print_type_value(x):\n", 165 | " print('型: ', type(x))\n", 166 | " print('値: ', x)" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": { 173 | "id": "EKjZ3ljV8pbd" 174 | }, 175 | "outputs": [], 176 | "source": [ 177 | "# 呼び出しテスト\n", 178 | "s1 = 'ABC123'\n", 179 | "print_type_value(s1)" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": { 185 | "id": "EpED3F-N5HfE" 186 | }, 187 | "source": [ 188 | "### 演習問題\n", 189 | "\n", 190 | "(1) 「章番号:章タイトル」の書式の文字列を引数とし「:」によって文字列を章番号、章タイトルに分ける関数div_titleを定義して下さい。 \n", 191 | "\n", 192 | "(2) 上で定義した関数を用いて、次の文字列をそれぞれ章番号、章タイトルに分割し、更に章番号を「キー」に、章タイトルを「値」にする辞書title_dictに登録して下さい。 \n", 193 | "\n", 194 | "'1章:業務と機械学習プロジェクト' \n", 195 | "'2章:機械学習モデルの処理パターン' \n", 196 | "'3章:機械学習モデルの開発手順' \n", 197 | "\n" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": null, 203 | "metadata": { 204 | "id": "HWomaUfJqWi1" 205 | }, 206 | "outputs": [], 207 | "source": [ 208 | "# (1)の解答\n", 209 | "# 関数定義\n" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": null, 215 | "metadata": { 216 | "id": "0TqECaZP7Q6Y" 217 | }, 218 | "outputs": [], 219 | "source": [ 220 | "# (1)のテスト\n", 221 | "\n", 222 | "l1 = '章番号:章タイトル'\n", 223 | "c1, t1 = div_title(l1)\n", 224 | "print('章番号: ', c1, ' 章タイトル: ', t1)" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": null, 230 | "metadata": { 231 | "id": "B6Q5I0tJ5ray" 232 | }, 233 | "outputs": [], 234 | "source": [ 235 | "# (2)の解答\n", 236 | "# 空の辞書の定義\n", 237 | "title_dict = {}\n", 238 | "\n", 239 | "# 処理対象テキストのリスト\n", 240 | "title_list = [\n", 241 | " '1章:業務と機械学習プロジェクト',\n", 242 | " '2章:機械学習モデルの処理パターン',\n", 243 | " '3章:機械学習モデルの開発手順'\n", 244 | "]\n", 245 | "\n", 246 | "# ループ処理\n", 247 | "\n", 248 | "# 対象テキストを章番号と章タイトルに分離\n", 249 | "\n", 250 | "# 分離結果を用いて辞書登録\n" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": null, 256 | "metadata": { 257 | "id": "7Ti1ica-6JSF" 258 | }, 259 | "outputs": [], 260 | "source": [ 261 | "# (2)の結果テスト\n", 262 | "\n", 263 | "print('3章', title_dict['3章'])" 264 | ] 265 | }, 266 | { 267 | "cell_type": "markdown", 268 | "source": [ 269 | "### コラム 関数内の変数について" 270 | ], 271 | "metadata": { 272 | "id": "J-QP1zsY8y-i" 273 | } 274 | }, 275 | { 276 | "cell_type": "code", 277 | "source": [ 278 | "# 関数内変数の参照\n", 279 | "\n", 280 | "def add1(x, y):\n", 281 | " z = x + y\n", 282 | " return z\n", 283 | "\n", 284 | "z = 10\n", 285 | "print(add1(1, 2))\n", 286 | "print(z)" 287 | ], 288 | "metadata": { 289 | "id": "e_V8riqy87rS" 290 | }, 291 | "execution_count": null, 292 | "outputs": [] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "source": [ 297 | "# 関数内部から関数外部の値を参照\n", 298 | "\n", 299 | "def add2(x):\n", 300 | " w = x + z\n", 301 | " return w\n", 302 | "\n", 303 | "z = 10\n", 304 | "print(add2(1))" 305 | ], 306 | "metadata": { 307 | "id": "_OpSIhIv9LJe" 308 | }, 309 | "execution_count": null, 310 | "outputs": [] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "source": [ 315 | "# 関数内部から関数外部の値を変更しようとした場合\n", 316 | "\n", 317 | "def add3(x):\n", 318 | " w = x + z\n", 319 | " z = w\n", 320 | " return w\n", 321 | "\n", 322 | "z = 10\n", 323 | "print(add3(1))" 324 | ], 325 | "metadata": { 326 | "id": "aPtR2OFo9YN6" 327 | }, 328 | "execution_count": null, 329 | "outputs": [] 330 | } 331 | ], 332 | "metadata": { 333 | "colab": { 334 | "collapsed_sections": [], 335 | "name": "ch01_09.ipynb", 336 | "provenance": [], 337 | "toc_visible": true 338 | }, 339 | "kernelspec": { 340 | "display_name": "Python 3", 341 | "name": "python3" 342 | }, 343 | "language_info": { 344 | "name": "python" 345 | } 346 | }, 347 | "nbformat": 4, 348 | "nbformat_minor": 0 349 | } -------------------------------------------------------------------------------- /notebooks/ch01_04.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "FhWtmDWHv94I" 7 | }, 8 | "source": [ 9 | " ## 1.4  データ型と算術演算 " 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "os12doabUva9" 16 | }, 17 | "source": [ 18 | "### 1.4.1 データ型とtype関数" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "pjUJ1l8Q9W3l" 25 | }, 26 | "source": [ 27 | "#### 整数型" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "id": "vH4mkG41v0VI" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "# 変数aに整数型の値123を代入する\n", 39 | "a = 123\n", 40 | "\n", 41 | "# 値を確認する\n", 42 | "print(a)\n", 43 | "\n", 44 | "# 型を確認する\n", 45 | "print(type(a))" 46 | ] 47 | }, 48 | { 49 | "cell_type": "markdown", 50 | "metadata": { 51 | "id": "mZRBRQhJAJiG" 52 | }, 53 | "source": [ 54 | "#### 浮動小数点型" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "metadata": { 61 | "id": "GJw7AHag9rls" 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "# 変数bに整数型の値123を代入する\n", 66 | "b = 123.45\n", 67 | "\n", 68 | "# 値を確認する\n", 69 | "print(b)\n", 70 | "\n", 71 | "# 型を確認する\n", 72 | "print(type(b))" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": { 78 | "id": "xMnY7aI6FWb6" 79 | }, 80 | "source": [ 81 | "#### 文字列型" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "metadata": { 88 | "id": "oduallOo95rv" 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "# 変数cに整数型の値123を代入する\n", 93 | "c = 'xyz'\n", 94 | "\n", 95 | "# 値を確認する\n", 96 | "print(c)\n", 97 | "\n", 98 | "# 型を確認する\n", 99 | "print(type(c))" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": { 105 | "id": "n2JeUUrvLyI6" 106 | }, 107 | "source": [ 108 | "#### ブール型" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "id": "UJmikAakFkq3" 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "# 変数dにブール型の値Trueを代入する\n", 120 | "d = True\n", 121 | "\n", 122 | "# 値を確認する\n", 123 | "print(d)\n", 124 | "\n", 125 | "# 型を確認する\n", 126 | "print(type(d))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": { 132 | "id": "FxQuW-5nVAE0" 133 | }, 134 | "source": [ 135 | "### 1.4.2 算術演算" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": { 141 | "id": "MuTuaimnTDbc" 142 | }, 143 | "source": [ 144 | "#### 加算" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "id": "GpFyzD9LS-ln" 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "i1 = 10\n", 156 | "i2 = 123\n", 157 | "\n", 158 | "# 整数型同士の加算\n", 159 | "i3 = i1 + i2\n", 160 | "\n", 161 | "# 結果確認\n", 162 | "print(i3)\n", 163 | "\n", 164 | "# 型確認\n", 165 | "print(type(i3))" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": null, 171 | "metadata": { 172 | "id": "oAVg5AU5TbKN" 173 | }, 174 | "outputs": [], 175 | "source": [ 176 | "f1 = 10.01\n", 177 | "f2 = 123.45\n", 178 | "\n", 179 | "# 浮動小数点型同士の加算\n", 180 | "f3 = f1 + f2\n", 181 | "\n", 182 | "# 結果確認\n", 183 | "print(f3)\n", 184 | "\n", 185 | "# 型確認\n", 186 | "print(type(f3))" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": null, 192 | "metadata": { 193 | "id": "3cMtwTckTp19" 194 | }, 195 | "outputs": [], 196 | "source": [ 197 | "s1 = 'ABC'\n", 198 | "s2 = 'xyz'\n", 199 | "\n", 200 | "# 文字列型同士の加算\n", 201 | "s3 = s1 + s2\n", 202 | "\n", 203 | "# 結果確認\n", 204 | "print(s3)\n", 205 | "\n", 206 | "# 型確認\n", 207 | "print(type(s3))" 208 | ] 209 | }, 210 | { 211 | "cell_type": "markdown", 212 | "metadata": { 213 | "id": "gW_kSJ3iUBi_" 214 | }, 215 | "source": [ 216 | "#### 減算" 217 | ] 218 | }, 219 | { 220 | "cell_type": "code", 221 | "execution_count": null, 222 | "metadata": { 223 | "id": "7ea3T-zhT2yq" 224 | }, 225 | "outputs": [], 226 | "source": [ 227 | "i1 = 10\n", 228 | "i2 = 123\n", 229 | "\n", 230 | "# 整数型同士の減算\n", 231 | "i4 = i1 - i2\n", 232 | "\n", 233 | "# 結果確認\n", 234 | "print(i4)\n", 235 | "\n", 236 | "# 型確認\n", 237 | "print(type(i4))" 238 | ] 239 | }, 240 | { 241 | "cell_type": "markdown", 242 | "metadata": { 243 | "id": "sIWj2TO0Zzs_" 244 | }, 245 | "source": [ 246 | "#### 乗算" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": null, 252 | "metadata": { 253 | "id": "KnAo3FNGUMCl" 254 | }, 255 | "outputs": [], 256 | "source": [ 257 | "i1 = 123456789\n", 258 | "i2 = 8\n", 259 | "\n", 260 | "# 整数型同士の乗算\n", 261 | "i5 = i1 * i2\n", 262 | "\n", 263 | "# 結果確認\n", 264 | "print(i5)\n", 265 | "\n", 266 | "# 型確認\n", 267 | "print(type(i5))" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": { 273 | "id": "MwNjeWiMZ6IK" 274 | }, 275 | "source": [ 276 | "#### 除算" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": null, 282 | "metadata": { 283 | "id": "_YnC4sZjUe_D" 284 | }, 285 | "outputs": [], 286 | "source": [ 287 | "i1 = 10\n", 288 | "i2 = 7\n", 289 | "\n", 290 | "# 整数型同士の除算\n", 291 | "i6 = i1 / i2\n", 292 | "\n", 293 | "# 結果確認\n", 294 | "print(i6)\n", 295 | "\n", 296 | "# 型確認\n", 297 | "print(type(i6))" 298 | ] 299 | }, 300 | { 301 | "cell_type": "markdown", 302 | "metadata": { 303 | "id": "fop5Qg9mbVsw" 304 | }, 305 | "source": [ 306 | "#### 整数除算と余り" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": null, 312 | "metadata": { 313 | "id": "dg1FK-Tfagg2" 314 | }, 315 | "outputs": [], 316 | "source": [ 317 | "i1 = 10\n", 318 | "i2 = 7\n", 319 | "\n", 320 | "# 整数除算\n", 321 | "i7 = i1 // i2\n", 322 | "\n", 323 | "# 結果確認\n", 324 | "print(i7)\n", 325 | "\n", 326 | "# 余り\n", 327 | "i8 = i1 % i2\n", 328 | "\n", 329 | "# 結果確認\n", 330 | "print(i8)" 331 | ] 332 | }, 333 | { 334 | "cell_type": "markdown", 335 | "metadata": { 336 | "id": "UO8BtRayk_kf" 337 | }, 338 | "source": [ 339 | "#### 累乗" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": null, 345 | "metadata": { 346 | "id": "3slEIecalD1c" 347 | }, 348 | "outputs": [], 349 | "source": [ 350 | "i1 = 2\n", 351 | "i2 = 10\n", 352 | "\n", 353 | "# 累乗の計算\n", 354 | "i9 = i1 ** i2\n", 355 | "\n", 356 | "# 結果確認\n", 357 | "print(i9)" 358 | ] 359 | }, 360 | { 361 | "cell_type": "markdown", 362 | "metadata": { 363 | "id": "oX0kpdstAORZ" 364 | }, 365 | "source": [ 366 | "###1.4.3 特殊な代入演算子(累算代入演算子)" 367 | ] 368 | }, 369 | { 370 | "cell_type": "code", 371 | "execution_count": null, 372 | "metadata": { 373 | "id": "9QZMM2Hqbs-t" 374 | }, 375 | "outputs": [], 376 | "source": [ 377 | "# 変数wに値10を代入\n", 378 | "w = 10\n", 379 | "\n", 380 | "# 累算代入演算子を使ってwの値に1を加える\n", 381 | "w += 1\n", 382 | "\n", 383 | "# 結果確認\n", 384 | "print(w)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "markdown", 389 | "metadata": { 390 | "id": "nnQu1f7wLQLu" 391 | }, 392 | "source": [ 393 | "### 演習問題" 394 | ] 395 | }, 396 | { 397 | "cell_type": "markdown", 398 | "metadata": { 399 | "id": "DQ3nc8NRM418" 400 | }, 401 | "source": [ 402 | "#### 問題\n", 403 | " 変数a, b, cにそれぞれ値1000, 2000, 3000を代入します。 \n", 404 | " 次に、3つの変数それぞれを整数の範囲で7で割ったあまりを計算し、3つのあまりをすべて足した結果をdに代入して下さい。 \n", 405 | " dの計算方法はいろいろありますが、1-4-3項で説明した累算代入演算子をうまく使って計算して下さい。\n" 406 | ] 407 | }, 408 | { 409 | "cell_type": "code", 410 | "execution_count": null, 411 | "metadata": { 412 | "id": "LOCz5s24A4yf" 413 | }, 414 | "outputs": [], 415 | "source": [ 416 | "# 変数a, b, cの値をそれぞれ設定します\n", 417 | "\n", 418 | "\n", 419 | "# aを7で割った余りを変数dに代入」します\n", 420 | "\n", 421 | "\n", 422 | "# 上の結果に、累算代入演算子を利用してbを7で割ったあまりを加えて下さい\n", 423 | "\n", 424 | "\n", 425 | "# 更にその結果に、cを7で割った余りを加えます\n", 426 | "\n", 427 | "\n", 428 | "# print関数で結果を表示します。\n" 429 | ] 430 | } 431 | ], 432 | "metadata": { 433 | "colab": { 434 | "collapsed_sections": [], 435 | "provenance": [], 436 | "toc_visible": true 437 | }, 438 | "kernelspec": { 439 | "display_name": "Python 3", 440 | "name": "python3" 441 | }, 442 | "language_info": { 443 | "name": "python" 444 | } 445 | }, 446 | "nbformat": 4, 447 | "nbformat_minor": 0 448 | } -------------------------------------------------------------------------------- /notebooks/ch01_07.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "r4I-S-COjOlH" 7 | }, 8 | "source": [ 9 | "## 1.7 リストとループ処理" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "_H9Kx4dajUb0" 16 | }, 17 | "source": [ 18 | "### 1.7.1 リスト" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "lzPMQp5-kFwV" 25 | }, 26 | "source": [ 27 | "#### リスト型の定義と性質" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "id": "1QJhfsb4jcTe" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "# リスト型の定義と性質\n", 39 | "\n", 40 | "# リスト型を定義するときは\n", 41 | "# [値1, 値2, ..., 値N ]\n", 42 | "# という書き方をする\n", 43 | "l1 = [1, 3, 5, 7, 9]\n", 44 | "\n", 45 | "# リスト型の型(type)は class 'list'\n", 46 | "print(type(l1))\n", 47 | "\n", 48 | "# print関数にリスト型を直接渡すと、\n", 49 | "# すべての要素を表示してくれる\n", 50 | "print(l1)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": { 56 | "id": "8OzaukL9kJr7" 57 | }, 58 | "source": [ 59 | "#### 参照" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": null, 65 | "metadata": { 66 | "id": "VhLrgyM3kNih" 67 | }, 68 | "outputs": [], 69 | "source": [ 70 | "# リスト型の個別要素の参照\n", 71 | "\n", 72 | "# リスト型変数l1の定義\n", 73 | "l1 = [1, 3, 5, 7, 9]\n", 74 | "\n", 75 | "# 最初の要素のインデックスは0\n", 76 | "print(l1[0])\n", 77 | "\n", 78 | "# 3番目の要素のインデックスは2\n", 79 | "print(l1[2])\n", 80 | "\n", 81 | "# 最後の要素のインデックスは4\n", 82 | "print(l1[4])\n", 83 | "\n", 84 | "# 最後の要素のインデックスは-1とも書ける\n", 85 | "print(l1[-1])" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": null, 91 | "metadata": { 92 | "id": "mMvDF-l1kNrX" 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "# リスト型変数のスライス参照\n", 97 | "\n", 98 | "# リスト型変数l1の定義\n", 99 | "l1 = [1, 3, 5, 7, 9]\n", 100 | "\n", 101 | "# インデックス値1以上4未満\n", 102 | "print(l1[1:4])\n", 103 | "\n", 104 | "# 最初のインデックスを省略すると\n", 105 | "# インデックス値0を指定したのと同じ\n", 106 | "print(l1[:2])\n", 107 | "\n", 108 | "# 2番目のインデックスを省略すると\n", 109 | "# 「最後の要素まで」という意味になる\n", 110 | "print(l1[2:])\n", 111 | "\n", 112 | "# 2番目のインデックスに-1を指定すると\n", 113 | "# 「最後の要素だけ除いたすべて」になる\n", 114 | "print(l1[:-1])" 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": { 120 | "id": "4jRcwFW9kOOQ" 121 | }, 122 | "source": [ 123 | "#### 演算" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": { 129 | "id": "G0z3pxFBpeMH" 130 | }, 131 | "source": [ 132 | "##### len関数" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": { 139 | "id": "WzntEkBXkRfp" 140 | }, 141 | "outputs": [], 142 | "source": [ 143 | "# リスト型変数l2の定義\n", 144 | "# 要素をこのように文字列型にすることも可能です\n", 145 | "l2 = ['First', 'Second', 'Third']\n", 146 | "\n", 147 | "# len関数の呼び出し\n", 148 | "n = len(l2)\n", 149 | "\n", 150 | "# 結果確認\n", 151 | "print(n)" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "metadata": { 157 | "id": "MJun1ByrsCiF" 158 | }, 159 | "source": [ 160 | "##### 加法演算子「+」" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": null, 166 | "metadata": { 167 | "id": "fYK4J42TkRof" 168 | }, 169 | "outputs": [], 170 | "source": [ 171 | "# リスト変数型l1, l2の定義\n", 172 | "l1 = [1, 3, 5, 7, 9]\n", 173 | "l2 = ['First', 'Second', 'Third']\n", 174 | "\n", 175 | "# l1とl2を連結した結果をl3とする\n", 176 | "l3 = l1 + l2\n", 177 | "\n", 178 | "# 結果確認\n", 179 | "print(l3)" 180 | ] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "metadata": { 185 | "id": "3hKv-5AavPhg" 186 | }, 187 | "source": [ 188 | "##### 文字列型とリスト型の関係" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": { 195 | "id": "W07NBCWvvT7-" 196 | }, 197 | "outputs": [], 198 | "source": [ 199 | "# 文字列型変数 s1の定義\n", 200 | "s1 = 'I like an apple.'\n", 201 | "\n", 202 | "# s1のインデックス7の要素である「a」を取り出す\n", 203 | "print(s1[7])\n", 204 | "\n", 205 | "# s1からappleにあたる要素をスライス参照\n", 206 | "print(s1[10:15])" 207 | ] 208 | }, 209 | { 210 | "cell_type": "markdown", 211 | "metadata": { 212 | "id": "Zjq1Yd1pzTah" 213 | }, 214 | "source": [ 215 | "##### appendメソッド" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": null, 221 | "metadata": { 222 | "id": "mIIzFaSCzeQQ" 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "# l4の初期値として空リストを設定\n", 227 | "l4 = []\n", 228 | "\n", 229 | "# appendメソッドを使って、\n", 230 | "# 'First', 'Second', 'Third'を順にリストへ追加\n", 231 | "l4.append('First')\n", 232 | "l4.append('Second')\n", 233 | "l4.append('Third')\n", 234 | "\n", 235 | "# 結果確認\n", 236 | "print(l4)" 237 | ] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": { 242 | "id": "8qKGnU5L5SXJ" 243 | }, 244 | "source": [ 245 | "##### in演算子" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": null, 251 | "metadata": { 252 | "id": "rmdk_kLU5Zmb" 253 | }, 254 | "outputs": [], 255 | "source": [ 256 | "# リスト型変数l2の定義\n", 257 | "l2 = ['First', 'Second', 'Third']\n", 258 | "\n", 259 | "# 文字列型変数s4の定義\n", 260 | "s4 = 'Second'\n", 261 | "#s4 = 'Fourth'\n", 262 | "\n", 263 | "# In演算子による計算\n", 264 | "c = s4 in l2\n", 265 | "\n", 266 | "# 結果確認\n", 267 | "print(c)" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": { 273 | "id": "y38E0rzhjdCF" 274 | }, 275 | "source": [ 276 | "### 1.7.2 ループ処理" 277 | ] 278 | }, 279 | { 280 | "cell_type": "markdown", 281 | "metadata": { 282 | "id": "n2IdfeAGCaUL" 283 | }, 284 | "source": [ 285 | "#### 基本パターン" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": null, 291 | "metadata": { 292 | "id": "DgMW2CjajjDx" 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "# リスト型変数l2の定義\n", 297 | "l2 = ['First', 'Second', 'Third']\n", 298 | "\n", 299 | "# for文によるループ処理\n", 300 | "for e in l2:\n", 301 | " # 繰り返し処理はインデント(字下げ)する\n", 302 | " print(e)" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": null, 308 | "metadata": { 309 | "id": "BlWCMJFSLlDi" 310 | }, 311 | "outputs": [], 312 | "source": [ 313 | "# リスト型変数l2の定義\n", 314 | "l2 = ['First', 'Second', 'Third']\n", 315 | "\n", 316 | "# 最初の要素に対する処理\n", 317 | "e = l2[0]\n", 318 | "print(e)\n", 319 | "\n", 320 | "# 2番目の要素に対する処理\n", 321 | "e = l2[1]\n", 322 | "print(e)\n", 323 | "\n", 324 | "# 3番目の要素に対する処理\n", 325 | "e = l2[2]\n", 326 | "print(e)" 327 | ] 328 | }, 329 | { 330 | "cell_type": "markdown", 331 | "metadata": { 332 | "id": "G9M3FHzICeNq" 333 | }, 334 | "source": [ 335 | "#### range関数との組み合わせパターン" 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": null, 341 | "metadata": { 342 | "id": "zMAC_iopjjNI" 343 | }, 344 | "outputs": [], 345 | "source": [ 346 | "# リスト型変数l2の定義\n", 347 | "l2 = ['First', 'Second', 'Third']\n", 348 | "\n", 349 | "# 繰り返し数Nをlen関数で求める\n", 350 | "N = len(l2)\n", 351 | "\n", 352 | "# range関数を使った繰り返し処理\n", 353 | "for i in range(N):\n", 354 | " print(i, l2[i])" 355 | ] 356 | }, 357 | { 358 | "cell_type": "markdown", 359 | "metadata": { 360 | "id": "8tvCIyiCjjyY" 361 | }, 362 | "source": [ 363 | " ### 演習問題" 364 | ] 365 | }, 366 | { 367 | "cell_type": "markdown", 368 | "metadata": { 369 | "id": "bNYXBqkzWnjl" 370 | }, 371 | "source": [ 372 | " \n", 373 | " 変数s1に文字列 'サンプル文字列' を代入します。 \n", 374 | " このとき、range関数やループ処理をうまく使って、次のような結果を出力するプログラムを作って下さい。 \n", 375 | "\n", 376 | "```\n", 377 | "1 番目の文字は  サ\n", 378 | "2 番目の文字は  ン\n", 379 | "3 番目の文字は  プ\n", 380 | "4 番目の文字は  ル\n", 381 | "5 番目の文字は  文\n", 382 | "6 番目の文字は  字\n", 383 | "7 番目の文字は  列\n", 384 | "```" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": null, 390 | "metadata": { 391 | "id": "-wONi1SNWm1d" 392 | }, 393 | "outputs": [], 394 | "source": [ 395 | "# 変数s1に文字列を代入します\n", 396 | "\n", 397 | "\n", 398 | "# 文字数を計算します\n", 399 | "\n", 400 | "\n", 401 | "# range関数を使ってループ処理をします\n", 402 | "\n", 403 | "# print関数には3つの引数を渡して表示します\n" 404 | ] 405 | } 406 | ], 407 | "metadata": { 408 | "colab": { 409 | "collapsed_sections": [], 410 | "provenance": [], 411 | "toc_visible": true 412 | }, 413 | "kernelspec": { 414 | "display_name": "Python 3", 415 | "name": "python3" 416 | }, 417 | "language_info": { 418 | "name": "python" 419 | } 420 | }, 421 | "nbformat": 4, 422 | "nbformat_minor": 0 423 | } -------------------------------------------------------------------------------- /notebooks/ch02_03.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "collapsed_sections": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 2.3 Matplotlib入門" 23 | ], 24 | "metadata": { 25 | "id": "VO5CrofsmY4D" 26 | } 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "source": [ 31 | "### 2.3.2 ライブラリの利用と日本語化" 32 | ], 33 | "metadata": { 34 | "id": "VIVQupQWrchT" 35 | } 36 | }, 37 | { 38 | "cell_type": "code", 39 | "source": [ 40 | "# 事前処理\n", 41 | "\n", 42 | "# 必要ライブラリのimport\n", 43 | "import numpy as np\n", 44 | "\n", 45 | "# NumPy表示形式の設定\n", 46 | "np.set_printoptions(\n", 47 | " suppress=True, precision=4, floatmode='fixed'\n", 48 | ")" 49 | ], 50 | "metadata": { 51 | "id": "uuUeYQ6kozBb" 52 | }, 53 | "execution_count": null, 54 | "outputs": [] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "source": [ 59 | "# 日本語化ライブラリ導入\n", 60 | "!pip install japanize-matplotlib | tail -n 1" 61 | ], 62 | "metadata": { 63 | "id": "vu7oNbwYrooS" 64 | }, 65 | "execution_count": null, 66 | "outputs": [] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "source": [ 71 | "# Matplotlib中のpyplotライブラリのインポート\n", 72 | "import matplotlib.pyplot as plt\n", 73 | "\n", 74 | "# matplotlib日本語化対応ライブラリのインポート\n", 75 | "import japanize_matplotlib" 76 | ], 77 | "metadata": { 78 | "id": "3cgSK-Gx-O4a" 79 | }, 80 | "execution_count": null, 81 | "outputs": [] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "source": [ 86 | "# グラフのデフォルトフォント指定\n", 87 | "plt.rcParams[\"font.size\"] = 14\n", 88 | "\n", 89 | "# サイズ設定\n", 90 | "plt.rcParams['figure.figsize'] = (6, 6)" 91 | ], 92 | "metadata": { 93 | "id": "MxpPCirB-dMB" 94 | }, 95 | "execution_count": null, 96 | "outputs": [] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "source": [ 101 | "### 2.3.3 scatter(散布図)" 102 | ], 103 | "metadata": { 104 | "id": "n7RGkqJUr1oD" 105 | } 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "source": [ 110 | "#### データ準備" 111 | ], 112 | "metadata": { 113 | "id": "FqEitLyD5Fr8" 114 | } 115 | }, 116 | { 117 | "cell_type": "code", 118 | "source": [ 119 | "# グラフ描画用のデータをライブラリを用いて取得する\n", 120 | "from sklearn.datasets import load_iris\n", 121 | "iris = load_iris()\n", 122 | "x, y = iris.data, iris.target\n", 123 | "columns = iris.feature_names\n", 124 | "\n", 125 | "# x, y, columnsの型を確認\n", 126 | "print(type(x), type(y), type(columns))" 127 | ], 128 | "metadata": { 129 | "id": "ouJJbmvuo7Kd" 130 | }, 131 | "execution_count": null, 132 | "outputs": [] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "source": [ 137 | "# 読み込んだデータの確認\n", 138 | "\n", 139 | "# xとyのshape確認\n", 140 | "print(x.shape, y.shape)\n", 141 | "\n", 142 | "# xの先頭5行\n", 143 | "print(x[:5])\n", 144 | "\n", 145 | "# yの先頭5行\n", 146 | "print(y[:5])\n", 147 | "\n", 148 | "# columnsの内容\n", 149 | "print(columns)" 150 | ], 151 | "metadata": { 152 | "id": "dP29zLePpa6H" 153 | }, 154 | "execution_count": null, 155 | "outputs": [] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "source": [ 160 | "#### 簡単な散布図" 161 | ], 162 | "metadata": { 163 | "id": "LiVWUyXZ5Lt2" 164 | } 165 | }, 166 | { 167 | "cell_type": "code", 168 | "source": [ 169 | "# 簡単な散布図\n", 170 | "\n", 171 | "# scatter関数呼び出し\n", 172 | "plt.scatter(x[:,0], x[:,2])\n", 173 | "\n", 174 | "# 描画\n", 175 | "plt.show()" 176 | ], 177 | "metadata": { 178 | "id": "qOQGLWwEpcks" 179 | }, 180 | "execution_count": null, 181 | "outputs": [] 182 | }, 183 | { 184 | "cell_type": "markdown", 185 | "source": [ 186 | "#### やや複雑な散布図" 187 | ], 188 | "metadata": { 189 | "id": "6cWNQtfh5RHs" 190 | } 191 | }, 192 | { 193 | "cell_type": "code", 194 | "source": [ 195 | "# やや複雑な散布図\n", 196 | "\n", 197 | "# scatter関数呼び出し (yの値で色を変える)\n", 198 | "plt.scatter(x[:,0], x[:,2], c=y, cmap='rainbow')\n", 199 | "\n", 200 | "# 方眼表示\n", 201 | "plt.grid()\n", 202 | "\n", 203 | "# 軸名称表示\n", 204 | "plt.xlabel(columns[0])\n", 205 | "plt.ylabel(columns[2])\n", 206 | "\n", 207 | "# タイトル表示\n", 208 | "plt.title('アイリスデータセットによる散布図')\n", 209 | "\n", 210 | "# 描画\n", 211 | "plt.show()" 212 | ], 213 | "metadata": { 214 | "id": "OtWSmVYFpxz4" 215 | }, 216 | "execution_count": null, 217 | "outputs": [] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "source": [ 222 | "### 2.3.4 plot(関数グラフ)" 223 | ], 224 | "metadata": { 225 | "id": "9y9tmqOus3wp" 226 | } 227 | }, 228 | { 229 | "cell_type": "markdown", 230 | "source": [ 231 | "#### データ準備" 232 | ], 233 | "metadata": { 234 | "id": "3RdtP6K05X1q" 235 | } 236 | }, 237 | { 238 | "cell_type": "code", 239 | "source": [ 240 | "# xの配列の準備\n", 241 | "x = np.linspace(0, 2, 11)\n", 242 | "print(x)\n", 243 | "\n", 244 | "# y=sqrt(x)の計算\n", 245 | "y = np.sqrt(x)\n", 246 | "print(y)" 247 | ], 248 | "metadata": { 249 | "id": "HiTYzYhCaDCY" 250 | }, 251 | "execution_count": null, 252 | "outputs": [] 253 | }, 254 | { 255 | "cell_type": "markdown", 256 | "source": [ 257 | "#### 簡単な関数グラフ" 258 | ], 259 | "metadata": { 260 | "id": "uJ7FJcOX5fNx" 261 | } 262 | }, 263 | { 264 | "cell_type": "code", 265 | "source": [ 266 | "# 簡単な関数グラフ描画\n", 267 | "\n", 268 | "# plot関数呼び出し\n", 269 | "plt.plot(x, y)\n", 270 | "\n", 271 | "# 描画\n", 272 | "plt.show()" 273 | ], 274 | "metadata": { 275 | "id": "Ia83F8nPwGcP" 276 | }, 277 | "execution_count": null, 278 | "outputs": [] 279 | }, 280 | { 281 | "cell_type": "markdown", 282 | "source": [ 283 | "#### やや複雑な関数グラフ" 284 | ], 285 | "metadata": { 286 | "id": "7nybu0Uu5lCb" 287 | } 288 | }, 289 | { 290 | "cell_type": "code", 291 | "source": [ 292 | "# データ準備\n", 293 | "\n", 294 | "# xの配列の準備\n", 295 | "x = np.linspace(0, 2, 101)\n", 296 | "\n", 297 | "# yの配列の準備\n", 298 | "y1 = np.sqrt(x) # ルート関数\n", 299 | "y2 = x ** 2 # 2次関数" 300 | ], 301 | "metadata": { 302 | "id": "_CGsqV8yyuhf" 303 | }, 304 | "execution_count": null, 305 | "outputs": [] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "source": [ 310 | "# やや複雑な関数グラフの描画\n", 311 | "\n", 312 | "# plot関数を2回続けて呼び出すと重ね描きになる\n", 313 | "# label引数は、凡例表示をする場合に必要\n", 314 | "plt.plot(x, y1, label='ルート関数')\n", 315 | "plt.plot(x, y2, label='2次関数')\n", 316 | "\n", 317 | "# 凡例表示\n", 318 | "plt.legend()\n", 319 | "\n", 320 | "plt.grid()\n", 321 | "plt.xlabel('x')\n", 322 | "plt.ylabel('y')\n", 323 | "plt.title('2つの関数グラフの重ね描き')\n", 324 | "plt.show()" 325 | ], 326 | "metadata": { 327 | "id": "TyXb8TWKwZUE" 328 | }, 329 | "execution_count": null, 330 | "outputs": [] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "source": [ 335 | "### 2.3.5 複数グラフ表示" 336 | ], 337 | "metadata": { 338 | "id": "uhfBkvxFz2Aw" 339 | } 340 | }, 341 | { 342 | "cell_type": "markdown", 343 | "source": [ 344 | "#### データ準備" 345 | ], 346 | "metadata": { 347 | "id": "r-VfxODl5unZ" 348 | } 349 | }, 350 | { 351 | "cell_type": "code", 352 | "source": [ 353 | "from sklearn.datasets import load_iris\n", 354 | "iris = load_iris()\n", 355 | "x, y = iris.data, iris.target\n", 356 | "columns = iris.feature_names\n", 357 | "print(x[:5])" 358 | ], 359 | "metadata": { 360 | "id": "XoS6kScDwnrE" 361 | }, 362 | "execution_count": null, 363 | "outputs": [] 364 | }, 365 | { 366 | "cell_type": "markdown", 367 | "source": [ 368 | "#### 複数グラフ描画" 369 | ], 370 | "metadata": { 371 | "id": "Q_oOpjXK5yHn" 372 | } 373 | }, 374 | { 375 | "cell_type": "code", 376 | "source": [ 377 | "# サイズ指定\n", 378 | "plt.figure(figsize=(15, 5))\n", 379 | "\n", 380 | "# 3回ループを回す\n", 381 | "for i in range(1, 4): \n", 382 | " \n", 383 | " # i 番目のax変数取得\n", 384 | " ax = plt.subplot(1, 3, i)\n", 385 | " \n", 386 | " # 散布図表示\n", 387 | " ax.scatter(x[:,0], x[:,i], c=y, cmap='rainbow')\n", 388 | " \n", 389 | " # タイトル表示\n", 390 | " ax.set_title(columns[0] + ' vs ' + columns[i])\n", 391 | " \n", 392 | " ax.grid() \n", 393 | "# 隣接オブジェクトとぶつからないようにする\n", 394 | "plt.tight_layout()\n", 395 | "\n", 396 | "# 表示\n", 397 | "plt.show() " 398 | ], 399 | "metadata": { 400 | "id": "olp-TZCx0FvA" 401 | }, 402 | "execution_count": null, 403 | "outputs": [] 404 | }, 405 | { 406 | "cell_type": "markdown", 407 | "source": [ 408 | "### 演習問題\n", 409 | " アイリスデータセットの変数x, y, columnsを前提に、4つの項目すべての組み合わせで、 4x4の散布図を表示するプログラムをコーディングしなさい。 \n", 410 | "(ヒント) Matplotlibのsubplot関数を利用します。 \n", 411 | "同じ項目同士の散布図は統計的には意味がないのですが、実装を簡単にするため、そのまま表示して構わないものとします。\n" 412 | ], 413 | "metadata": { 414 | "id": "Np1LhBOpP9wm" 415 | } 416 | }, 417 | { 418 | "cell_type": "code", 419 | "source": [ 420 | "# 項目数の計算\n", 421 | "N = x.shape[1]\n", 422 | "\n", 423 | "# figsize計算用パラメータ(1要素あたりの大きさ)\n", 424 | "u = 5\n", 425 | "\n", 426 | "# 描画領域全体の設定\n", 427 | "plt.figure(figsize=(u*N, u*N))\n", 428 | "\n", 429 | "for i in range(N):\n", 430 | " for j in range(N):\n", 431 | "  # この部分をコーディングします\n", 432 | "\n", 433 | "\n", 434 | "\n", 435 | "\n", 436 | "\n", 437 | "# 隣接オブジェクトとぶつからないようにする\n", 438 | "plt.tight_layout()\n", 439 | "\n", 440 | "# 表示\n", 441 | "plt.show() " 442 | ], 443 | "metadata": { 444 | "id": "AklwQU8tQCVB" 445 | }, 446 | "execution_count": null, 447 | "outputs": [] 448 | } 449 | ] 450 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /notebooks/ch03_05.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "collapsed_sections": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 3.5 データ可視化\n" 23 | ], 24 | "metadata": { 25 | "id": "nTFdqfnumagH" 26 | } 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "source": [ 31 | "### 共通処理" 32 | ], 33 | "metadata": { 34 | "id": "9Ooofp9zmsz-" 35 | } 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": { 41 | "id": "m5UgSKVHmMg-" 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "# 日本語化ライブラリ導入\n", 46 | "!pip install japanize-matplotlib | tail -n 1" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "source": [ 52 | "# ライブラリのimport\n", 53 | "\n", 54 | "# NumPy用ライブラリ\n", 55 | "import numpy as np\n", 56 | "\n", 57 | "# Matplotlib中のpyplotライブラリのインポート\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "\n", 60 | "# matplotlib日本語化対応ライブラリのインポート\n", 61 | "import japanize_matplotlib\n", 62 | "\n", 63 | "# pandas用ライブラリ\n", 64 | "import pandas as pd\n", 65 | "\n", 66 | "# データフレーム表示用関数\n", 67 | "from IPython.display import display" 68 | ], 69 | "metadata": { 70 | "id": "-3BhNEKumyAq" 71 | }, 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "source": [ 78 | "# 表示オプション調整\n", 79 | "\n", 80 | "# NumPy表示形式の設定\n", 81 | "np.set_printoptions(\n", 82 | " suppress=True, precision=4, floatmode='fixed'\n", 83 | ")\n", 84 | "\n", 85 | "# グラフのデフォルトフォント指定\n", 86 | "plt.rcParams[\"font.size\"] = 14\n", 87 | "\n", 88 | "# サイズ設定\n", 89 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 90 | "\n", 91 | "# 方眼表示ON\n", 92 | "plt.rcParams['axes.grid'] = True\n", 93 | "\n", 94 | "\n", 95 | "# データフレームでの表示精度\n", 96 | "pd.options.display.float_format = '{:.4f}'.format\n", 97 | "\n", 98 | "# データフレームですべての項目を表示\n", 99 | "pd.set_option(\"display.max_columns\",None)" 100 | ], 101 | "metadata": { 102 | "id": "bPlIqDzHm06K" 103 | }, 104 | "execution_count": null, 105 | "outputs": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "source": [ 110 | "### 3.5.1 CSVファイルの読み込み" 111 | ], 112 | "metadata": { 113 | "id": "qfB_7a_qm-V2" 114 | } 115 | }, 116 | { 117 | "cell_type": "code", 118 | "source": [ 119 | "url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/bridges/bridges.data.version1'\n", 120 | "cols_jp = [\n", 121 | " 'ID', '川コード', '位置', '竣工年', '目的', '長さ', '車線数', '垂直クリアランス',\n", 122 | " '道路位置', '建築資材', '長さ区分', '相対長', '橋種別'\n", 123 | "]\n", 124 | "\n", 125 | "# データ読み込み\n", 126 | "df = pd.read_csv(\n", 127 | " url, header=None,\n", 128 | " names=cols_jp, na_values='?',\n", 129 | " index_col='ID')\n", 130 | "\n", 131 | "display(df.head())" 132 | ], 133 | "metadata": { 134 | "id": "NZj0n-6-m48I" 135 | }, 136 | "execution_count": null, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "source": [ 142 | "### 3.5.2 ヒストグラム(hist メソッド)" 143 | ], 144 | "metadata": { 145 | "id": "G6daXbMfrouH" 146 | } 147 | }, 148 | { 149 | "cell_type": "code", 150 | "source": [ 151 | "# 数値項目のヒストグラム表示(簡易版)\n", 152 | "df.hist()\n", 153 | "plt.show()" 154 | ], 155 | "metadata": { 156 | "id": "ih6IrHkETBke" 157 | }, 158 | "execution_count": null, 159 | "outputs": [] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "source": [ 164 | "# 数値項目のヒストグラム表示(見た目を配慮した版)\n", 165 | "plt.rcParams['figure.figsize'] = (15, 4)\n", 166 | "df.hist(bins=20, layout=(1, 4))\n", 167 | "plt.tight_layout()\n", 168 | "plt.show()" 169 | ], 170 | "metadata": { 171 | "id": "2-JK5poAn6we" 172 | }, 173 | "execution_count": null, 174 | "outputs": [] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "source": [ 179 | "### 3.5.3 棒グラフによる頻度表示(plotメソッド)" 180 | ], 181 | "metadata": { 182 | "id": "Oa2jm6YvtIlC" 183 | } 184 | }, 185 | { 186 | "cell_type": "code", 187 | "source": [ 188 | "# 「長さ区分」の頻度表示\n", 189 | "plt.rcParams['figure.figsize'] = (4, 4)\n", 190 | "c = '長さ区分'\n", 191 | "df[c].value_counts().plot(kind='bar', title=c)\n", 192 | "plt.show()" 193 | ], 194 | "metadata": { 195 | "id": "OdsEFgO7sscn" 196 | }, 197 | "execution_count": null, 198 | "outputs": [] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "source": [ 203 | "# データフレームの項目名を抽出\n", 204 | "col = df.columns\n", 205 | "\n", 206 | "# データ型がobjectの項目のみ抽出\n", 207 | "col2 = col[df.dtypes == object]\n", 208 | "\n", 209 | "# データフレームを該当列のみに絞り込み\n", 210 | "df2 = df[col2]\n", 211 | "\n", 212 | "# 結果確認\n", 213 | "display(df2.head(2))" 214 | ], 215 | "metadata": { 216 | "id": "IknAzoTnz4hi" 217 | }, 218 | "execution_count": null, 219 | "outputs": [] 220 | }, 221 | { 222 | "cell_type": "code", 223 | "source": [ 224 | "# ループを回して全カテゴリ項目で頻度表示をする\n", 225 | "\n", 226 | "# グラフ描画領域の調整\n", 227 | "plt.rcParams['figure.figsize'] = (12, 8)\n", 228 | "\n", 229 | "# 対象項目の絞り込み\n", 230 | "df2 = df[df.columns[df.dtypes == object]]\n", 231 | "\n", 232 | "# ループ処理で、ヒストグラムの表示\n", 233 | "for i, c in enumerate(df2.columns):\n", 234 | " ax = plt.subplot(2, 4, i+1)\n", 235 | " df2[c].value_counts().plot(\n", 236 | " kind='bar', title=c, ax=ax)\n", 237 | "# レイアウトの調整\n", 238 | "plt.tight_layout()\n", 239 | "plt.show()" 240 | ], 241 | "metadata": { 242 | "id": "iAkEkrBNtt7e" 243 | }, 244 | "execution_count": null, 245 | "outputs": [] 246 | }, 247 | { 248 | "cell_type": "markdown", 249 | "source": [ 250 | " ### 3.5.4 箱ひげ図(boxplot関数)" 251 | ], 252 | "metadata": { 253 | "id": "y82S_7j3uzyz" 254 | } 255 | }, 256 | { 257 | "cell_type": "code", 258 | "source": [ 259 | "# seabornのインポート\n", 260 | "import seaborn as sns" 261 | ], 262 | "metadata": { 263 | "id": "1lZhWfS2uJTI" 264 | }, 265 | "execution_count": null, 266 | "outputs": [] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "source": [ 271 | "# 箱ひげ図の描画\n", 272 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 273 | "sns.boxplot(\n", 274 | " x='建築資材', y='竣工年', data=df,\n", 275 | " order=['WOOD', 'IRON', 'STEEL'])\n", 276 | "plt.title('建築資材と竣工年の関係')\n", 277 | "plt.show()" 278 | ], 279 | "metadata": { 280 | "id": "8aYjVB11u8mw" 281 | }, 282 | "execution_count": null, 283 | "outputs": [] 284 | }, 285 | { 286 | "cell_type": "markdown", 287 | "source": [ 288 | "### 3.5.5 散布図(scatterplot関数)" 289 | ], 290 | "metadata": { 291 | "id": "xU7BQ_O3wIYq" 292 | } 293 | }, 294 | { 295 | "cell_type": "code", 296 | "source": [ 297 | "# scatterplot関数による散布図\n", 298 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 299 | "sns.scatterplot(\n", 300 | " x='竣工年', y='長さ', data=df, hue='建築資材',\n", 301 | " hue_order=['WOOD', 'IRON', 'STEEL'],\n", 302 | " s=150, style='建築資材')\n", 303 | "plt.title('竣工年と長さの関係')\n", 304 | "plt.show()" 305 | ], 306 | "metadata": { 307 | "id": "dwyCUzJGvOyg" 308 | }, 309 | "execution_count": null, 310 | "outputs": [] 311 | }, 312 | { 313 | "cell_type": "markdown", 314 | "source": [ 315 | "### 3.5.6 ヒストグラム(histplot関数)" 316 | ], 317 | "metadata": { 318 | "id": "QGHJULho1vqR" 319 | } 320 | }, 321 | { 322 | "cell_type": "code", 323 | "source": [ 324 | "# 竣工年による建築資材の推移\n", 325 | "plt.rcParams['figure.figsize'] = (8, 4)\n", 326 | "sns.histplot(\n", 327 | " data=df, x='竣工年', hue='建築資材', \n", 328 | " palette=['blue', 'cyan', 'grey'], multiple='dodge', \n", 329 | " shrink=0.7)\n", 330 | "plt.title('竣工年による建築資材の推移')\n", 331 | "plt.show()" 332 | ], 333 | "metadata": { 334 | "id": "TBszxtny03My" 335 | }, 336 | "execution_count": null, 337 | "outputs": [] 338 | }, 339 | { 340 | "cell_type": "markdown", 341 | "source": [ 342 | "### 3.5.7 ヒートマップ(heatmap関数)" 343 | ], 344 | "metadata": { 345 | "id": "ARZCuiMMzT4f" 346 | } 347 | }, 348 | { 349 | "cell_type": "code", 350 | "source": [ 351 | "# クロス集計表の生成\n", 352 | "pv = pd.crosstab(\n", 353 | " index=df['長さ区分'], columns=df['橋種別'])\n", 354 | "display(pv)" 355 | ], 356 | "metadata": { 357 | "id": "76faW_NSurkA" 358 | }, 359 | "execution_count": null, 360 | "outputs": [] 361 | }, 362 | { 363 | "cell_type": "code", 364 | "source": [ 365 | "# ヒートマップ表示\n", 366 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 367 | "sns.heatmap(\n", 368 | " pv,square=True,annot=True,\n", 369 | " fmt='d',cmap='Blues', cbar=False)\n", 370 | "xlabel = pv.columns.name\n", 371 | "ylabel = pv.index.name\n", 372 | "plt.title(xlabel+ ' vs '+ylabel)\n", 373 | "plt.xlabel(xlabel)\n", 374 | "plt.ylabel(ylabel)\n", 375 | "plt.show()" 376 | ], 377 | "metadata": { 378 | "id": "EzPC12tayJ4f" 379 | }, 380 | "execution_count": null, 381 | "outputs": [] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "source": [ 386 | "### 演習問題" 387 | ], 388 | "metadata": { 389 | "id": "4nuu0MUP0sAw" 390 | } 391 | }, 392 | { 393 | "cell_type": "markdown", 394 | "source": [ 395 | "(1) 「目的」と「橋種別」を軸とする出現頻度のクロス集計表を作り、結果を dispaly関数で表示して下さい。\n", 396 | "\n", 397 | "(2) (1)で作ったクロス集計表をヒートマップ表示して下さい。" 398 | ], 399 | "metadata": { 400 | "id": "tFj7NJQkYz-a" 401 | } 402 | }, 403 | { 404 | "cell_type": "code", 405 | "source": [ 406 | "# (1) 「目的」と「橋種別」を軸とする出現頻度のクロス集計表\n", 407 | "\n", 408 | "pv = \n", 409 | "\n", 410 | "display(pv)" 411 | ], 412 | "metadata": { 413 | "id": "uh2OVqvF0YVr" 414 | }, 415 | "execution_count": null, 416 | "outputs": [] 417 | }, 418 | { 419 | "cell_type": "code", 420 | "source": [ 421 | "# (2) (1)で作ったクロス集計表のヒートマップ表示\n", 422 | "\n", 423 | "\n", 424 | "\n", 425 | "\n", 426 | "\n", 427 | "\n", 428 | "plt.show()" 429 | ], 430 | "metadata": { 431 | "id": "IhRScIfhZBzB" 432 | }, 433 | "execution_count": null, 434 | "outputs": [] 435 | } 436 | ] 437 | } -------------------------------------------------------------------------------- /notebooks/ch03_02.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "collapsed_sections": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 3.2 データ読み込み" 23 | ], 24 | "metadata": { 25 | "id": "oRhCOwECUwoc" 26 | } 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "source": [ 31 | "### 共通処理" 32 | ], 33 | "metadata": { 34 | "id": "PGOdr-6qp4J4" 35 | } 36 | }, 37 | { 38 | "cell_type": "code", 39 | "source": [ 40 | "# 日本語化ライブラリ導入\n", 41 | "!pip install japanize-matplotlib | tail -n 1" 42 | ], 43 | "metadata": { 44 | "id": "JtnbytXUp9js" 45 | }, 46 | "execution_count": null, 47 | "outputs": [] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "source": [ 52 | "# ライブラリのimport\n", 53 | "\n", 54 | "# NumPy用ライブラリ\n", 55 | "import numpy as np\n", 56 | "\n", 57 | "# Matplotlib中のpyplotライブラリのインポート\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "\n", 60 | "# matplotlib日本語化対応ライブラリのインポート\n", 61 | "import japanize_matplotlib\n", 62 | "\n", 63 | "# pandas用ライブラリ\n", 64 | "import pandas as pd\n", 65 | "\n", 66 | "# データフレーム表示用関数\n", 67 | "from IPython.display import display" 68 | ], 69 | "metadata": { 70 | "id": "eDLGNoMuWiXW" 71 | }, 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "source": [ 78 | "# 表示オプション調整\n", 79 | "\n", 80 | "# NumPy表示形式の設定\n", 81 | "np.set_printoptions(\n", 82 | " suppress=True, precision=4, floatmode='fixed'\n", 83 | ")\n", 84 | "\n", 85 | "# グラフのデフォルトフォント指定\n", 86 | "plt.rcParams[\"font.size\"] = 14\n", 87 | "\n", 88 | "# サイズ設定\n", 89 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 90 | "\n", 91 | "# 方眼表示ON\n", 92 | "plt.rcParams['axes.grid'] = True\n", 93 | "\n", 94 | "# データフレームでの表示精度\n", 95 | "pd.options.display.float_format = '{:.4f}'.format\n", 96 | "\n", 97 | "# データフレームですべての項目を表示\n", 98 | "pd.set_option(\"display.max_columns\",None)" 99 | ], 100 | "metadata": { 101 | "id": "UVsnbqfzWtOq" 102 | }, 103 | "execution_count": null, 104 | "outputs": [] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "source": [ 109 | "### 3.2.2 CSVファイルの読み込み\n", 110 | "オリジナルサイト\n", 111 | "\n", 112 | "https://archive.ics.uci.edu/ml/datasets/Pittsburgh+Bridges\n", 113 | "\n", 114 | "\n" 115 | ], 116 | "metadata": { 117 | "id": "-Kz1WAdMVLiU" 118 | } 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "source": [ 123 | "項目説明\n", 124 | "\n", 125 | "https://www.kaggle.com/datasets/heitornunes/pittsburgh-bridges-data-set\n", 126 | "\n", 127 | "id: Bridge's Identifier.\n", 128 | "\n", 129 | "river: River of the bridge.\n", 130 | "{A : Allegheny,\n", 131 | "M : Monongahela,\n", 132 | "O : Ohio}\n", 133 | "\n", 134 | "location: Bridge's Location. / 1 - 52\n", 135 | "\n", 136 | "erected: Bridge's construction year. / 1818 - 1986\n", 137 | "{CRAFTS: 1818 - 1866,\n", 138 | "EMERGING: 1870 - 1889,\n", 139 | "MATURE: 1890 - 1939,\n", 140 | "MODERN: 1945 - 1986}\n", 141 | "\n", 142 | "purpose: Bridge's purpose.\n", 143 | "{WALK,\n", 144 | "AQUEDUCT,\n", 145 | "RR (Railroad),\n", 146 | "HIGHWAY}\n", 147 | "\n", 148 | "length: Bridge's length / 804-4558\n", 149 | "{SHORT : 804 - 990,\n", 150 | "MEDIUM : 1000 - 1850,\n", 151 | "LONG : 2000 - 4558}\n", 152 | "\n", 153 | "Lanes: Bridge's lanes / 1, 2, 4 and 6\n", 154 | "\n", 155 | "clear-g: Vertical clearance requirement was enforced in the design.\n", 156 | "{N: Not Enforced,\n", 157 | "G: Enforced}\n", 158 | "\n", 159 | "B) Design properties\n", 160 | "\n", 161 | "t-or-d: The roadway location on the bridge.\n", 162 | "{THROUGH,\n", 163 | "DECK}\n", 164 | "\n", 165 | "material: Bridge's predominant material.\n", 166 | "{WOOD,\n", 167 | "IRON,\n", 168 | "STEEL}\n", 169 | "\n", 170 | "span: Bridge's span.\n", 171 | "{SHORT,\n", 172 | "MEDIUM,\n", 173 | "LONG}\n", 174 | "\n", 175 | "rel-l: Relative length of the span to the crossing length.\n", 176 | "{S: Short,\n", 177 | "S-F: Short-Full,\n", 178 | "F: Full}\n", 179 | "\n", 180 | "type: Bridge's type.\n", 181 | "{WOOD,\n", 182 | "SUSPEN (Suspension),\n", 183 | "SIMPLE-T (Simple Truss),\n", 184 | "ARCH,\n", 185 | "CANTILEV (Cantilever),\n", 186 | "CONT-T (Continuous Truss)}\n", 187 | "\n", 188 | "Source:\n", 189 | "https://archive.ics.uci.edu/ml/datasets/Pittsburgh+Bridges\n", 190 | "\n", 191 | "Reich, Yoram, and Steven J. Fenves. \"The formation and use of abstract concepts in design.\" Concept Formation. Morgan Kaufmann, 1991. 323-353.\n", 192 | "Reich, Yoram. \"Combining nominal and continuous properties in an incremental learning system for design.\" (1989)." 193 | ], 194 | "metadata": { 195 | "id": "XhigtyLjdYXv" 196 | } 197 | }, 198 | { 199 | "cell_type": "markdown", 200 | "source": [ 201 | "#### データの内容確認" 202 | ], 203 | "metadata": { 204 | "id": "J3G46-3XVAlx" 205 | } 206 | }, 207 | { 208 | "cell_type": "code", 209 | "source": [ 210 | "# データの内容確認\n", 211 | "\n", 212 | "# URL指定\n", 213 | "url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/bridges/bridges.data.version1'\n", 214 | "\n", 215 | "# ファイルダウンロード\n", 216 | "!wget -nc $url\n", 217 | "\n", 218 | "# 内容確認\n", 219 | "!head -2 bridges.data.version1" 220 | ], 221 | "metadata": { 222 | "id": "tADrEuc8zUIN" 223 | }, 224 | "execution_count": null, 225 | "outputs": [] 226 | }, 227 | { 228 | "cell_type": "markdown", 229 | "source": [ 230 | "#### read_csv関数の実行" 231 | ], 232 | "metadata": { 233 | "id": "dmfpq7ozVIV1" 234 | } 235 | }, 236 | { 237 | "cell_type": "code", 238 | "source": [ 239 | "# 列名定義\n", 240 | "columns = [\n", 241 | " 'ID', 'RIVER', 'LOCATION', 'ERECTED', 'PURPOSE',\n", 242 | " 'LENGTH', 'LANES', 'CLEAR-G', 'T-OR-D', 'MATERIAL',\n", 243 | " 'SPAN', 'REL-L', 'TYPE'\n", 244 | "]" 245 | ], 246 | "metadata": { 247 | "id": "Hvn82b6YcaCa" 248 | }, 249 | "execution_count": null, 250 | "outputs": [] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "id": "iTfaJR0lUu9b" 257 | }, 258 | "outputs": [], 259 | "source": [ 260 | "# データ読み込み\n", 261 | "df1 = pd.read_csv(\n", 262 | " url, header=None, names=columns)\n", 263 | "display(df1.head())" 264 | ] 265 | }, 266 | { 267 | "cell_type": "markdown", 268 | "source": [ 269 | "#### na_valuesオプションの追加" 270 | ], 271 | "metadata": { 272 | "id": "Aqz_yLuZVcON" 273 | } 274 | }, 275 | { 276 | "cell_type": "code", 277 | "source": [ 278 | "# na_valuesオプション追加\n", 279 | "df2 = pd.read_csv(\n", 280 | " url, na_values='?', header=None,\n", 281 | " names=columns)\n", 282 | "display(df2.head())" 283 | ], 284 | "metadata": { 285 | "id": "D4QjAYVbW0Zu" 286 | }, 287 | "execution_count": null, 288 | "outputs": [] 289 | }, 290 | { 291 | "cell_type": "markdown", 292 | "source": [ 293 | "### index_colオプションの追加" 294 | ], 295 | "metadata": { 296 | "id": "HeR3QnWlc-GD" 297 | } 298 | }, 299 | { 300 | "cell_type": "code", 301 | "source": [ 302 | "# index_colオプションの追加\n", 303 | "df3 = pd.read_csv(\n", 304 | " url, na_values='?', header=None,\n", 305 | " names=columns, index_col='ID')\n", 306 | "display(df3.head())" 307 | ], 308 | "metadata": { 309 | "id": "W9ed07vgh9B3" 310 | }, 311 | "execution_count": null, 312 | "outputs": [] 313 | }, 314 | { 315 | "cell_type": "markdown", 316 | "source": [ 317 | "### 3.2.4 CSV・Excelファイルへの出力" 318 | ], 319 | "metadata": { 320 | "id": "MUSdyyBt2-mj" 321 | } 322 | }, 323 | { 324 | "cell_type": "code", 325 | "source": [ 326 | "# データフレームdf2をCSVファイルとして保存\n", 327 | "# この場合はindex=Falseオプションを付ける\n", 328 | "df2.to_csv('bridge2.csv', index=False)" 329 | ], 330 | "metadata": { 331 | "id": "h6q7WP_i3rg-" 332 | }, 333 | "execution_count": null, 334 | "outputs": [] 335 | }, 336 | { 337 | "cell_type": "code", 338 | "source": [ 339 | "# データフレームdf3をCSVファイルとして保存\n", 340 | "# 今回はIndex=Falseは付けない\n", 341 | "df3.to_csv('bridge3.csv')" 342 | ], 343 | "metadata": { 344 | "id": "pWwkBW-0ikc-" 345 | }, 346 | "execution_count": null, 347 | "outputs": [] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "source": [ 352 | "# データフレームdf2をExcelとして保存\n", 353 | "df2.to_excel('bridge2.xlsx', index=False)" 354 | ], 355 | "metadata": { 356 | "id": "8_ukSj9m7378" 357 | }, 358 | "execution_count": null, 359 | "outputs": [] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "source": [ 364 | "# 結果確認\n", 365 | "!ls " 366 | ], 367 | "metadata": { 368 | "id": "gOyJXxrfwmuv" 369 | }, 370 | "execution_count": null, 371 | "outputs": [] 372 | }, 373 | { 374 | "cell_type": "markdown", 375 | "source": [ 376 | "### 演習問題" 377 | ], 378 | "metadata": { 379 | "id": "a2cgk4D_MtRM" 380 | } 381 | }, 382 | { 383 | "cell_type": "code", 384 | "source": [ 385 | "# 演習問題用ファイルのダウンロード\n", 386 | "url = 'https://raw.githubusercontent.com/makaishi2/samples/main/data/ch03-02-exam.tsv'\n", 387 | "!wget -nc $url" 388 | ], 389 | "metadata": { 390 | "id": "I8BuXnh-RfMs" 391 | }, 392 | "execution_count": null, 393 | "outputs": [] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "source": [ 398 | "# 演習問題用ファイルの内容確認\n", 399 | "!cat ch03-02-exam.tsv" 400 | ], 401 | "metadata": { 402 | "id": "2_k4Dc-fRkKo" 403 | }, 404 | "execution_count": null, 405 | "outputs": [] 406 | }, 407 | { 408 | "cell_type": "markdown", 409 | "source": [ 410 | "#### 問題  \n", 411 | "ダウンロード済みのファイルch03-02-exam.tsvをデータフレームに読み込んで下さい。" 412 | ], 413 | "metadata": { 414 | "id": "V1NTbE8aSnPU" 415 | } 416 | }, 417 | { 418 | "cell_type": "code", 419 | "source": [ 420 | "# 次の行を実装します\n", 421 | "df4 = \n", 422 | "\n", 423 | "\n", 424 | "\n", 425 | "# 結果確認\n", 426 | "display(df4)" 427 | ], 428 | "metadata": { 429 | "id": "MNsuBFqvzJMH" 430 | }, 431 | "execution_count": null, 432 | "outputs": [] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "source": [], 437 | "metadata": { 438 | "id": "1Ib-0zgFOB1t" 439 | }, 440 | "execution_count": null, 441 | "outputs": [] 442 | } 443 | ] 444 | } -------------------------------------------------------------------------------- /notebooks/ch01_08.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "GNeFxUlUZ3z5" 7 | }, 8 | "source": [ 9 | "## 1.8 タプルと辞書" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": { 15 | "id": "aAuxE1kLaOiz" 16 | }, 17 | "source": [ 18 | "### 1.8.1 タプル" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "K9TnCZaxai7w" 25 | }, 26 | "source": [ 27 | "#### タプルの定義" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": null, 33 | "metadata": { 34 | "id": "AtGwW_X7Z29e" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "# タプル型の定義と性質\n", 39 | "\n", 40 | "# タプル型を定義するときは\n", 41 | "# (値1, 値2, ..., 値N)\n", 42 | "# という書き方をする\n", 43 | "t1 = (1, 3, 5, 7, 9)\n", 44 | "\n", 45 | "# タプル型のtypeは class 'tuple'\n", 46 | "print(type(t1))\n", 47 | "\n", 48 | "# print関数にタプル型を直接渡すと、\n", 49 | "# すべての要素を表示してくれる\n", 50 | "print(t1)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": null, 56 | "metadata": { 57 | "id": "YosGTSPoF4vj" 58 | }, 59 | "outputs": [], 60 | "source": [ 61 | "# 要素が1つしかないタプルの例\n", 62 | "# 後ろにカンマがないと、かっこの意味が別になるため\n", 63 | "\n", 64 | "t2 = (11,)\n", 65 | "\n", 66 | "# 結果確認\n", 67 | "print(type(t2))\n", 68 | "print(t2)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": { 74 | "id": "yzfb1bLTalup" 75 | }, 76 | "source": [ 77 | "#### タプルの参照" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": null, 83 | "metadata": { 84 | "id": "SUgVSKP-aVs2" 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "t1 = (1, 3, 5, 7, 9)\n", 89 | "\n", 90 | "# 特定の要素の参照\n", 91 | "print(t1[1])\n", 92 | "\n", 93 | "# スライス参照\n", 94 | "print(t1[1:3])" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": { 100 | "id": "VVanpJxgasfN" 101 | }, 102 | "source": [ 103 | "#### 変更可能性" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": null, 109 | "metadata": { 110 | "id": "bZX9_M0_arv0" 111 | }, 112 | "outputs": [], 113 | "source": [ 114 | "t1 = (1, 3, 5, 7, 9)\n", 115 | "\n", 116 | "# 一度定義したタプルの特定要素を変更しようとするとエラーになる\n", 117 | "t1[1] = 4" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "id": "bXnehJ-5KPlk" 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "l1 = [1, 3, 5, 7, 9]\n", 129 | "\n", 130 | "# リストに対して同じ操作をしてもエラーにならない\n", 131 | "l1[1] = 4\n", 132 | "\n", 133 | "# 結果確認(意図したとおりl1[1]が変更されている)\n", 134 | "print(l1)" 135 | ] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": { 140 | "id": "qrRGkR7Wa4ni" 141 | }, 142 | "source": [ 143 | "#### アンパック代入" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": null, 149 | "metadata": { 150 | "id": "9lgxvwZ-a96D" 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "# タプルを使って複数の変数に同時に代入ができる\n", 155 | "x, y = (10, 123)\n", 156 | "\n", 157 | "# 結果確認\n", 158 | "print('x = ', x)\n", 159 | "print('y = ', y)" 160 | ] 161 | }, 162 | { 163 | "cell_type": "code", 164 | "execution_count": null, 165 | "metadata": { 166 | "id": "IdbRJAXJVbBd" 167 | }, 168 | "outputs": [], 169 | "source": [ 170 | "# ループ処理とアンパック代入の組み合わせ例\n", 171 | "\n", 172 | "# データ定義\n", 173 | "data = [\n", 174 | " ('T254', 12),\n", 175 | " ('A727', 6),\n", 176 | " ('T256', 4),\n", 177 | " ('T254', 10),\n", 178 | " ('A726', 7),\n", 179 | " ('A727', 4)\n", 180 | "]\n", 181 | "\n", 182 | "# ループ処理の中で、2つの要素を同時に取り出す\n", 183 | "for key, value in data:\n", 184 | " print('key = ', key, ' value =', value)" 185 | ] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": { 190 | "id": "KQVz5uo7FNLj" 191 | }, 192 | "source": [ 193 | "### 1.8.2 集合" 194 | ] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "metadata": { 199 | "id": "IBUYysPkHfSW" 200 | }, 201 | "source": [ 202 | "#### 集合の定義" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": null, 208 | "metadata": { 209 | "id": "pYHvGWF2FSAJ" 210 | }, 211 | "outputs": [], 212 | "source": [ 213 | "# 集合の定義\n", 214 | "s1 = {5, 2, 1, 2, 3, 9, 3, 4}\n", 215 | "\n", 216 | "# 結果確認\n", 217 | "print(s1)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "markdown", 222 | "metadata": { 223 | "id": "hAhbmZEmHkbg" 224 | }, 225 | "source": [ 226 | "#### 集合の利用法" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": null, 232 | "metadata": { 233 | "id": "mtzvzB0hFSKB" 234 | }, 235 | "outputs": [], 236 | "source": [ 237 | "# 集合の利用法(リストの要素をユニークにする)\n", 238 | "\n", 239 | "# リスト型変数l5の定義(重複する要素を含んでいる)\n", 240 | "l5 = [5, 2, 1, 2, 3, 9, 3, 4]\n", 241 | "\n", 242 | "# リスト型変数を集合型変数s2に変換する\n", 243 | "s2 = set(l5)\n", 244 | "print('s2 = ', s2)\n", 245 | "\n", 246 | "# s2を再度リスト型変数l6に変換する\n", 247 | "l6 = list(s2)\n", 248 | "print('l6 = ', l6)\n", 249 | "\n", 250 | "# 2つの関数呼び出しをまとめた結果\n", 251 | "l7 = list(set(l5))\n", 252 | "print('l7 = ', l7)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "markdown", 257 | "metadata": { 258 | "id": "72_ec1NoaWWi" 259 | }, 260 | "source": [ 261 | "### 1.8.3辞書" 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "metadata": { 267 | "id": "EpMMjqhjgdCh" 268 | }, 269 | "source": [ 270 | "#### 辞書の定義" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": null, 276 | "metadata": { 277 | "id": "WKCBggYmaepw" 278 | }, 279 | "outputs": [], 280 | "source": [ 281 | "# 辞書の定義\n", 282 | "d1 = {\n", 283 | " 'T254': '男の子用食器セット',\n", 284 | " 'T256': '女の子用食器セット',\n", 285 | " 'A726': '目覚まし時計(緑)',\n", 286 | " 'A727': '目覚まし時計(赤)',\n", 287 | " 'A728': '目覚まし時計(ピンク)'\n", 288 | "}\n", 289 | "\n", 290 | "# typeの確認\n", 291 | "print(type(d1))\n", 292 | "\n", 293 | "# 値の確認\n", 294 | "print(d1)" 295 | ] 296 | }, 297 | { 298 | "cell_type": "markdown", 299 | "metadata": { 300 | "id": "7zN5YR9L6IUo" 301 | }, 302 | "source": [ 303 | "#### 辞書の参照" 304 | ] 305 | }, 306 | { 307 | "cell_type": "code", 308 | "execution_count": null, 309 | "metadata": { 310 | "id": "zIq11kqojKTB" 311 | }, 312 | "outputs": [], 313 | "source": [ 314 | "# 辞書の参照\n", 315 | "print(d1['A726'])" 316 | ] 317 | }, 318 | { 319 | "cell_type": "markdown", 320 | "metadata": { 321 | "id": "2vp_nYEN9U_p" 322 | }, 323 | "source": [ 324 | "#### 辞書の追加・更新・削除" 325 | ] 326 | }, 327 | { 328 | "cell_type": "code", 329 | "execution_count": null, 330 | "metadata": { 331 | "id": "RaREn8ph9dYl" 332 | }, 333 | "outputs": [], 334 | "source": [ 335 | "d1 = {\n", 336 | " 'T254': '男の子用食器セット',\n", 337 | " 'T256': '女の子用食器セット',\n", 338 | " 'A726': '目覚まし時計(緑)',\n", 339 | " 'A727': '目覚まし時計(赤)',\n", 340 | " 'A728': '目覚まし時計(ピンク)'\n", 341 | "}\n", 342 | "\n", 343 | "# 新しい項目を追加\n", 344 | "d1['T257'] = '大人用食器セット'\n", 345 | "\n", 346 | "# 既存項目の修正\n", 347 | "d1['A726'] = '目覚まし時計(青)'\n", 348 | "\n", 349 | "# 削除 (del コマンド)\n", 350 | "del d1['A728']\n", 351 | "\n", 352 | "# 結果確認\n", 353 | "print(d1)" 354 | ] 355 | }, 356 | { 357 | "cell_type": "markdown", 358 | "metadata": { 359 | "id": "ms8YH7geOFyu" 360 | }, 361 | "source": [ 362 | "#### 辞書のメソッド利用" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": null, 368 | "metadata": { 369 | "id": "jlBBnSHWOJsM" 370 | }, 371 | "outputs": [], 372 | "source": [ 373 | "# keysメソッドの利用\n", 374 | "\n", 375 | "d1 = {\n", 376 | " 'T254': '男の子用食器セット',\n", 377 | " 'T256': '女の子用食器セット',\n", 378 | " 'A726': '目覚まし時計(緑)',\n", 379 | " 'A727': '目覚まし時計(赤)',\n", 380 | " 'A728': '目覚まし時計(ピンク)'\n", 381 | "}\n", 382 | "\n", 383 | "# keysメソッドの戻り値の確認\n", 384 | "print(d1.keys())\n", 385 | "\n", 386 | "# in演算子との組み合わせ利用例\n", 387 | "# キーの中に'T256'が含まれているか?\n", 388 | "k1 = 'T256'\n", 389 | "c1 = k1 in d1.keys()\n", 390 | "print(c1)\n", 391 | "\n", 392 | "# キーの中に'T257'が含まれているか?\n", 393 | "k2 = 'T257'\n", 394 | "c2 = k2 in d1.keys()\n", 395 | "print(c2)" 396 | ] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "metadata": { 401 | "id": "VoBe1Mj7TK34" 402 | }, 403 | "source": [ 404 | "### 演習問題" 405 | ] 406 | }, 407 | { 408 | "cell_type": "markdown", 409 | "source": [ 410 | "#### 問題\n", 411 | "\n", 412 | "あるECサイトでは、ある期間内の商品の売り上げが次の表のようでした。\n", 413 | "\n", 414 | "| 商品コード | 販売数 |\n", 415 | "| ---------- | ------ |\n", 416 | "| T254 | 12 |\n", 417 | "| A727 | 6 |\n", 418 | "| T256 | 4 |\n", 419 | "| T254 | 10 |\n", 420 | "| A726 | 7 |\n", 421 | "| A727 | 4 |\n", 422 | "\n", 423 | "この表が、次の変数dataで表現されていることを前提として、商品ごとの販売数合計結果を出して下さい。\n", 424 | "\n", 425 | "```\n", 426 | "data = [\n", 427 | " ('T254', 12),\n", 428 | " ('A727', 6),\n", 429 | " ('T256', 4),\n", 430 | " ('T254', 10),\n", 431 | " ('A726', 7),\n", 432 | " ('A727', 4)\n", 433 | "]\n", 434 | "```\n", 435 | "\n", 436 | "結果は、次のような辞書形式で欲しいです。\n", 437 | "\n", 438 | "{'T254': 22, 'A727': 10, 'T256': 4, 'A726': 7}" 439 | ], 440 | "metadata": { 441 | "id": "kJvaPwFVG3bB" 442 | } 443 | }, 444 | { 445 | "cell_type": "code", 446 | "execution_count": null, 447 | "metadata": { 448 | "id": "Ujc35FqdhuLV" 449 | }, 450 | "outputs": [], 451 | "source": [ 452 | "# 読み込み対象データの初期設定\n", 453 | "data = [\n", 454 | " ('T254', 12),\n", 455 | " ('A727', 6),\n", 456 | " ('T256', 4),\n", 457 | " ('T254', 10),\n", 458 | " ('A726', 7),\n", 459 | " ('A727', 4)\n", 460 | "]\n", 461 | "\n", 462 | "# 辞書 初期状態は空\n", 463 | "d2 = {}\n", 464 | "\n", 465 | "# この部分を実装します\n", 466 | "# 外側はループ処理\n", 467 | "# 内側はif文で2階層の組み合わせになります\n", 468 | "\n", 469 | "# キーが辞書に存在するかどうかをチェック\n", 470 | "\n", 471 | "# 該当キー項目が存在する場合\n", 472 | "\n", 473 | "# 該当キー項目が存在しない場合\n", 474 | "\n", 475 | "\n", 476 | "# 結果の確認\n", 477 | "print(d2)" 478 | ] 479 | } 480 | ], 481 | "metadata": { 482 | "colab": { 483 | "provenance": [], 484 | "toc_visible": true 485 | }, 486 | "kernelspec": { 487 | "display_name": "Python 3", 488 | "name": "python3" 489 | }, 490 | "language_info": { 491 | "name": "python" 492 | } 493 | }, 494 | "nbformat": 4, 495 | "nbformat_minor": 0 496 | } -------------------------------------------------------------------------------- /notebooks/ch03_03.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "collapsed_sections": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 3.3 データ前処理\n" 23 | ], 24 | "metadata": { 25 | "id": "U6k_iw6o47mZ" 26 | } 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "source": [ 31 | "### 共通処理" 32 | ], 33 | "metadata": { 34 | "id": "IbEIrBgt-Hqw" 35 | } 36 | }, 37 | { 38 | "cell_type": "code", 39 | "source": [ 40 | "# 日本語化ライブラリ導入\n", 41 | "!pip install japanize-matplotlib | tail -n 1" 42 | ], 43 | "metadata": { 44 | "id": "PopsYvu0-L6G" 45 | }, 46 | "execution_count": null, 47 | "outputs": [] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "source": [ 52 | "# ライブラリのimport\n", 53 | "\n", 54 | "# NumPy用ライブラリ\n", 55 | "import numpy as np\n", 56 | "\n", 57 | "# Matplotlib中のpyplotライブラリのインポート\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "\n", 60 | "# matplotlib日本語化対応ライブラリのインポート\n", 61 | "import japanize_matplotlib\n", 62 | "\n", 63 | "# pandas用ライブラリ\n", 64 | "import pandas as pd\n", 65 | "\n", 66 | "# データフレーム表示用関数\n", 67 | "from IPython.display import display" 68 | ], 69 | "metadata": { 70 | "id": "xhnAsf0j-L-z" 71 | }, 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "source": [ 78 | "# 表示オプション調整\n", 79 | "\n", 80 | "# NumPy表示形式の設定\n", 81 | "np.set_printoptions(\n", 82 | " suppress=True, precision=4, floatmode='fixed'\n", 83 | ")\n", 84 | "\n", 85 | "# グラフのデフォルトフォント指定\n", 86 | "plt.rcParams[\"font.size\"] = 14\n", 87 | "\n", 88 | "# サイズ設定\n", 89 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 90 | "\n", 91 | "# 方眼表示ON\n", 92 | "plt.rcParams['axes.grid'] = True\n", 93 | "\n", 94 | "# データフレームでの表示精度\n", 95 | "pd.options.display.float_format = '{:.4f}'.format\n", 96 | "\n", 97 | "# データフレームですべての項目を表示\n", 98 | "pd.set_option(\"display.max_columns\",None)" 99 | ], 100 | "metadata": { 101 | "id": "G_2DUdqh-MDM" 102 | }, 103 | "execution_count": null, 104 | "outputs": [] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "source": [ 109 | "### 3.3.1 実習の前提条件" 110 | ], 111 | "metadata": { 112 | "id": "1SMe4v-4mHKh" 113 | } 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "source": [ 118 | "#### CSV ファイル読み込み" 119 | ], 120 | "metadata": { 121 | "id": "fx1c1-DC_uFx" 122 | } 123 | }, 124 | { 125 | "cell_type": "code", 126 | "source": [ 127 | "url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/bridges/bridges.data.version1'\n", 128 | "\n", 129 | "# 列名定義\n", 130 | "columns = [\n", 131 | " 'ID', 'RIVER', 'LOCATION', 'ERECTED', 'PURPOSE',\n", 132 | " 'LENGTH', 'LANES', 'CLEAR-G', 'T-OR-D', 'MATERIAL',\n", 133 | " 'SPAN', 'REL-L', 'TYPE'\n", 134 | "]\n", 135 | "\n", 136 | "# データ読み込み\n", 137 | "df1 = pd.read_csv(\n", 138 | " url, header=None,\n", 139 | " names=columns, na_values='?',\n", 140 | " index_col='ID')\n", 141 | "display(df1.head())" 142 | ], 143 | "metadata": { 144 | "id": "zpBQuGCV5KcK" 145 | }, 146 | "execution_count": null, 147 | "outputs": [] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "source": [ 152 | "  ### 3.3.2 項目名変更" 153 | ], 154 | "metadata": { 155 | "id": "N92mJ-vaAIbd" 156 | } 157 | }, 158 | { 159 | "cell_type": "code", 160 | "source": [ 161 | "# 差し替え用項目名リスト\n", 162 | "cols_jp = [\n", 163 | " '川コード', '位置', '竣工年', '目的', '長さ', '車線数', '垂直クリアランス',\n", 164 | " '道路位置', '建築資材', '長さ区分', '相対長', '橋種別'\n", 165 | "]\n", 166 | "\n", 167 | "# 加工用の別データフレームの用意\n", 168 | "df2 = df1.copy()\n", 169 | "\n", 170 | "# 列名の差し替え\n", 171 | "df2.columns = cols_jp\n", 172 | "\n", 173 | "# 結果確認\n", 174 | "display(df2.head())" 175 | ], 176 | "metadata": { 177 | "id": "Y85VvU2oANXF" 178 | }, 179 | "execution_count": null, 180 | "outputs": [] 181 | }, 182 | { 183 | "cell_type": "markdown", 184 | "source": [ 185 | "### 3.3.3 欠損値" 186 | ], 187 | "metadata": { 188 | "id": "3HVfWTdk5mgs" 189 | } 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "source": [ 194 | "#### 欠損値確認" 195 | ], 196 | "metadata": { 197 | "id": "NXu0EC69BZZj" 198 | } 199 | }, 200 | { 201 | "cell_type": "code", 202 | "source": [ 203 | "# isnullメソッドで各要素ごとにNULLかどうかを判断\n", 204 | "df2.isnull()" 205 | ], 206 | "metadata": { 207 | "id": "di99bXpB5bm8" 208 | }, 209 | "execution_count": null, 210 | "outputs": [] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "source": [ 215 | "# isnullメソッドの結果に対してsumメソッドをかけると、\n", 216 | "# 項目単位で何件NULLがあったかがわかる\n", 217 | "# (メソッドチェイン呼び出し)\n", 218 | "df2.isnull().sum()" 219 | ], 220 | "metadata": { 221 | "id": "PTrFi0KS5rWX" 222 | }, 223 | "execution_count": null, 224 | "outputs": [] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "source": [ 229 | "☞データ分析のためのポイント \n", 230 | "欠損値確認 .isnull().sum() とセットで一つのメソッドとして覚える" 231 | ], 232 | "metadata": { 233 | "id": "PWu5h86VSoam" 234 | } 235 | }, 236 | { 237 | "cell_type": "markdown", 238 | "source": [ 239 | "#### 欠損値除去" 240 | ], 241 | "metadata": { 242 | "id": "TmjlU9v2BeyT" 243 | } 244 | }, 245 | { 246 | "cell_type": "code", 247 | "source": [ 248 | "# 項目「位置」に欠損値がある行を削除する\n", 249 | "df3 = df2.copy()\n", 250 | "df3 = df3.dropna(subset=['位置'])\n", 251 | "df3.isnull().sum()" 252 | ], 253 | "metadata": { 254 | "id": "FtpBxCs-MlOv" 255 | }, 256 | "execution_count": null, 257 | "outputs": [] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "source": [ 262 | "### 3.3.4 データ型" 263 | ], 264 | "metadata": { 265 | "id": "NPeiVXBmF5Wg" 266 | } 267 | }, 268 | { 269 | "cell_type": "code", 270 | "source": [ 271 | "# 各項目のデータ型確認\n", 272 | "df3.dtypes" 273 | ], 274 | "metadata": { 275 | "id": "UdB_nVFIF3_B" 276 | }, 277 | "execution_count": null, 278 | "outputs": [] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "source": [ 283 | "# 「位置」のデータ型を整数型に直す\n", 284 | "df3['位置'] = df3['位置'].astype('int')\n", 285 | "print(df3.dtypes)\n", 286 | "display(df3.head(2))" 287 | ], 288 | "metadata": { 289 | "id": "rKayTzewNSDh" 290 | }, 291 | "execution_count": null, 292 | "outputs": [] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "source": [ 297 | "# 欠損値をなくす前のdf2では、この処理はできない\n", 298 | "df2['位置'] = df2['位置'].astype('int')" 299 | ], 300 | "metadata": { 301 | "id": "TbGMV8QsTs4K" 302 | }, 303 | "execution_count": null, 304 | "outputs": [] 305 | }, 306 | { 307 | "cell_type": "markdown", 308 | "source": [ 309 | "☞データ分析のためのポイント \n", 310 | "本来整数型の項目が浮動小数点型になっている場合は欠損値があることを疑う \n" 311 | ], 312 | "metadata": { 313 | "id": "jFFj0nekT2cG" 314 | } 315 | }, 316 | { 317 | "cell_type": "markdown", 318 | "source": [ 319 | "### 3.3.5 統計量計算(describeメソッド)" 320 | ], 321 | "metadata": { 322 | "id": "Oewar_lRF2-f" 323 | } 324 | }, 325 | { 326 | "cell_type": "code", 327 | "source": [ 328 | "# 引数なしのdescribeメソッド呼び出し\n", 329 | "df2.describe()" 330 | ], 331 | "metadata": { 332 | "id": "Oi3_6FAxF1YL" 333 | }, 334 | "execution_count": null, 335 | "outputs": [] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "source": [ 340 | "# 文字列型項目へのdescribeメソッド呼び出し\n", 341 | "df2.describe(include='O')" 342 | ], 343 | "metadata": { 344 | "id": "kYiWTJvOF1hB" 345 | }, 346 | "execution_count": null, 347 | "outputs": [] 348 | }, 349 | { 350 | "cell_type": "markdown", 351 | "source": [ 352 | "### 3.3.6 値の出現回数 (value_countsメソッド)" 353 | ], 354 | "metadata": { 355 | "id": "R1BCMwJ3GTC4" 356 | } 357 | }, 358 | { 359 | "cell_type": "code", 360 | "source": [ 361 | "# 値の出現回数カウント\n", 362 | "df2['建築資材'].value_counts()" 363 | ], 364 | "metadata": { 365 | "id": "WxpIyQsvF1la" 366 | }, 367 | "execution_count": null, 368 | "outputs": [] 369 | }, 370 | { 371 | "cell_type": "markdown", 372 | "source": [ 373 | "### 3.3.7 特徴量計算(mapメソッド)" 374 | ], 375 | "metadata": { 376 | "id": "PwpD5V-ERzyG" 377 | } 378 | }, 379 | { 380 | "cell_type": "code", 381 | "source": [ 382 | "# 西暦年から1から4までの竣工年区分を返す関数\n", 383 | "def get_year_cd(x):\n", 384 | " thres = [1850, 1900, 1950]\n", 385 | " thres_np = np.array(thres)\n", 386 | " return (thres_np < x).sum() + 1" 387 | ], 388 | "metadata": { 389 | "id": "KDwDb1TDAeke" 390 | }, 391 | "execution_count": null, 392 | "outputs": [] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "source": [ 397 | "# map関数を使い、すべての行に対して「竣工年区分」を計算\n", 398 | "df3['竣工年'].map(get_year_cd)" 399 | ], 400 | "metadata": { 401 | "id": "RMAbisErQhK1" 402 | }, 403 | "execution_count": null, 404 | "outputs": [] 405 | }, 406 | { 407 | "cell_type": "code", 408 | "source": [ 409 | "# 新しい特徴量「竣工年区分」の計算\n", 410 | "df3['竣工年区分'] = df3['竣工年'].map(get_year_cd)\n", 411 | "\n", 412 | "display(df3.head(2))\n", 413 | "display(df3.tail(4))" 414 | ], 415 | "metadata": { 416 | "id": "_ozAmuyoQxaK" 417 | }, 418 | "execution_count": null, 419 | "outputs": [] 420 | }, 421 | { 422 | "cell_type": "markdown", 423 | "source": [ 424 | "☞データ分析のためのポイント \n", 425 | "特定の項目からの計算によって新しい項目を作りたい場合、計算用関数を用意してmapメソッドにその関数を渡す\n" 426 | ], 427 | "metadata": { 428 | "id": "cMdR8dsGUj-G" 429 | } 430 | }, 431 | { 432 | "cell_type": "markdown", 433 | "source": [ 434 | "### 演習問題" 435 | ], 436 | "metadata": { 437 | "id": "kjbQ1IJNSZNr" 438 | } 439 | }, 440 | { 441 | "cell_type": "markdown", 442 | "source": [ 443 | "ここまで加工したデータフレームdf3について、更に次の処理をして下さい。 \n", 444 | "(1) 「車線数」の欠損値を取り除きます。 \n", 445 | "(2) 「車線数」を整数値に変換します。 " 446 | ], 447 | "metadata": { 448 | "id": "nWKxUa5gGGnY" 449 | } 450 | }, 451 | { 452 | "cell_type": "code", 453 | "source": [ 454 | "# (1) 「車線数」の欠損値を取り除く\n", 455 | "# データフレームコピー\n", 456 | "df4 =\n", 457 | "\n", 458 | "# 車線数の欠損値除去\n", 459 | "df4 = \n", 460 | "\n", 461 | "# 結果確認\n", 462 | "df4.isnull().sum()" 463 | ], 464 | "metadata": { 465 | "id": "oVbidVGqSfD4" 466 | }, 467 | "execution_count": null, 468 | "outputs": [] 469 | }, 470 | { 471 | "cell_type": "code", 472 | "source": [ 473 | "# (2) 「車線数」のデータ型を整数型に変換する\n", 474 | "# データフレームコピー\n", 475 | "df5 = \n", 476 | "\n", 477 | "# データ型の変換\n", 478 | "\n", 479 | "\n", 480 | "# 結果確認\n", 481 | "print(df5.dtypes)\n", 482 | "df5.head(2)" 483 | ], 484 | "metadata": { 485 | "id": "YCLl8NCcSfO1" 486 | }, 487 | "execution_count": null, 488 | "outputs": [] 489 | } 490 | ] 491 | } -------------------------------------------------------------------------------- /notebooks/ch03_04.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "collapsed_sections": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | } 17 | }, 18 | "cells": [ 19 | { 20 | "cell_type": "markdown", 21 | "source": [ 22 | "## 3.4 データ集計\n" 23 | ], 24 | "metadata": { 25 | "id": "xnJW875zfG7S" 26 | } 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "source": [ 31 | "### 共通処理" 32 | ], 33 | "metadata": { 34 | "id": "iwNb-4E6HM7i" 35 | } 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": { 41 | "id": "D5lnfGWde2XM" 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "# 日本語化ライブラリ導入\n", 46 | "!pip install japanize-matplotlib | tail -n 1" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "source": [ 52 | "# ライブラリのimport\n", 53 | "\n", 54 | "# NumPy用ライブラリ\n", 55 | "import numpy as np\n", 56 | "\n", 57 | "# Matplotlib中のpyplotライブラリのインポート\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "\n", 60 | "# matplotlib日本語化対応ライブラリのインポート\n", 61 | "import japanize_matplotlib\n", 62 | "\n", 63 | "# pandas用ライブラリ\n", 64 | "import pandas as pd\n", 65 | "\n", 66 | "# データフレーム表示用関数\n", 67 | "from IPython.display import display" 68 | ], 69 | "metadata": { 70 | "id": "E4cLemzqW8im" 71 | }, 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "source": [ 78 | "# 表示オプション調整\n", 79 | "\n", 80 | "# NumPy表示形式の設定\n", 81 | "np.set_printoptions(\n", 82 | " suppress=True, precision=4, floatmode='fixed'\n", 83 | ")\n", 84 | "\n", 85 | "# グラフのデフォルトフォント指定\n", 86 | "plt.rcParams[\"font.size\"] = 14\n", 87 | "\n", 88 | "# サイズ設定\n", 89 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 90 | "\n", 91 | "# 方眼表示ON\n", 92 | "plt.rcParams['axes.grid'] = True\n", 93 | "\n", 94 | "\n", 95 | "# データフレームでの表示精度\n", 96 | "pd.options.display.float_format = '{:.4f}'.format\n", 97 | "\n", 98 | "# データフレームですべての項目を表示\n", 99 | "pd.set_option(\"display.max_columns\", None)" 100 | ], 101 | "metadata": { 102 | "id": "vv_lMm9qW8ul" 103 | }, 104 | "execution_count": null, 105 | "outputs": [] 106 | }, 107 | { 108 | "cell_type": "markdown", 109 | "source": [ 110 | " ### 3.4.2 ファイルダウンロード" 111 | ], 112 | "metadata": { 113 | "id": "xUJJxdTtX43w" 114 | } 115 | }, 116 | { 117 | "cell_type": "code", 118 | "source": [ 119 | "# URL指定\n", 120 | "zip_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip'\n", 121 | "fn = 'bank-full.csv'\n", 122 | "\n", 123 | "# 公開データのダウンロードと解凍\n", 124 | "!wget $zip_url\n", 125 | "!unzip -o bank.zip" 126 | ], 127 | "metadata": { 128 | "id": "enhvFSlQf6W6" 129 | }, 130 | "execution_count": null, 131 | "outputs": [] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "source": [ 136 | "# ファイルの先頭5行の内容確認\n", 137 | "!head -5 bank.csv" 138 | ], 139 | "metadata": { 140 | "id": "B-9FDmeHc6xi" 141 | }, 142 | "execution_count": null, 143 | "outputs": [] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "source": [ 148 | "* ヘッダ行あり\n", 149 | "* 区切り文字はセミコロン\n", 150 | "* NULL値は'unknown'\n", 151 | "* True / Falseは'yes' / 'no'\n", 152 | "* 文字列のクオートはダブルクオート(これはオプション指定不要)" 153 | ], 154 | "metadata": { 155 | "id": "nunIa5XbdPZ2" 156 | } 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "source": [ 161 | "### 3.4.3 CSVファイル読み込み" 162 | ], 163 | "metadata": { 164 | "id": "ZFyuggJQfRXw" 165 | } 166 | }, 167 | { 168 | "cell_type": "markdown", 169 | "source": [ 170 | "#### 読み込み" 171 | ], 172 | "metadata": { 173 | "id": "hGGSKpHbFBJD" 174 | } 175 | }, 176 | { 177 | "cell_type": "code", 178 | "source": [ 179 | "# bank-full.csvをデータフレームに取り込み\n", 180 | "df = pd.read_csv(\n", 181 | " fn,\n", 182 | " sep=';',\n", 183 | " na_values='unknown',\n", 184 | " true_values=['yes'],\n", 185 | " false_values=['no'])\n", 186 | "\n", 187 | "# 結果確認 \n", 188 | "display(df.head(2))" 189 | ], 190 | "metadata": { 191 | "id": "XtI27aO8gKjb" 192 | }, 193 | "execution_count": null, 194 | "outputs": [] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "source": [ 199 | "### 3.4.4 データ確認・加工" 200 | ], 201 | "metadata": { 202 | "id": "264gr-P3K5Dr" 203 | } 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "source": [ 208 | "#### 項目名差し替え" 209 | ], 210 | "metadata": { 211 | "id": "J6oqVFoaFF9F" 212 | } 213 | }, 214 | { 215 | "cell_type": "code", 216 | "source": [ 217 | "# 項目名の日本語定義\n", 218 | "columns = [\n", 219 | " '年齢', '職業', '婚姻', '学歴', '債務不履行', '平均残高',\n", 220 | " '住宅ローン', '個人ローン', '連絡手段', '最終通話日',\n", 221 | " '最終通話月', '最終通話秒数', '通話回数_販促中',\n", 222 | " '前回販促後_経過日数', '通話回数_販促前', '前回販促結果',\n", 223 | " '今回販促結果'\n", 224 | "]\n", 225 | "# 項目名差し替え\n", 226 | "df2 = df.copy()\n", 227 | "df2.columns = columns" 228 | ], 229 | "metadata": { 230 | "id": "eO45PQ7Nr4Bq" 231 | }, 232 | "execution_count": null, 233 | "outputs": [] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "source": [ 238 | "# 項目順番入れ替え\n", 239 | "# 一番うしろの「今回販促結果」を一番前にする\n", 240 | "# 「個人ローン」より後ろの項目を落とす\n", 241 | "columns1 = list(df2.columns)\n", 242 | "print(columns1)\n", 243 | "columns2 = columns1[-1:] + columns1[:-9]\n", 244 | "print(columns2)\n", 245 | "df2 = df2[columns2]" 246 | ], 247 | "metadata": { 248 | "id": "EApxsDPbGtxx" 249 | }, 250 | "execution_count": null, 251 | "outputs": [] 252 | }, 253 | { 254 | "cell_type": "markdown", 255 | "source": [ 256 | "#### データ内容確認" 257 | ], 258 | "metadata": { 259 | "id": "OEduKsVQFJ5-" 260 | } 261 | }, 262 | { 263 | "cell_type": "code", 264 | "source": [ 265 | "# データ内容確認\n", 266 | "display(df2.head())" 267 | ], 268 | "metadata": { 269 | "id": "gnUfUdXSgxC4" 270 | }, 271 | "execution_count": null, 272 | "outputs": [] 273 | }, 274 | { 275 | "cell_type": "markdown", 276 | "source": [ 277 | "#### データ型確認\n" 278 | ], 279 | "metadata": { 280 | "id": "037-ZWB1FOe5" 281 | } 282 | }, 283 | { 284 | "cell_type": "code", 285 | "source": [ 286 | "# データ型確認\n", 287 | "df2.dtypes" 288 | ], 289 | "metadata": { 290 | "id": "zeaXf6Q2sPJC" 291 | }, 292 | "execution_count": null, 293 | "outputs": [] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "source": [ 298 | "#### 欠損値確認" 299 | ], 300 | "metadata": { 301 | "id": "-THOxI9_FXA_" 302 | } 303 | }, 304 | { 305 | "cell_type": "code", 306 | "source": [ 307 | "# 欠損値確認\n", 308 | "df2.isnull().sum()" 309 | ], 310 | "metadata": { 311 | "id": "OTlz6m6863va" 312 | }, 313 | "execution_count": null, 314 | "outputs": [] 315 | }, 316 | { 317 | "cell_type": "markdown", 318 | "source": [ 319 | "#### 統計値確認 数値項目" 320 | ], 321 | "metadata": { 322 | "id": "g-ryTj-5Falp" 323 | } 324 | }, 325 | { 326 | "cell_type": "code", 327 | "source": [ 328 | "# 統計値\n", 329 | "df2.describe()" 330 | ], 331 | "metadata": { 332 | "id": "G0NDg0SU7HHq" 333 | }, 334 | "execution_count": null, 335 | "outputs": [] 336 | }, 337 | { 338 | "cell_type": "markdown", 339 | "source": [ 340 | "#### 統計値確認 文字列型" 341 | ], 342 | "metadata": { 343 | "id": "mHpYQivfFjXG" 344 | } 345 | }, 346 | { 347 | "cell_type": "code", 348 | "source": [ 349 | "# 統計値(文字列型)\n", 350 | "df2.describe(include='O')" 351 | ], 352 | "metadata": { 353 | "id": "jhOQjTvH7P2G" 354 | }, 355 | "execution_count": null, 356 | "outputs": [] 357 | }, 358 | { 359 | "cell_type": "markdown", 360 | "source": [ 361 | "### 3.4.5 グループごとの集計(groupbyメソッド)" 362 | ], 363 | "metadata": { 364 | "id": "VItgY61rl6kK" 365 | } 366 | }, 367 | { 368 | "cell_type": "code", 369 | "source": [ 370 | "# 学歴による集計結果\n", 371 | "df_gr1 = df2.groupby('学歴').mean()\n", 372 | "\n", 373 | "# 結果確認\n", 374 | "display(df_gr1)" 375 | ], 376 | "metadata": { 377 | "id": "ubGKIl4uGLDJ" 378 | }, 379 | "execution_count": null, 380 | "outputs": [] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "source": [ 385 | "#  職業による集計結果\n", 386 | "df_gr2 = df2.groupby('職業').mean(\n", 387 | ").sort_values('今回販促結果', ascending=False)\n", 388 | "\n", 389 | "# 結果確認\n", 390 | "display(df_gr2)" 391 | ], 392 | "metadata": { 393 | "id": "14rH8CsyOtVP" 394 | }, 395 | "execution_count": null, 396 | "outputs": [] 397 | }, 398 | { 399 | "cell_type": "markdown", 400 | "source": [ 401 | "### 3.4.6 出現頻度のクロス集計(crosstabメソッド)" 402 | ], 403 | "metadata": { 404 | "id": "pXQ0_i6kmB0w" 405 | } 406 | }, 407 | { 408 | "cell_type": "code", 409 | "source": [ 410 | "# 出現頻度のクロス集計\n", 411 | "# 「職業」「学歴」の2軸で頻度を集計する\n", 412 | "df_crosstab = pd.crosstab(\n", 413 | " index=df2['職業'], \n", 414 | " columns=df2['学歴'],\n", 415 | " margins=True)\n", 416 | "\n", 417 | "# 結果確認\n", 418 | "display(df_crosstab)" 419 | ], 420 | "metadata": { 421 | "id": "o4RHY4Oau6WE" 422 | }, 423 | "execution_count": null, 424 | "outputs": [] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "source": [ 429 | "# 出現頻度のクロス集計\n", 430 | "# 「職業」「学歴」の2軸で頻度を集計する\n", 431 | "#  行方向の比率計算とする\n", 432 | "df_crosstab2 = pd.crosstab(\n", 433 | " index=df2['職業'], \n", 434 | " columns=df2['学歴'],\n", 435 | " normalize='index',\n", 436 | " margins=True)\n", 437 | "\n", 438 | "# 結果確認\n", 439 | "display(df_crosstab2)" 440 | ], 441 | "metadata": { 442 | "id": "-xrHdeZki03f" 443 | }, 444 | "execution_count": null, 445 | "outputs": [] 446 | }, 447 | { 448 | "cell_type": "markdown", 449 | "source": [ 450 | "### 3.4.7 項目値のクロス集計(povot メソッド)" 451 | ], 452 | "metadata": { 453 | "id": "vEHEKha3roZk" 454 | } 455 | }, 456 | { 457 | "cell_type": "code", 458 | "source": [ 459 | "# 職業と学歴を軸とした、今回販促結果のクロス集計\n", 460 | "df_pivot = df2.pivot_table(\n", 461 | " index='職業', \n", 462 | " columns='学歴',\n", 463 | " values='今回販促結果', \n", 464 | " aggfunc='mean')\n", 465 | "\n", 466 | "# 結果確認\n", 467 | "display(df_pivot)" 468 | ], 469 | "metadata": { 470 | "id": "Nkt4KjHanqbk" 471 | }, 472 | "execution_count": null, 473 | "outputs": [] 474 | }, 475 | { 476 | "cell_type": "markdown", 477 | "source": [ 478 | "### 演習問題\n", 479 | "\n", 480 | "1. 「住宅ローン」の有無が、今回販促結果に影響するかどうかを、groupbyメソッドで調べて下さい\n", 481 | "2. 「住宅ローン」「学歴」の2軸で頻度分析をして下さい\n", 482 | "3. 「住宅ローン」「学歴」の2軸で「今回販促結果」のクロス集計をして下さい" 483 | ], 484 | "metadata": { 485 | "id": "ButmFog0i_yA" 486 | } 487 | }, 488 | { 489 | "cell_type": "code", 490 | "source": [ 491 | "# 1. 住宅ローンの有無が、今回販促結果に影響するか\n", 492 | "df_gr = \n", 493 | "\n", 494 | "# 結果確認\n", 495 | "display(df_gr)" 496 | ], 497 | "metadata": { 498 | "id": "A3lT9m6etGEF" 499 | }, 500 | "execution_count": null, 501 | "outputs": [] 502 | }, 503 | { 504 | "cell_type": "code", 505 | "source": [ 506 | "# 2. 「住宅ローン」「学歴」の2軸で頻度分析\n", 507 | "df_crosstab = \n", 508 | "\n", 509 | "\n", 510 | "\n", 511 | "# 結果確認\n", 512 | "display(df_crosstab)" 513 | ], 514 | "metadata": { 515 | "id": "BTP2ZabwAxNn" 516 | }, 517 | "execution_count": null, 518 | "outputs": [] 519 | }, 520 | { 521 | "cell_type": "code", 522 | "source": [ 523 | "# 3. 「住宅ローン」「学歴」の2軸で「今回販促結果」のクロス集計\n", 524 | "df_pivot = \n", 525 | "\n", 526 | "\n", 527 | "\n", 528 | "# 結果確認\n", 529 | "display(df_pivot)" 530 | ], 531 | "metadata": { 532 | "id": "Addj_7VrEuTb" 533 | }, 534 | "execution_count": null, 535 | "outputs": [] 536 | }, 537 | { 538 | "cell_type": "code", 539 | "source": [], 540 | "metadata": { 541 | "id": "dt4tPU_TAxWJ" 542 | }, 543 | "execution_count": null, 544 | "outputs": [] 545 | } 546 | ] 547 | } -------------------------------------------------------------------------------- /notebooks/ch03_07.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "toc_visible": true 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | }, 13 | "language_info": { 14 | "name": "python" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "source": [ 21 | "## 3.7 日付データの処理" 22 | ], 23 | "metadata": { 24 | "id": "89VTfx7Dc6mh" 25 | } 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "source": [ 30 | "### 共通処理" 31 | ], 32 | "metadata": { 33 | "id": "RJSUmZLlddLg" 34 | } 35 | }, 36 | { 37 | "cell_type": "code", 38 | "source": [ 39 | "# 日本語化ライブラリ導入\n", 40 | "!pip install japanize-matplotlib | tail -n 1" 41 | ], 42 | "metadata": { 43 | "id": "EZ7JlMa3dgNQ" 44 | }, 45 | "execution_count": null, 46 | "outputs": [] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "source": [ 51 | "# ライブラリのimport\n", 52 | "\n", 53 | "# NumPy用ライブラリ\n", 54 | "import numpy as np\n", 55 | "\n", 56 | "# Matplotlib中のpyplotライブラリのインポート\n", 57 | "import matplotlib.pyplot as plt\n", 58 | "\n", 59 | "# matplotlib日本語化対応ライブラリのインポート\n", 60 | "import japanize_matplotlib\n", 61 | "\n", 62 | "# pandas用ライブラリ\n", 63 | "import pandas as pd\n", 64 | "\n", 65 | "# データフレーム表示用関数\n", 66 | "from IPython.display import display\n", 67 | "\n", 68 | "# seaborn\n", 69 | "import seaborn as sns" 70 | ], 71 | "metadata": { 72 | "id": "oa2YmNIQdgW6" 73 | }, 74 | "execution_count": null, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "source": [ 80 | "# 表示オプション調整\n", 81 | "\n", 82 | "# NumPy表示形式の設定\n", 83 | "np.set_printoptions(\n", 84 | " suppress=True, precision=4, floatmode='fixed'\n", 85 | ")\n", 86 | "\n", 87 | "# グラフのデフォルトフォント指定\n", 88 | "plt.rcParams[\"font.size\"] = 14\n", 89 | "\n", 90 | "# サイズ設定\n", 91 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 92 | "\n", 93 | "# 方眼表示ON\n", 94 | "plt.rcParams['axes.grid'] = True\n", 95 | "\n", 96 | "# データフレームでの表示精度\n", 97 | "pd.options.display.float_format = '{:.4f}'.format\n", 98 | "\n", 99 | "# データフレームですべての項目を表示\n", 100 | "pd.set_option(\"display.max_columns\",None)" 101 | ], 102 | "metadata": { 103 | "id": "RpwV6at0dgdK" 104 | }, 105 | "execution_count": null, 106 | "outputs": [] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "source": [ 111 | "### 3.7.1 read_csv関数のparse_datesオプション" 112 | ], 113 | "metadata": { 114 | "id": "8XwqgOAhdGmw" 115 | } 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": null, 120 | "metadata": { 121 | "id": "y8y1DVtWc1eZ" 122 | }, 123 | "outputs": [], 124 | "source": [ 125 | "# 支払情報\n", 126 | "url1 = 'https://github.com/makaishi2/samples/raw/main/data/rental5-jp.csv'\n", 127 | "\n", 128 | "# 支払情報\n", 129 | "df1 = pd.read_csv(url1, parse_dates=[4])\n", 130 | "\n", 131 | "# 貸出日時順にソート\n", 132 | "df2 = df1.sort_values('貸出日時')\n", 133 | "df2 = df2.reset_index(drop=True)\n", 134 | "\n", 135 | "# データ型確認\n", 136 | "print(df2.dtypes)\n", 137 | "\n", 138 | "# 結果確認\n", 139 | "display(df2.head(2))" 140 | ] 141 | }, 142 | { 143 | "cell_type": "markdown", 144 | "source": [ 145 | "### 3.7.2 日付集計用項目追加" 146 | ], 147 | "metadata": { 148 | "id": "WHP3ctI-Jkpx" 149 | } 150 | }, 151 | { 152 | "cell_type": "code", 153 | "source": [ 154 | "# 集計単位計算用関数\n", 155 | "from datetime import datetime\n", 156 | "\n", 157 | "# 週単位の日付作成\n", 158 | "def conv_week_day(ts):\n", 159 | "\n", 160 | " # 日付を年、何週目か、週の何日目かに分解\n", 161 | " year, week, day = ts.isocalendar()\n", 162 | "\n", 163 | " # その週の1日目を表現する文字列\n", 164 | " str = f'{year} {week} 1'\n", 165 | "\n", 166 | " # 文字列をdatetime型に変換\n", 167 | " return datetime.strptime(str, \"%Y %W %w\")\n", 168 | "\n", 169 | "# 日単位の日付作成\n", 170 | "def conv_date(ts):\n", 171 | "\n", 172 | " # Timestampから文字列生成\n", 173 | " # str: YYYY-MM-DDThh:mm:ss\n", 174 | " str = ts.isoformat()\n", 175 | "\n", 176 | " # 先頭10文字をdatetime型に変換\n", 177 | " return datetime.strptime(str[:10], '%Y-%m-%d')" 178 | ], 179 | "metadata": { 180 | "id": "Y1sOAo8-Gfdg" 181 | }, 182 | "execution_count": null, 183 | "outputs": [] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "source": [ 188 | "df3 = df2.copy()\n", 189 | "\n", 190 | "# 集計単位用の項目計算\n", 191 | "df3.insert(4, '貸出日', df3['貸出日時'].map(conv_date))\n", 192 | "df3.insert(5, '貸出週', df3['貸出日時'].map(conv_week_day))\n", 193 | "\n", 194 | "# 結果確認\n", 195 | "display(df3.head(2))" 196 | ], 197 | "metadata": { 198 | "id": "CFaBODHYetFh" 199 | }, 200 | "execution_count": null, 201 | "outputs": [] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "source": [ 206 | "# 参考\n", 207 | "\n", 208 | "# 月単位の日付作成\n", 209 | "def conv_month(ts):\n", 210 | " str = ts.isoformat()\n", 211 | " # str: YYYY-MM-DDThh:mm:ss\n", 212 | " return datetime.strptime(str[:7], '%Y-%m')\n", 213 | "\n", 214 | "# 年単位の日付作成\n", 215 | "def conv_year(ts):\n", 216 | " str = ts.isoformat()\n", 217 | " # str: YYYY-MM-DDThh:mm:ss\n", 218 | " return datetime.strptime(str[:4], \"%Y\")" 219 | ], 220 | "metadata": { 221 | "id": "4D9Cx4FerJ4t" 222 | }, 223 | "execution_count": null, 224 | "outputs": [] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "source": [ 229 | "### 3.7.3 週単位の集計" 230 | ], 231 | "metadata": { 232 | "id": "xkDiwv5xWRIg" 233 | } 234 | }, 235 | { 236 | "cell_type": "code", 237 | "source": [ 238 | "# 週単位の集計\n", 239 | "df4 = df3.groupby('貸出週')['レンタル代'].sum()\n", 240 | "\n", 241 | "# 結果確認\n", 242 | "display(df4)" 243 | ], 244 | "metadata": { 245 | "id": "w_MdlSxgXVNQ" 246 | }, 247 | "execution_count": null, 248 | "outputs": [] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "source": [ 253 | "# 1週間単位のインデックス作成\n", 254 | "date_index = pd.date_range(\n", 255 | " \"2005-05-23\", periods=14, freq=\"W-MON\")\n", 256 | "print(date_index)" 257 | ], 258 | "metadata": { 259 | "id": "aLdh3NISXVVj" 260 | }, 261 | "execution_count": null, 262 | "outputs": [] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "source": [ 267 | "# 空の集計表作成\n", 268 | "rent_fare = pd.Series(0, index=date_index)\n", 269 | "print(rent_fare)" 270 | ], 271 | "metadata": { 272 | "id": "fYvTvpVWitqr" 273 | }, 274 | "execution_count": null, 275 | "outputs": [] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "source": [ 280 | "# 売上集計\n", 281 | "for ts in df4.index:\n", 282 | " rent_fare[ts] += df4[ts]\n", 283 | "\n", 284 | "# 結果確認\n", 285 | "print(rent_fare)" 286 | ], 287 | "metadata": { 288 | "id": "zDzpfItwZnP-" 289 | }, 290 | "execution_count": null, 291 | "outputs": [] 292 | }, 293 | { 294 | "cell_type": "markdown", 295 | "source": [ 296 | "### 3.7.4 集計結果の可視化" 297 | ], 298 | "metadata": { 299 | "id": "Yxi6DHy5J9G1" 300 | } 301 | }, 302 | { 303 | "cell_type": "code", 304 | "source": [ 305 | "# サイズ設定\n", 306 | "plt.rcParams['figure.figsize'] = (6, 6)\n", 307 | "\n", 308 | "# 棒グラフ描画\n", 309 | "rent_fare.plot(kind='bar')\n", 310 | "\n", 311 | "# タイトル表示\n", 312 | "plt.title('週単位の売上合計')\n", 313 | "plt.show()" 314 | ], 315 | "metadata": { 316 | "id": "og99xS964OyP" 317 | }, 318 | "execution_count": null, 319 | "outputs": [] 320 | }, 321 | { 322 | "cell_type": "markdown", 323 | "source": [ 324 | "### 3.7.5 日付範囲指定" 325 | ], 326 | "metadata": { 327 | "id": "-1dQqN4uMRFY" 328 | } 329 | }, 330 | { 331 | "cell_type": "code", 332 | "source": [ 333 | "# 日付範囲指定\n", 334 | "\n", 335 | "# 開始日 datetime型で定義\n", 336 | "sday = pd.to_datetime('2005-06-11')\n", 337 | "\n", 338 | "# 終了日 datetime型で定義\n", 339 | "eday = pd.to_datetime('2005-06-18')\n", 340 | "\n", 341 | "# 顧客ID\n", 342 | "uid = 459\n", 343 | "\n", 344 | "# queryメソッドで絞り込み 検索条件はすべて変数による指定\n", 345 | "x2 = df3.query(\n", 346 | " '顧客ID == @uid and 貸出日 >=@sday and 貸出日 <= @eday')\n", 347 | "\n", 348 | "# 結果確認\n", 349 | "display(x2)" 350 | ], 351 | "metadata": { 352 | "id": "DFIaS14Fvnul" 353 | }, 354 | "execution_count": null, 355 | "outputs": [] 356 | }, 357 | { 358 | "cell_type": "markdown", 359 | "source": [ 360 | "### 3.7.6 日付への加減算(relativedelta関数)" 361 | ], 362 | "metadata": { 363 | "id": "nAf0mBQLQAeV" 364 | } 365 | }, 366 | { 367 | "cell_type": "code", 368 | "source": [ 369 | "# ライブラリインポート\n", 370 | "from dateutil.relativedelta import relativedelta\n", 371 | "\n", 372 | "# 基準日付\n", 373 | "t1 = x2['貸出日'].iloc[0]\n", 374 | "\n", 375 | "# 4日後\n", 376 | "ts = t1 + relativedelta(days=4)\n", 377 | "\n", 378 | "# 14日後\n", 379 | "te = t1 + relativedelta(days=14)\n", 380 | "\n", 381 | "# 結果確認\n", 382 | "print(t1, type(t1))\n", 383 | "print(ts, type(ts))\n", 384 | "print(te, type(te))" 385 | ], 386 | "metadata": { 387 | "id": "gwuZmO1Gzv1J" 388 | }, 389 | "execution_count": null, 390 | "outputs": [] 391 | }, 392 | { 393 | "cell_type": "code", 394 | "source": [ 395 | "# 計算結果を絞り込み条件に使う\n", 396 | "x3 = df3.query('顧客ID == @uid and 貸出日 >=@ts and 貸出日 <= @te')\n", 397 | "\n", 398 | "# 結果確認\n", 399 | "display(x3)" 400 | ], 401 | "metadata": { 402 | "id": "BoWUp1ra0OHg" 403 | }, 404 | "execution_count": null, 405 | "outputs": [] 406 | }, 407 | { 408 | "cell_type": "markdown", 409 | "source": [ 410 | "### 演習問題\n", 411 | "レンタルビデオ店では顧客離反防止施策の一環として、最近レンタルをしていない顧客をリストアップし、期間限定半額セールのDMを打つこととしました。 \n", 412 | "顧客絞り込みの基準は「最終貸出日が2005-08-19以前」ということがすでに定まっているものとします。 \n", 413 | "このとき、貸出情報から該当顧客を洗い出し、顧客情報を用いてDMの宛先をリスト変数形式で作成してください。 \n", 414 | "リスト作成時は、実習で利用した貸出情報(df3)と下記の顧客情報(df5)を利用して下さい。" 415 | ], 416 | "metadata": { 417 | "id": "dgGYcBYeStTv" 418 | } 419 | }, 420 | { 421 | "cell_type": "code", 422 | "source": [ 423 | "# 顧客情報\n", 424 | "url2 = 'https://github.com/makaishi2/samples/raw/main/data/customer-jp.csv'\n", 425 | "# 顧客情報\n", 426 | "df5 = pd.read_csv(url2)\n", 427 | "display(df5.head(1))" 428 | ], 429 | "metadata": { 430 | "id": "EZl2IMT30Wdg" 431 | }, 432 | "execution_count": null, 433 | "outputs": [] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "source": [ 438 | "# df3から「顧客ID」と「貸出日」の列のみを抽出\n", 439 | "df6 =\n", 440 | "\n", 441 | "# 結果確認\n", 442 | "display(df6.head(2))" 443 | ], 444 | "metadata": { 445 | "id": "SX770yBZHNxv" 446 | }, 447 | "execution_count": null, 448 | "outputs": [] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "source": [ 453 | "# 顧客IDごとの最終貸出日を求める\n", 454 | "# (ヒント)顧客ごとグループ化して「貸出日」の最大値を求めればいい\n", 455 | "df7 =\n", 456 | "\n", 457 | "# 顧客IDをデータフレームの列に戻す\n", 458 | "df8 =\n", 459 | "\n", 460 | "# 結果確認\n", 461 | "display(df8.head(2))" 462 | ], 463 | "metadata": { 464 | "id": "33LYjFsHHoB7" 465 | }, 466 | "execution_count": null, 467 | "outputs": [] 468 | }, 469 | { 470 | "cell_type": "code", 471 | "source": [ 472 | "# 最終貸出日が 2005-08-19以前の顧客を絞り込む\n", 473 | "\n", 474 | "# 基準日の定義\n", 475 | "ldate =\n", 476 | "\n", 477 | "# queryメソッドで検索\n", 478 | "df9 =\n", 479 | "\n", 480 | "# 結果確認\n", 481 | "display(df9)" 482 | ], 483 | "metadata": { 484 | "id": "mlIEYKZrHoME" 485 | }, 486 | "execution_count": null, 487 | "outputs": [] 488 | }, 489 | { 490 | "cell_type": "code", 491 | "source": [ 492 | "# メールアドレス一覧の作成\n", 493 | "\n", 494 | "# df5から顧客ID、メールアドレスを抽出\n", 495 | "df10 =\n", 496 | "\n", 497 | "# df9と結合\n", 498 | "df11 =\n", 499 | "\n", 500 | "# 結果確認\n", 501 | "display(df11.head(2))" 502 | ], 503 | "metadata": { 504 | "id": "JLYTcFLnHoS2" 505 | }, 506 | "execution_count": null, 507 | "outputs": [] 508 | }, 509 | { 510 | "cell_type": "code", 511 | "source": [ 512 | "# メールアドレスをリスト形式で抽出\n", 513 | "mlist =\n", 514 | "\n", 515 | "# 結果確認\n", 516 | "print(mlist)" 517 | ], 518 | "metadata": { 519 | "id": "WpIUQ7JxHoYS" 520 | }, 521 | "execution_count": null, 522 | "outputs": [] 523 | } 524 | ] 525 | } -------------------------------------------------------------------------------- /notebooks/ch02_02.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "ch02_02.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | } 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "source": [ 23 | "## 2.2 numpy入門" 24 | ], 25 | "metadata": { 26 | "id": "i_fegTOAEJ8Q" 27 | } 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "source": [ 32 | "### 2.2.2 ライブラリ利用 " 33 | ], 34 | "metadata": { 35 | "id": "Dp6v5fgnE8O_" 36 | } 37 | }, 38 | { 39 | "cell_type": "code", 40 | "source": [ 41 | "# NumPyのインポート\n", 42 | "\n", 43 | "import numpy as np" 44 | ], 45 | "metadata": { 46 | "id": "aHLlklFaSZtc" 47 | }, 48 | "execution_count": null, 49 | "outputs": [] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "source": [ 54 | "# デフォルト設定でのprint関数出力結果\n", 55 | "\n", 56 | "x = np.array([2/7, 1000/7, 0.00304567])\n", 57 | "print(x)" 58 | ], 59 | "metadata": { 60 | "id": "TMKHwt4ASZx4" 61 | }, 62 | "execution_count": null, 63 | "outputs": [] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "source": [ 68 | "# NumPy表示形式の設定\n", 69 | "#\n", 70 | "# suppress=True : 固定小数点表示\n", 71 | "# precision=4 : 小数点以下4桁\n", 72 | "# floatmode='fixed' : 最終桁が0でも明示的に表示\n", 73 | "\n", 74 | "np.set_printoptions(\n", 75 | " suppress=True, precision=4, floatmode='fixed'\n", 76 | ")\n", 77 | "\n", 78 | "print(x)" 79 | ], 80 | "metadata": { 81 | "id": "Vc3-6Q5-TFEA" 82 | }, 83 | "execution_count": null, 84 | "outputs": [] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "source": [ 89 | "### 2.2.3 データ定義" 90 | ], 91 | "metadata": { 92 | "id": "hfljcsF7FXS_" 93 | } 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "source": [ 98 | "#### array関数" 99 | ], 100 | "metadata": { 101 | "id": "9m66YDDSFcWb" 102 | } 103 | }, 104 | { 105 | "cell_type": "code", 106 | "source": [ 107 | "# array関数によるベクトル変数の定義\n", 108 | "n1 = np.array([1, 7, 5, 2])\n", 109 | "\n", 110 | "# 結果確認\n", 111 | "print(n1)" 112 | ], 113 | "metadata": { 114 | "id": "jzEg1x_RFKCd" 115 | }, 116 | "execution_count": null, 117 | "outputs": [] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "source": [ 122 | "# NumPy変数の性質確認\n", 123 | "\n", 124 | "# 型確認\n", 125 | "print(type(n1))\n", 126 | "\n", 127 | "# 要素数確認\n", 128 | "print(n1.shape)\n", 129 | "\n", 130 | "# もう1つの方法\n", 131 | "print(len(n1))" 132 | ], 133 | "metadata": { 134 | "id": "5epdLi4GXmDH" 135 | }, 136 | "execution_count": null, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "source": [ 142 | "# array関数による表形式の変数の定義\n", 143 | "n2 = np.array([\n", 144 | " [1, 2, 3, 4],\n", 145 | " [5, 6, 7, 8],\n", 146 | " [9, 10, 11, 12]\n", 147 | "])\n", 148 | "\n", 149 | "# 結果確認\n", 150 | "print(n2)" 151 | ], 152 | "metadata": { 153 | "id": "Xt2p9n06FUlE" 154 | }, 155 | "execution_count": null, 156 | "outputs": [] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "source": [ 161 | "# 表形式のNumPy型データの性質確認\n", 162 | "\n", 163 | "# 要素数確認\n", 164 | "print(n2.shape)\n", 165 | "\n", 166 | "# もう1つの方法\n", 167 | "print(len(n2))" 168 | ], 169 | "metadata": { 170 | "id": "BO6w6nP6Z_Kg" 171 | }, 172 | "execution_count": null, 173 | "outputs": [] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "source": [ 178 | "#### 数値配列の生成" 179 | ], 180 | "metadata": { 181 | "id": "yMyA99T5G0tS" 182 | } 183 | }, 184 | { 185 | "cell_type": "code", 186 | "source": [ 187 | "# linspace関数による数値配列\n", 188 | "\n", 189 | "# 等間隔に点を取る\n", 190 | "# 点の数が第3の引数\n", 191 | "# (植木算になる点に注意)\n", 192 | "n3 = np.linspace(0, 2, 11)\n", 193 | "\n", 194 | "# 結果確認\n", 195 | "print(n3)" 196 | ], 197 | "metadata": { 198 | "id": "WwqS-op8GmYC" 199 | }, 200 | "execution_count": null, 201 | "outputs": [] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "source": [ 206 | "# arange関数による数値配列\n", 207 | "\n", 208 | "# 等間隔に点を取る\n", 209 | "# 間隔値が第3の引数\n", 210 | "# (第2引数はmaxでなく「未満」であることに注意)\n", 211 | "n4 = np.arange(0, 2.2, 0.2)\n", 212 | "\n", 213 | "# 結果確認\n", 214 | "print(n4)" 215 | ], 216 | "metadata": { 217 | "id": "-zjjenkXG9Ab" 218 | }, 219 | "execution_count": null, 220 | "outputs": [] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "source": [ 225 | "### 2.2.4 参照" 226 | ], 227 | "metadata": { 228 | "id": "Jo2BIgCRHTm4" 229 | } 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "source": [ 234 | "#### 行列定義" 235 | ], 236 | "metadata": { 237 | "id": "szZFmJuaHnzD" 238 | } 239 | }, 240 | { 241 | "cell_type": "code", 242 | "source": [ 243 | "# array関数による表形式の変数の定義\n", 244 | "\n", 245 | "n2 = np.array([\n", 246 | " [1, 2, 3, 4],\n", 247 | " [5, 6, 7, 8],\n", 248 | " [9, 10, 11, 12]\n", 249 | "])\n", 250 | "\n", 251 | "# 結果確認\n", 252 | "print(n2)" 253 | ], 254 | "metadata": { 255 | "id": "AkBV0jVSHBlV" 256 | }, 257 | "execution_count": null, 258 | "outputs": [] 259 | }, 260 | { 261 | "cell_type": "markdown", 262 | "source": [ 263 | "#### 特定の要素の抽出" 264 | ], 265 | "metadata": { 266 | "id": "XSGHsSMkceDk" 267 | } 268 | }, 269 | { 270 | "cell_type": "code", 271 | "source": [ 272 | "# 1行目2列目の要素指定\n", 273 | "n5 = n2[1, 2]\n", 274 | "print(n5)" 275 | ], 276 | "metadata": { 277 | "id": "i-2nRsKBZtv8" 278 | }, 279 | "execution_count": null, 280 | "outputs": [] 281 | }, 282 | { 283 | "cell_type": "markdown", 284 | "source": [ 285 | "#### 元行列の部分集合を抽出" 286 | ], 287 | "metadata": { 288 | "id": "8V1lVC0W6bH-" 289 | } 290 | }, 291 | { 292 | "cell_type": "code", 293 | "source": [ 294 | "# 1行目のすべての列\n", 295 | "# n6 = n2[1] と書いても同じ\n", 296 | "n6 = n2[1, :]\n", 297 | "print(n6)\n", 298 | "print(n6.shape)" 299 | ], 300 | "metadata": { 301 | "id": "ecFyIjkIJUnT" 302 | }, 303 | "execution_count": null, 304 | "outputs": [] 305 | }, 306 | { 307 | "cell_type": "code", 308 | "source": [ 309 | "# すべての行の0列目\n", 310 | "n7 = n2[:, 0]\n", 311 | "print(n7)\n", 312 | "print(n7.shape)" 313 | ], 314 | "metadata": { 315 | "id": "JLYNvI7aa_Tg" 316 | }, 317 | "execution_count": null, 318 | "outputs": [] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "source": [ 323 | "#0-1行目、2-3列目\n", 324 | "n8 = n2[:2, 2:]\n", 325 | "print(n8)\n", 326 | "print(n8.shape)" 327 | ], 328 | "metadata": { 329 | "id": "Hp7ZVrYqj6GJ" 330 | }, 331 | "execution_count": null, 332 | "outputs": [] 333 | }, 334 | { 335 | "cell_type": "markdown", 336 | "source": [ 337 | "#### True/False配列で抽出" 338 | ], 339 | "metadata": { 340 | "id": "KNezVFYoiiTo" 341 | } 342 | }, 343 | { 344 | "cell_type": "code", 345 | "source": [ 346 | "# 0行目と2行目、すべての列\n", 347 | "# True / False要素の配列で指定する\n", 348 | "n2_index = np.array([True, True, False])\n", 349 | "n9 = n2[n2_index]\n", 350 | "print(n9)\n", 351 | "print(n9.shape)" 352 | ], 353 | "metadata": { 354 | "id": "bWBkpCSyHwe7" 355 | }, 356 | "execution_count": null, 357 | "outputs": [] 358 | }, 359 | { 360 | "cell_type": "markdown", 361 | "source": [ 362 | "### 2.2.5 演算" 363 | ], 364 | "metadata": { 365 | "id": "dnmoQ1OlTmJ3" 366 | } 367 | }, 368 | { 369 | "cell_type": "markdown", 370 | "source": [ 371 | "#### NumPy変数間の演算" 372 | ], 373 | "metadata": { 374 | "id": "eDdt_DoUT08d" 375 | } 376 | }, 377 | { 378 | "cell_type": "code", 379 | "source": [ 380 | "# 演算対象のNumPy変数定義\n", 381 | "n2 = np.array([\n", 382 | " [1, 2, 3, 4],\n", 383 | " [5, 6, 7, 8],\n", 384 | " [9, 10, 11, 12]\n", 385 | "])\n", 386 | "n10 = np.array([\n", 387 | " [1, 4, 7, 10],\n", 388 | " [2, 5, 8, 11],\n", 389 | " [3, 6, 9, 12]\n", 390 | "])\n", 391 | "# 結果確認\n", 392 | "print(n2)\n", 393 | "print(n10)" 394 | ], 395 | "metadata": { 396 | "id": "qlOPNzOek4ui" 397 | }, 398 | "execution_count": null, 399 | "outputs": [] 400 | }, 401 | { 402 | "cell_type": "code", 403 | "source": [ 404 | "# NumPyの行列変数同士の足し算\n", 405 | "n11 = n2 + n10\n", 406 | "\n", 407 | "# 結果の確認\n", 408 | "print(n11)" 409 | ], 410 | "metadata": { 411 | "id": "uuQBrJjBdqIY" 412 | }, 413 | "execution_count": null, 414 | "outputs": [] 415 | }, 416 | { 417 | "cell_type": "markdown", 418 | "source": [ 419 | "#### ブロードキャスト機能" 420 | ], 421 | "metadata": { 422 | "id": "Y_jkZiQdT_Au" 423 | } 424 | }, 425 | { 426 | "cell_type": "code", 427 | "source": [ 428 | "# 演算元変数\n", 429 | "n1 = np.array([1, 7, 5, 2])\n", 430 | "\n", 431 | "print(n1)" 432 | ], 433 | "metadata": { 434 | "id": "R0ue7CLad2TS" 435 | }, 436 | "execution_count": null, 437 | "outputs": [] 438 | }, 439 | { 440 | "cell_type": "code", 441 | "source": [ 442 | "# すべての要素から同じ値を引く\n", 443 | "n12 = n1 - 4\n", 444 | "\n", 445 | "# 結果確認\n", 446 | "print(n12)" 447 | ], 448 | "metadata": { 449 | "id": "tEGCJdtgT5b5" 450 | }, 451 | "execution_count": null, 452 | "outputs": [] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "source": [ 457 | "# array関数による表形式の変数の定義\n", 458 | "n2 = np.array([\n", 459 | " [1, 2, 3, 4],\n", 460 | " [5, 6, 7, 8],\n", 461 | " [9, 10, 11, 12]\n", 462 | "])\n", 463 | "\n", 464 | "# 結果確認\n", 465 | "print(n2)" 466 | ], 467 | "metadata": { 468 | "id": "sx9RFKUDd9oR" 469 | }, 470 | "execution_count": null, 471 | "outputs": [] 472 | }, 473 | { 474 | "cell_type": "code", 475 | "source": [ 476 | "# 行列変数と数値間の演算\n", 477 | "n13 = n2 - 2\n", 478 | "print(n13)" 479 | ], 480 | "metadata": { 481 | "id": "RKI8vxOSeq93" 482 | }, 483 | "execution_count": null, 484 | "outputs": [] 485 | }, 486 | { 487 | "cell_type": "code", 488 | "source": [ 489 | "# 行列変数とベクトル変数間の演算\n", 490 | "n14 = n2 - n1\n", 491 | "print(n14)" 492 | ], 493 | "metadata": { 494 | "id": "rpcW6_JVe3Q1" 495 | }, 496 | "execution_count": null, 497 | "outputs": [] 498 | }, 499 | { 500 | "cell_type": "markdown", 501 | "source": [ 502 | "#### ユニバーサル関数" 503 | ], 504 | "metadata": { 505 | "id": "bYFFiXWDUVaV" 506 | } 507 | }, 508 | { 509 | "cell_type": "code", 510 | "source": [ 511 | "# xの配列の準備\n", 512 | "x = np.linspace(0, 2, 11)\n", 513 | "print(x)\n", 514 | "\n", 515 | "# y=sqrt(x)の計算\n", 516 | "y = np.sqrt(x)\n", 517 | "print(y)" 518 | ], 519 | "metadata": { 520 | "id": "M3yUmRJCUE8d" 521 | }, 522 | "execution_count": null, 523 | "outputs": [] 524 | }, 525 | { 526 | "cell_type": "markdown", 527 | "source": [ 528 | "#### 集約関数" 529 | ], 530 | "metadata": { 531 | "id": "GeydZ3nxUzhu" 532 | } 533 | }, 534 | { 535 | "cell_type": "code", 536 | "source": [ 537 | "# array関数による表形式の変数の定義\n", 538 | "n2 = np.array([\n", 539 | " [1, 2, 3, 4],\n", 540 | " [5, 6, 7, 8],\n", 541 | " [9, 10, 11, 12]\n", 542 | "])\n", 543 | "\n", 544 | "# 結果確認\n", 545 | "print(n2)" 546 | ], 547 | "metadata": { 548 | "id": "ZRPEvUDLiytq" 549 | }, 550 | "execution_count": null, 551 | "outputs": [] 552 | }, 553 | { 554 | "cell_type": "code", 555 | "source": [ 556 | "# 集約関数(sum関数)\n", 557 | "\n", 558 | "s0 = n2.sum(axis=0)\n", 559 | "s1 = n2.sum(axis=1)\n", 560 | "s2 = n2.sum()\n", 561 | "\n", 562 | "print(s0)\n", 563 | "print(s1)\n", 564 | "print(s2)" 565 | ], 566 | "metadata": { 567 | "id": "CISKpN2SUgL9" 568 | }, 569 | "execution_count": null, 570 | "outputs": [] 571 | }, 572 | { 573 | "cell_type": "markdown", 574 | "source": [ 575 | "### 2.2.6 応用例" 576 | ], 577 | "metadata": { 578 | "id": "ODo0C4iYVGmS" 579 | } 580 | }, 581 | { 582 | "cell_type": "markdown", 583 | "source": [ 584 | "#### 2つの変数の一致数から精度計算" 585 | ], 586 | "metadata": { 587 | "id": "y9zNOdvTVOqL" 588 | } 589 | }, 590 | { 591 | "cell_type": "code", 592 | "source": [ 593 | "# 2つのベクトル変数の準備\n", 594 | "# ベクトル変数1\n", 595 | "yt = np.array([1, 1, 0, 1, 0, 1, 1, 0, 1, 1])\n", 596 | "# ベクトル変数2\n", 597 | "yp = np.array([1, 1, 0, 1, 0, 1, 1, 1, 1, 1])\n", 598 | "\n", 599 | "# 内容表示\n", 600 | "print(yt)\n", 601 | "print(yp)" 602 | ], 603 | "metadata": { 604 | "id": "27dnkSNHU7k9" 605 | }, 606 | "execution_count": null, 607 | "outputs": [] 608 | }, 609 | { 610 | "cell_type": "code", 611 | "source": [ 612 | "# 配列の各要素を同時に比較する\n", 613 | "matched = (yt == yp)\n", 614 | "print(matched)" 615 | ], 616 | "metadata": { 617 | "id": "okr-jzlHVT6p" 618 | }, 619 | "execution_count": null, 620 | "outputs": [] 621 | }, 622 | { 623 | "cell_type": "code", 624 | "source": [ 625 | "# 更にこの結果にsum関数をかける\n", 626 | "# 対象変数がブーリアン型の場合 True→1 False→0に変換される\n", 627 | "# 一致数のカウント方法\n", 628 | "correct = matched.sum()\n", 629 | "\n", 630 | "# 全体数はlen(correct)で計算可能\n", 631 | "total = len(matched)\n", 632 | "\n", 633 | "# 精度の計算\n", 634 | "accuracy = correct/total\n", 635 | "\n", 636 | "print('一致数: ', correct, '全体数: ', total, '一致率: ', accuracy)" 637 | ], 638 | "metadata": { 639 | "id": "VGx1Qr-DVX_x" 640 | }, 641 | "execution_count": null, 642 | "outputs": [] 643 | }, 644 | { 645 | "cell_type": "markdown", 646 | "source": [ 647 | "#### ベクトルの数値を一次関数で変換して[0, 1]の範囲に収める" 648 | ], 649 | "metadata": { 650 | "id": "TqedATdDWZGy" 651 | } 652 | }, 653 | { 654 | "cell_type": "code", 655 | "source": [ 656 | "# 元変数\n", 657 | "n1 = np.array([1, 7, 5, 2])\n", 658 | "print(n1)\n", 659 | "\n", 660 | "# 最大値と最小値を集約関数で取得\n", 661 | "n1_max = n1.max()\n", 662 | "n1_min = n1.min()\n", 663 | "print(n1_max, n1_min)" 664 | ], 665 | "metadata": { 666 | "id": "egSR_NwrVcfX" 667 | }, 668 | "execution_count": null, 669 | "outputs": [] 670 | }, 671 | { 672 | "cell_type": "code", 673 | "source": [ 674 | "# 変換(ブロードキャスト機能の利用)\n", 675 | "n15 = (n1 - n1_min) / (n1_max - n1_min)\n", 676 | "print(n15)" 677 | ], 678 | "metadata": { 679 | "id": "42jeJWY7Wl7M" 680 | }, 681 | "execution_count": null, 682 | "outputs": [] 683 | }, 684 | { 685 | "cell_type": "markdown", 686 | "source": [ 687 | "### 演習問題\n", 688 | "行列 n2の最初の列の値が3で割り切れない行を残し、割り切れた行を消す処理をします。 \n", 689 | "その処理の結果、残された行をまとめて新しい行列を作ってください。" 690 | ], 691 | "metadata": { 692 | "id": "eudjDCjBWxCV" 693 | } 694 | }, 695 | { 696 | "cell_type": "code", 697 | "source": [ 698 | "# array関数による表形式の変数の定義\n", 699 | "n2 = np.array([\n", 700 | " [1, 2, 3, 4],\n", 701 | " [5, 6, 7, 8],\n", 702 | " [9, 10, 11, 12]\n", 703 | "])\n", 704 | "\n", 705 | "# n2の最初の列を抽出し、ベクトル変数a1とします。\n", 706 | "a1 = \n", 707 | "print(a1)\n", 708 | "\n", 709 | "# ブロードキャスト機能を用いて、a1の各要素が\n", 710 | "# 3で割った余りを示す配列a2を計算します\n", 711 | "a2 =\n", 712 | "print(a2)\n", 713 | "\n", 714 | "# 再度ブロードキャスト機能を用いて、a1の各要素が\n", 715 | "# 3で割り切れるかどうかを示す配列a3を作ります\n", 716 | "a3 = \n", 717 | "print(a3)\n", 718 | "\n", 719 | "# 変数a3を用いて、 n2から必要な行だけを残す計算をし\n", 720 | "# 結果をa4に代入します。\n", 721 | "a4 =\n", 722 | "print(a4)" 723 | ], 724 | "metadata": { 725 | "id": "rIU5ePe8Wpdu" 726 | }, 727 | "execution_count": null, 728 | "outputs": [] 729 | }, 730 | { 731 | "cell_type": "code", 732 | "source": [], 733 | "metadata": { 734 | "id": "sPHCuXLuW5RU" 735 | }, 736 | "execution_count": null, 737 | "outputs": [] 738 | } 739 | ] 740 | } --------------------------------------------------------------------------------