前回の記事でPythonのモジュール機能についての説明と作成方法について学びました。
今回から、Pythonの標準ライブラリの中から汎用性の高いものについていくつかピックアップして学んでいきたいと思います。
まず今回は算術計算に関するモジュールから紹介します。
- Pythonの標準ライブラリの使い方がわかる
- 算術計算(math、random、statistics)のモジュールについての使い方が分かる
算術計算とmath
Pythonで算術計算のライブラリとしてまずは「math」モジュールです。
まずは、その使い方から見ていきましょう。
関数名だけで利用できるように、あらかじめmathモジュールの全ての要素をインポートしておきます。
ちなみにですが、mathモジュールは基本的に全ての戻り値がfloat型になります。
算術計算は精度を求められますからね、int型じゃなくてfloat型なんですね
では主な関数を見ていきましょう。
絶対値を得る
値の絶対値を得る関数です。Python標準のabs関数と使い方は同じです。
abs関数との違いとしては戻り値がfloat型になります。
Python標準のabs関数との違いを見てみましょう。
from math import *
num = -123
print(abs(num))
print(fabs(num))
実行結果は以下です。
123
123.0
absは「123」、fabsは「123.0」と表示されており、fabsは引数がint型でも戻り値はfloat型になっていることがわかります。
小数を丸める
Python標準では小数点以下を丸める「round」という関数がありますが、mathモジュールでは「切り上げ」「切り下げ」の関数があります。
では実行してみましょう。
from math import *
num = 123.456
print(ceil(num))
print(floor(num))
実行結果は以下となります。
124
123
剰余演算
割り算した余りの計算は、Python標準では「%」演算子で行いますが、%演算子だとマイナス値では正確な答えが出ないという問題点があります。
ですので、正確な剰余演算を行える関数として「fmod」がmathモジュールに用意されています。
fmod関数は、第1引数を第2引数で割った余りを計算します。
では実際に見てみましょう。
from math import *
num1 = -10
num2 = 3
print(num1 % num2)
print(fmod(num1, num2))
実行結果は以下です。
2
-1.0
ここでは「−10 ÷ 3」の余りを計算していますが、%演算子を使った方は「2」となり、fmodの場合は「−1」と正しい値となります。
ですので、マイナスが含まれている場合は%演算子だと剰余計算をする場合は問題があります。
合計の計算
リストにまとめた値の合計を計算する関数として、Python標準にはsum関数がありますが、float型を合計する場合に浮動小数の誤差によって正確な値が得られないことがあります。
そうした誤差を極力無くして合計を計算するのがmathモジュールの「fsum」関数です。
引数に数値をまとめたリストを渡すと、その合計を計算し戻り値として返します。
では実際に見てみましょう。
from math import *
n = 0.1
t1 = sum([n,n,n,n,n,n,n,n,n,n])
t2 = fsum([n,n,n,n,n,n,n,n,n,n])
print(t1)
print(t2)
実行結果は以下です。
0.9999999999999999
1.0
0.1が10個あるリストの合計を計算していますが、実行するとsumの場合は1になりませんが、fsumだと1.0になっています。
randomによる乱数
mathモジュール以外にも演算関係で役立つモジュールとして、疑似乱数(ランダムな数字)に関する機能を提供する「random」モジュールがあります。
これも以下のような形でインポートして使います。
randomモジュールでは様々な乱数を生成できます。
乱数の作成
乱数の作成は2通りあります。
- 実数の乱数:0以上1未満の間でランダムな数字を返す
- 整数の乱数:上下減を設定しその範囲でランダムな整数を返す
実数の乱数は、引数なしで呼び出して、0以上1未満の間でランダムな実数を返します。
整数の乱数は、randrangeという関数を使います。
整数の場合いくつからいくつまでの間で乱数を得るか指定します。
引数を1つ指定した場合はゼロからその上限値未満の間で乱数を作成します。
引数を2つ指定した場合は下限値以上、上限値未満の範囲で乱数を作成します。
では実際に使ってみましょう。
from random import *
print(random())
print(randrange(10))
print(randrange(100,200))
実行結果は以下となります。
0.8470010370619074
7
173
randomは0から1までの実数の乱数、randrangeは範囲内での整数の乱数が表示されています。
リストと乱数
もう一つrandomモジュールに用意されているのが、既存のリストをランダムに利用するための関数です。
リストの中からランダムに項目を取り出す場合は「choice」という関数を使います。
リストの中からランダムに1つの項目を選んで返します。
リストの値の並び順をランダムに入れ替えるには「shuffle」を使います。
引数に指定したリストがランダムに変更(並び替え)されます。
ただし戻り値はなく、引数に指定したリストを書き換えてしまうので注意してください。
リストの中から指定した数の項目をランダムに戻り値として取り出すのは「sample」を使います。
引数は2つあり、第1引数にリスト、第2引数に取り出す個数を指定します。
戻り値は取り出した項目をリストにまとめたものです。
では、実際に使ってみます。
from random import *
data = ["one","two","three","four","five","six","seven","eight","nine","ten"]
item = choice(data)
print(item)
shuffle(data)
print(data)
res = sample(data,5)
print(res)
dataリストに文字列で1−10までの数字を入れています。
各関数の実行した結果は以下となります。
eight
['nine', 'five', 'ten', 'one', 'eight', 'four', 'three', 'six', 'seven', 'two']
['five', 'three', 'eight', 'two', 'nine']
各リストからランダムに値が出力されていることがわかります。
statisticsによる統計関数
統計処理はPythonでもよく実施される分野です。
Pythonで統計処理だとpandasなど外部のパッケージを使うことも多いですが、統計関係の基本的な機能であれば標準ライブラリの「statistics」モジュールで用意されています。
これも以下のような形でインポートして使います。
では基本的な関数について見ていきましょう。
平均を計算するのは「mean」という関数です。
これは以下のように利用し、引数にはデータをまとめたリストを指定します。
中央値はデータを順に並べた時に中央に位置する値で、「median」という関数で取得します。
これは以下のように利用し、引数にはデータをまとめたリストを指定します。
標準偏差はデータのばらつき度を表す指標となるもので、母標準偏差は「pstdev」標本標準偏差は「stdev」という関数で取得します。
これは以下のように利用し、引数にはデータをまとめたリストを指定します。
ちなみに母標準偏差と標本標準偏差の違いについては簡潔で分かりやすいサイトが山ほどあるので、検索して確認いただければと思います
点数データを統計処理する
では、実際に利用して見ましょう。
点数を取りまとめたリストを使って、平均値、中央値、標準偏差を表示します。
from statistics import *
data = [98,76,54,58,69,80,47,71,61,83]
a = mean(data)
m = median(data)
h = stdev(data)
ph = pstdev(data)
print("ave:"+str(a))
print("med:"+str(m))
print("dev:"+str(h))
print("pdev:"+str(ph))
実行した結果は以下となります。
ave:69.7
med:70.0
dev:15.275616008673577
pdev:14.491721774861674
まとめ
今回は、Pythonでの標準ライブラリである算術計算(mathモジュール、randomモジュール、statisticsモジュール)の利用方法について学びました。