20250315_生まれて初めてのPython無料講座_講師用

セミナーの進め方

  • ご質問に関して

    • 講義中のお願い
      • 質疑応答の時間にまとめて取り上げますので、一度チャット欄に投稿していただけると助かります
      • 口頭で質問したい場合は、概要だけで構いません。質疑応答の時間にお答えします
    • 講義後も可能
  • 環境と資料に関して

    • 環境はGoogle Colab

    • 本セミナーでのコードは、Google Colabで動作確認済み

      • 他のPython実行環境でも利用可能ですが、環境ごとに仕様が異なるため、動作が変わることがある
    • 講義の方針に関して

      • 厳密には正確でない部分がある場合もございますが、分かりやすさを重視
        • 本セミナーでは初心者の方にも理解いただけるよう、例えを用いて解説
        • 講義で扱った範囲内のトピックに基づいて説明し、例外の共有を極力避ける
    • 講義資料

      • コードのみ:セミナー中に送付
      • 解説付きコード:本セミナー終了後に送付
  • トラブルシューティング

    • 画面はCtrl キー+マウス ホイールで、拡大または縮小できます

      ※大きめに表示していますが、各自調整をお願いします。

    • ノートブックの読み込みエラーを防ぐため、無圧縮形式のzipファイルを使用しています。

      ※そのためファイルサイズが大きくなっていますが、ご了承ください。

はじめに

目的

NumPyPandasMatplotlibといったデータサイエンスに欠かせないライブラリの基本操作を通じながら、基礎体力を養うことです。

                                                |

┌───────────────────────────────────────────────

  • 今後に利用できるPythonが操作できるGoogle Colaboratoryの環境構築
  • 変数、オブジェクト、関数などのPythonの中心仕組みを学ぶ
  • あるあるエラーの防止策についても触れ、初心者がつまずきやすいポイントを克服

データサイエンスとは

image.png

データを活用して、科学的(サイエンス)に問題を解決することを意味します。

なぜPythonが使われるのか

image.png

IOBE Index - TIOBE.「TIOBE Index」TIOBE、https://www.tiobe.com/tiobe-index/、アクセス日:2024年12月6日 より改変。

Pythonはデータ分析ライブラリが豊富でデータサイエンス分野に強いです。

ライブラリが豊富のため、新たなコーディングほぼ不要です。 つまり、手作業ミス減少 & 独自実装の誤り低減などの効果を生み、 非属人化が進みます。

結果、利用者が増えます。

   └─>Pythonは、TIOBE Index(1)2024年11月版において、22.85%のレーティングで1位にランク

   └─>前年同期比で8.69%増加し、Pythonは過去にも1位を獲得しており、現在も利用が更に拡大

利用者が増えることで、ライブラリやレファレンスが充実し、さらに多くの利用者を引き寄せるという好循環が生まれています。

(1) 世界中の熟練エンジニアの数、コース、サードパーティベンダーの数に基づいてプログラミング言語の人気を測定する指標

各ライブラリの役割

image.png

NumPy
数値データを効率的に処理するためのライブラリです。

  • 用途:リストや配列を用いた足し算、掛け算などの高速な数値計算が可能
  • 特長:軽量で数値データに特化
  • 制約:ラベル付きデータや柔軟なデータ操作には適さない

Pandas
表形式のデータ(例:CSVExcel)を扱うの強いライブラリです。

  • 用途データの読み込み、整理、加工、集計が可能
  • 特長:構造化データの操作に優れ、Excelのような柔軟なデータ操作を実現
  • 制約処理速度が低下する場合がある
  • 補足:簡易的な可視化機能しか備えていない

Matplotlib
データを視覚的に表現するためのグラフ作成ライブラリです。

  • 用途グラフを作成が可能
  • 特長PandasNumPyで整理・計算したデータを用いて、結果を視覚的に伝える
  • 制約:基本的なグラフ作成に適していますが、インタラクティブな可視化や複雑なレイアウトには他のツール(例:SeabornPlotly)が推奨される場合がある

環境構築

Google Colaboratoryです。 本セミナーでのコードは、Google Colabで動作確認済みです。

Google Colaboratoryとは?

Google Colaboratory(Colab)のノートブックを基盤にしています。
ノートブックとは、Word のように文章を書けて、Pythonのコードも実行できるものです。
つまり、マニュアル書のような役割も担えます。

  • コードと説明を一体化できるため、手順や意図を明確に記録できる
  • 別の人への引継ぎが可能になる
  • 従来のエディタのコメントアウト機能の限界を打破する
    など

  ┌────────────┐ ┌────┐ ┌─────┐
🟠Google Colaboratory  ≒  📝Word + 🐍Python
ノートブック

  └────────────┘ └────┘ └─────┘

  Google Colab特有の機能は主に以下です。

  - 主要ライブラリがインストール済み

  - Geminiと連携済み

  - 簡易的な自動コーディング機能を搭載

  - Git Hubと連携可能

  - クラッシュ時の自動復元

  - ノートブックをワンクリックで共有可能

  - 多発するバージョン不整合エラーが起きづらい(そのための仮想環境を作成せずに済む)

  - 無料

  など

Google Colab の準備方法

  1. GoogleColab(https://colab.research.google.com/?hl=ja) にアクセスし、Googleアカウントでログインします。

-Googleアカウントがない方は、別途作成が必要です。

-Googleアカウント作成ページ(https://www.google.com/intl/ja/account/about/)

Slide_22.png

  1. [ファイル] メニューから [ドライブの新しいノートブック] をクリックします。

Slide_23.png

  1. Googleドライブ(https://drive.google.com/drive/home) に自動的に [Colab Notebook] が作成され、そのノートブックがGoogleドライブに保存されます。

Slide_24.png

  1. 作成された [Colab Notebook] に、講義資料として提供されたノートブックをアップロードします。
    上記はパス指定せずに、実行できるフォルダになります。
    別のフォルダにもアップロードできますが、 パス指定がややこしいので指定箇所にアップロードください。

Slide_25.png

Numpyを学びましょう

NumPyを使って、たくさんの数値データを効率的に操作する方法を理解することです。

Numpyによるデータ分析の位置付けと講義範囲

image.png

NumPyとは?

image.png

NumPyは、Number(数や数学)Pythonを組み合わせた名前の通り、 Pythonで大量の数値データを効率よく扱うためのライブラリ(ツール)です。

特徴

  • 数学的な計算を素早く行うために設計されている
  • 大きなデータでも簡単に計算できる
  • データの高速処理が可能で、データサイエンスで広く活用されている

具体例

  • リストや表にある数字をまとめて計算する
  • 特定の範囲での集計を効率よく実施する

NumPyは、数値データを扱うあらゆる場面で非常に役立つ便利なツールです

NumPyを使うための準備

Numpyはライブラリです。

ライブラリとは

過去の人々の知識が集まった本棚のイメージです
これらを利用すれば、 誰でも同じ成果を得ることができます

具体的な手順

┌─────────────┐   ┌─────────────┐

  (1) NumPyのインストール   >    (2) NumPyのインポート

└─────────────┘   └─────────────┘

1.NumPyのインストール


NumPyを使用するには、まずPython環境にNumPyをインストールする必要があります。
インストールには、以下のように、どちらかのpip installを使用します。

ただし、Google Colaboratoryの環境下では、不要です。

In [ ]:
#pip install numpy   # コマンドラインやターミナルから実行する際に、推奨されている標準的なコマンドです
#!pip install numpy  # Jupyter Notebook や Google Colabratory などのコードセルから実行する場合に、推奨されているコマンドです

image.png

図書館図書カードpip)を使い、 ライブラリ(本棚)を借りるpip install)ようなイメージです。

続いて、インストールしたライブラリをインポートにして、アクセスできるようにします。

2.Numpyのインポート

In [ ]:
import numpy as np

image.png

自宅の作業部屋に持ってくるimport)ようなイメージです。

image.png

as npにより、npという短縮名で使用できるように設定です(厳密にはエイリアスの設定)。

  • numpyに別名(np)を付けるために、前置詞asが使われています。
    • 前置詞asは「イコール(=)」のような働き

      (asの後ろに名詞が1つしかないため、asは前置詞。前置詞は後ろに名詞を持つ特性があるため)

━━━━━━━━━━━━━━━━━━

📝 内部メカニズム

━━━━━━━━━━━━━━━━━━

  • import numpy as npのメカニズムに関して

    import numpy as np でアクセスするファイルは __init__.py です。__init__.py がエントリーポイントで、このファイルを通してNumpyの基本機能が利用できます。

image.png

  • miniforge3の場合のアクセスイメージ

    ~/miniforge3             # 例: miniforge仮想環境におけるnumpyのディレクトリ構造(環境によって異なる)
    └── envs
        └── myenv            # 仮想環境の名前 (例: myenv)
            └── lib
                └── pythonX.X  # Pythonバージョンに依存 (例: python3.9)
                    └── site-packages
                        └── numpy
                            ├── __init__.py       # `import numpy as np` でアクセスするファイル
                            ├── core
                               ├── __init__.py
                               ├── numeric.py
                               └── ...
                            ├── linalg
                               ├── __init__.py
                               ├── lapack_lite.py
                               └── ...
                            └── random
                                ├── __init__.py
                                ├── _generator.py
                                └── ...
    

━━━━━━━━━━━━━━━━━━

📝 その他の記法

━━━━━━━━━━━━━━━━━━

  • コメントアウトとは

    Pythonでは、コメントアウトを # を使って表現します。
    「コメントアウト」とは、その名の通り、コメント(注釈)+アウト(除外する)という意味で、「コメントを入れるが、コードの処理からは除外する」役割を果たします。
    そのため、# 以降に書かれた内容はプログラムとして実行されません。

