网站首页 > 技术文章 正文
Python 结合 Excel 进行数据可视化,能将静态数据转化为直观图表,是数据分析中非常关键的技能。下面我将通过五个核心方面,带你掌握如何用 Python 操作 Excel 并进行数据可视化。
首先,用一个表格快速了解常用的 Python 库及其主要用途:
库名称主要功能典型应用场景pandas数据读取、清洗、处理和聚合从 Excel 读取数据,进行数据预处理和转换matplotlib基础绘图,支持多种静态图表类型绘制折线图、柱状图、散点图等基础图表seaborn基于 matplotlib,提供更高级、更美观的统计图表和默认样式绘制分布图、分类图、热力图等复杂统计图表openpyxl直接读写和操作 Excel 文件,包括单元格格式、公式、图表等将 pandas 处理后的数据或 matplotlib 生成的图表写入 Excelxlsxwriter创建和操作 Excel 文件,支持更复杂的图表和格式选项生成带有复杂图表和格式的 Excel 报告plotly创建交互式图表,支持缩放、平移、数据点查看等交互操作制作交互式数据分析图表和应用
接下来,我们深入看看这些库的具体应用。
1. 数据读取与预处理
数据可视化的第一步是获取并清理数据。pandas 是这方面的利器。
读取 Excel 数据:使用 pd.read_excel() 函数可以直接读取 Excel 文件,并将其转换为 DataFrame,这是 pandas 中用于数据操作的核心数据结构。
import pandas as pd # 读取 Excel 文件 df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 可以指定工作表 # 查看数据前几行和基本信息 print(df.head()) print(df.info())
处理缺失值:真实数据常有缺失,pandas 提供了方便的方法处理。
# 删除包含缺失值的行 df_cleaned = df.dropna() # 或用特定值填充缺失值,这里用该列均值填充 df_filled = df.fillna(df.mean())
数据转换:为了后续分析,常需转换数据类型或创建新特征。
# 将字符串日期转换为日期时间类型 df['date_column'] = pd.to_datetime(df['date_column']) # 从日期中提取年份、月份等特征 df['year'] = df['date_column'].dt.year df['month'] = df['date_column'].dt.month
2. 基础与高级静态可视化
matplotlib 是 Python 最基础的绘图库,seaborn 在其基础上提供了更美观的高级接口。
使用 matplotlib 绘制基础图表:
import matplotlib.pyplot as plt # 折线图:展示数据随时间的变化趋势 plt.figure(figsize=(10, 6)) # 设置图片大小 plt.plot(df['date'], df['value'], marker='o', linestyle='-', color='b') # 折线图,带数据点 plt.title('Sales Trend Over Time') # 标题 plt.xlabel('Date') # X轴标签 plt.ylabel('Sales') # Y轴标签 plt.xticks(rotation=45) # 旋转X轴刻度标签以避免重叠 plt.grid(True, alpha=0.3) # 显示网格线,设置透明度 plt.tight_layout() # 自动调整子图参数以填充整个图像区域 plt.savefig('sales_trend.png', dpi=300) # 保存图片,设置分辨率 plt.show() # 显示图片
使用 seaborn 绘制高级统计图表:Seaborn 的 API 通常更简洁,默认样式更美观。
import seaborn as sns # 设置 seaborn 样式 sns.set_style("whitegrid") # 柱状图:比较不同类别的数据 plt.figure(figsize=(10, 6)) sns.barplot(x='category_column', y='value_column', data=df, palette='viridis') # palette设置颜色映射 plt.title('Average Value by Category') plt.xlabel('Category') plt.ylabel('Average Value') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('category_avg_value.png', dpi=300) plt.show() # 箱线图:查看数据分布和离群点 plt.figure(figsize=(10, 6)) sns.boxplot(x='category_column', y='value_column', data=df) plt.title('Distribution of Value by Category') plt.xlabel('Category') plt.ylabel('Value') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('
category_value_boxplot.png', dpi=300) plt.show()
3. 创建交互式图表
plotly 库可以创建丰富的交互式图表,用户能够缩放、平移、悬停查看数据点具体信息等。
安装与基础交互式图表:
# 安装:pip install plotly import plotly.express as px # 创建一个交互式折线图 fig = px.line(df, x='date_column', y='value_column', title='Interactive Sales Trend Over Time') fig.show() # 在浏览器中显示交互式图表 # 保存为 HTML 文件,交互性得以保留 fig.write_html("
interactive_sales_trend.html")
更复杂的交互式图表:Plotly Express 接口简洁,支持多种复杂图表。
# 交互式散点图:查看两个变量之间的关系,可用颜色、大小表示第三个变量 fig = px.scatter(df, x='x_column', y='y_column', color='category_column', size='size_column', title='Interactive Scatter Plot', hover_data=['additional_info']) # hover_data 设置悬停显示更多数据 fig.show()
4. 将图表集成到 Excel
有时需要将 Python 生成的图表或处理后的数据放回 Excel 中汇报或分享。
使用 openpyxl 将图片插入 Excel:
from openpyxl import load_workbook from openpyxl.drawing.image import Image # 加载已存在的 Excel 工作簿 workbook = load_workbook('your_excel_file.xlsx') sheet = workbook.active # 获取活动工作表 # 加载 matplotlib 或 seaborn 保存的图片 img = Image('sales_trend.png') # 确保图片路径正确 # 将图片添加到工作表的指定位置(例如 'A10' 单元格附近) sheet.add_image(img, 'A10') # 保存工作簿 workbook.save('
excel_file_with_chart.xlsx')
使用 xlsxwriter 创建带有图表的全新 Excel 文件:XlsxWriter 擅长创建新的 Excel 文件并添加格式、图表等。
import xlsxwriter # 创建一个新的 Excel 工作簿 workbook = xlsxwriter.Workbook('
new_report_with_charts.xlsx') worksheet = workbook.add_worksheet('Sales Data') # 添加工作表 # 将数据写入工作表(示例) # 先写入表头 headers = ['Date', 'Sales'] for col_num, header in enumerate(headers): worksheet.write(0, col_num, header) # 然后写入数据(这里需要将你的数据按行写入) # ... 数据写入逻辑 ... # 创建一个图表对象 chart = workbook.add_chart({'type': 'line'}) # 折线图 # 配置图表数据系列 chart.add_series({ 'categories': '=Sales Data!$A$2:$A$10', # X 轴数据范围 'values': '=Sales Data!$B$2:$B$10', # Y 轴数据范围 'name': 'Sales Trend' # 图例名称 }) # 设置图表标题和坐标轴标签 chart.set_title({'name': 'Monthly Sales Data'}) chart.set_x_axis({'name': 'Date'}) chart.set_y_axis({'name': 'Sales'}) # 将图表插入到工作表的指定位置 worksheet.insert_chart('D2', chart) # 图表左上角位于 D2 单元格 # 关闭工作簿并保存文件 workbook.close()
5. 自动化报告与高级应用
Python 的强大之处在于可以自动化整个数据处理和可视化流程。
自动化脚本示例:将数据读取、处理、可视化、保存和集成到 Excel 的步骤整合到一个脚本中。
import pandas as pd import matplotlib.pyplot as plt from openpyxl import load_workbook from openpyxl.drawing.image import Image import os def generate_automated_report(excel_file_path, output_excel_path): """自动化生成报告并插入图表""" # 1. 读取数据 df = pd.read_excel(excel_file_path) # 2. 数据处理 (示例: 按月份聚合销售数据) df['Date'] = pd.to_datetime(df['Date']) df['Month'] = df['Date'].dt.to_period('M') monthly_sales = df.groupby('Month')['Sales'].sum().reset_index() monthly_sales['Month'] = monthly_sales['Month'].astype(str) # 将Period对象转换为字符串以便绘图 # 3. 创建图表 plt.figure(figsize=(10, 6)) plt.plot(monthly_sales['Month'], monthly_sales['Sales'], marker='o', linestyle='-') plt.title('Monthly Sales Trend') plt.xlabel('Month') plt.ylabel('Total Sales') plt.xticks(rotation=45) plt.tight_layout() chart_image_path = '
monthly_sales_trend_auto.png' plt.savefig(chart_image_path, dpi=300) plt.close() # 关闭图形以释放内存 # 4. 将图表插入到原始的 Excel 文件中 workbook = load_workbook(excel_file_path) sheet = workbook.create_sheet('Monthly Report') # 创建一个新的工作表来放置图表 # 将聚合后的数据写入新工作表 sheet['A1'] = 'Month' sheet['B1'] = 'Total Sales' for idx, row in monthly_sales.iterrows(): sheet.cell(row=idx+2, column=1, value=row['Month']) sheet.cell(row=idx+2, column=2, value=row['Sales']) # 插入图片 img = Image(chart_image_path) sheet.add_image(img, 'D2') # 5. 保存包含图表的新 Excel 文件 workbook.save(output_excel_path) print(f"自动化报告已生成: {output_excel_path}") # 6. (可选) 删除临时的图片文件 # os.remove(chart_image_path) # 使用函数 generate_automated_report('sales_data.xlsx', '
automated_sales_report.xlsx')
定时自动化:利用系统任务计划程序(如 Windows 任务计划程序或 Linux 的 cron)定期运行 Python 脚本,实现报表的自动更新。
Linux/macOS (cron): 使用 crontab -e 编辑定时任务,添加类似 0 9 * * 1 /usr/bin/python3 /path/to/your_script.py 的行,表示每周一上午 9 点运行脚本。
Windows: 使用"任务计划程序"创建基本任务,设置触发器和启动程序为 Python 解释器和脚本路径。
6. 可视化实践建议
图表选择原则:
趋势分析:折线图(时间序列)。
比较分类数据:柱状图、条形图。
构成关系:饼图(部分与整体,注意类别不宜过多)、堆积柱状图。
分布情况:直方图、箱线图、密度图。
变量关系:散点图、气泡图。
多维度对比:雷达图(需谨慎使用,容易误导)。
美化与清晰度:
标题和标签:总是为图表和坐标轴添加清晰易懂的标题和标签。
颜色:选择对比度适中、易于区分的颜色,考虑色盲人群。可使用 matplotlib 的 colormap 或 seaborn 的调色。
图例:当有多条数据系列时,添加图例说明。
避免杂乱:不要在一张图表中塞入过多信息,保持简洁易懂。
希望这些内容能帮助你有效地用 Python 操作 Excel 并进行数据可视化。
猜你喜欢
- 2025-09-21 Python GUI 编程入门教程 第26章:记账本应用升级数据导出CSV/Excel
- 2025-09-21 keras 人工智能之VGGNet神经网络模型训练
- 2025-09-21 Linux下C++程序符号延迟绑定_linux c 延时
- 2025-09-21 NumPy之:多维数组中的线性代数_多维数组可以看作数据元素也是基本线性表的基本线性表
- 2025-09-21 Python GUI 编程入门教程 第23章:记账本应用升级——收支图表分析
- 2025-09-21 动态链接:共享库如何实现“一次编译,多程序调用执行”?
- 2025-09-21 AI电磁组中的NN到底有什么优势?_aim磁场
- 2025-09-21 用pyhon计算布林线,并用matplotlib绘制(Qwen2.5模型生成)
- 2025-09-21 Python GUI 编程入门教程 第35章:记账本应用升级——月度趋势图
- 2025-09-21 Python GUI 编程入门教程 第36章:记账本应用升级——年度对比图
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)