import pymongo from pymongo import MongoClient import matplotlib matplotlib.use('TkAgg') # 连接mongodb数据库 client = pymongo.MongoClient("mongodb://localhost:27017/") # 创建数据库 db = client["douban_book"] # 创建集合 collection = db["books"] # 使用聚合框架查询评分分布 pipeline = [ {'$group': {'_id': '$rating', 'count': {'$sum': 1}}}, {'$sort': {'_id': 1}} ] result = collection.aggregate(pipeline) # 绘制评分分布直方图 x = [] y = [] for r in result: x.append(r['_id']) y.append(r['count']) plt.bar(x, y) plt.xlabel('Rating') plt.ylabel('Count') plt.title('Rating Distribution') plt.show() # 使用聚合框架查询评分和评论人数 pipeline = [ {'$project': {'_id': 0, 'rating': 1, 'comments': 1}}, {'$sort': {'rating': 1}} ] result = collection.aggregate(pipeline) # 绘制评分和评论人数的散点图 x = [] y = [] for r in result: x.append(r['rating']) y.append(r['comments']) plt.scatter(x, y) plt.xlabel('Rating') plt.ylabel('Comments') plt.title('Rating vs. Comments') plt.show()
时间: 2023-08-07 13:03:58 浏览: 138
这段代码运行时可能会出现的问题是,绘图时会弹出两个窗口,分别显示评分分布直方图和评分和评论人数的散点图。如果你希望这两个图像在同一个窗口中显示,可以将绘图函数放在同一个 `plt.figure()` 中,比如:
```
import pymongo
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
# 连接mongodb数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 创建数据库
db = client["douban_book"]
# 创建集合
collection = db["books"]
# 使用聚合框架查询评分分布
pipeline = [
{'$group': {'_id': '$rating', 'count': {'$sum': 1}}},
{'$sort': {'_id': 1}}
]
result = collection.aggregate(pipeline)
# 绘制评分分布直方图
x = []
y = []
for r in result:
x.append(r['_id'])
y.append(r['count'])
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.bar(x, y)
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Rating Distribution')
# 使用聚合框架查询评分和评论人数
pipeline = [
{'$project': {'_id': 0, 'rating': 1, 'comments': 1}},
{'$sort': {'rating': 1}}
]
result = collection.aggregate(pipeline)
# 绘制评分和评论人数的散点图
x = []
y = []
for r in result:
x.append(r['rating'])
y.append(r['comments'])
plt.subplot(122)
plt.scatter(x, y)
plt.xlabel('Rating')
plt.ylabel('Comments')
plt.title('Rating vs. Comments')
plt.show()
```
这里使用 `plt.figure(figsize=(10, 5))` 创建一个大小为 10x5 的绘图窗口,并使用 `plt.subplot(121)` 和 `plt.subplot(122)` 将两个图像放在同一个窗口中的不同区域,然后使用 `plt.show()` 显示窗口。
阅读全文