2016-07-07 2 views
1

Я пытаюсь сделать слово облако в Python из значения строк и их соответствующих значений данных в документе Excel. Метод generate_from_frequencies принимает параметр частот, который, как говорят документы, должен принимать массив кортежей.Массив кортежей, необходимых для метода generate_from_frequencies в Python wordcloud

Частичный код из 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] 

Я попытался с помощью обычного списка, тогда я попробовал ndarray из NumPy, но 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, который, возможно, предоставил часть кода непригодной для использования. Какой тип должен пройти этот метод?

ответ

0

Благодаря J Херрон и сельву для ответа использовать кортежи вместо список object--, и я закончил с этим:

cloud.generate_from_frequencies((("hi", 3),("seven", 7))) 

Word cloud generated

Это все еще появилось как ошибка в моей среде IDE, которая вводила в заблуждение, но работала так, как предполагалось.

0

Из тестового кода ... # <=, что должно идти в этом круглые скобки

Я считаю, что вы должны иметь кортеж (("hi", float(6/(6+17)),("seven", float(17/(6+17))))

+0

Спасибо за ответ! Я изменил эту строку на: 'cloud.generate_from_frequencies ((« hi », float (6/(6 + 17)), (« семь », float (17/(6 + 17))))))', но Я получил объект TypeError: Float, который не подлежит расшифровке, поэтому я изменил float на int, и он сработал. – CCCodes

 Смежные вопросы

  • Нет связанных вопросов^_^