2016-08-23 3 views
0

나는 zipf 배포본을 조합하여 실행하려는 단락 목록을 가지고 있습니다.matplotlib를 사용하여 Zipf 배포를 구축하여 피팅 된 선을 그려야합니다.

내 코드는 다음과 같습니다 :

from itertools import * 
from pylab import * 
from collections import Counter 
import matplotlib.pyplot as plt 


paragraphs = " ".join(targeted_paragraphs) 
for paragraph in paragraphs: 
    frequency = Counter(paragraph.split()) 
counts = array(frequency.values()) 
tokens = frequency.keys() 

ranks = arange(1, len(counts)+1) 
indices = argsort(-counts) 
frequencies = counts[indices] 
loglog(ranks, frequencies, marker=".") 
title("Zipf plot for Combined Article Paragraphs") 
xlabel("Frequency Rank of Token") 
ylabel("Absolute Frequency of Token") 
grid(True) 
for n in list(logspace(-0.5, log10(len(counts)-1), 20).astype(int)): 
    dummy = text(ranks[n], frequencies[n], " " + tokens[indices[n]], 
    verticalalignment="bottom", 
    horizontalalignment="left") 

는 처음에 나는 어떤 이유로 다음과 같은 오류가 발생하고 이유를 알고하지 않습니다 내가 "는 그릴을 시도

IndexError: index 1 is out of bounds for axis 0 with size 1 

목적 이 그래프에서 "맞춤 선"을 선택하고 해당 값을 변수에 할당합니다. 그러나 나는 그것을 어떻게 추가 할 지 모른다. 어떤 도움이라도이 두 가지 문제에 크게 감사 할 것입니다.

+0

를 더 이상이다 명확한 이유를 아래의이 질문과 관련이 답; 게시자의 코드를 원래 상태로 되돌려 보내 주시면 이후 독자가 원래의 문제와 해결책을 볼 수 있습니다. – dshort

답변

1

내가 targeted_paragraphs 어떻게 생겼는지 모르겠지만, 내가 사용하여 오류가 발생했습니다는 :

targeted_paragraphs = ['a', 'b', 'c'] 

문제가 당신이 for 루프를 설정하는 방법에 것처럼 보이는 것을 기준으로합니다. 과 frequencies의 색인 생성은 counts의 길이에서 생성 된 목록을 사용하지만, (내가 알 수있는 한) ranks, frequenciescounts은 모두 길이가 같아야하므로 하나씩 오류가 발생합니다. 아래 len(counts)-1를 사용하는 루프 인덱스를 변경하지 :

for n in list(logspace(-0.5, log10(len(counts)-1), 20).astype(int)): 
    dummy = text(ranks[n], frequencies[n], " " + tokens[indices[n]], 
    verticalalignment="bottom", 
    horizontalalignment="left") 
+0

방금 ​​질문을 편집했습니다. 루프를 생성하고 제공 한 것을 추가하여 IndexError를 해결할 수있었습니다. 자, 나는 맞는 선을 추가해야합니다. @dshort – Pythoner1234

+0

중복되는 것처럼 보일 수 있지만 사이트 규칙에 따라 질문 당 단 하나의 주제가 있어야하므로 적합성에 대한 새로운 질문을하십시오. – dshort

+0

그냥 새로운 질문을 만들었습니다. 링크 : http://stackoverflow.com/questions/39114402/constructing-zipf-distribution-with-matplotlib-fitted-line @dshort – Pythoner1234