予算の関係で将来の獲得件数の予測を立てる仕事が最近あり。夜中まで大変な思いをしたので、経験したことを形にしておきたい。
本屋に寄ったら「数学は演繹、統計は帰納。アプローチが違う」と書いた本があり。目から鱗な感じ。そうか。予測を立てるには数学じゃなくて統計学が必要なわけか。
同じ作者の統計の本から読んでみることにする。
「平均」の次の「分散」のあたりから理解が怪しくなってくる。
要は「それぞれのデータが全体の平均値とどれくらい離れているのか?が知りたくて、それぞれの値の平均値との差をとって、正負反転するために二乗する」「それらの差を積み上げて、データの個数で割って平均とったら、平均からのズレってどんくらいあるの?が分かる」と。そういう話だろうと思った。
これならbashのループですぐ実装できる。引数にとった数字の「分散」を求めるスクリプト 。こうなる。
$ ./my_statics_bunsan.sh 7 3 8 1 11 6 4 3 11 6
ソースはこれ。
コピペ用
#!/bin/bash
shopt -s expand_aliases
source ~/.bashrc
mydate=`date +"%Y%m%d_%H%M%S"`
mypath=`pwd`
echo $mydate
echo '「分散」を求める'
echo '-----------------------'
echo $0 data.csv
echo '-----------------------'
echo '1 引数の平均を求める'
echo ' 1+2+3+4+5 /5 = 3'
echo ''
echo '2 引数と平均の差を求める'
echo ' 3 -1 = 2'
echo ' 3 -2 = 1'
echo ' 3 -3 = 0'
echo ' 3 -4 = -1'
echo ' 3 -5 = -2'
echo ''
echo '3 それぞれを二乗する'
echo ' 2 * 2 = 4'
echo ' 1 * 1 = 1'
echo ' 0 * 0 = 0'
echo ' -1 * -1 = 1'
echo ' -2 * -2 = 4'
echo ''
echo '4 二乗した値の平均をとる'
echo ' (4 +1 +0 +1 +4) /5'
echo ''
echo 'それが「分散」'
echo '----------------------------'
sleep 15
clear
if [[ $# -lt 1 ]]
then
echo '===================='
echo '引数不足 最低1個必要'
#echo '整数を入力してください'
echo '===================='
exit
fi
### 平均を求める
echo '1 引数の平均を求める'
sum=0
for i in "$@" # 全ての引数$0
do
#echo -n '引数:'"$i"' '
echo '引数:'"$i"' '
sum=$*1
# echo '小計:'"$sum"
# echo '----------'
done
echo '--------'
echo '合計:'"$sum"
#平均mean 中央値median 最頻値mode 引数の個数$#
mean=$*2
echo '平均:'"$mean"
echo ''
### 分散を求める
# echo '2 引数の平均との差を求める'
# for i in "$@"
# do
# echo 引数:"$i" 平均:"$mean"
# #echo -n '引数 - 平均値'
# echo -n '('"$i" - "$mean"')' '= '
# tmp=$*3
# echo "$tmp"
#
# echo -n 'その二乗= '
# echo $*4
#
# echo '----------'
# done
# echo ""
echo '3 引数の平均との差 の二乗の平均をとる'
sum2=0
bunsan_str='_'
for i in "$@"
do
echo 引数:"$i" 平均:"$mean"
#echo -n '引数 - 平均値'
echo -n '('"$i" - "$mean"')' '= '
tmp=$*7
echo "$tmp"
echo -n '●その二乗= '
jijo=$*8
echo "$jijo"
# echo -n ' 二乗の足し上げ= '
# echo -n "$sum2"' + '"$jijo"' = '
sum2=$*11
# echo "$sum2"
bunsan_str="$bunsan_str"' + '"$jijo"
echo '----------'
done
echo ''
echo '分散=● の平均'
echo "$bunsan_str"' / '"$#"' = '
echo -n "$sum2"' / '"$#"' = '
#echo $*12
#echo "scale=5; $*13" | bc
#echo "scale=5; 1/3" | bc | xargs printf %.5f
# echo "scale=5; $*14" | bc | xargs printf %.5f
echo "scale=5; $sum2 / $#" | bc | xargs printf %.5f
echo ''
bunsan=`echo "scale=5; $sum2 / $#" | bc | xargs printf %.5f`
echo ''
echo '=========================='
#echo -n '引数'
#for i in $@; do echo -n "$i"','; done
#echo 'の'
echo '引数'"$@"'の'
echo '分散:'"$bunsan"
echo '=========================='
ちなみにメルカリでポチった。
ドコモ払いの手数料は還元される(キャンペーンをドコモが今月打ってる)。
しばらく統計とデータ分析にハマる。
めっちゃ参考になった記事