Skip to content
Twitter
edu-IT Practical Labo
【名古屋】
edu-IT Practical Laboedu-IT Practical Labo
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact
 
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact

Pythonで学び直す数学【集合・確率編】~例題を解きながら集合とリストの使い方を理解しよう

You are here:
  1. Home
  2. edu-IT
  3. Pytho…
5月222021
edu-ITPython

最近、ニュースなどで「機械学習」や「AI」といったフレーズを耳にすることも増えてきたのではないでしょうか。ただ、数学的な方法をベースにしながらモノを考えるといっても、実際にどう使えばよいだろうとピンと来ない方のほうが多いのではないでしょうか。コンピュータの世界で数学がどのように使えるのか、ということをPythonの基本的な書き方を確認しながら考えていきたいと思います。

「数学的な問題をPythonで簡単なスクリプトを作って動作を確認する」ということを複数回に分けて行っていきたいと思います。Pythonに慣れるという点でも手を動かして考える機会にして頂ければ幸いです。

 

今回は、Pythonで学び直す数学【集合・確率編】の確認をしていきたいと思います。
演習問題のダウンロードはこちらから

 

Contents

  • 1 集合・確率について
    • 1.1 ・集合の定義
    • 1.2 ・全体集合、部分集合
    • 1.3 集合演算(和集合・積集合・差集合)
  • 2 辞書の使い方 - キーと値のペアでデータを管理
  • 3 場合の数
  • 4 確率

集合・確率について

 
数学の授業で、「確率を求めるときに、図や一覧表を描いたり、ベン図や集合の要素数を利用して、場合の数を求め、全体でどれだけの数があるか正しく把握してください」と習った方も多いと思います。ここでは今一度、集合の基礎から学んでいきましょう。

集合:はっきりと区別できて、同じ性質を持ったデータの集まり

確率:ある試行を行ったとき、結果として起こりうる全ての事象のうち、特定の事象になる割合

 
まずは、集合の特徴についてみていきます。

・集合の定義

数学の世界で「1から10までの自然数」の集合は、

A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

のように { } を使って表記します。

「A」は集合に付けた名前で、 { } に含まれる個々の値を要素といいます。
1つの集合に同じ要素が含まれることはなく、また、集合の要素には順番という概念がありません。

 

下のように「1から10までの自然数」の集合を考えた場合、
B = {2 ,5, 6, 7, 1, 3, 4, 9, 10, 8}

集合Aと集合Bは同じものとして扱われます。

 

< Type Python >
Pythonにはset という集合を扱うデータ型があります。

>>> A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

のようにすると、集合Aを定義できます。

集合Aの要素の順番を変えて、集合Bを定義して集合Aと比べてみましょう。

>>> B = {3, 1, 4, 5, 9, 6, 2, 7, 8, 10}
>>> A == B
True

もう一つ、集合の要素には重複した値が含まれないことも確認しておきましょう。

>>> A
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> A.add(10)
>>> A
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> len(A)
10

len() 関数を利用すると、集合の要素数を確認できることも覚えておきましょう。

 

・全体集合、部分集合

集合Aのすべての要素が集合Uに含まれるとき、集合Aを集合Uの「部分集合」といい、
U⊃A
のように表します

Pythonでは「<=」を使って部分集合かどうかを確認することができます

>>> U = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}  ●→ 集合Uを定義
>>> A = {2, 4, 6, 8, 10}             ●→ 集合Aを定義
>>> A <= U          ●→ 集合AがUに含まれるか確認
True

部分集合が属する集合Uのことを全体集合といいます。

 

集合演算(和集合・積集合・差集合)

・和集合

2つの集合の全要素を合わせた集合を和集合といい、
A∪B
のように表します。Pythonでは、|演算子を使って和集合を取得できます。

>>> A = {2, 4, 6, 8, 10}        ●→ 集合Aを定義
>>> B = {3, 6, 9}             ●→ 集合Bを定義
>>> A | B           ●→ 集合AとBの和集合
{2, 3, 4, 6, 8, 9, 10}

 

・積集合

2つの集合に共通する要素の集合を積集合といい、
A∩B
のように表します

Pythonでは、「&演算子」を使って積集合を取得できます

