我试图从CSV文件创建一个WordCloud。例如,csv文件具有以下结构:
a,1
b,2
c,4
j,20
它有更多的行,或多或少1800。第一列有字符串值(名称),第二列有它们各自的频率(int)。然后,读取文件,并将键,值行存储在字典(d)中,因为稍后我们将使用它来绘制wordcloud:
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()
But an error is thrown:
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
所以,我不明白为什么是trowing我这个错误,如果我满足了功能的要求。我希望有人能帮助我,谢谢。
注意
使用WorldCloud 1.3.1
2条答案
按热度按时间vsikbqxv1#
这是因为字典中的值是字符串,而wordcloud需要整数或浮点数。
在我运行你的代码,然后检查你的字典
d
后,我得到以下结果。注意数字周围的
' '
意味着这些实际上是字符串。解决这个问题的一个简单方法是在
FOR
循环中将v
转换为int
,如下所示:我说这是黑客,因为它将工作在整数,但如果你有浮点数在您的输入,那么它可能会导致问题。
此外,Python错误可能很难阅读。上面的错误可以解释为
“我的文件第19行或之前有一个类型错误。让我看看我的数据类型,看看字符串和浮点数之间是否有任何不匹配......”
下面的代码适合我:
juzqafwq2#