Python零基础通关教程(八):数据可视化实战(让自动化报告更专业)

一、知识衔接:从数据处理到可视化呈现

前七篇核心能力
✅ 自动化报表生成 ✅ 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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值