Python数据可视化实战:从Excel读取数据并生成图表(Java程序员必看)
·
Python数据可视化实战:从Excel读取数据并生成图表
🎯 适合人群:Python初学者 / 有Java基础的开发者 ⏱️ 预计耗时:30分钟完成学习 + 实践
📚 学习目标
通过这个实战项目,你将掌握:
- Python读取Excel文件的方法
- Pandas数据处理基础
- Matplotlib图表绘制
- 与Java IO操作的对比理解
1️⃣ 环境准备
安装依赖库
# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # macOS/Linux
# venv\\Scripts\\activate # Windows
# 安装必要的库
pip install pandas openpyxl matplotlib
依赖说明
| 库 | 作用 | Java类比 | |---|------|----------| | pandas | 数据处理 | 类似 Apache POI + Stream API | | openpyxl | 读写xlsx文件 | 类似 Apache POI | | matplotlib | 图表绘制 | 类似 JFreeChart |
2️⃣ 完整代码示例
📄 excel_to_chart.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python Excel数据可视化实战
"""
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
# ============================================================
# 第一部分:创建示例Excel文件
# ============================================================
def create_sample_excel(file_path: str) -> None:
"""
创建示例Excel文件,包含销售数据
"""
# 模拟月度销售数据
data = {
'月份': ['1月', '2月', '3月', '4月', '5月', '6月',
'7月', '8月', '9月', '10月', '11月', '12月'],
'销售额': [12000, 15000, 18000, 16000, 22000, 25000,
28000, 26000, 24000, 30000, 32000, 35000],
'成本': [8000, 10000, 12000, 11000, 15000, 17000,
19000, 18000, 16000, 20000, 22000, 24000],
'利润': [4000, 5000, 6000, 5000, 7000, 8000,
9000, 8000, 8000, 10000, 10000, 11000],
'部门': ['华东', '华东', '华南', '华南', '华北', '华北',
'华东', '华东', '华南', '华南', '华北', '华北']
}
# 创建DataFrame
df = pd.DataFrame(data)
# 写入Excel
df.to_excel(file_path, index=False, sheet_name='销售数据')
print(f"✅ 示例Excel文件已创建:{file_path}")
# ============================================================
# 第二部分:读取Excel数据
# ============================================================
def read_excel_data(file_path: str) -> pd.DataFrame:
"""
读取Excel文件数据
"""
try:
df = pd.read_excel(file_path, sheet_name='销售数据')
print(f"📊 成功读取数据,共 {len(df)} 行,{len(df.columns)} 列")
print(f"📋 列名:{list(df.columns)}")
print(f"\\n📈 数据预览(前5行):")
print(df.head())
return df
except FileNotFoundError:
print(f"❌ 文件不存在:{file_path}")
raise
# ============================================================
# 第三部分:数据处理
# ============================================================
def process_data(df: pd.DataFrame) -> dict:
"""
数据处理和分析
"""
processed = {}
# 基础统计
processed['total_sales'] = df['销售额'].sum()
processed['total_profit'] = df['利润'].sum()
processed['avg_sales'] = df['销售额'].mean()
processed['profit_margin'] = (processed['total_profit'] / processed['total_sales']) * 100
# 按部门分组统计
processed['sales_by_dept'] = df.groupby('部门')['销售额'].sum()
processed['profit_by_dept'] = df.groupby('部门')['利润'].sum()
return processed
# ============================================================
# 第四部分:生成图表
# ============================================================
def create_charts(df: pd.DataFrame, processed: dict, output_dir: str) -> None:
"""
生成多种图表
"""
Path(output_dir).mkdir(parents=True, exist_ok=True)
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 图表1:月度销售额柱状图
fig, ax = plt.subplots(figsize=(12, 6))
ax.bar(df['月份'], df['销售额'], color='#2E86AB', alpha=0.8)
ax.set_title('月度销售额', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig(f'{output_dir}/01_月度销售额.png', dpi=150)
plt.close()
# 图表2:趋势折线图
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(df['月份'], df['销售额'], 'o-', linewidth=2, markersize=8)
ax.fill_between(df['月份'], df['销售额'], alpha=0.1)
ax.set_title('销售额趋势', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig(f'{output_dir}/02_销售额趋势.png', dpi=150)
plt.close()
# 图表3:部门饼图
fig, ax = plt.subplots(figsize=(8, 8))
colors = ['#2E86AB', '#A23B72', '#F18F01']
ax.pie(processed['sales_by_dept'], labels=processed['sales_by_dept'].index,
autopct='%1.1f%%', colors=colors, shadow=True, startangle=90)
ax.set_title('部门销售占比', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig(f'{output_dir}/03_部门占比.png', dpi=150)
plt.close()
print(f"📊 图表已保存到 {output_dir}/")
# ============================================================
# 主函数
# ============================================================
def main():
print("=" * 50)
print("🚀 Python Excel数据可视化实战")
print("=" * 50)
excel_input = 'data/sales_data.xlsx'
chart_output = 'output/charts'
Path('data').mkdir(exist_ok=True)
# 创建示例数据
if not Path(excel_input).exists():
create_sample_excel(excel_input)
# 读取数据
df = read_excel_data(excel_input)
# 数据处理
processed = process_data(df)
# 生成图表
create_charts(df, processed, chart_output)
print("\n✅ 完成!")
if __name__ == '__main__':
main()
3️⃣ 运行方式
python excel_to_chart.py
4️⃣ Java vs Python 对比
| 操作 | Java (POI) | Python (pandas) | |------|-----------|------------------| | 读取Excel | 30+ 行代码 | 1行代码 | | 分组统计 | Stream + Collectors | df.groupby() | | 保存文件 | Workbook + 循环写入 | df.to_excel() |
Python的优势:代码量少、语法简洁、数据分析生态丰富
5️⃣ 总结
本文介绍了Python处理Excel数据并生成图表的完整流程:
- 使用pandas读取和处理Excel数据
- 使用matplotlib绘制多种图表
- 代码简洁易懂,适合有Java基础的开发者学习
完整代码已提供,可直接运行!
更多推荐



所有评论(0)