我是一个非常新的Python,我正在尝试分析数据集中的数据。
假设我有一个特定食品品尝的数据集。例如:
{'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' ....}
我有50,000个这样的条目,我试图通过输入以下代码找到有多少种不同类型的食物:
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})
现在我得到了多少不同的食物类型, 我需要很多帮助来计算数据集中每种独特食物的“评论/品味”的平均值。
我知道有50个条目,所以我只想分析最受评论的食物前10名。
我是否需要循环每个条目并查找每个uniqueFood变量并为每个uniqueFood创建一个单独的列表,例如Noodle = list []并附加以下“review / taste”号码?
非常感谢任何有关如何解决此问题的提示或想法。
答案 0 :(得分:0)
您还可以使用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
}
答案 1 :(得分:0)
我建议将您的数据转换为pandas数据帧,然后您可以非常轻松地进行排序和平均 - 例如:
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)
结果:
food/style food/type review/taste
0 Cook Vegetable 1.5
1 Instant Noodle 3.5