今回は偏差値を求める式をPythonで書いてみました。
偏差値は
偏差値 = 10 * (各データ - 平均値) / 標準偏差 + 50
で求めれます。
参照先
https://sci-pursuit.com/math/statistics/deviation-value.html
以下pythonコードです。
偏差値.py
import random
import math
# 処理対象のデータを作成
# 0~100の間で10個ランダムに数値を選択しリストに格納する。
test_data = []
for _ in range(10):
test_data.append(random.randint(0, 100))
print('自動で生成したリストは以下です。')
print(test_data)
print()
# 平均値を求める。
# 平均値 = 全値の合計値 / 値の総数
mean = sum(test_data) / len(test_data)
print('平均値は' + str(mean) + 'です。')
print()
########################################
# 以下ライブラリを使用すれば平均は求められます。
# import statistics
# avg = statistics.mean(test_data)
# print(avg)
########################################
# 偏差を求める
# 偏差 = (平均値 - 各値) ** 2
dev_data = []
for dev in test_data:
dev_data.append((dev - mean) ** 2)
print('偏差は以下になります。')
print(dev_data)
print()
# 分散を求めます。
# 分散 = 偏差の2乗の合計 / データの総数
dispersion_data = sum(dev_data) / len(dev_data)
print('分散は' + str(dispersion_data) + 'です。')
print()
# 標準偏差を求める
# 標準偏差 = 分散の平方根
result_sd = math.sqrt(dispersion_data)
print('標準偏差は' + str(result_sd) + 'です。')
print()
# 偏差値を求める
dispersion_value = []
for t in test_data:
# 偏差値が小数で出力されるので、int()を使用して整数に直しています。
# int() ⇒ 切り捨て、 round() ⇒ 四捨五入
dispersion_value.append(int(10 * ((t - mean) / result_sd) + 50))
print('リスト内の各データの偏差値は以下となります。')
print(dispersion_value)
偏差値は切り上げで出力していますが、四捨五入や切り上げも可能です。
mathモジュールを使用すればかっこよくなるんかな?w
以下出力結果です。
地味に平均値が45~55の外に出たの初めてかも。。。
自動で生成したリストは以下です。
[7, 41, 8, 35, 85, 16, 17, 85, 46, 18]
平均値は35.8です。
偏差は以下になります。
[829.4399999999998, 27.04000000000003, 772.8399999999998, 0.6399999999999955, 2420.6400000000003, 392.0399999999999, 353.4399999999999, 2420.640000000
0003, 104.04000000000006, 316.8399999999999]
分散は763.76です。
標準偏差は27.636208133533803です。
リスト内の各データの偏差値は以下となります。
[40, 52, 40, 50, 68, 43, 43, 68, 54, 44]
今後は機械学習も上げていけたらと思ってるけどインプットが追い付いてないから頑張ります。