

本を参考に、確率密度関数のコードを書き、

[code]

    def normal_dist_pdf(x, mu, sigma):   
    
    　　"""
    　　正規分布
    　　: param x: x
    　　: param mu: 平均
    　　: param sigma: 標準偏差
    　　: return: 正規分布
    　　"""
    　　# expの部分
    　　exp = np.exp(-1 * ((x-mu)**2/(2*sigma**2)))
    
    　　# 残りの部分 xexpの部分
    　　return (1/(np.sqrt(2* math.pi*sigma**2))) * exp
    
[/code]

これを[仙台
日平均気温の月平均値（℃）](http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=34&block_no=47590&year=&month=&day=&elm=monthly&view=a1)の11月で使ってみようと思いました。

[code]

    pd.DataFrame(Miyagi_temp['11月'].describe())
    
    11月
    count   94.000000
    mean    8.896809
    std 1.165125
    min 6.500000
    25% 8.100000
    50% 8.800000
    75% 9.700000
    max 11.800000
    
[/code]

次に、実際にヒストグラムを描いて関数で線を引くために、下記のコードを試しました。

[code]

    # 実際のデータのヒストグラム
    ax = Miyagi_temp['11月'].plot(kind = 'hist', bins=94)
    
    # 6.5 から 11.8 までを対象（今回のデータの範囲）
    x = range(6, 12)
    
    # 今回作った関数でラインを引く
    y = [normal_dist_pdf(x, mu, sigma) for i in x]
    
    ax2 = ax.twinx()
    ax2.plot(x, y, color = 'r', linewidth = 5.0)
    
[/code]

しかし、エラーが発生。

[code]

    <ipython-input-47-a5a5417f49ac> in normal_dist_pdf(x, mu, sigma)
         10     """
         11     # expの部分
    ---> 12     exp = np.exp(-1 * ((x-mu)**2/(2*sigma**2)))
         13 
         14     # 残りの部分 xexpの部分
    
    TypeError: unsupported operand type(s) for -: 'range' and 'float'
    
[/code]

range()関数とfloat型の間に問題がありそうなんですが、どうも原因がつかめません。

本の例ではうまくできていたのですが。  
何かヒントあればありがたいです。


CC BY-SA 4.0
2021-11-07T13:41:35.823
83472
2021-11-07T13:41:35.823
48948
question
python データの可視化
unsupported operand type(s) for -: 'range' and 'float' エラーが出る。