image.png

  • コメントアウトの活用方法

    plantext
    +------------------------+
    |     コメントアウト      |
    |  ・# を使って記述       |
    |  ・コードを無効化する   |
    +------------------------+
                  |
        +---------+---------------------+
        |                         |
        v                         v
    +------------------------+      +------------------------+
    |    コードへの注釈      |      | 一時的なコードの無効化 |
    |  ・コードの説明を記述   |      |  ・コードを実行させない |
    |  ・他者への補足説明     |      |  ・デバッグやテストに活用|
    +------------------------+      +------------------------+
    
    
    1. コードへの注釈
      コメントアウトを使うことで、コードの目的や補足情報を明確に伝えることができます。
    !pip install numpy  # Jupyter Notebook や Google Colab などのコードセルから実行する場合に推奨されているコマンドです
    
    1. 一時的にコードを無効化
      実行したくないコードをコメントアウトすることで、簡単に無効化できます。
    # pip install numpy  # コマンドラインやターミナルから実行する際に推奨されている標準的なコマンドです
    

Numpyの操作

配列の基本操作

NumPyを使って、データを配列という形で扱います。
配列は、複数の値を一つにまとめて管理するものです。

Pythonの普通のリストに似ていますが、NumPyの配列は計算が速く、
多くの数値データを効率的に処理することができます。

配列の作成

まず、リストから配列を作る方法を学びましょう。NumPynp.array()を使います。

1次元配列の具体的な作成方法
In [ ]:
# リストから1次元配列を作成
number_list_1d = [10,20,30]
array_1d = np.array(number_list_1d)
print(array_1d)

コードの概要


  • リストを作成する:
    • number_list_1dPython のリストオブジェクトを使用し、数値データを格納します
  • 1次元配列を作成する:
    • np.array(number_list_1d) を呼び出し、内部的に ndarrayクラス を使用して新しい1次元配列オブジェクトを生成します
  • 配列を表示する:
    • Python の 組み込み関数print(array_1d) を使用して、配列の内容を出力します

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

number_list_1d = [10,20,30]の解説

image.png

  • 左辺:number_list_1d変数
    • number_list_1d[10,20,30]のリストオブジェクトへの参照を持つ変数
    • number_list_1d という名前を通じて、[10,20,30] というデータを操作できる
      • 変数:
        • 値に名前を付け、その名前を通じて値を参照および操作する仕組み
          • また、変数に格納された値は変更可能であり、プログラムの動的な挙動を実現
        • 由来は、値が変わる(変化する)可能性があるもの
          • プログラム内で特定の値を一時的に保存するために、メモリ上の住所を確保し、その住所に名前を付ける仕組み
            • この住所には値を格納したり、別の値に置き換えることができる

              ┌─────────────────────────┐

              😊変数は便利:

              ・一度保存した値を何度も使え、同じ値を繰り返し書く手間が省ける

              ・ 後で値を変えたくなったときも、一か所直すだけで済むので便利

              など

              └─────────────────────────┘

  • =は代入演算子
    • 右辺の値を左辺の変数に代入する動作を指す
    • 数学的な=により、「左辺と右辺が等しい状態にする」と考えると分かりやすい
        ┌────────┐              ┌────────┐  
        │   左辺         │       =      │   右辺         │  
        └────────┘ ◀──────└────────┘
    
  • 右辺の[10,20,30]は、listクラスで作られたリストオブジェクト

━━━━━━━━━━━━━━━━━━

📝 Python理解の土台作り

━━━━━━━━━━━━━━━━━━

◎ オブジェクトとは

  • オブジェクトは操作対象です。クラスを基に生成されます。

image.png

image.png

  • オブジェクトは、直接的な呼び出し(例: DataFrame()とシステムやライブラリの内部処理(例: np.array()) により生成されます

    実際には以下のように書いても同じ結果になります:

In [ ]:
number_list_1d = list([10,20,30])
  • オブジェクトのメリット

    オブジェクトは操作対象という意味です。 オブジェクトを対象にして、以下の操作を行います。

    • メソッド・プロパティ等
      オブジェクトに.を付けてメソッドやプロパティを使用

      例: number_list_1d.append(90) など

      オブジェクト.メソッド
      オブジェクト.プロパティ
      
    • 引数として使用する
      引数に、number_list_1dが参照するリストオブジェクトを渡して使用

      例: np.array(number_list_1d) など

      関数(引数)
      オブジェクト.メソッド(引数)
      

Pythonでのリストとは

  • リストとは、複数の値を1つの変数名とインデックスで管理する仕組み
    • 角括弧 [ ] を使い、その中に値をカンマ , で区切って記述
      • [ ]Pythonでは1つのリストを表す
      • []内の , は、CSVのように値を区切る役割

image.png

〇 1次元リスト

単純に1つのリストです。単にデータを並べたリストです。

In [ ]:
array_1d = [10, 20, 30]
array_1d

1次元リストの中で、各要素を,で区切ります。

image.png

〇 2次元リスト

2次元リストには複数のリストが含まれています。

「行」「列」のような形で、EXCELデータのような集まりです。

image.png

  • 行の区切り:1次元リストと異なり、各リストを,で区切る
  • 列の区切り:各リストの値は、1次元リストと同様に、各要素を,で区切る
In [ ]:
array_2d = [
    [10, 15, 20],
    [25, 30, 35],
    [40, 45, 50]
]
array_2d

np.array(number_list_1d)の解説

━━━━━━━━━━━━━━━━━━

📝 Python理解の土台作り

━━━━━━━━━━━━━━━━━━

◎ 関数とは

image.png

関数とは、適切な材料さえ用意すれば、料理ができる調理家電のような存在です。

誰でも美味しい同じ味が再現でき、誰でも同じ結果を得られます

料理という目的(戻り値)を得るために、 調理家電という手段(関数)を選び、

材料という手段のための条件(引数)を準備すればOKです。

図書館の例に置き換えると、

np」と名付けした本棚から、特定の本の章やページの「array」を取り出し、その本に必要な材料(number_list_1d)を渡すイメージです。

  • 材料(引数): リスト number_list_1d(データの集まり)
  • 調理家電(関数): np.array
  • 料理(戻り値): NumPy配列
  材料(引数)                  調理家電(関数)               料理(戻り値)  
┌───────────┐     ┌───────────┐     ┌────────┐  
│`number_list_1d`      │     │    np.array関数      │     │ NumPy配列      │
│ リスト               │  ─▶│ (リストを変換する) │  → │(完成品)      │
└───────────┘     └───────────┘     └────────┘  
       │                        ↑                                 ↑             
       │                        │                                 │  
       └─── 材料を、調理家電に入れて、料理(NumPy配列)を作る ─┘  

補足: np.array()NumPyndarray クラスのオブジェクトを生成しています。

image.png

np.array.に関して

 np.array.は、英語のofに相当し、「全体(NumPy)の中の一部(array)」を示します。

 NumPyが持つ特定の機能である array にアクセスする際に使用する記号です。

image.png

ここでは関数の性質をわかりやすく伝えるために、この例えて説明します。

イメージを補助するための例えであることをご留意ください。

◎ リストでは不十分?NumPyを使う理由

 リストは大量のデータや計算に不向きです。

  • NumPy高速な数値演算・統計処理が可能
  • リストでは数値演算にループ処理が必要だが、NumPy配列なら「+」演算子一つで複数要素の加算などが簡単に実行できる

print(array_1d)print() に関して

image.png

print()Pythonの組み込み関数で、追加のライブラリをインポートすることなく、すぐに使うことができます。

一方、numpyのようなライブラリは外部モジュールとして、import文を使って呼び出す必要があります。

  • print():

    • 組み込み関数
    • Pythonに最初から含まれている標準関数なので、特にインポートする必要はありません
  • numpy(例: np.array:

    • 外部ライブラリの関数
    • import numpy as npのように、最初にモジュールをインポートしてから使います

    ーーーーーーーーーーーーーーーーーーーーー

    ノートブック環境でのprint()の使いどころ

    ーーーーーーーーーーーーーーーーーーーーー

    通常のPython環境では、print()を使わないと出力されません。

    ノートブック環境では、print()なしでも表示されます。

    numpyでは、print()なしだと、そのまま表示すると見づらいです。

    pandas.DataFrameprint()なしの方が表形式で整形されて見やすいです。

    適宜、使い分けてください。

2次元配列の具体的な作成方法
In [ ]:
# リストのリストから2次元配列を作成
number_list_2d = [[10, 15, 20],[25, 30, 35],[40, 45, 50]]
array_2d = np.array(number_list_2d)
print(array_2d)

コードの概要

  • リストを作成する:
    • number_list_2dPython のリストオブジェクトを使用し、数値データを格納
  • 2次元配列を作成する:
    • np.array(number_list_2d) を呼び出し、内部的に ndarrayクラス を使用して新しい2次元配列オブジェクトを生成
  • 配列を表示する:
    • Python の 組み込み関数print(array_2d) を使用して、配列の内容を出力

配列の参照

NumPyの配列では、インデックスまたはスライサーを使って、特定の要素や範囲を参照できます。

配列参照し、様々な操作を実施します。

単一参照

インデックスを使って、配列内の特定の要素を取り出します。

Numpyの1次元配列の場合

In [ ]:
# array_1d =  [10, 20, 30]
print(array_1d[2])

コードの概要

  • 3番目の要素を参照する:
    array_1d[2]は、1次元配列array_1dの3番目の要素を参照。

  • 要素を表示する:
    print(array_1d[2])は、Pythonの組み込み関数printを使用して、参照した要素の値を出力


array1d[2]に関して

  • インデックスによる参照

    Pythonのリストと配列は主にインデックス番号を基準に要素を参照します。

    ┌──────────────────────────────┐

    ⚠️ 実際のデータは1から始まりますが、Pythonではインデックスが0から始まる

    └──────────────────────────────┘

  • Numpy の1次元配列を扱うとき、単一の要素を参照する場合 は、array_1d[インデックス] と記述します。

    ┌─────────────────────────┐

    Numpy の1次元配列 ~ 単一の要素を参照する場合 ~

    ───────────────────────────
    array_1d[インデックス]

    └─────────────────────────┘

    具体的に、array_1d[1]は以下の要素を参照

image.png

  • インデックスの定式化 ※本セミナー独自

    ┌────────────────┐
    インデックス指定の定式化
    ─────────────────    
    実際の行や列番号 = インデックス + 1
    └────────────────┘

    ⚠️ ただし、インデックスが1始まりやアルファベット等の場合、定式化は成り立たないので注意

Numpyの2次元配列の場合

In [ ]:
# array_2d = [[10, 15, 20],[25, 30, 35],[40, 45, 50]]
print(array_2d[0, 1])

コードの概要

  • 特定の要素を取得する:
    array_2d[0, 1]は、2次元配列array_2d0行目(インデックス0)と1列目(インデックス1)の要素を取得

  • 要素を表示する:
    print(array_2d[0, 1])は、Pythonの組み込み関数printを使用して、取得した要素の値を出力


array_2d[0, 1]に関して

┌─────────────────────────┐

Numpy の2次元配列 ~ 単一の要素を参照する場合 ~

───────────────────────────
array_2d[行インデックス, 列インデックス]

└─────────────────────────┘

  • Numpy の2次元配列を扱うとき、単一の要素を参照する場合は、array_2d[行インデックス, 列インデックス] と記述します。

    • 具体的に、array_2d[0,1]は以下の要素を参照

      • 行:インデックス 0 → 実際の行番号は 0 + 1 = 1 行目
      • 列:インデックス 1 → 実際の列番号は 1 + 1 = 2 列目

      したがって、array_2d[0, 1] は、実際の1行2列目の要素を参照

image.png

範囲参照

部分参照

In [ ]:
# array_1d =  [10, 20, 30]
print(array_1d[0:2])

コードの概要

  • 特定の要素を取得する:
    array_1d[0:2]は、1次元配列array_1d0番目から1番目までの要素(スライス)を取得します。

    • スライスでは、始点(0)は含まれ、終点(2)は含まれません。
  • 要素を表示する:
    print(array_1d[0:2])は、Pythonの組み込み関数printを使用して、取得した部分配列(スライス)を出力します。


array_1d[0:2]に関して

単一の要素ではなく、範囲を参照する方法です。

スライスと呼びます。「スライス(slice)」は「切り取る」という意味であり、配列の一部を切り出して取得することに由来します。
範囲を指定する際、終点のインデックスは含まれません。

始点 <= x < 終点

┌───────────────────────┐

 ★ 単一の要素を参照

 ───────────────────────

 [インデックス](1次元)

 [行インデックス, 列インデックス](2次元)

└───────────────────────┘

┌───────────────────────┐

 ★ 範囲内の要素を参照(スライス)

 ───────────────────────

 [開始:終点:ステップ](1次元, 指定した間隔で参照)

 └─>[開始:終点](1次元, ステップ=1 の省略形, 終点は含まれない)

 └─> [行の開始:行の終点, 列の開始:列の終点](2次元, ステップ=1 の省略形, 終点は含まれない)

└───────────────────────┘

image.png

array_1d[0:2]開始=0, 終了=2 を指定し、

インデックス0の要素 10 からインデックス1の要素 20 までを参照します。

全参照

列全体を参照したいケースです。

In [ ]:
# array_2d = [[10, 15, 20],[25, 30, 35],[40, 45, 50]]
print(array_2d[0, :])

コードの概要

  • 特定の行を取得する:
    array_2d[0, :]は、2次元配列array_2d0行目(インデックス0)のすべての列要素を取得

  • 要素を表示する:
    print(array_2d[0, :])は、Pythonの組み込み関数printを使用して、取得した行の内容を出力


In [ ]:
# 2次元配列から最初の行を取り出す
print(array_2d[0, ])

コードの概要

  • 最初の行を取得する:
    array_2d[0, ]は、2次元配列array_2d最初の行(インデックス0)を取得

  • 要素を表示する:
    print(array_2d[0, ])は、Pythonの組み込み関数printを使用して、取得した行の内容を出力


array_2d[0, :]``array_2d[0, ]に関して

array_2d[0, :]``array_2d[0, ]はどちらも同じ出力が得られます。

┌────────────────────────────────┐

array_2d[行の開始:行の終点:ステップ, 列の開始:列の終点:ステップ]

 |

 v

array_2d[0, ]行の開始のみを指定した形 に派生し・・・

 | ただし・・・

 v

array_2d[0, :] とすると、: 列の範囲 : も記述した形になる

 | 一般的なのは・・・

 v

array_2d[0, :] のように、列の : も明示する書き方が一般的

└────────────────────────────────┘

image.png

配列の演算

四則演算

In [ ]:
# 2つの配列を作成
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 配列同士の足し算
result_add = array1 + array2
print(result_add)

コードの概要

  • 配列を作成する:
    array1array2にそれぞれNumPyのndarrayクラスを使用して1次元配列を作成

  • 配列同士の足し算:
    array1 + array2は、対応する要素同士の足し算を行い、新しい配列を生成

    • 計算結果: [1 * 4, 2 * 5, 3 * 6][4, 10, 18]
  • 結果を表示する:
    print(result_add)は、Pythonの組み込み関数printを使用して、計算結果の配列を出力


In [ ]:
# 配列同士の掛け算
result_multiply = array1 * array2
print(result_multiply)  # 結果: [ 4 10 18]

コードの概要

  • 配列同士の掛け算:
    array1 * array2は、対応する要素同士の掛け算を行い、新しい配列を生成

    • 計算結果: [1*4, 2*5, 3*6][4, 10, 18]
  • 結果を表示する:
    print(result_multiply)は、Pythonの組み込み関数printを使用して、計算結果の配列を出力


array1 * array2 が使えるのは、まさに前述の『リストでは不十分?NumPyを使う理由』で挙げたポイントそのものです

統計関数

NumPyには、データの合計や平均など、便利な関数が組み込まれています。
これにより、大量のデータをすばやくまとめることができます。

In [ ]:
# 配列の合計を求める
sum_array = np.sum(array1)
print(sum_array)  # 結果: 6
In [ ]:
# 配列の平均を求める
mean_array = np.mean(array1)
print(mean_array)  # 結果: 2.0

コードの概要

  • 配列の合計を求める: np.sum(array1)は、array1の全ての要素を合計し、その結果をsum_arrayに格納

    • 例: array1の合計は6です。
  • 配列の平均を求める: np.mean(array1)は、array1の全ての要素の平均値を計算し、その結果をmean_arrayに格納

    • 例: array1の平均は2.0です。

❓ FAQ

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

Q: Pythonではnp.sum、Excelではsumなのでしょうか?

A:

内部関数か外部ライブラリかの違いにより、記述が異なります。

Excelでは sum が組み込み関数として提供されているため、そのまま使えます。

一方、 np.sum と記述するのは、NumPyライブラリのsum関数を使用しているためです。

image.png

ワーク

問題

  1. 2次元配列の作成
    [[10, 15, 20], [25, 30, 35], [40, 45, 50]] を使って、2次元配列を作成してください。
In [ ]:
 

説明: np.array() を使って、2次元配列も簡単に作成できます。リストのリストが2次元配列になります。

  1. 2次元配列の要素の取り出し
    2次元配列 [[10, 15, 20], [25, 30, 35], [40, 45, 50]] を作成して、2行目の3列目の要素を取り出してください。
In [ ]:
 

説明: 2次元配列では、インデックスを [行, 列] の形で指定して、要素を取り出します。

  1. 範囲の取り出し(スライシング)

2次元配列 [[10, 15, 20], [25, 30, 35], [40, 45, 50]] から、2行目までの全要素をスライスして取り出してください。

In [ ]:
 

説明:

インデックスの始まり:インデックスの終わり を省略して、1行2行([:2])と全列([:])を取り出します。

  • [:2]: 始点を省略することで、最初から2行目の手前までの行を指定します(1行目と2行目を取得)。
  • [:]: 始点終点を省略することで、全ての列を指定します。

省略記法を使うことで、簡潔に特定の範囲や全体を取り出すことができます。

  1. 配列同士の足し算

配列 [1, 2, 3][4, 5, 6] を足し合わせた結果を求めてください。

In [ ]:
 

説明: 配列同士で要素ごとの掛け算もできます。これは各位置の要素同士を掛け合わせる演算です。

  1. 配列の合計
    配列 [10, 20, 30, 40, 50] の全要素の合計を求めてください。
In [ ]:
 

説明: NumPyでは、同じサイズの配列同士で要素ごとの足し算ができます。

解答と説明

  1. 2次元配列の作成
    [[10, 15, 20], [25, 30, 35], [40, 45, 50]] を使って、2次元配列を作成してください。
In [ ]:
array_2d = np.array([[10, 15, 20], [25, 30, 35], [40, 45, 50]])
print(array_2d)

説明: np.array() を使って、2次元配列も簡単に作成できます。リストのリストが2次元配列になります。

  1. 2次元配列の要素の取り出し
    2次元配列 [[10, 15, 20], [25, 30, 35], [40, 45, 50]] を作成して、2行目の3列目の要素を取り出してください。
In [ ]:
array_2d = np.array([[10, 15, 20], [25, 30, 35], [40, 45, 50]])
print(array_2d[1, 2])

説明: 2次元配列では、インデックスを [行, 列] の形で指定して、要素を取り出します。

  1. 範囲の取り出し(スライシング)

2次元配列 [[10, 15, 20], [25, 30, 35], [40, 45, 50]] から、2行目までの全要素をスライスして取り出してください。

In [ ]:
array_2d = np.array([[10, 15, 20], [25, 30, 35], [40, 45, 50]])
print(array_2d[:2, :])

説明:

インデックスの始まり:インデックスの終わり を省略して、1行2行([:2])と全列([:])を取り出します。

  • [:2]: 始点を省略することで、最初から2行目の手前までの行を指定します(1行目と2行目を取得)。
  • [:]: 始点終点を省略することで、全ての列を指定します。

省略記法を使うことで、簡潔に特定の範囲や全体を取り出すことができます。

  1. 配列同士の足し算

配列 [1, 2, 3][4, 5, 6] を足し合わせた結果を求めてください。

In [ ]:
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
result = array1 + array2
print(result)

説明: 配列同士で要素ごとの掛け算もできます。これは各位置の要素同士を掛け合わせる演算です。

  1. 配列の合計
    配列 [10, 20, 30, 40, 50] の全要素の合計を求めてください。
In [ ]:
array = np.array([10, 20, 30, 40, 50])
total_sum = np.sum(array)
total_sum

説明: NumPyでは、同じサイズの配列同士で要素ごとの足し算ができます。

Pandasを学びましょう

Pandasを使って、たくさんの数値データを効率的に操作する方法を理解することです。

Pandasによるデータ分析の位置付けと講義範囲

image.png

Pandasとは?

Pandasの名前の由来はpan(el)-da(ta)-sという説があります。(もちろん、パネルデータ以外も扱えます)

image.png

NumPyの配列とは異なり、Pandasのデータフレームを使うと、 データを表形式(テーブル形式)で管理できます。

image.png

表形式(テーブル形式)とは、行と列からなるデータ構造であり、 Excelの表のようなイメージです。

┌────────────────────────────────────┐
Excelに近い体験を提供し、データ分析の初心者でも使いやすい

└────────────────────────────────────┘

image.png

Pandasを使うための準備

具体的な手順

┌─────────────┐   ┌─────────────┐

  (1) Pandasのインストール   >    (2) Pandasのインポート

└─────────────┘   └─────────────┘

1.Pandasのインストール


Pandasを使用するには、まずPython環境にPandasをインストールする必要があります。
インストールには、以下のように、どちらかのpip installを使用します。

ただし、Google Colaboratoryの環境下では、不要です。

In [ ]:
#pip install pandas   # コマンドラインやターミナルから実行する際に、推奨されている標準的なコマンドです
#!pip install pandas  # Jupyter Notebook や Google Colabratory などのコードセルから実行する場合に、推奨されているコマンドです

図書館図書カードpip)を使い、 ライブラリ(本棚)を借りるpip install)ようなイメージです。

