#!/usr/bin/env python

# 標準正規分布表見方
# あるZ値が生じる確率がわかる

# 平均が0　標準偏差が1　これに変換する = 標準化
# Z:標準化されたデータ
# σ 標準偏差
# Z = (x - μ) / σ
# 参考 https://qiita.com/y_itoh/items/c388ff82360906240daf
# 参考 https://bellcurve.jp/statistics/course/7805.html

from scipy.stats import norm


# 生存関数
# 確率変数XXがある値xx以上となる確率
def ProbabilityTop(x):
    return norm.sf(x=x)


# 累積分布関数
# 確率変数XXがある値xx以下となる確率
def ProbabilityBottom(x):
    return norm.cdf(x=x)


# 累積確率から横軸の値を出す
# 累積分布関数cdfの逆関数
def CumulativeProbability(persent):
    return norm.ppf(q=persent)


# パーセント点関数
# ある点が何％点かを求める
def PersentPoint(persent, μ, σ):
    # norm.ppf(q=パーセント, loc=平均, scale=標準偏差)
    return norm.ppf(q=persent, loc=μ, scale=σ)


def main():
    ## 生存関数
    ## 確率変数XXがある値xx以上となる確率
    # Q(0.86)
    # A : 0.195
    probability = ProbabilityTop(0.86)
    print("生存関数 確率", probability)

    ## 累積分布関数
    ## 確率変数XXがある値xx以下となる確率
    # Q(0.86)
    # A : 0.805
    probability = ProbabilityBottom(0.86)
    print("累積分布関数 確率", probability)

    ## 確率から累積確率
    # Q(z) = 0.195
    # A: z = 0.86
    z = CumulativeProbability(0.195)
    print("Zの値", z)

    # Z = x - μ / σ (標準化 Z~N(0,1))
    # 0.14 = x - 0 / 1
    persentPoint = PersentPoint(0.05, 0, 1)
    print("ある点の何％点", persentPoint)


if __name__ == "__main__":
    main()
