Put the final touches on something
- 131 python-docx - 创建和修改文档的库
- 基本功能
- 主要类和方法
- 示例
- 132 NetworkX - 网络分析和图论工具
- 示例1: 小世界网络
- 示例2:社交网络分析
- 示例3:交通网络分析
- 133 Statsmodels - 统计建模和计量经济学
- 示例1:线性回归的残差分析
- 示例2:年龄、性别、治疗组的Cox 比例风险模型
- 示例3:年龄、性别和购买意向之间的卡方检验
- 134 Openpyxl - Excel 文件读写库
- 示例1: 创建Excel 文件、写入数据并读取数据
- 示例2: 将多个数据写入不同的工作表
- 示例3: 表格编辑
- 合并单元格
- 插入公式
- 创建图表
- 135 Tqdm - 进度条显示库,适合长时间运行的任务
- 与列表或其他可迭代对象结合使用
- 嵌套进度条
- 处理大文件
- 附 calendar - 日历(漏了的Python自带包)
喝了这碗,还有一碗,就该上道了
运行系统:macOS Sonoma 14.6.1
Python编译器:PyCharm 2024.1.4 (Community Edition)
Python版本:3.12
往期链接:
1-5 | 6-10 | 11-20 | 21-30 | 31-40 | 41-50 |
---|
51-60:函数 | 61-70:类 | 71-80:编程范式及设计模式 |
---|
81-90:Python编码规范 | 91-100:Python自带常用模块-1 |
---|
101-105:Python自带模块-2 | 106-110:Python自带模块-3 |
---|
111-115:Python常用第三方包-频繁使用 | 116-120:Python常用第三方包-深度学习 |
---|
121-125:Python常用第三方包-爬取数据 | 126-130:Python常用第三方包-为了乐趣 |
---|
本文只介绍每个包主要做什么及一些比较经典的示例。对于包的进一步学习,推荐参考对应包的官方文档。
pythondocx___30">131 python-docx - 创建和修改文档的库
python-docx版本1.1.2,官方文档
python-docx 是一个用于创建和修改 Microsoft Word 2007 及以上版本(.docx 格式)文档的 Python 库。它允许用户以编程方式生成复杂的文档,支持文本、样式、图像、表格等多种内容。
基本功能
- 创建新文档。
- 读取和修改现有文档。
- 添加段落、标题、列表、表格、图像等。
- 设置文本格式(如加粗、斜体、字体大小等)。
- 导出文档为 .docx 格式。
主要类和方法
- Document:主类,用于创建和操作文档。
(1) add_paragraph(text): 添加段落。
(2) add_heading(text, level): 添加标题。
(3)add_table(rows, cols): 添加表格。
(4)add_picture(image_path): 添加图片。
(5)save(file_path): 保存文档。 - Paragraph:代表文档中的段落。
- Run:代表段落中的文本块,可以设置不同的样式。
- Table:代表文档中的表格。
示例
python">from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT# 创建文档
doc = Document()# 添加标题
doc.add_heading('项目报告', level=1)# 添加作者和日期
doc.add_paragraph('作者:张三')
doc.add_paragraph('日期:2024年9月12日')# 添加简介段落
doc.add_heading('简介', level=2)
intro = doc.add_paragraph('本项目旨在开发一个用于管理和跟踪项目的应用程序。''我们的目标是提高团队的协作效率和项目管理能力。'
)# 添加有序列表
doc.add_heading('项目目标', level=2)
goals = doc.add_paragraph('1. 提升团队协作能力', style='ListNumber')
goals.add_run('\n2. 提高项目管理效率').bold = True
goals.add_run('\n3. 实现任务的可视化跟踪')# 添加无序列表
doc.add_heading('关键功能', level=2)
doc.add_paragraph('• 任务分配', style='ListBullet')
doc.add_paragraph('• 进度跟踪', style='ListBullet')
doc.add_paragraph('• 报告生成', style='ListBullet')# 添加表格
doc.add_heading('项目时间表', level=2)
table = doc.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '阶段'
hdr_cells[1].text = '开始日期'
hdr_cells[2].text = '结束日期'
hdr_cells[3].text = '责任人'# 添加数据到表格
data = [('需求分析', '2024-01-01', '2024-01-15', 'Alice'),('设计阶段', '2024-01-16', '2024-02-01', 'Bob'),('开发阶段', '2024-02-02', '2024-04-01', 'Charlie'),('测试阶段', '2024-04-02', '2024-05-01', 'David'),
]for stage, start, end, person in data:row_cells = table.add_row().cellsrow_cells[0].text = stagerow_cells[1].text = startrow_cells[2].text = endrow_cells[3].text = person# 设置表格样式
for row in table.rows:for cell in row.cells:cell.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 添加图片
doc.add_heading('项目示意图', level=2)
doc.add_picture('example.png', width=Inches(5)) # 确保该图片文件存在# 添加总结段落
doc.add_heading('总结', level=2)
doc.add_paragraph('通过本项目的实施,我们期望能够显著提高团队的协作效率和项目管理能力。'
)# 保存文档
doc.save('project_report.docx')
132 NetworkX - 网络分析和图论工具
NetworkX版本3.3,官方文档
NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它提供了丰富的功能来处理图(图论中的数学结构)和网络,包括图的生成、分析、可视化等。主要模块:
- 图的创建与操作
(1)创建无向图、有向图和权重图。
(2)添加和删除节点和边。 - 图的属性
(1)节点和边的属性可以通过字典形式存储。
(2)支持多种图类型,如简单图、重图、带权图等。 - 图的分析
提供多种算法,如最短路径算法、连通性、中心性、聚类系数等。 - 图的可视化
使用 Matplotlib 或其他库进行图的可视化。 - 图的生成
提供多种图生成模型,如随机图、巴拉巴西-阿尔伯特模型等。
示例1: 小世界网络
python">import networkx as nx
import matplotlib.pyplot as plt# 1. 创建一个 Watts-Strogatz 小世界网络
n = 100 # 节点数
k = 6 # 每个节点连接的邻居数
p = 0.1 # 重连概率
G = nx.watts_strogatz_graph(n, k, p)# 2. 计算网络指标
degree_centrality = nx.degree_centrality(G)# 3. 可视化网络
plt.figure(figsize=(12, 10))# 使用 spring 布局
pos = nx.spring_layout(G, seed=42)# 根据中心性设置节点大小和颜色
node_sizes = [v * 1000 for v in degree_centrality.values()]
node_colors = [degree_centrality[node] for node in G.nodes()]# 绘制边
nx.draw_networkx_edges(G, pos, alpha=0.5, edge_color='gray')# 绘制节点
nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color=node_colors, cmap=plt.cm.viridis)# 添加 colorbar
sm = plt.cm.ScalarMappable(cmap=plt.cm.viridis, norm=plt.Normalize(vmin=min(node_colors), vmax=max(node_colors)))
sm.set_array([]) # 必须设置数组
cbar = plt.colorbar(sm, ax=plt.gca(), label='Degree Centrality')# 添加标签
nx.draw_networkx_labels(G, pos, font_size=8)# 设置标题
plt.title('Watts-Strogatz Small-World Network Visualization', fontsize=16)
plt.axis('off') # 关闭坐标轴
plt.show()
示例2:社交网络分析
python">import networkx as nx
import matplotlib.pyplot as plt# 1. 创建一个社交网络
G = nx.Graph()# 添加节点(用户)
users = ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy']
G.add_nodes_from(users)# 添加边(朋友关系)
edges = [('Alice', 'Bob'),('Alice', 'Charlie'),('Bob', 'David'),('Charlie', 'David'),('Charlie', 'Eve'),('David', 'Frank'),('Eve', 'Grace'),('Frank', 'Grace'),('Grace', 'Heidi'),('Heidi', 'Ivan'),('Judy', 'Alice'),('Judy', 'Bob'),
]
G.add_edges_from(edges)# 2. 计算网络指标
degree_centrality = nx.degree_centrality(G)# 3. 可视化网络
plt.figure(figsize=(10, 8))# 使用 spring 布局
pos = nx.spring_layout(G, seed=42)# 根据中心性设置节点大小和颜色
node_sizes = [v * 1000 for v in degree_centrality.values()]
node_colors = [degree_centrality[node] for node in G.nodes()]# 绘制边
nx.draw_networkx_edges(G, pos, alpha=0.5, edge_color='gray')# 绘制节点
nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color=node_colors, cmap=plt.cm.viridis)# 添加 colorbar
sm = plt.cm.ScalarMappable(cmap=plt.cm.viridis, norm=plt.Normalize(vmin=min(node_colors), vmax=max(node_colors)))
sm.set_array([]) # 必须设置数组
cbar = plt.colorbar(sm, ax=plt.gca(), label='Degree Centrality')# 添加标签
nx.draw_networkx_labels(G, pos, font_size=10)# 标注最重要的节点
top_nodes = sorted(degree_centrality.items(), key=lambda x: x[