続いて、インストールしたライブラリをインポートにして、アクセスできるようにします。

2.Pandasのインポート

In [ ]:
import pandas as pd

データフレームの基本操作

Pandasを使うと、データフレームという表形式のデータ構造を簡単に扱うことができます。
データフレームは、Excelの表のように、行と列でデータを整理できるイメージです。

作成

データフレームを作成するには、次の2つの方法があります。

  1. pd.DataFrame()を使います
  2. CSV等のデータ読み込み(自動的に、データフレーム生成)

手動でデータフレームを作成する

In [ ]:
data = {'名前': ['太郎', '花子', '一郎'], '年齢': [20, 22, 19], '性別': ['男', '女', '男']}
df = pd.DataFrame(data)
df

コードの概要

  • 辞書を作成する:
    名前、年齢、性別のデータを辞書形式で格納します

  • データフレームを作成する:
    pd.DataFrame(data)を使い、辞書をデータフレーム形式に変換します

  • データを表示する:
    print(df)を使い、データフレームの内容を出力します


━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  1. 右辺について

右辺は { '名前': ['太郎', '花子', '一郎'], '年齢': [20, 22, 19], '性別': ['男', '女', '男'] } です。

これは 辞書型(dict と呼ばれます。

┌──────────┐
辞書型:複数の情報を管理するデータ構造
├──────────┤

 '名前': ['太郎', '花子', '一郎']

 '年齢': [20, 22, 19]

 '性別': ['男', '女', '男']

└──────────┘

辞書(dict)型は以下の特徴:

  • キーと値のペアでデータを管理
  • キーを指定して要素にアクセス
  • {} を使い、「キー:値」 の形式で記述

辞書の構文は次のようになります。

image.png

辞書は、Pythonのリストと , の使い方は同じ であり、キーと値を関連付けるために : を追加しているだけ である。

  • {}辞書の始まりと終わり(Pythonリストと同じ)
  • :キーと値の区切り(リストにはない「キーと値のペアを関連付ける」ために必要)
  • ,要素の区切り(Pythonリストと同じ)
  1. シングルクォート

シングルクォートで囲む「そのままのテキスト」を表し、
囲まないと変数名やキーワードとして解釈され、変数に保存された値やキーワードの持つ特定の意味や動作を参照します。

もし、記述コードが変数名やキーワードに存在しない場合はエラーします。

image.png

なぜ、**ダブルクォーテーション(“)**で囲む必要がある?

PCに、ダブルクォーテーションで(“)囲むことは「これは文字列です」と教えるための記号です。

もしダブルクォーテーション(“)で囲まなければ、Excelはこれらを文字列として理解できず、
数値や数式として誤って処理する可能性があります。

Excelの予約語は、文字列を囲まなくてもエラーになりません
これは次のセクションである「例外ルール」に直接関連しています。

予約語とは、Excelがあらかじめ認識しているキーワードのことで、
例えば「TRUE」「FALSE」や「SUM」などが該当します。

EXCELの豆知識 -ダブルクォーテーション(“)と例外ルールへの考察- | データ分析ドットコム.https://biz-data-analytics.com/excel/bits-of-excel-knowledge/9613/

  1. pd.DataFrame(data)に関して

Pandsに属したDataFrameクラスを使って、

引数に指定したdata(辞書型データ)に基づき、

新しいDataFrameオブジェクト(≒データフレーム)を生成します。

image.png

CSVファイルからデータフレームを作成する

In [ ]:
sdata_url='https://www.salesanalytics.co.jp/wp-content/uploads/2024/11/data_jp_utf8.csv'
df = pd.read_csv(sdata_url)
df

コードの概要

  • CSVファイルを読み込む:
    pd.read_csv(sdata_url)を使用し、指定されたURLからCSVデータを読み込みます

  • データフレームを作成する:
    読み込んだデータをデータフレーム形式で格納します

  • データを表示する:
    print(df)を使い、データフレームの内容を出力します


━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  1. read_csvに関して

image.png

 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
📌 Pandasread_csv 関数によるデータフレーム作成

 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

 手動で DataFrame を作成する場合、
df = pd.DataFrame(data) のように
クラスを明示的に呼び出す必要があります

 しかし、pd.read_csv() を使えば、
DataFrame を明示せずに
┌──────────────────────────────┐
│ ✅ 実行するだけで、新しいDataFrameオブジェクトが自動生成 └──────────────────────────────┘

 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

 🔍 なぜ DataFrame を明示的に指定しなくてもよいのか?

 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

 📌 pd.read_csv() は、内部的に pandas.DataFrame クラスのコンストラクタ を使ってデータフレームを生成しています。
そのため、明示的に DataFrame を指定しなくても、新しいデータ フレームが作成 されます。

 🛠 コンストラクタとは?

 ┌────────────────────────────┐
│ 🎯 *オブジェクトの生成時に自動実行される初期化処理
└────────────────────────────┘

━━━━━━━━━━━━━━━━━━

📌 日本語CSVの読み込みトラブル解決ガイド

━━━━━━━━━━━━━━━━━━

CSVPandasで読み込もうとすると、
以下のようなエラーが発生することがあります。

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

🚨 エラーの原因

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

read_csvはデフォルトで UTF-8 としてファイルを読み込むためです

📌 エンコーディングの違い(概念図)

UTF-8 で読み込もうとする → 解読できずエラー発生

┌───────┐

CSV       ← ❌ 読めない

└───────┘

shift-jis を指定すると → 正しくデータを取得できる
┌───────┐

CSV       ← ✅ 読める

└───────┘

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
🛠 対策:エンコーディングを指定する
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

image.png

image.png

In [ ]:
# 日本語Windows環境で作成されたCSVファイルを読み込む
df_s = pd.read_csv('https://www.salesanalytics.co.jp/wp-content/uploads/2025/03/data_jp_shfit-jis.csv', encoding='shift_jis')

# 内容を確認
df_s

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

💾 メモ帳 でのファイル保存時のポイント

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

新しく 'CSV' ファイルを作成する場合、
「名前を付けて保存」の エンコード 設定で UTF-8 を選択すると、 将来的な文字化けやエラーを防ぐことができます。

🔄 既存の CSVUTF-8 に変換する手順

  1. メモ帳で 'CSV' ファイルを開く
  2. 「名前を付けて保存」を選択
  3. 「エンコード」設定をUTF-8に変更し、保存

━━━━━━━━━━━━━━━━━━

📌 関数に複数の引数を渡す方法

━━━━━━━━━━━━━━━━━━

関数に複数の引数を渡す場合、それぞれの引数はカンマ(, で区切ります。

pd.read_csv( 'ファイル名.csv' , encoding='shift_jis' )
                              
                              └─ 文字コードを指定encoding='shift_jis'
               └─ 読み込むCSVファイル'ファイル名.csv'

参照

行列の参照

特定の行や列を参照して操作できます。

まずは、参照のお話です。

[] により参照ことができます。

◎ 列を参照するケース

📜 記法

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

 〇 1列の場合

  データフレーム['列名1'] と記述します

  ──────────────────────────────

  データフレーム['列名']

          └── '列名': 指定した列のデータを取り出す

  ──────────────────────────────

In [ ]:
# 列を選択
df['名前']

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

データフレーム df の中から 名前列を選択して出力します。

──────────────────────────────────

df['名前']

  └── `名前``: 取得したいデータの列名を入力

──────────────────────────────────

 〇 複数列を取り出すケース

📜 記法

 データフレーム[['列名1', '列名2']]

           ↓

            ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 複数列の同時取り出し ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
              データの取り出しの外側[] ←データフレームから必要な部分(列または行)を取り出す
               ↑        ↑
               [['列名1', '列名2']]

                   └─>内側[]で、列名を指定

                     取得したいデータの列名をカンマで区切って指定

            ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

⚠ 注意

  • 1列を取り出すと 1次元データSeries 型)
  • 複数列を取り出すと 2次元データデータフレーム型

😔データ抽出時に1列は自動的に Series 型になるため、後の処理でエラーが発生することがあります。

In [ ]:
# 複数の列を選択
df[['名前', '年齢']]

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

列ではなく、行を参照させたケースでは、loc``ilocを使用する必要があります。

df[1] のように行を参照できないためです。

  • loc, iloc行と列の両方で指定でき、柔軟です。

image.png

◎ 行を取り出すケース

image.png

⚠ 注意

locは位置指定だけでなく名前やラベルでデータを選べるため、より便利で広く使われています。

 〇 1行選択

 データフレーム.loc[行番号]データフレーム.loc[行名] で指定します。

 ───────────────────────────

 データフレーム.loc[行番号]
└─ 行番号: インデックス番号による指定行の取り出し

 ───────────────────────────

In [ ]:
# 特定の行を選択
df.loc[0]  # 最初の行

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

 データフレームのインデックス 0 の行(最初の行)を選択して出力します。

 ──────────────────────────────────

df.loc[0]

   └── インデックス 0 の行を取得

 ──────────────────────────────────

 〇 複数行選択

  データフレーム.loc[開始:終了] での範囲指定します。

  ──────────────────────────────────────

  データフレーム.loc[開始:終了]

            └─ 開始:終了: 範囲指定による複数行の取り出し(開始から終了-1の行) ──────────────────────────────────────

In [ ]:
# 特定の行を選択
df.loc[1:5]
In [ ]:
df[:]

 📝 解説

 データフレームのインデックス 1~4 の行(2行目から5行目)をスライスして出力します。

 ──────────────────────────────────

df.iloc[1:5]

    └── インデックス 1~4 の行を取得

 ──────────────────────────────────

⚠️⚠️Pandasの挙動に注意 ⚠️⚠️

データ構造によって、スライスの挙動が異なります

  • 始点や終点に指定できるものが異なる
  • 終点が含まれるかどうかは、データ構造によって異なります
データ構造 スライス方法 終点の含まれ方
Pythonリスト 始点:終点 含まれない
Pandasデータフレーム (loc) loc[始点:終点] 含まれる
Pandasデータフレーム (iloc) iloc[始点:終点] 含まれない

Pandasデータフレーム (loc)のみ例外です。

終点の挙動に関しては、注意するしかないです。

┌───────────────────────────────┐
例外: Pandasloc のみ、終点が含まれる
└───────────────────────────────┘

データの先頭を参照

head()により、単純にデータフレームの先頭数行を参照します。 引数で行数を指定しない場合、デフォルトで先頭5行を表示します

In [ ]:
df.head()

image.png

整形

欠損値の処理

  • 欠損値のデータを削除

    Pandasオブジェクト.dropna() で欠損値を含む行を削除できます。

image.png

In [ ]:
df_with_na = {
'名前': ['太郎', '花子', '一郎', '次郎', '三郎'],
'年齢': [20, None, 19, 23, 21],
'点数': [85, 92, None, 88, 90]
}
df_with_na = pd.DataFrame(df_with_na)
# 欠損値を含む行を削除
df_with_na = df_with_na.dropna()
df_with_na
  • 欠損値を指定の値で埋める

Pandasオブジェクト.fillna(値) で欠損値を、引数に指定した値で埋めることができます。

image.png

In [ ]:
df_with_na = {
'名前': ['太郎', '花子', '一郎', '次郎', '三郎'],
'年齢': [20, None, 19, 23, 21],
'点数': [85, 92, None, 88, 90]
}
df_with_na = pd.DataFrame(df_with_na)
# 欠損値を特定の値で埋める
# 'value'に0を指定して、欠損値を0で埋める
df_with_na = df_with_na.fillna(value=0)
df_with_na

集計

データの要約統計量を把握します。

In [ ]:
# 合計、平均、中央値、ユニークな顧客数、トランザクション数の計算
total_sales = df['年齢'].sum()
average_sales = df['年齢'].mean()
max_sales = df['年齢'].max()
min_customers = df['年齢'].min()

total_sales, average_sales, max_sales, min_customers

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

┌──────────────────────────────────┐

df年齢列を選択し、その列の値を合計します。

└──────────────────────────────────┘

df['年齢'].sum()

|       │

v       └──────> SUM≒合計 ───┐

 df の中から 年齢列を選択  ┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐ 他の主なメソッド:

                     sum ≒ 合計

                     ⯈ 指定された列の全行の値を加算して合計値を計算

                     mean ≒ 平均

                     ⯈ 指定された列の値の合計を行数で割った平均値を計算

                     max ≒ 最大値

                     ⯈ 指定された列の値を最大値を計算

                     min ≒ 最小値

                     ⯈ 指定された列の値を最小値を計算

                     shape ≒ サイズ

                     ⯈ 行数と列数、shape[0]で行数を取得可能

                     など

               └┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

ワーク

問題

  1. データフレームの作成

data={'名前': ['太郎', '花子', '一郎', '次郎', '三郎'],'年齢':[20, 22, 19, 23, 21],'点数':[85, 92, 78, 88, 90]}を使って、Pandasのデータフレームを作成してください。

In [ ]:
 
  1. データフレームの表示 問題1で作成したデータフレームの最初の2行を表示してください。
In [ ]:
 
  1. 列の抽出 問題1で作成したデータフレームから、locを使用して「名前」の列を選択して表示してください。
In [ ]:
 
  1. 行の抽出 問題1で作成したデータフレームから、locを使用して3行目を取り出して表示してください。
In [ ]:
 
  1. データの集計(平均) 問題1で作成したデータフレームの「点数」列の平均値を計算してください。
In [ ]:
 
  1. 欠損データの処理(削除)
    以下のデータを使ってデータフレームを作成し、dropna()を使って欠損値を含む行を削除してください。
'名前': ['太郎', '花子', '一郎']  ,
'年齢': [20, None, 19]  ,
'点数': [85, 92, None]
In [ ]:
 

解答と説明

  1. データフレームの作成 data={'名前': ['太郎', '花子', '一郎', '次郎', '三郎'],'年齢':[20, 22, 19, 23, 21],'点数':[85, 92, 78, 88, 90]}を使って、Pandasのデータフレームを作成してください。
In [ ]:
# データフレームを作成
import pandas as pd
data={'名前': ['太郎', '花子', '一郎', '次郎', '三郎'],
'年齢':[20, 22, 19, 23, 21],
'点数':[85, 92, 78, 88, 90]}
df=pd.DataFrame(data)
df
  1. データフレームの表示 問題1で作成したデータフレームの最初の2行を表示してください。
In [ ]:
# 最初の2行を表示
df.head(2)
  1. 列の抽出 問題1で作成したデータフレームから、locを使用して「名前」の列を選択して表示してください。
In [ ]:
# 複数列を抽出
df.loc[:, '名前']
  1. 行の抽出 問題1で作成したデータフレームから、locを使用して3行目を取り出して表示してください。
In [ ]:
# 2の行を抽出
df.loc[2]
  1. データの集計(平均) 問題1で作成したデータフレームの「点数」列の平均値を計算してください。
In [ ]:
# 点数の平均値を計算
mean_score = df['点数'].mean()
mean_score
  1. 欠損データの処理(削除)
    以下のデータを使ってデータフレームを作成し、dropna()を使って欠損値を含む行を削除してください。
'名前': ['太郎', '花子', '一郎']  ,
'年齢': [20, None, 19]  ,
'点数': [85, 92, None]
In [ ]:
# 欠損データを含むデータフレームを作成
data_with_na = {'名前': ['太郎', '花子', '一郎'],
'年齢': [20, None, 19],
'点数': [85, 92, None]}
df_na = pd.DataFrame(data_with_na)
# 欠損値を削除
cleaned_df = df_na.dropna()
cleaned_df

Matplotlibを学びましょう

Matplotlibを活用して、データを視覚的に表現する技術を習得することです。

データのグラフ化により、数値データの傾向や相違点を把握しやすくなります。

Matplotlibによるデータ分析の位置付けと講義範囲

image.png

Matplotlibとは?

その名から連想される通り、Matplotlibは、Pythonデータ可視化ライブラリです。

image.png

Matplotlibを使うための準備

Matplotlibはライブラリです。

具体的な手順

┌───────────────┐   ┌───────────────┐

  (1) Matplotlibのインストール   >    (2) Matplotlibのインポート

└───────────────┘   └───────────────┘

1.Matplotlibのインストール

Matplotlibを使用するには、まずPython環境にMatplotlibをインストールする必要があります。

インストールには、以下のように、どちらかのpip installを使用します。

ただし、Google Colaboratoryの環境下では、不要です。

In [ ]:
#pip install matplotlib   # コマンドラインやターミナルから実行する際に、推奨されている標準的なコマンドです
# !pip install numpy  # Jupyter Notebook や Google Colabratory などのコードセルから実行する場合に、推奨されているコマンドです

続いて、インストールしたライブラリをインポートにして、アクセスできるようにします。

2.matplotlibのインポート

In [ ]:
import matplotlib.pyplot as plt

━━━━━━━━━━━━━━━━━━━━━━━━━━━

📝 import matplotlib.pyplotimport numpyの違い

━━━━━━━━━━━━━━━━━━━━━━━━━━━

image.png

import numpy

┌──────────────────────────────┐

  • 本棚そのもの(ライブラリ全体)を直接操作 する形式イメージ ※ __init__.py を読み込み、ライブラリ全体にアクセスできるため

└──────────────────────────────┘

import matplotlib.pyplot

┌──────────────────────────────┐

  • matplotlib という本棚から pyplot という本を取り出すイメージ

  • 本棚の中の特定の本(ライブラリの中の特定のモジュール)を指定 ※importだけでは、全機能にアクセスできないため

    `ライブラリ.モジュール`

└──────────────────────────────┘

  • matplotlib.pyplotのアクセスイメージ

    matplotlib.pyplotnumpypandasと違い、importだけでは全機能にアクセスできず、pyplot.pyを明示的に指定する必要があります。

image.png

  • miniforge3の場合

    /miniforge3             # 例: miniforge仮想環境におけるmatplotlibのディレクトリ構造(環境によって異なる)
    └── envs
        └── myenv            # 仮想環境の名前 (例: myenv)
            └── lib
                └── pythonX.X  # Pythonバージョンに依存 (例: python3.9)
                    └── site-packages
                        └── matplotlib
                            ├── __init__.py       
                            ├── pyplot.py         # `import matplotlib.pyplot as plt` のエントリーポイントとなるモジュール
                            ├── cbook
                               ├── __init__.py
                               ├── deprecation.py
                               └── ...
                            ├── axes
                               ├── __init__.py
                               ├── _axes.py
                               └── ...
                            ├── figure.py         # グラフの全体を管理するクラス
                            └── style
                                ├── __init__.py
                                ├── core.py
    
  1. 日本語表示のための設定

Matplotlibでグラフに日本語を表示するには、

japanize-matplotlib をインストールし、インポートする必要があります。

In [ ]:
# 必要なライブラリをインストール(インストール後はカーネル再起動を忘れないようにしてください。)
!pip install japanize-matplotlib
import japanize_matplotlib  # 日本語フォントを自動設定

import japanize_matplotlib を実行すると、
日本語フォントの設定が全体に自動適用されます。

image.png

なお、import japanize_matplotlib では as を指定していません。
これは、NumpyPandas と異なり、一度設定すれば全体に適用され、再利用の必要がない ためです。

グラフ操作

NumpyPandasなどでデータ操作後に、Matplotlibでグラフ操作より、データを視覚的に表現します。

グラフ作成

image.png

折れ線グラフ

データの時間的な推移や連続するデータの変化を視覚化します。

In [ ]:
# サンプルデータ
 = ['1月', '2月', '3月', '4月', '5月']
売上 = [100, 120, 130, 115, 140]
# 折れ線グラフの作成
plt.plot(,売上)

コードの概要

  • サンプルデータ: 月ごとの売上データをリストで定義
  • 折れ線グラフの作成: plt.plot()でデータをプロットし、タイトルや軸ラベルを追加
  • 日本語フォントの設定:注釈:フォント設定により、日本語を正しく表示

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

plt.plot()関数に関して

plot()pltに属する関数です。

例えるなら、pyplot という本の1ページが plot() にあたり、
そこには「グラフを描く方法」が記されています。
この内容を使って、実際にグラフを作成するイメージです。

image.png

plot図を描く/位置を示すという意味から、折れ線グラフを描くための関数です。

image.png

plt.plot()の主な引数一覧表

例えば、plt.plot(月, 売上, color='blue', linestyle='--', marker='o')とすると、青色の破線でデータ点に丸いマーカーを付けたグラフが表示されます。

引数名 説明
x X軸のデータを指定するリストや配列。
y Y軸のデータを指定するリストや配列。 売上
color 線の色を指定します。 'blue', 'red'
linestyle 線のスタイルを指定します。'-'(実線)、'--'(破線)、':'(点線)など。 linestyle='--'
linewidth 線の太さを指定します。 linewidth=2
marker データ点にマーカーを付けます。'o'(円)、's'(四角)など。 marker='o'
label 凡例に表示するラベルを設定します。 label='売上'
alpha 線の透明度を0から1で指定します(1が不透明)。 alpha=0.5

━━━━━━━━━━━━━━━━━━━━━━━━

📝 グラフ描画の基本ルール1

━━━━━━━━━━━━━━━━━━━━━━━━

グラフは すべて位置情報に基づいて描画 されます。

この仕組みは、折れ線グラフ・棒グラフ・横棒グラフ など、すべてに共通します。

例えば、先のコードを実行すると:

['1月', '2月', '3月'] は、自動的に整数位置へ変換されます。

image.png

  1月    2月    3月   
   ↓      ↓      ↓  
   0      1      2   

この整数位置(0, 1, 2)に基づいてデータが描画される仕組みです。

なお、数値リスト を渡した場合、
そのままX軸の位置情報として解釈 されます。

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

📌 X軸を省略すると?

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

X軸を指定せず、Y軸データのみを渡した場合はどうなるでしょうか?

In [ ]:
plt.plot([10, 20, 30])

X軸 → 自動で [0, 1, 2] が割り当てられる
Y軸 → 指定されたリスト [10, 20, 30]

ただし、いざ実行すると、データ点を線で結ぶため、見かけ上は [0, 1, 2] には見えません。

そのため、「小数でプロットされている?」と感じても、X軸には [0, 1, 2] が設定されている ことを押さえておきましょう。

棒グラフ

棒グラフは、カテゴリごとの値を比較するのに適しています。

In [ ]:
# サンプルデータ
学生 = ['太郎', '花子', '一郎', '次郎', '三郎']
点数 = [85, 92, 78, 88, 90]
# 棒グラフの作成
plt.bar(学生, 点数)

コードの概要

  • サンプルデータ: 学生ごとのテスト点数をリストで定義
  • 棒グラフの作成: plt.bar()で各学生のテスト点数を棒グラフとしてプロットし、タイトルや軸ラベルを追加

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

plt.bar() 関数に関して

データを棒(Barの高さで表現するイメージです。

plt.bar() は、Matplotlibで棒グラフを描画するための関数です。

image.png

plt.bar() 関数の主な引数一覧表

例えば、plt.bar(学生, 点数, color='blue', width=0.5)とすると、青色のバーが幅0.5で表示されるグラフが描画されます。

引数名 説明
x バーチャートのX軸に表示するカテゴリデータ(例えば、月やカテゴリ名など)
height バーチャートのY軸に対応する値のリストや配列。 売上
color バーの色を指定します。 'blue', 'red'
edgecolor バーの枠線の色を指定します。 'black', 'gray'
width バーの幅を指定します。デフォルトでは0.8です。 width=0.5
align バーの配置方法を指定します。'center'(中央揃え)または'edge'(端揃え)。 align='center'
label 凡例に表示するラベルを設定します。 label='売上'
alpha バーの透明度を0から1の間で指定します(1が不透明)。 alpha=0.7

円グラフ

データ全体に対する各部分の割合を表示します。

In [ ]:
# サンプルデータ
カテゴリ = ['A', 'B', 'C', 'D']
割合 = [40, 30, 20, 10]
# 円グラフの作成
plt.pie(割合, labels=カテゴリ)

コードの概要

  • 円グラフを作成する:
    plt.pie(割合, labels=カテゴリ)は、Matplotlibライブラリのpie関数を使用して円グラフを作成
    • 割合: 各カテゴリの値のリスト。円グラフ内で割合を表示
    • labels: 各カテゴリの名前を示すリストで、円グラフを表示

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

plt.pie() 関数に関して

plt.pie()は、Matplotlibで円グラフを描くための関数です。 見た目が「パイ(Pie)」に似ていることから付けられと言われています。

image.png

plt.pie() の主な引数一覧表

plt.pie([40, 30, 20, 10], labels=['A', 'B', 'C', 'D'], autopct='%.1f%%', startangle=90, explode=[0, 0.1, 0, 0])

とすると、A〜Dのセグメントが割合付きで表示され、セグメントBが中心から少し離れた円グラフが描画されます。

引数名 説明
x 円グラフの各部分に対応するデータ値のリストや配列を指定します。 [40, 30, 20, 10]
labels 各データに対応するラベルを指定します。 ['A', 'B', 'C', 'D']
colors 各セグメントに対応する色を指定します。 ['red', 'blue', 'green']
autopct 各セグメントの割合を表示するフォーマット文字列(例: '%.1f%%')。 '%.2f%%'
startangle 円グラフの開始角度(デフォルトは90度)。 startangle=90
explode 特定のセグメントを中心から離すためのオフセット値のリスト。 [0, 0.1, 0, 0]
shadow グラフに影を付けるかどうか(True/False)。 shadow=True
radius 円の半径を指定します(デフォルトは1.0)。 radius=1.5

ヒストグラム

データの分布を視覚化します。

In [ ]:
# サンプルデータ
データ = [10, 20, 20, 30, 40, 40, 40, 50, 60, 70]
# ヒストグラムの作成
plt.hist(データ, bins=5)

コードの概要

  • ヒストグラムを作成する:
    plt.hist(データ, bins=5)は、Matplotlibライブラリのhist関数を使用してヒストグラムを作成
    • データ: ヒストグラムの元となる数値データのリストや配列
    • bins=5: データを分割するビン(区間)の数を指定(この例では5区間に分割)

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

plt.hist() 関数

image.png

plt.hist() は、Matplotlib でヒストグラム(Histogram)を描画するための関数です。

`Histogram= histos(柱)    +    gramma(記録)`

数値データの分布を示し、値の範囲(bins)ごとの頻度(度数)を表すグラフ です。

────────────────────────────────────────────────────────────

                      bins (≒ 箱) とは

────────────────────────────────────────────────────────────

 bins はデータを区切る 箱(範囲) を意味し、

 ヒストグラムで データの分布を可視化する際の区切り方 を決定します。

┌───────┐  ┌───────┐  ┌───────┐
│       │  │       │  │       │
│    bin=1  │  │  bin=2     │  │   bin=3   │  ・・・    
│       │  │       │  │       │
└───────┘  └───────┘  └───────┘

 

データはbinsで指定した数の箱に分割されます。

 多いと詳細が、少ないと全体像が見えやすくなります。

────────────────────────────────────────────────────────────

plt.hist() の主な引数一覧表

例えば、plt.hist(データ, bins=10, color='blue', alpha=0.5) とすると、青色で透明度0.5のヒストグラムが表示されます。

なお、bins(ビンズ) は「箱」や「容器」を意味し、データの範囲を区間ごとに分割する役割を持ちます。

引数名 説明
x ヒストグラムを作成するデータの配列。 データ
bins ヒストグラムのビン数またはビンの境界を指定します。 bins=10
range ヒストグラムの範囲を指定します。 range=(0, 100)
density 確率密度で表示するかどうかを指定します。Trueにすると確率密度に正規化されます。 density=True
color ヒストグラムの色を指定します。 color='blue'
edgecolor ビンの境界線の色を指定します。 edgecolor='black'
alpha ヒストグラムの透明度を0から1で指定します(1が不透明)。 alpha=0.5
label 凡例に表示するラベルを設定します。 label='データ分布'

散布図

散布図は、2つの変数の関係を示すのに適しています。

In [ ]:
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 散布図の作成
plt.scatter(x, y)

コードの概要

  • 散布図を作成する:
    plt.scatter(x, y)は、Matplotlibライブラリのscatter関数を使用して散布図を作成します。
    • x: x軸方向のデータ(リストや配列)
    • y: y軸方向のデータ(リストや配列)

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

plt.scatter() 関数

plt.scatter() は、Matplotlib散布図を描画するための関数です。


データ点がグラフ上に散らばる(scatter)イメージです。

image.png

plt.scatter() の主な引数一覧表

例えば、plt.scatter(年齢, 収入, s=50, c='blue', alpha=0.5) とすると、 青色の透明度0.5でサイズ50の散布図が表示されます。

引数名 説明
x 散布図のX軸のデータを指定するリストや配列。 年齢
y 散布図のY軸のデータを指定するリストや配列。 収入
s データ点のサイズを指定します(平方のサイズ)。 s=50
c データ点の色を指定します。 c='blue'
cmap 色のマッピングを指定します。 cmap='viridis'
marker データ点のマーカーの形状を指定します。 marker='o'
alpha データ点の透明度を0から1で指定します(1が不透明)。 alpha=0.5
label 凡例に表示するラベルを設定します。 label='データ群'

複数の折れ線グラフの描画

複数の折れ線グラフを描画することができます。

In [ ]:
# サンプルデータ
x =  ['1月', '2月', '3月', '4月', '5月']
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]
# 複数のグラフを同じプロットに描画
plt.plot(x, y1)
plt.plot(x, y2)

コードの概要

  • 複数のグラフを同じプロットに描画する:
    plt.plot(x, y1)plt.plot(x, y2)を使用して、同じプロット内に複数の折れ線グラフを描画

━━━━━━━━━━━━━━━━━━

📝 ◎ グラフ描画の基本ルール2

━━━━━━━━━━━━━━━━━━

matplotlib の関数は、plt.show() などを記述しない限り、

個別に動作しながらも状態を保持し、最終的に1つの図としてまとめて表示される仕様 です。

つまり、同じ紙に新しい描画を追加していくイメージ です。

タイトルや凡例も、該当コードを実行するたびに描画が追加され、スケッチを重ねるように反映されます。

image.png

したがって、下図は白い紙(≒ノートブックのコードセル)に、plt.plot() を2回実行し、2つの折れ線グラフを描画しています。

plt.show()とは

showpltに属する関数です。 グラフを描画(≒show)する機能です。

In [ ]:
plt.plot([1, 2, 3], [4, 5, 6])  # グラフを描画する
plt.show()       # 画面に表示する

しかし、ノートブックでは、plt.show()が記述せずとも、コードセル単位で描画されます。

(この違いを明瞭にするため、本セミナーでは敢えてplt.showを記述しないコードになっています)

In [ ]:
plt.plot([1, 2, 3], [4, 5, 6])

積み上げグラフ

積み上げグラフは、各カテゴリの合計を表し、データの内訳を視覚化します。

In [ ]:
# サンプルデータ
 = ['2020', '2021', '2022']
A = [50, 60, 70]
B = [30, 35, 40]

# 積み上げグラフの作成
plt.bar(, A)
plt.bar(, B, bottom=A)

コードの概要

  • 積み上げグラフを作成する:
    plt.bar関数を使用して、積み上げグラフを作成します。
    • plt.bar(年, A): x軸方向にを設定し、系列Aを棒グラフを描画
    • plt.bar(年, B, bottom=A): 系列Bを描画し、bottom=Aで系列Aの上に積み上げます

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

先程のメカニズムに基づき、plt.barを2回呼び出して、2つの棒グラフを描画しているイメージです。

ただ、bottomm=Aという引数で、描画位置を調整しています。

image.png

 = ['2020', '2021', '2022']
A = [50, 60, 70]
B = [30, 35, 40]
plt.bar(, A, label='A')  # Aのデータを表示
plt.bar(, B, bottom=A, label='B')  # BのデータをAの上に積み上げる

plt.bar()を使用して縦向きの積み上げ棒グラフを作成します。それぞれのデータを積み上げる際に、bottom引数を使って開始位置を設定します。

  • plt.bar: 縦向きの棒グラフ(バーグラフ)を作成するための関数です。

    • 第1引数(: X軸上の位置を指定します。
      • たとえば、['2020', '2021', '2022']の場合、X軸上では順番に0, 1, 2といった整数の位置が自動的に割り当てられ、その順序でグラフに表示されます。
  • 第2引数(B: 各年に対する棒の高さを指定します。

    • 例えば、B = [30, 35, 40]の場合、各年の位置に対応する棒の高さがBの値によって決まります。
  • bottom=A: この引数は、Bの棒グラフの下端(基準位置)を指定します。

    • つまり、Bの棒はAの高さ分を下端としてその上に積み上げられます。
    • 例えば、A = [50, 60, 70]の場合:
      • 2020の棒は、Aの高さが50なので、Bの棒は50の位置から始まります。
      • 2021の棒は、Aの高さが60なので、Bの棒は60の位置から始まります。
      • 2022の棒は、Aの高さが70なので、Bの棒は70の位置から始まります。
    • 新しく積み上げる棒グラフの下端(≒bottom)を指定することで、Bの棒はAの値を基準にして積み上げられます。
  • label='B': このデータセットのラベル名を設定します。凡例にBとして表示されます。

┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐

⚠️ 積上グラフの分析上の注意

└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

積み上げグラフを使う際には、積み上げるデータの意味が明確である必要があります。

積み上げるべきデータは、異なるカテゴリーが合算して全体を構成する場合です。

グラフのカスタマイズ

Matplotlibを使ってグラフを作成した後、タイトルや軸ラベル、色などを変更してグラフを見やすくすることができます。

image.png

タイトルと軸ラベルの追加

グラフには、タイトル軸ラベルを追加することで、何を表しているのかをわかりやすくできます。

In [ ]:
# サンプルデータ
 = ['1月', '2月', '3月', '4月', '5月']
売上 = [100, 120, 130, 115, 140]
# 折れ線グラフの作成
plt.plot(, 売上)
plt.title('月ごとの売上推移')
plt.xlabel('月')
plt.ylabel('売上(万円)')

コードの概要

  • グラフのタイトルを設定する:
    plt.title('月ごとの売上推移')は、グラフ全体のタイトルを「月ごとの売上推移」に設定

  • x軸ラベルを設定する:
    plt.xlabel('月')は、x軸に「月」というラベルを表示

  • y軸ラベルを設定する:
    plt.ylabel('売上(万円)')は、y軸に「売上(万円)」というラベルを表示


━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  • plt.title('月ごとの売上推移')に関して

    title(見出し)の通り、グラフ全体の「タイトル」を設定します

image.png

  • plt.xlabel('月')に関して

    xlabel ≒ x + labelの語源の通りに、X軸(横軸)にラベル(label)を設定します。

image.png

  • plt.ylabel('売上(万円)')に関して

    ylabel ≒ y + labelの語源の通りに、Y軸(縦軸)にラベル(label)を設定します。

image.png

色やスタイルの変更

plt.plotの引数設定を工夫するだけで、 グラフの線のスタイルを変更して、見た目をよりわかりやすくしたり、複数のデータを区別しやすくすることができます。

In [ ]:
# 折れ線グラフの色とスタイルを変更
plt.plot(, 売上, color='green', linestyle='--', marker='o')

コードの概要

  • color: 線の色を指定します。例: 'red', 'blue', 'green'
  • linestyle: 線のスタイルを変更します。例: '-' (実線), '--' (破線), ':' (点線)
  • marker: データポイントにマーカーを追加します。例: 'o' (円), 's' (四角), 'D' (ダイヤ)

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  • plt.plot(月, 売上, color='green', linestyle='--', marker='o')に関して

    plot関数の引数を指定し、グラフカスタマイズします。

image.png

Python関数は、どのように引数を認識しているのか?:

引数(Arguments) ──┬── 1.位置引数(positional arguments)
                      │
                      └── 2.キーワード引数(keyword arguments)
                    
  1. 位置引数(Positional Arguments

    • 名前を持たず、順序に基づいて関数に渡される引数
    • 例:plt.bar(年, C, ...)C
    • 通常、必須の引数
    • 順序が重要で、正しい順序で指定する必要あり
  2. キーワード引数(Keyword Arguments

    • 名前=値 の形式で指定する引数
    • 例:label='A'
    • 多くの場合、オプションの引数(必須の場合もあり)
    • 順序は関係なく、任意の順序で指定可能
    • ただし、キーワード引数として指定できる場合とできない場合がある

凡例の追加

plt.plotの引数設定を工夫するだけで、複数のデータセットを1つのグラフに表示する場合、凡例(データのラベル)を追加して、どの線がどのデータを表しているかをわかりやすくします。

In [ ]:
# サンプルデータ
売上_2020 = [100, 120, 130, 115, 140]
売上_2021 = [110, 125, 135, 120, 145]
# 複数の折れ線グラフを作成
plt.plot(, 売上_2020, label='2020年', color='blue')
plt.plot(, 売上_2021, label='2021年', color='orange')
# 凡例の追加
plt.legend()

コードの概要

  • label:
    グラフに表示される各データセットに名前(ラベル)を付けます。

    • 例: plt.plot(月, 売上_2020, label='2020年', color='blue')'2020年'を設定
  • plt.legend():
    凡例をグラフ上に表示します。各labelの値が凡例に表示され、どの線がどのデータを示しているかを視覚的に区別できます。

    • 例: ラベル「2020年」が凡例としてグラフ上に表示

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  • plt.plot(月, 売上_2021, label='2021年', color='orange')に関して

image.png

  • plt.legend()に関して

    label で凡例の内容を決め、plt.legend() で表示する仕組みです。

    ┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐

      label ────→ plt.legend() でグラフ上に表示

    └┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

    legendには伝説物語といった意味が生まれ、さらに地図や図表の凡例を指すようになったと言われています。

image.png

Y軸の最大値を設定

ylim で最大値を設定し、同一スケールで適切に比較でき、視覚的な誤解を避けられる。
特に、競合比較や時系列分析 などで有用です。

In [ ]:
plt.ylim(0, 100)

━━━━━━━━━━━━━━━━━━

📝 解説

━━━━━━━━━━━━━━━━━━

  • plt.ylim(0, 100):に関して

    • Y軸の表示範囲を設定するための関数です。(min, max)の形式で範囲を指定します

image.png

ylim は、y(Y軸)と limit(制限、範囲)を組み合わせた名称です。

ylim ──┬── y(Y軸)
         │
         └── limit(制限、範囲)


ワーク

問題

  1. 複数の折れ線グラフの作成

月ごとの売上データを使って、2つのデータセットを1つのグラフに表示してください。それぞれのデータに対して、「2020年」と「2021年」の凡例を付けてください。月のラベルは1月から5月までとします。

データ:

  • 月 = ['1月', '2月', '3月', '4月', '5月']
  • 売上_2020 = [100, 120, 130, 115, 140]
  • 売上_2021 = [110, 125, 135, 120, 145]
In [ ]:
 

説明:

  1. 円グラフの作成
    カテゴリごとの割合 カテゴリ = ['A', 'B', 'C', 'D']割合 = [40, 30, 20, 10] を使って、円グラフを作成してください。
In [ ]:
 
  1. ヒストグラムの作成
    データ = [10, 20, 20, 30, 40, 40, 40, 50, 60, 70] を使って、ヒストグラムを作成してください。
In [ ]:
 
  1. 散布図の作成
    2つの変数 x = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10] を使って、散布図を作成してください。
In [ ]:
 
  1. グラフのカスタマイズ

次のデータをもとに、折れ線グラフを作成し、以下の要素を追加して見やすくカスタマイズしてください。

データ

  • 月:['1月', '2月', '3月', '4月', '5月']
  • 売上:[100, 120, 130, 115, 140]

カスタマイズの要件

  • 線の色:緑
  • 線のスタイル:破線
  • マーカー:丸
  • グラフのタイトル:適切なタイトルを追加
  • X軸ラベル:月
  • Y軸ラベル:売上
In [ ]:
 

解答と説明

なお、問題1~4の解答例ではグラフのカスタマイズが行われていますが、必須ではありません。

  1. 複数の折れ線グラフの作成

月ごとの売上データを使って、2つのデータセットを1つのグラフに表示してください。それぞれのデータに対して、「2020年」と「2021年」の凡例を付けてください。月のラベルは1月から5月までとします。

データ:

  • 月 = ['1月', '2月', '3月', '4月', '5月']
  • 売上_2020 = [100, 120, 130, 115, 140]
  • 売上_2021 = [110, 125, 135, 120, 145]

説明:

In [ ]:
# サンプルデータ
 = ['1月', '2月', '3月', '4月', '5月']
売上_2020 = [100, 120, 130, 115, 140]
売上_2021 = [110, 125, 135, 120, 145]
# 複数の折れ線グラフの作成
plt.plot(, 売上_2020, label='2020年')
plt.plot(, 売上_2021, label='2021年')
plt.legend()
  1. 円グラフの作成
    カテゴリごとの割合 カテゴリ = ['A', 'B', 'C', 'D']割合 = [40, 30, 20, 10] を使って、円グラフを作成してください。
In [ ]:
# サンプルデータ
カテゴリ = ['A', 'B', 'C', 'D']
割合 = [40, 30, 20, 10]
# 円グラフの作成
plt.pie(割合, labels=カテゴリ)
  1. ヒストグラムの作成
    データ = [10, 20, 20, 30, 40, 40, 40, 50, 60, 70] を使って、ヒストグラムを作成してください。
In [ ]:
# サンプルデータ
データ = [10, 20, 20, 30, 40, 40, 40, 50, 60, 70]
# ヒストグラムの作成
plt.hist(データ, bins=5)
  1. 散布図の作成
    2つの変数 x = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10] を使って、散布図を作成してください。
In [ ]:
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 散布図の作成
plt.scatter(x, y)
  1. グラフのカスタマイズ

次のデータをもとに、折れ線グラフを作成し、以下の要素を追加して見やすくカスタマイズしてください。

データ

  • 月:['1月', '2月', '3月', '4月', '5月']
  • 売上:[100, 120, 130, 115, 140]

カスタマイズの要件

  • 線の色:緑
  • 線のスタイル:破線
  • マーカー:丸
  • グラフのタイトル:適切なタイトルを追加
  • X軸ラベル:月
  • Y軸ラベル:売上
In [ ]:
# データ
 = ['1月', '2月', '3月', '4月', '5月']
売上 = [100, 120, 130, 115, 140]

# 折れ線グラフの作成
plt.plot(, 売上, color='green', linestyle='--', marker='o')
# タイトルと軸ラベルの追加
plt.title('月ごとの売上推移')
plt.xlabel('月')
plt.ylabel('売上(万円)')

おまけ

◎ 関数、メソッド、プロパティの違い

関数は独立し、メソッドとプロパティはオブジェクトに属します。

np.array はメソッドのように見えますが、実際には NumPy の独立した関数であり、メソッドではありません。

メソッドは引数を取りますが、プロパティは取りません。

image.png

◎ チャレンジ穴埋め問題

┈┈┈┈┈┈┈┈

【問題】

┈┈┈┈┈┈┈┈

次の文章【(1)~(13)】の空欄に入れるべき語句を、【選択肢】から選んでください。

  1. Pythonでコメントアウトを行う際、コードの実行から除外するために行の先頭に記述する記号は【(1)】である。
  2. Pythonのリストのスライスは、角括弧内に「開始:終了」と記述し、開始位置から【(2)】の要素を参照する記法であり、これは【(3)】と呼ばれる。
  3. import numpy as np」と記述することで、NumPyライブラリを短縮名【(4)】として利用できる。
  4. 関数とは、入力となる【(5)】を受け取り、特定の処理を実行して【(6)】を返す仕組みである。
  5. (7)】はオブジェクトに属します。たとえば、PandasDataFrameが持つlocはその一例であり、オブジェクトの【(8)】は、その状態や属性(例:shape)を示す。
  6. Pythonのリストは、角括弧【(9)】で囲み、各要素は【(10)】で区切って記述する。
  7. Pandasでは、DataFrameの特定の行や列へアクセスする際、ラベル指定には【(11)】を用い、位置指定の場合は【(12)】を使用する(ラベル指定と位置指定では動作が異なる)。
  8. Matplotlibのグラフ描画は、コードセル内で関数を複数回呼び出すと、前回までの描画状態が保持され、同じ図に新たな描画が【(13)】される仕様となっている。

┈┈┈┈┈┈┈┈

【選択肢】

┈┈┈┈┈┈┈┈

A. # B. 終了位置の直前まで
C. スライス
D. np
E. 引数
F. 戻り値
G. メソッド
H. プロパティ
I. []
J. ,
K. loc
L. iloc
M. 追加





┈┈┈┈┈┈┈┈

【回答】

┈┈┈┈┈┈┈┈

  1. Pythonでコメントアウトを行う際、コードの実行から除外するために行の先頭に記述する記号は【'A. #'】である
  2. Pythonのリストのスライスは、角括弧内に「開始:終了」と記述し、開始位置から【'B. 終了位置の直前まで】の要素を参照する記法であり、これは【'C. スライス'】と呼ばれる
  3. import numpy as np」と記述することで、NumPyライブラリを短縮名【'D. np'】として利用できる
  4. 関数とは、入力となる【'E. 引数】を受け取り、特定の処理を実行して【'F. 戻り値】を返す仕組みである
  5. 【'G. メソッド'】はオブジェクトに属します。たとえば、PandasDataFrameが持つlocはその一例であり、オブジェクトの【'H. プロパティ'】は、その状態や属性(例:shape)を示す
  6. Pythonのリストは、角括弧【'I. []'】で囲み、各要素は【'J. ,'】で区切って記述する
  7. Pandasでは、DataFrameの特定の行や列へアクセスする際、ラベル指定には【'K. loc'】を用い、位置指定の場合は【'L. iloc'】を使用する(ラベル指定と位置指定では動作が異なる)
  8. Matplotlibのグラフ描画は、コードセル内で関数を複数回呼び出すと、前回までの描画状態が保持され、同じ図に新たな描画が【'M. 追加】される仕様となっている

フィナーレ

NumPyPandasMatplotlibといったデータサイエンスに欠かせないライブラリの基本操作を通じながら、基礎体力を養うことを目標にしました。

ハイライト

image.png

  1. はじめに
  • Pythonがデータ分析に普及している理由
  • NumPy, Pandas, Matplotlib の個別の役割とデータ分析との関連性
  • Google Colaboratory の環境構築のデモを含む基礎知識
  1. NumPy による数値計算の基礎
  • 講義:配列の作成、取り出し、演算を含む基本操作
  • ワーク: 二次元配列の操作、配列同士の足し算
  1. Pandas によるデータ操作の基礎
  • 講義:作成と読み込み、取り出し、集計
  • ワーク: 集計や欠損データの処理
  1. Matplotlib によるグラフ描画の基礎
  • 講義:グラフの作成、カスタマイズのテクニック
  • ワーク: 折れ線グラフ、円グラフ、散布図など

  │

  ▼

これらを通じて、以下のことを学習しました:

  • Pythonのデータサイエンスにおける重要性
  • 今後に利用できるPythonが操作できるGoogle Colaboratoryの環境構築
  • NumPyPandasMatplotlibといったデータサイエンスに欠かせないライブラリの基本操作
  • 講義を通じて、変数、オブジェクト、関数などのPythonの基礎仕組みを学ぶ
  • 講義とワークショップの両面による理解を深める学習体験
  • あるあるエラーの防止策についても触れ、初心者がつまずきやすいポイントを克服

ネクストステップ

image.png

まず、本講義の復習です。

次は、Excelで既に行ったデータ操作や視覚化をPythonで実現することに取り組みましょう。

その際、本講義で学んだ原則に立ち戻りながら、やりたい操作に該当するnumpy、pandasmatplotlib`などのライブラリのメソッドやプロパティを調べてみてください。

このプロセスを繰り返すことで、確実にスキルが身につきます。

また、新しいライブラリや手法に興味を持つことも自然な流れです。

ただし、まずは今回学んだ内容を確実に自分のものにすることが大切です。

基礎がしっかり固まっていれば、次のステップに進む際もスムーズに成長することができます。

この取り組みを通じて、学んだことを実践し、自分の力に変えていきましょう。