编写标准差函数

时间:2016-04-25 01:15:14

标签: python python-3.x dictionary standard-deviation

我有一个单词词典作为键和int作为值。它输出如下:

print (word_ratings_dict)
{'hate': [1, 2, 2, 1, 1, 3, 0, 2, 3, 2, 0, 4, 1, 1], 'joy': [3, 4, 3, 3, 2, 4, 1]}

对于字典中的每个关键字,我需要使用统计模块计算其标准偏差。

到目前为止我所拥有的:

def menu_validate(prompt, min_val, max_val):
    """ produces a prompt, gets input, validates the input and returns a value. """
    while True:
        try:
            menu = int(input(prompt))
            if menu >= min_val and menu <= max_val:
                return menu
                break
            elif menu.lower == "quit" or menu.lower == "q":
                quit()
            print("You must enter a number value from {} to {}.".format(min_val, max_val))
        except ValueError:
            print("You must enter a number value from {} to {}.".format(min_val, max_val))

def open_file(prompt):
    """ opens a file """
    while True:
        try:
            file_name = str(input(prompt))
            if ".txt" in file_name:
                input_file = open(file_name, 'r')
                return input_file
            else:
                input_file = open(file_name+".txt", 'r')
                return input_file
        except FileNotFoundError:
            print("You must enter a valid file name. Make sure the file you would like to open is in this programs root folder.")

def make_list(file):
    lst = []
    for line in file:
        lst2 = line.split(' ')
        del lst2[-1]
        lst.append(lst2)
    return lst

def rating_list(lst):
    '''iterates through a list of lists and appends the first value in each list to a second list'''
    rating_list = []
    for list in lst:
        rating_list.append(list[0])
    return rating_list

def word_cnt(lst, word : str):
    cnt = 0
    for list in lst:
        for word in list:
            cnt += 1
    return cnt

def words_list(file):
    lst = []
    for word in file:
        lst.append(word)
    return lst

def word_rating(word, ratings_lst):
    '''finds ratings for a word and appends them to a dictionary of words'''
    lst = []
    for line in ratings_lst:
        line = line.split()
        if word in line:
            rating = line[0]
            lst.append(int(rating))
    return lst
cnt_list = []
while True:
    menu = menu_validate("1. Get sentiment for all words in a file? \nQ. Quit \n", 1, 1)
    if menu == True:
        ratings_file = open("sample.txt")
        ratings_list = make_list(ratings_file)
        word_ratings_dict = {}
        word_avg_dict = {}
        std_dev_dict = {}
        word_file = open_file("Enter the name of the file with words to score \n")
        word_list = words_list(word_file)


        for word in word_list:
            #counts the words
            cnt = word_cnt(ratings_list, word)

            cnt_dict[word] = cnt

            word_ratings_dict[word] = word_rating(word, ratings_list)

            total_rating = 0

            for i in range (0, cnt):
                total_rating += word_ratings_dict[word][i]

            word_avg_dict[word] = total_rating/cnt

            std_dev_dict[word] = 

2 个答案:

答案 0 :(得分:3)

这些可以很好地完成工作:

def mean(data):
    return float(sum(data) / len(data))

def variance(data):
    mu = mean(data)
    return mean([(x - mu) ** 2 for x in data])

def stddev(data):
    return sqrt(variance(data))

答案 1 :(得分:0)

或者您可以在一个功能中完成它:

TheaterId