ここでは任意のリスト内の中央値を求めるプログラムを解説しています。
この記事の対象
行ったこと
リスト内の数値の中央値を求めるプログラムを作成しました。
statistics.median()を用いる方法もありますが、理解を深めるために作成してみました。
プログラム
サンプルコード1(自作)
#1---計算するための関数
def calc(test):
#2---リスト内のソート
stest = sorted(test)
print(stest)
#3---偶数のときの処理
if len(stest) % 2 == 0:
out1 = int(len(stest)/2)
median = (stest[out1]+stest[out1-1])/2
print("even-median:",median)
#4---奇数のときの処理
else:
odd_med = int((len(stest)-1)/2)
print("odd-median:",stest[odd_med])
#5---リストの作成
test = [1,330,120,500,40]
test1 =[224,450,300,780,900,670]
#6---関数の呼び出し
calc(test)
calc(test1)
上記がプログラムになります。
それでは解説していきます。
#1---計算するための関数
def calc(test):
1の部分では関数を作成しています。2の部分から関数の内容になります。
#2---リスト内のソート
stest = sorted(test)
print(stest)
2の部分ではリストのソートを行っています。中央値を算出するので、ソートする必要があります。確認のためソートしたらprint出力しています。
#3---偶数のときの処理
if len(stest) % 2 == 0:
out1 = int(len(stest)/2)
median = (stest[out1]+stest[out1-1])/2
print("even-median:",median)
3の部分では、リストが偶数のときの処理を行っています。偶数の場合は「k」「k+1」の平均を出力するようにしています。
#4---奇数のときの処理
else:
odd_med = int((len(stest)-1)/2)
print("odd-median:",stest[odd_med])
4の部分では、奇数のときの処理を行っています。奇数の場合はソートしたときの中央値を出力しています。
#5---リストの作成
test = [1,330,120,500,40]
test1 =[224,450,300,780,900,670]
5の部分ではリストを作成しています。
#6---関数の呼び出し
calc(test)
calc(test1)
6の部分では関数を呼び出しています。
結果
[1, 40, 120, 330, 500]
odd-median: 120
[224, 300, 450, 670, 780, 900]
even-median: 560.0
上記が結果になります。
中央値が算出できていることが確認できました。
上記をまとめたものがstatistics関数になります。以下ではstatistics.median()についてまとめています。
サンプルコード2(statistics)
import statistics
import math
test = [1,330,120,500,40]
test1 =[224,450,300,780,900,670]
test_re= statistics.median(test)
test1_re= statistics.median(test1)
print(test_re)
#120
print(test1_re)#560.0
statisticsを用いると一行で簡単に求めることが可能です。
自分で計算式を記述する必要がないので便利です。