Python wordcloud 中 generate_from_frequencies 方法所需的元组数组
Array of tuples necessary for generate_from_frequencies method in Python wordcloud
我正在尝试根据字符串的重要性及其在 Excel 文档中的相应数据值在 Python 中制作词云。 generate_from_frequencies 方法采用频率参数,文档说该参数应该采用元组数组。
来自 wordcloud source code 的部分代码:
def generate_from_frequencies(self, frequencies):
"""Create a word_cloud from words and frequencies.
Parameters
----------
frequencies : array of tuples
A tuple contains the word and its frequency.
Returns
-------
self
"""
# make sure frequencies are sorted and normalized
frequencies = sorted(frequencies, key=item1, reverse=True)
frequencies = frequencies[:self.max_words]
# largest entry will be 1
max_frequency = float(frequencies[0][1])
frequencies = [(word, freq / max_frequency) for word, freq in frequencies]
我尝试使用常规列表,然后我尝试使用 numpy 的 ndarray,但是 PyCharm 显示参数类型应为 array.py 的警告,我读到的应该只接受字符,整数和浮点数 (array.py docs):
This module defines an object type which can compactly represent an array of basic values: characters, integers, floating point numbers.
我的测试代码:
import os
import numpy
import wordcloud
d = os.path.dirname(__file__)
cloud = wordcloud.WordCloud()
array = numpy.array([("hi", 6), ("seven"), 17])
cloud.generate_from_frequencies(array) # <= what should go in the parentheses
如果我 运行 上面的代码尽管有 PyCharm 警告,我会收到以下错误,我想这是告诉我它不能接受 ndarray 类型的另一种方式:
File "C:/Users/Caitlin/Documents/BioDataSorter/tag_cloud_test.py", line 8, in <module>
cloud.generate_from_frequencies(array) # <= what should go in the parentheses
File "C:\Python34\lib\site-packages\wordcloud\wordcloud.py", line 263, in generate_from_frequencies
frequencies = sorted(frequencies, key=item1, reverse=True)
TypeError: 'int' object is not subscriptable
另一个潜在的问题可能是 wordcloud 是用 Python 2 编写的,但我使用的是 Python 3.4,这可能导致某些代码无法使用。我应该通过此方法传递什么类型?
来自你的测试代码
... # <=
括号中应包含什么内容
我相信你应该有一个元组 (("hi", float(6/(6+17)),("seven", float(17/(6+17))))
感谢 J Herron 和 selva 提供了使用元组而不是列表对象的答案——我最终得到了这个:
cloud.generate_from_frequencies((("hi", 3),("seven", 7)))
它仍然在我的 IDE 中作为错误出现,这是一种误导,但它按照预期的方式工作。
基于 CCCodes 的回答,这里是所提供方式的新版本,权重映射到字典中的单词:
cloud.generate_from_frequencies({"hi": 3,"seven": 7})
我正在尝试根据字符串的重要性及其在 Excel 文档中的相应数据值在 Python 中制作词云。 generate_from_frequencies 方法采用频率参数,文档说该参数应该采用元组数组。
来自 wordcloud source code 的部分代码:
def generate_from_frequencies(self, frequencies):
"""Create a word_cloud from words and frequencies.
Parameters
----------
frequencies : array of tuples
A tuple contains the word and its frequency.
Returns
-------
self
"""
# make sure frequencies are sorted and normalized
frequencies = sorted(frequencies, key=item1, reverse=True)
frequencies = frequencies[:self.max_words]
# largest entry will be 1
max_frequency = float(frequencies[0][1])
frequencies = [(word, freq / max_frequency) for word, freq in frequencies]
我尝试使用常规列表,然后我尝试使用 numpy 的 ndarray,但是 PyCharm 显示参数类型应为 array.py 的警告,我读到的应该只接受字符,整数和浮点数 (array.py docs):
This module defines an object type which can compactly represent an array of basic values: characters, integers, floating point numbers.
我的测试代码:
import os
import numpy
import wordcloud
d = os.path.dirname(__file__)
cloud = wordcloud.WordCloud()
array = numpy.array([("hi", 6), ("seven"), 17])
cloud.generate_from_frequencies(array) # <= what should go in the parentheses
如果我 运行 上面的代码尽管有 PyCharm 警告,我会收到以下错误,我想这是告诉我它不能接受 ndarray 类型的另一种方式:
File "C:/Users/Caitlin/Documents/BioDataSorter/tag_cloud_test.py", line 8, in <module>
cloud.generate_from_frequencies(array) # <= what should go in the parentheses
File "C:\Python34\lib\site-packages\wordcloud\wordcloud.py", line 263, in generate_from_frequencies
frequencies = sorted(frequencies, key=item1, reverse=True)
TypeError: 'int' object is not subscriptable
另一个潜在的问题可能是 wordcloud 是用 Python 2 编写的,但我使用的是 Python 3.4,这可能导致某些代码无法使用。我应该通过此方法传递什么类型?
来自你的测试代码
... # <=
括号中应包含什么内容
我相信你应该有一个元组 (("hi", float(6/(6+17)),("seven", float(17/(6+17))))
感谢 J Herron 和 selva 提供了使用元组而不是列表对象的答案——我最终得到了这个:
cloud.generate_from_frequencies((("hi", 3),("seven", 7)))
它仍然在我的 IDE 中作为错误出现,这是一种误导,但它按照预期的方式工作。
基于 CCCodes 的回答,这里是所提供方式的新版本,权重映射到字典中的单词:
cloud.generate_from_frequencies({"hi": 3,"seven": 7})