>>> A = {2, 4, 6, 8, 10}        ●→ 集合Aを定義
>>> B = {3, 6, 9}             ●→ 集合Bを定義
>>> A & B           ●→ 集合AとBの積集合
{6}

 

・差集合

一方の集合から、もう一方の集合を引いたものを差集合といいます。
どちらの集合から引くかによって結果が変わるので注意してください。

Pythonでは、算術演算子の「-演算子」を使って差集合を取得できます。
 

>>> A = {2, 4, 6, 8, 10}        ●→ 集合Aを定義
>>> B = {3, 6, 9}               ●→ 集合Bを定義
>>> A - B           ●→ 集合Aから集合Bの要素を除く
{2, 4, 8, 10}
>>> B - A        ●→ 集合Bから集合Aの要素を除く
{3, 9}

⇒ ここで、添付資料「集合の要素数」シートにある演習問題を解いてみましょう

 

 

類似するケースとして、Pythonでの辞書, リストの使い方について確認していきましょう。

 

辞書の使い方 - キーと値のペアでデータを管理

 
 辞書(dictionary)とは、「キー:値」をカンマで区切って並べ、全体を「{}」で囲み、1組のデータをキーとそれに対応するペアで管理するデータ型です。

 

辞書オブジェクトを生成

>>> animal = {‘dog’:’犬’, ‘cat’:’猫’, ‘bird’:’鳥’}
[Enter]  …辞書を作成

>>> animal
{‘dog’:’犬’, ‘cat’:’猫’, ‘bird’:’鳥’}

 

キーと値のペアを変更・追加

>>> animal[‘cat’] = ’ネコ’
[Enter]  …「’cat’」の値を変更

>>> animal
{‘dog’:’犬’, ‘cat’:’ネコ’, ‘bird’:’鳥’}

>>> animal[‘mouse’] = ‘ネズミ’
{‘dog’:’犬’, ‘cat’:’ネコ’, ‘bird’:’鳥’, ‘mouse’:’ネズミ’}

 
・キー/値の一覧を取得する

 key() … 辞書内の「すべてのキー」を取得
 values() … 辞書内の「すべての値」を取得
 items() … 辞書内の「キーと値のペアの一覧」を取得

 

>>> blood_type = {‘a’:’A型’, ’b’:’B型’, ’ab’:’AB型’, ’o’:’O型’}

>>> blood_type.keys()  [Enter]
dict_keys([‘a’, ‘b’, ‘ab’, ‘o’])

>>> blood_type.values()  [Enter]
dict_values([‘A型’, ‘B型’, ‘AB型’, ‘O型’])

>>> blood_type.items()  [Enter]
dict_items([('a', 'A型'), ('b', 'B型'), ('ab', 'AB型'), ('o', 'O型')])

 
keys()、values()、items()メソッドの戻り値は、for文で順に取得できます。


 dic = {“春”:”Spring”, “夏”:”Summer”, “秋”:”Autumn”, “冬”:”Winter”}

 for jap, eng in dic.items():
	print(“{}:{}”.format(jap, eng))

参考:formatメソッドは変数の値を埋め込みたい時などに使われます。

  例えば ‘str1{}:{}str2’.format(var1, var2) では、
  1番目の{} にメソッド引数のvar1 が、2番目の{}にメソッド引数のvar2が埋め込まれます。

 

⇒ ここで、添付資料「辞書の使い方」シートにある演習問題を解いてみましょう

 

 

場合の数

 
次は、図や一覧表を描いたり、ベン図や集合の要素数を利用したりして、場合の数の例題を解いていきましょう。

順列:n個のものからr個(r ≤n)を選んで並べる並べ方 nPr は

nPr = n (n-1) (n-2) … (n-r+1) = n! / (n-r)! (通り)

たとえば、1~9の9種類の数字を使ってできる2桁の数字は  9×8 = 72 (通り)
Pythonでは、以下のように求めることができます。

>>>import itertools
>>> num = {1, 2, 3, 4, 5, 6, 7, 8, 9}        ●→ データを定義
>>> A = set(itertools.permutations(num, 2))  ●→ numの中から3個を選ぶ順列で集合を生成
>>> len(A)                   ●→ Aの要素数を調べる
72
>>> for a in A:                 ●→ Aの全要素にアクセスするループ
	print(a)            ●→ 要素を画面に出力

