本文目录导读:

- 场景一:使用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)或更复杂的统计逻辑,请补充说明。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播