一、知识衔接:从数据处理到可视化呈现
前七篇核心能力:
✅ 自动化报表生成 ✅ Excel/Word/PDF操作 ✅ 数据持久化
二、环境准备:安装可视化库
1. 安装必备库(国内镜像加速)
# 基础绘图库
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
# 交互式可视化库
pip install plotly -i https://pypi.tuna.tsinghua.edu.cn/simple
# 表格美化库
pip install prettytable -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 验证安装成功
import matplotlib.pyplot as plt
import plotly.express as px
from prettytable import PrettyTable
print("所有库导入成功!")
三、Matplotlib基础:绘制专业图表
1. 折线图(情绪趋势分析)
def plot_mood_trend(dates, scores):
plt.figure(figsize=(10, 5))
plt.plot(dates, scores, marker='o', linestyle='--', color='#2c7fb8')
# 美化设置
plt.title('月度情绪趋势', fontsize=14, fontproperties='SimHei')
plt.xlabel('日期', fontproperties='SimHei')
plt.ylabel('情绪分数', fontproperties='SimHei')
plt.xticks(rotation=45)
plt.grid(alpha=0.3)
# 保存图片
plt.savefig('mood_trend.png', dpi=300, bbox_inches='tight')
plt.close()
2. 饼图(日记类型分布)
def plot_type_pie(labels, sizes):
colors = ['#66c2a5','#fc8d62','#8da0cb']
explode = (0.05,) * len(labels) # 分离效果
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)
plt.axis('equal') # 正圆形
plt.savefig('diary_pie.png', transparent=True)
plt.close()
四、Plotly实战:生成交互式图表
1. 动态柱状图
import plotly.express as px
def interactive_bar_chart(data):
fig = px.bar(data, x='date', y='word_count',
title='每日日记字数统计',
color='word_count',
color_continuous_scale='Blues')
fig.update_layout(
font=dict(family='Microsoft YaHei', size=12),
plot_bgcolor='rgba(240,240,240,0.9)'
)
fig.write_html("word_count.html")
2. 词云图(需额外安装库)
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
from wordcloud import WordCloud
def generate_wordcloud(text):
wc = WordCloud(
font_path='msyh.ttc', # 指定中文字体
background_color='white',
max_words=200,
width=800,
height=600
).generate(text)
wc.to_file('wordcloud.png')
五、自动化嵌入图表到报告
1. Excel报告增强版
from openpyxl.drawing.image import Image
def add_chart_to_excel():
wb = openpyxl.load_workbook('diary_report.xlsx')
ws = wb.active
# 插入折线图
img = Image('mood_trend.png')
img.width, img.height = 600, 300
ws.add_image(img, 'E2')
# 插入词云
wc_img = Image('wordcloud.png')
wc_img.width, wc_img.height = 400, 300
ws.add_image(wc_img, 'E20')
wb.save('enhanced_report.xlsx')
2. Word报告增强版
from docx.shared import Cm
def add_chart_to_word():
doc = Document('monthly_summary.docx')
# 添加图表标题
doc.add_heading('可视化分析', level=1)
# 插入趋势图
doc.add_picture('mood_trend.png', width=Cm(14))
# 插入饼图
doc.add_picture('diary_pie.png', width=Cm(10))
doc.save('enhanced_summary.docx')
六、综合实战:智能报告生成系统
class SmartReportGenerator:
def __init__(self, data):
self.data = data
self.analyze_data()
def analyze_data(self):
# 情感分析(简化示例)
self.dates = [d['time'][:10] for d in self.data['diaries']]
self.word_counts = [len(d['content']) for d in self.data['diaries']]
self.sentiments = [len(d['content'])%5+1 for d in self.data['diaries']] # 模拟情感分数
def generate_full_report(self):
# 生成基础报表
create_excel_report(self.data)
create_word_summary(self.data)
# 生成可视化图表
plot_mood_trend(self.dates, self.sentiments)
plot_type_pie(['工作', '生活', '学习'], [30, 50, 20])
generate_wordcloud(" ".join([d['content'] for d in self.data['diaries']]))
# 嵌入图表
add_chart_to_excel()
add_chart_to_word()
# 打包文件
import zipfile
with zipfile.ZipFile('final_report.zip', 'w') as zipf:
zipf.write('enhanced_report.xlsx')
zipf.write('enhanced_summary.docx')
zipf.write('wordcloud.png')
print("智能报告包已生成!")
七、避坑指南
1. 中文显示解决方案
# Matplotlib全局设置
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# Plotly中文字体设置
fig.update_layout(font=dict(family="Microsoft YaHei"))
2. 图表模糊问题优化
# 保存高清图片
plt.savefig('output.png', dpi=300, bbox_inches='tight')
# 矢量图格式
plt.savefig('output.svg') # 适合论文出版
学习路线建议
1. 今日实践任务
# 任务:为日记本系统添加可视化功能
# 要求:
# - 自动生成月度情绪折线图
# - 在Word总结中插入词云图
# - 导出包含所有图表的ZIP包
# 提示:可复用第七篇的ReportGenerator类
2. 效率技巧
-
使用
plt.style.use('ggplot')
一键切换专业绘图风格 -
用
fig.write_image()
直接导出Plotly图表到文件
import kaleido
fig.write_image("chart.png", engine="kaleido")