使用numpy中的方法从500万条数据中统计10000本书的平均得分

在douban等网站上,我们会得到大量数据对某本书的打分(rating/score),然后在这本书的主页上会看到这本书的平均得分,那么这个平均得分是怎么计算出来的呢?我们可以使用numpy库中的各种方法组合起来设计计算方法进行统计并且输出。大致可以分成四个步骤:
一、从数据库中读取数据并且转换为整型数据
这里主要应用的是genfromtxt()方法进行读取、然后用astype(int)方法进行数据类型的转换。
二、创建两个数组,分别用来存储每本书的总得分和打分人数
这里主要使用zeros()方法对ndarray数据进行初始化,总的思路是平均得分=总得分/打分人数
三、遍历数据库,计算总得分和打分人数
这里主要使用for i in data的循环进行遍历操作,注意用genfromtxt方法得到的data,第一个维度默认是用回车键进行分割的,使用逗号’,'作为delimiter,能把每一行的数据进行分割作为第二层次(也就是爸爸的维度)存储在data的每一行中,所以本质上data是一个二维数组。用for循环对data做遍历,默认是以第一层次作为遍历条件的。
四、计算平均得分并且查询
使用公式:平均得分=总得分/打分人数,计算平均得分。

以上四个步骤翻译成matlab代码如下:

import numpy as np

book_rating_sum   = np.zeros(10000)
book_rating_times = np.zeros(10000)

data = np.genfromtxt('rating.txt',delimiter=',') 
book_data=data.astype(int)


for rating in book_data:
	book_id = rating[1]-1
	book_rating_times[book_id] 	+= 1
	book_rating_sum[book_id]	+=rating[2]

book_average_score = book_rating_sum/book_rating_times

print(book_average_score.reshape(10000,1))

target_book_id = 100
index_id = target_book_id - 1
print(book_average_score[index_id])

我们以100作为target_book_id进行查询,运行之后可以得到以下结果:

[[4.27970709]
 [4.35135011]
 [3.21434056]
 ...
 [4.32352941]
 [3.70769231]
 [4.00900901]]
3.98470755163172
[Finished in 129.2s]

可以看到因为条目比较多,运行时间长达2分钟,不过我们还是成功得到了平均得分3.98

这样我们就完成了使用numpy中的方法统计10000本书的平均得分,这个任务。附件是作为本题的数据库txt文件。

你可能感兴趣的:(python知识点拾遗,python高级数据处理方法)