⇒ ここで、添付資料「順列」シートにある演習問題を解いてみましょう

 

 

階乗:nの階乗は、n! と記載します。1~nまでの整数の積のことをいいます。

Pythonで階乗を計算するときは、mathモジュールのfactorial() 関数を使いましょう。

>>>import math
>>> math.factorial(5)         ●→ 5の階乗を求める
120                       ●→ 表示された結果

⇒ ここで、添付資料「階乗」シートにある演習問題を解いてみましょう

 

 

組み合わせ:n個のものからr個を選び出す組み合わせ nCr は

nCr = nPr / r! = n! / r! (n-r)! (通り)

たとえば、1~5の5種類の数字から2つの数字を選ぶ組み合わせは 5×4 / 2×1 = 10(通り)

 組み合わせが何通りかを調べるときは、itertoolsモジュールのcombinations() 関数を使います。
1~5のうち、2個の数字を選んだ場合は以下のようになります。

>>> num = {1, 2, 3, 4, 5}           ●→ データを定義
>>> A = set(itertools.combinations(num,2))   
●→ numの中から2個を選ぶ組み合わせ

⇒ ここで、添付資料「組み合わせ」シートにある演習問題を解いてみましょう

 

確率

次は確率(ある試行を行ったとき、結果として起こりうる全ての事象のうち、特定の事象になる割合)について考えてみましょう。

サイコロを振った時の特定の目が出る確率について、「大数の法則」という、試行の数が多ければ、確率は収束するという話を数学の授業で聞いたこともあるのではないでしょうか。

今回は実際に確認してみましょう。

 

import random
# サイコロを振る
cnt = 0		# 1が出た回数
for i in range(10000):
    dice = random.randint(1,6)
    if dice == 1:
	cnt += 1
 
# 確率を求める
p = cnt / 10000
print(p)

 
====================================
以前学校で学んできた内容をもとにPythonでスクリプトを実行しながら確認できるのは面白いなと感じる方もいらっしゃるかもしれません。自分にできる範囲のものから少しずつPythonにも挑戦してみようかなと思っていただければ幸いです。

以上となります。

#edu-IT #名古屋

参考文献:
・大津真『基礎Python: 入門から実践へステップアップ』インプレス(2016年)
・谷尻かおり『文系プログラマーのためのPythonで学び直す高校数学』日経BP社(2021年)

Category: edu-IT, PythonBy semi3del2021年5月22日Leave a comment
Share this post
Share with Google+Share with FacebookShare with Twitter

Author: semi3del

Post navigation

PreviousPrevious post:Pythonで学び直す数学【関数とグラフ/微分と積分編】~matplotlibを使ってグラフを描画してみようNextNext post:Pythonで「標準体重計算」と「電卓」のプログラムを書いてみよう~文字列と数値の扱い/入力処理/GUIツール(tkinter)の基礎を確認

Related Posts

CodeSandboxでReactのTodoリストを作成してみよう
2025年3月31日
Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
2025年1月27日
はじめてのLambda~関数のサンプルを作ってみよう
2024年9月18日
GitHub Actions入門~Cloud9でGitHub ActionsのHelloWorldを実行してみよう
2023年11月28日
Web APIをPythonで使ってみる~Fast APIの基礎
2023年9月25日
FigmaからReactのコード生成するプラグインを使ってUIコンポーネントを作成してみよう
2023年7月4日

コメントを残す コメントをキャンセル

Your email address will not be published. Required fields are marked *

Post comment

最近の投稿
  • CodeSandboxでReactのTodoリストを作成してみよう
  • Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
  • CodeSandboxでReactのフォーム部品を操作してみよう
  • はじめてのLambda~関数のサンプルを作ってみよう
  • Canva入門~テンプレートでプレゼン資料を作成してみよう
アーカイブ
  • 2025年3月
  • 2025年1月
  • 2024年11月
  • 2024年9月
  • 2024年8月
  • 2024年6月
  • 2024年4月
  • 2024年1月
  • 2023年11月
  • 2023年9月
  • 2023年7月
  • 2023年5月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年6月
  • 2022年5月
  • 2022年3月
  • 2022年1月
  • 2021年11月
  • 2021年9月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年11月
  • 2020年9月
  • 2020年6月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2017年7月