本文目录导读:

- 场景一:使用Python统计(最通用,适合复杂分析)
- 场景二:使用SQL统计(适合有数据库的系统)
- 场景三:使用Shell脚本统计(适合日志文件或简单文本)
- 场景四:使用Excel VBA统计(适合嵌入Excel工作簿)
- 如何选择合适的方案?
- 进阶建议:自动生成报告
要统计图书借阅数据,通常需要根据数据来源(如借阅系统数据库、Excel表格、文本日志等)选择不同的脚本方法,以下是几种常见场景的统计脚本方案,涵盖Python、SQL和Shell脚本。
使用Python统计(最通用,适合复杂分析)
假设你有一个 借阅记录.csv 文件,包含字段:书名, 借书人, 借书日期, 还书日期。
统计目标:
- 总借阅次数
- 最受欢迎的书(借阅次数最多)
- 最活跃的借书人
- 每月借阅量趋势
Python脚本示例 (stats_books.py):
import pandas as pd
from collections import Counter
# 读取数据
df = pd.read_csv('借阅记录.csv')
# 1. 总借阅次数
print(f"总借阅次数: {len(df)}")
# 2. 最受欢迎的书 Top 10
popular_books = df['书名'].value_counts().head(10)
print("\n最受欢迎的书 Top 10:")
print(popular_books)
# 3. 最活跃的借书人 Top 5
active_users = df['借书人'].value_counts().head(5)
print("\n最活跃的借书人 Top 5:")
print(active_users)
# 4. 每月借阅量统计
df['借书日期'] = pd.to_datetime(df['借书日期'])
df['借阅月份'] = df['借书日期'].dt.to_period('M')
monthly_count = df['借阅月份'].value_counts().sort_index()
print("\n每月借阅量:")
print(monthly_count)
# 5. 当前未还的书(假设还书日期为空表示未还)
if '还书日期' in df.columns:
not_returned = df[df['还书日期'].isna() | (df['还书日期'] == '')]
print(f"\n当前未还的书数量: {len(not_returned)}")
print("未还书详情:")
print(not_returned[['书名', '借书人', '借书日期']].head(20))
运行方式:
python stats_books.py
使用SQL统计(适合有数据库的系统)
假设数据库表名为 borrow_records,字段同上。
统计目标:
- 总借阅次数
- 最受欢迎的书
- 每月借阅量
SQL查询脚本:
-- 1. 总借阅次数 SELECT COUNT(*) AS total_borrows FROM borrow_records; -- 2. 最受欢迎的书 Top 10 SELECT book_name, COUNT(*) AS borrow_times FROM borrow_records GROUP BY book_name ORDER BY borrow_times DESC LIMIT 10; -- 3. 每月借阅量 SELECT DATE_FORMAT(borrow_date, '%Y-%m') AS month, COUNT(*) AS total FROM borrow_records GROUP BY month ORDER BY month; -- 4. 当前未还的书(假设return_date为NULL表示未还) SELECT * FROM borrow_records WHERE return_date IS NULL;
执行方式(命令行):
mysql -u 用户名 -p 数据库名 -e "SELECT ..."
或使用DBeaver、Navicat等客户端工具执行。
使用Shell脚本统计(适合日志文件或简单文本)
假设有一个日志文件 borrow.log,每行格式:书名|借书人|日期
Shell脚本示例 (stats.sh):
#!/bin/bash LOG_FILE="borrow.log" echo "=== 借阅数据统计 ===" # 1. 总借阅次数 total=$(wc -l < "$LOG_FILE") echo "总借阅次数: $total" # 2. 最受欢迎的书 Top 5 echo "最受欢迎的书 Top 5:" cut -d'|' -f1 "$LOG_FILE" | sort | uniq -c | sort -rn | head -5 # 3. 最活跃的借书人 Top 5 echo "最活跃的借书人 Top 5:" cut -d'|' -f2 "$LOG_FILE" | sort | uniq -c | sort -rn | head -5 # 4. 统计每天借阅量 echo "每天借阅量:" cut -d'|' -f3 "$LOG_FILE" | sort | uniq -c | sort -k2
运行方式:
chmod +x stats.sh ./stats.sh
使用Excel VBA统计(适合嵌入Excel工作簿)
如果你将数据放在Excel中,可以写VBA宏来自动统计。
VBA代码示例:
- 按
Alt + F11打开VBA编辑器 - 插入模块,粘贴以下代码:
Sub 统计借阅数据()
Dim ws As Worksheet
Dim lastRow As Long
Dim dict As Object
Dim key As Variant
Set ws = ThisWorkbook.Sheets("借阅记录")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set dict = CreateObject("Scripting.Dictionary")
' 统计每本书的借阅次数
For i = 2 To lastRow
bookName = ws.Cells(i, 1).Value ' 假设书名在A列
If dict.exists(bookName) Then
dict(bookName) = dict(bookName) + 1
Else
dict.Add bookName, 1
End If
Next i
' 输出结果到新工作表
Sheets.Add
Range("A1").Value = "书名"
Range("B1").Value = "借阅次数"
r = 2
For Each key In dict.Keys
Cells(r, 1).Value = key
Cells(r, 2).Value = dict(key)
r = r + 1
Next key
' 按借阅次数降序排列
Range("A1:B" & r - 1).Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlYes
MsgBox "统计完成!结果已输出到新工作表。"
End Sub
如何选择合适的方案?
| 数据来源 | 推荐方案 | 原因 |
|---|---|---|
| 图书馆管理系统数据库 | SQL | 直接查询,效率高 |
| Excel表格 | Python或VBA | Python处理大文件,VBA方便嵌入 |
| 日志文件(文本) | Shell脚本或Python | 快速,无需安装额外软件 |
| 需要进行可视化/图表 | Python + Matplotlib | 可直接生成统计图 |
进阶建议:自动生成报告
如果你需要定期统计,可以考虑将Python脚本设置为定时任务(Windows任务计划程序 / Linux cron),自动将结果保存为Excel或PDF报告。
# 在Python脚本末尾添加导出功能
monthly_count.to_excel('月度借阅统计.xlsx')
print("报告已生成!")
根据你的实际数据格式和统计需求,选择最适合的方案即可,如果需要针对特定数据格式(如JSON、XML)或更复杂的统计逻辑,请补充说明。