问题
I am trying to make a word cloud in Python from the significance of strings and their corresponding data values in an Excel document. The generate_from_frequencies method takes a frequencies parameter which the docs say is supposed to take an array of tuples.
Partial code from 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]
I tried using a regular list, then I tried a ndarray from numpy, but PyCharm shows warnings that the parameter type should be array.py, which I read is only supposed to take characters, integers, and floating point numbers (array.py docs):
This module defines an object type which can compactly represent an array of basic values: characters, integers, floating point numbers.
My test code:
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
If I run the code above despite the PyCharm warning, I get the following error, which I suppose is another way of telling me that it can't accept the ndarray type:
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
Another potential problem could be that wordcloud was written in Python 2 but I am using Python 3.4, which may have rendered some of the code unusable. What type should I pass this method?
回答1:
From your test code
... # <=
what should go in this parentheses
I believe you should have a tuple (("hi", float(6/(6+17)),("seven", float(17/(6+17))))
回答2:
Thanks to J Herron and selva for the answer to use tuples instead of a list object-- and I ended up with this:
cloud.generate_from_frequencies((("hi", 3),("seven", 7)))
It still came up as an error in my IDE, which was misleading, but it worked the way it was supposed to.
来源:https://stackoverflow.com/questions/38247648/array-of-tuples-necessary-for-generate-from-frequencies-method-in-python-wordclo