2017-03-27 1 views
0

CSV 파일에서 워드 클라우드를 만들려고합니다. CSV 파일, 예를 들어, 다음과 같은 구조를 갖는다 :generate_from_frequencies가 포함 된 Wordcloud Python

a,1 
b,2 
c,4 
j,20 

그것을 가지고 더 행 다소간 1800 첫 번째 열은 문자열 값 (이름)를 가지며, 두 번째 열은 각각의 주파수를 갖는다 (INT) . 그런 다음 파일을 읽을되어 나중에 우리가, 구름, 플롯이를 사용하기 때문에 키 값 행은 사전 (d)에 저장됩니다 우리는 값의 사전 전체를 일단

reader = csv.reader(open('namesDFtoCSV', 'r',newline='\n')) 
d = {} 
for k,v in reader: 
d[k] = v 

, 나는 시도를 , 구름 줄거리 :

#Generating wordcloud. Relative scaling value is to adjust the importance of a frequency word. 
#See documentation: https://github.com/amueller/word_cloud/blob/master/wordcloud/wordcloud.py 
wordcloud = WordCloud(width=900,height=500, max_words=1628,relative_scaling=1,normalize_plurals=False).generate_from_frequencies(d) 
plt.imshow(wordcloud, interpolation='bilinear') 
plt.axis("off") 
plt.show() 

을하지만 오류가 발생합니다 :

Traceback (most recent call last): 
File ".........../script.py", line 19, in <module> 
wordcloud = WordCloud(width=900,height=500, max_words=1628,relative_scaling=1,normalize_plurals=False).generate_from_frequencies(d) 
File "/usr/local/lib/python3.5/dist-packages/wordcloud/wordcloud.py", line 360, in generate_from_frequencies 
for word, freq in frequencies] 
File "/usr/local/lib/python3.5/dist-packages/wordcloud/wordcloud.py", line 360, in <listcomp> 
for word, freq in frequencies] 
TypeError: unsupported operand type(s) for /: 'str' and 'float 

마지막으로, 문서는 말한다 :

,
def generate_from_frequencies(self, frequencies, max_font_size=None): 
    """Create a word_cloud from words and frequencies. 
    Parameters 
    ---------- 
    frequencies : dict from string to float 
     A contains words and associated frequency. 
    max_font_size : int 
     Use this font-size instead of self.max_font_size 
    Returns 
    ------- 
    self 

따라서 함수의 요구 사항을 충족하면 왜이 오류가 발생하는지 이해할 수 없습니다. 나는 누군가가 나를 도울 수 있기를 바랍니다, 감사합니다.

내가 worldcloud 1.3.1 당신의 사전에있는 값이 문자열하지만, ​​정수 또는 수레, 구름, 기대 때문이다

답변

2

작업

.

코드를 실행 한 후 사전을 검사하면 다음과 같은 결과가 나타납니다. D

출력 [12] : { 'a'는 '1', 'B': '2', 'C': '4', 'J''20 [12]에서

'}

숫자 주위의' '는 실제로는 문자열임을 의미합니다.

이 문제를 해결하기위한 해키 방법은 같은 루프에 대한 귀하의 int로 V 캐스트하는 것입니다

D [K] = INT (V)

나는 그것이 작동 것이기 때문에이 해키라고 하지만 정수 입력에 실수가 있으면 문제가 발생할 수 있습니다.

또한 파이썬 오류는 읽기 어려울 수 있습니다. 유형의 오류가 나있다 귀하의 오류는 위의

script.py ":/지원되지 않는 피연산자 유형 (들)

을 떠 'STR'과 '형식 오류 19

라인"으로 해석 될 수있다 내 파일의 19 번째 줄 앞에. 나 문자열과 부동 사이에 불일치가 있는지 확인하기 위해 내 데이터 유형을 살펴 보자 ... "

을 아래 코드는 나를 위해 작동 :

import csv 
from wordcloud import WordCloud 
import matplotlib.pyplot as plt 

reader = csv.reader(open('namesDFtoCSV', 'r',newline='\n')) 
d = {} 
for k,v in reader: 
    d[k] = int(v) 

#Generating wordcloud. Relative scaling value is to adjust the importance of a frequency word. 
#See documentation: https://github.com/amueller/word_cloud/blob/master/wordcloud/wordcloud.py 
wordcloud = WordCloud(width=900,height=500, max_words=1628,relative_scaling=1,normalize_plurals=False).generate_from_frequencies(d) 

plt.imshow(wordcloud, interpolation='bilinear') 
plt.axis("off") 
plt.show() 
관련 문제