用pandas在海量数据中找出最热的50本书和最热的10个标签

任务一:找出最多人想读的50本书的名称
任务二:找出这50本书对应最热门的10个标签

已有数据:
文件1:to_read.csv
每行两个数据,用户id和该用户想读的书籍id
文件2:books.csv
书籍的各类id,名称,作者等信息
文件3:tags.csv
每行两个数据,标签id和标签名称
文件4:book_tags.csv
每行三个数据,goodreads_book_id(和to_read中的书籍id的对应关系可以在books.csv里找到),标签id,标记次数。

思路:
任务一用文件1和文件2就能提供充分的信息了。
我们先用文件1用.value_count()来进行统计每本书的期待用户数,然后用sort_values()进行排序后切片(([:50]))前50。注意这个时候我们得到的是一个Series,我们需要提取其中的index中(id号)和value(count值,其实是非必须的,只不过是一个依据)来生成一个多列的DataFrame数据帧作为一张基础表,这个表中的id是主键。然后我们需要通过主键关联到其他表上来对应找出id对应的书名(title)。我们发现在文件2中有书名信息,但是文件2中的内容太多了,我们需要简化以保证信息的间接性,所以我们可以从文件二中用DataFrame的读取方法读取其中我们需要的列生成一张id和书名对应的书名表(books_id_and_title),然后通过主键和刚才生成的基础表做一个merge操作就可以了。注意我们这里用了on='book_id’参数设定了主键,how='left’设定了取值范围。

实现的代码如下:

import pandas as pd
to_read = pd.read_csv('to_read.csv')
to_read_counts_series = to_read['book_id'].value_counts().sort_values(ascending=False)
hottest_50_books_id_series = to_read_counts_series[:50]
print(hottest_50_books_id_series)
hottest_50_books_id_col = hottest_50_books_id_series.index
hottest_50_books_counts = hottest_50_books_id_series.values
print(hottest_50_books_id_col)
print(hottest_50_books_counts)

to_read_counts_df = pd.DataFrame({
   
		'book_id':hottest_50_books_id_col,
		'counts':hottest_50_books_counts
	})
print(to_read_counts_df)
books = pd.read_csv('books.csv',encoding="ISO-8859-1")
books_id_and_title = books[['book_id','goodreads_book_id','title']]
print(books_id_and_title)
hottest_books_list = pd.merge(to_read_counts_df,books_id_and_title,on ='book_id',how='left')
hottest_books_list.to_csv('hottest_50_books.csv')
print(hottest_books_list)

最后的输出结果如下:

  book_id  ...                                              title
0        47  ...                                     The Book Thief
1       143  ...                        
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值