Python及数据分析应用实验报告
学生姓名 | 学号 | 上机时间 | 上机地点 | 得分 |
实验主题:数据查询分析
- 问题描述
查询借阅量最大的十本书、查询被同一用户在一年中借阅多次的图书借阅情况
- 实验环境
Pycharm3.11 Anaconda环境
三、主要实验步骤
样例:
1)问题分析: 查询借阅量最大的十本书需要先按照title进行分组,再使用value_counts()函数找出借阅量前十的书名和总借阅量,最后print打印输出结果
2)代码层次设计:根据上述思路,Python工程分为以下几个模块/函数:
- import pandas 库函数:生成随机点
- 添加年份列
- 按照title进行分组并查询要求结果
- 检验查询结果
3)各模块代码展示(附上代码或者代码截图):
查询借阅量最大的十本书
import pandas as pd
records=pd.read_csv('lending.dat')
#第一问
records['year'] = pd.to_datetime(records['date']).dt.year
records1=records.groupby(['bid','title'])[['uid']].size().sort_values(ascending=False)
print(records1)
top10_books=records['bid'].value_counts()[:10].index
result1=records[records['bid'].isin(top10_books)].groupby(['bid']).size().sort_values(ascending=False).head(10)
print(top10_books)
print(result1)
#第二问
result=records.groupby(['uid','title','year','bid']).size()[records.groupby(['uid','title','year','bid']).size()>=2].reset_index()[['uid','title','year']]
print(result)
#写法2
borrow_counts=records.groupby(['uid','title','year','bid']).size().reset_index(name='counts')
mutiple_borrows=borrow_counts[borrow_counts['counts']>1] #筛选借阅次数>1的记录
print(mutiple_borrows)
书名与bid不一一对应例如:
bid不同但title相同,应以bid作为分组依据
若以title作为分组依据代码和查询结果如下:
import pandas as pd
records=pd.read_csv('lending.dat')
records['year'] = pd.to_datetime(records['date']).dt.year
top10_books=records['title'].value_counts()[:10].index
result1=records[records['title'].isin(top10_books)].groupby(['title']).size().sort_values(ascending=False).head(10)
print(top10_books)
print(result1)
4)运行结果如图所示,结论为
查询借阅量最大的十本书:
查询被同一用户在一年中借阅多次的图书借阅情况
: