You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib结合Pymongo绘制JSON数据中borough的直方图?

使用Matplotlib结合Pymongo绘制Borough字段分布直方图

以下是在Jupyter笔记本环境中,从MongoDB提取数据并生成可视化的完整步骤:

1. 导入依赖库

先加载需要的工具包:

import matplotlib.pyplot as plt
from pymongo import MongoClient
from collections import Counter

如果是Jupyter笔记本,记得先运行%matplotlib inline让图表直接显示在单元格中。

2. 连接MongoDB并获取数据

假设你的MongoDB运行在本地默认端口,目标数据库为test,集合为restaurants(根据你的实际情况修改参数):

# 建立MongoDB连接
client = MongoClient('mongodb://localhost:27017/')
db = client['test']
collection = db['restaurants']

# 提取所有非空的borough字段值(避免缺失值干扰统计)
boroughs = [doc['borough'] for doc in collection.find(
    {'borough': {'$ne': None}},  # 过滤掉没有borough字段的文档
    {'borough': 1, '_id': 0}     # 只返回borough字段,提高查询效率
)]

3. 统计字段分布

用Counter快速统计每个borough的出现次数:

borough_counts = Counter(boroughs)
# 拆分分类标签和对应计数
labels = list(borough_counts.keys())
counts = list(borough_counts.values())

如果数据量很大,推荐用MongoDB的聚合查询直接在数据库端统计(更高效):

# 聚合查询统计分布
pipeline = [
    {'$match': {'borough': {'$ne': None}}},
    {'$group': {'_id': '$borough', 'count': {'$sum': 1}}},
    {'$sort': {'count': -1}}  # 按计数降序排列
]
results = list(collection.aggregate(pipeline))

# 解析聚合结果
labels = [res['_id'] for res in results]
counts = [res['count'] for res in results]

4. 绘制可视化图表

由于borough是分类变量,用条形图比直方图更直观(直方图更适合连续数值),代码如下:

# 设置图表大小
plt.figure(figsize=(10, 6))

# 绘制条形图
plt.bar(labels, counts, color='#87CEEB', edgecolor='black')

# 添加图表元素
plt.title('Borough字段分布统计', fontsize=14, pad=15)
plt.xlabel('行政区', fontsize=12)
plt.ylabel('出现次数', fontsize=12)

# 旋转x轴标签,避免文字重叠
plt.xticks(rotation=45, ha='right')

# 在每个柱子上方标注具体数值
for idx, count in enumerate(counts):
    plt.text(idx, count + 5, str(count), ha='center', fontsize=10)

# 自动调整布局,防止标签被截断
plt.tight_layout()

# 显示图表
plt.show()

如果一定要绘制直方图(不推荐分类变量使用),可以替换绘图部分为:

plt.figure(figsize=(10, 6))
plt.hist(boroughs, bins=len(labels), edgecolor='black', color='#87CEEB')
plt.title('Borough字段直方图', fontsize=14)
plt.xlabel('行政区', fontsize=12)
plt.ylabel('频数', fontsize=12)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Máximo Ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:10:30