2016-05-17 9 views
0

私はcsvファイルを読み、ボケとPDFとCDFを計算しようとしています。私はエラーが発生しています。入力ファイルはkeywordfreqです。周波数の分布をプロットします。以下の入力は50k行以上の行です。エラー - プロットPDFとCDFボケ:/ためのサポートされていないオペランドのタイプ(S):「リスト」と「int型

入力:

#sportsnews,8 
#mashupradiomx,1 
#arrestobama,2 
#alemanha,1 
#bizeskiden,1 
#musicnews,4 
#costumedesign,2 
#champain,1 
#pacer,1 
#brunner,1 
#fotoviajera,1 
#itsjihadstupid,1 
#lesdernierssurvivants,1 
#sainsburycentre,1 
#alanalwaysinourheart,1 
#runinapp,1 
#foroporlavida,1 
#kidsday,1 
#momentofart,2 

コード:

# -*- coding: utf-8 -*- 
import numpy as np 
import scipy.special 
import pandas as pd 

from bokeh.plotting import figure, show, output_file, vplot 

df = pd.read_csv('keyword.csv', header = None) 

df.columns = ['keyword','freq'] 

p5 = figure(title="Weibull Distribution (λ=1, k=1.25)", tools="save", 
      background_fill_color="#E8DDCB") 

lam, k = 1, 1.25 

#measured = lam*(-np.log(np.random.uniform(0, 1, 1000)))**(1/k) 
#hist, edges = np.histogram(measured, density=True, bins=50) 

x = df['freq'] 
pdf = (k/lam)*(x/lam)**(k-1) * np.exp(-(x/lam)**k) 
cdf = 1 - np.exp(-(x/lam)**k) 

p5.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:], 
     fill_color="#036564", line_color="#033649") 

p5.line(x, pdf, line_color="#D95B43", line_width=8, alpha=0.7, legend="PDF") 
p5.line(x, cdf, line_color="white", line_width=2, alpha=0.7, legend="CDF") 

p5.legend.location = "top_left" 
p5.xaxis.axis_label = 'x' 
p5.yaxis.axis_label = 'Pr(x)' 

output_file('histogram.html', title="histogram.py example") 

show(vplot(p5)) 

は、私が唯一の両方lineプロットをプロットしたいです。

エラー:

Traceback (most recent call last): 
    File "pdf_bokeh.py", line 21, in <module> 
    pdf = (k/lam)*(x/lam)**(k-1) * np.exp(-(x/lam)**k) 
TypeError: unsupported operand type(s) for /: 'list' and 'int' 

編集1:x=df['freq']を変更した後、私は奇妙な出力を取得しています。 フル入力ファイルDropboxデータは本質的にディスクリートですが、依然として分布プロットは以下のように出力されません。

出力:これは実際にそれがどうあるべきかの任意の場所の近くではありません。

enter image description here

+0

以下であることを把握するためにいくつかの空想の統計を行うことができます'x = ['freq']'と定義していますか? – EdChum

+0

@EdChumは 'X'は 'freq'は、私はあなたがしようとしていることを語っているあなたは、x =のDF [「FREQ」] –

+0

をプロットしますこれをintで分けると明らかにエラーになります。 'x = df ['freq']'? – oystein

答えて

0

あなたの問題は理論的な分布のために、x軸である、あなたはx=df['freq']でこれをサンプリングしたいのですが、かなり見ている座標ではありません。私はあなたのデータセットをダウンロードし、と賢明な何かを得ることができました:

x = np.linspace(0, 5, 100) # 100 points between 0 and 5 

あなたは、データのほとんどは 'X'のようであることを意味するものを5

+0

x = linespace(0,5,10)を入力したら、入力はどこに与えられますか? –

関連する問題