2017-10-10 1 views
-1

Je suis très nouveau Python et j'essaie d'analyser des données à partir d'un ensemble de données.Python: Collecte de données à partir de l'ensemble de données

Disons que j'ai un ensemble de données d'une certaine dégustation de nourriture. Par exemple:

{'review/appearance': 2.5, 'food/style': 'Cook', 'review/taste': 1.5, 'food/type': 'Vegetable' .... } 
{'review/appearance': 5.0, 'food/style': 'Instant', 'review/taste': 4.5, 'food/type': 'Noodle' ....} 

et j'ai 50 000 de ces entrées et je suis en train de trouver combien de différents types d'aliments, il y a en tapant le code suivant:

data = list(parseData("/Path/to/my/dataset/file")) 

def feature(datum): 
    feat = [datum['food/type']] 
    return feat 

#making a separate list of food style 
foodStyle = [feature(d) for d in data] 

newFoodStyle = list() 

#converting the foodStyle list to just one list 
for sublist in foodStyle: 
    for item in sublist: 
    newFoodStyle.append(item) 

uniqueFood = Counter(newFoodStyle) #using counter variable to count how many unique food type there are 

a = "There are %s types of food" % (len(uniqueFood)) 
print a 

#print uniqueFood gives me 'Counter({'Noodle': 4352, 'Vegetable': 3412 and etc}) 

Maintenant que je suis arrivé combien Il y a différents types d'aliments, J'ai besoin de beaucoup d'aide pour calculer la valeur moyenne de la «révision/goût» pour chaque type unique d'aliment présent dans l'ensemble de données.

Je sais qu'il ya 50k entrées, donc je suis en train de seulement analyser le plus revu top alimentaire 10.

Ai-je besoin de boucler chaque entrée et l'air pour chaque variable uniqueFood et faire une liste séparée de chaque uniqueFood , comme Noodle = list [] et ajoutez le numéro 'review/taste' suivant?

Des conseils ou des idées sur la façon d'aborder ce problème seraient grandement appréciés.

+0

Essayez d'utiliser des ensembles et définissez la longueur https://docs.python.org/2/library/sets.htm l – SatanDmytro

Répondre

0

Vous pouvez également utiliser le type dict:

data = list(parseData("/Path/to/my/dataset/file")) 

food_items = dict() 
for datum in data: 
    food_style = datum['food/type'] 
    if food_style in food_items: 
     food_items[food_style].append(datum) 
    else: 
     food_items[food_style] = [datum] 

# unique food list 
unique_food = food_items.keys() 


a = "There are %s types of food" % (len(unique_food)) 
print a 

# avg 'review/taste' 
avg = { 
    key: sum(map(lambda i: i.get('review/taste', 0), values))/float(len(values)) 
    for key, values in food_items.items() 
    if values 
} 
0

Je suggère de transformer vos données en pandas géants dataframe et vous pouvez faire le tri et la moyenne assez facilement - par exemple est ci-dessous:

import pandas as pd 

datalist = [] 

dict1 = {'review/appearance': 2.5, 'food/style': 'Cook', 'review/taste': 1.5, 'food/type': 'Vegetable'} 
dict2 = {'review/appearance': 5.0, 'food/style': 'Instant', 'review/taste': 4.5, 'food/type': 'Noodle'} 
dict2 = {'review/appearance': 3.0, 'food/style': 'Instant', 'review/taste': 3.5, 'food/type': 'Noodle'} 

datalist.append(dict1) 
datalist.append(dict2) 

resultsDF = pd.DataFrame(datalist) 

print(resultsDF.head()) 

AverageResults = resultsDF.groupby(["food/style","food/type"])["review/taste"].mean().reset_index() 
print(AverageResults) 

Résultats:

food/style food/type review/taste 
0  Cook Vegetable   1.5 
1 Instant  Noodle   3.5