第4章 财务数据处理与可视化

第4章 财务数据处理与可视化

4.1 数据处理

4.1.1 数据清洗

  • 缺失值处理
  • 异常值检测
  • 数据标准化
import pandas as pd
import numpy as np

# 财务数据清洗示例
def clean_financial_data(df):
    # 处理缺失值
    df = df.fillna(method='ffill')  # 前向填充
    
    # 检测异常值
    df = df[(df['Revenue'] > 0) & (df['Expenses'] > 0)]
    
    # 数据标准化
    df['Revenue'] = (df['Revenue'] - df['Revenue'].mean()) / df['Revenue'].std()
    df['Expenses'] = (df['Expenses'] - df['Expenses'].mean()) / df['Expenses'].std()
    
    return df

# 示例数据
raw_data = pd.DataFrame({
    'Date': pd.date_range('2024-01-01', periods=5),
    'Revenue': [1000000, np.nan, 1200000, 1300000, 1500000],
    'Expenses': [600000, 700000, 800000, 900000, 1000000]
})

cleaned_data = clean_financial_data(raw_data)
print("清洗后的财务数据:")
print(cleaned_data)

数据结构示例:

字段名类型示例值
Datepd.Timestamp2024-01-01 00:00:00
Revenuefloat1000000.0
Expensesfloat600000.0

4.1.2 数据转换

  • 数据类型转换
  • 数据重塑
  • 数据合并
# 财务数据转换示例
def transform_financial_data(df):
    # 数据类型转换
    df['Date'] = pd.to_datetime(df['Date'])
    
    # 数据重塑
    df_melted = df.melt(id_vars=['Date'],
                       value_vars=['Revenue', 'Expenses'],
                       var_name='Category',
                       value_name='Amount')
    
    # 数据合并
    df_merged = pd.merge(df, df_melted, on='Date')
    
    return df_merged

# 示例
transformed_data = transform_financial_data(cleaned_data)
print("\n转换后的财务数据:")
print(transformed_data)

数据结构示例:

字段名类型示例值
Datepd.Timestamp2024-01-01 00:00:00
CategorystringRevenue
Amountfloat1000000.0

4.1.3 数据聚合

  • 分组统计
  • 数据透视表
  • 时间序列处理
# 财务数据聚合示例
def aggregate_financial_data(df):
    # 分组统计
    monthly_stats = df.resample('M', on='Date').agg({
        'Revenue': ['sum', 'mean'],
        'Expenses': ['sum', 'mean']
    })
    
    # 数据透视表
    pivot_table = pd.pivot_table(
        df,
        values=['Revenue', 'Expenses'],
        index='Date',
        aggfunc=np.sum
    )
    
    # 时间序列处理
    df['Revenue_MA'] = df['Revenue'].rolling(window=3).mean()
    
    return monthly_stats, pivot_table, df

# 示例
monthly_stats, pivot_table, processed_data = aggregate_financial_data(cleaned_data)
print("\n月度统计:")
print(monthly_stats)
print("\n数据透视表:")
print(pivot_table)
print("\n处理后数据:")
print(processed_data)

数据结构示例:

字段名类型示例值
Datepd.Timestamp2024-01-31 00:00:00
Revenue_sumfloat5000000.0
Revenue_meanfloat1250000.0
Expenses_sumfloat4000000.0
Expenses_meanfloat800000.0

4.2 图表结构

4.2.1 基本图表

  • 折线图
  • 柱状图
  • 饼图
import matplotlib.pyplot as plt

# 财务数据可视化示例
def plot_basic_charts(df):
    # 折线图 - 收入与支出趋势
    plt.figure(figsize=(12, 6))
    plt.plot(df['Date'], df['Revenue'], label='收入')
    plt.plot(df['Date'], df['Expenses'], label='支出')
    plt.title('收入与支出趋势')
    plt.xlabel('日期')
    plt.ylabel('金额')
    plt.legend()
    plt.grid(True)
    plt.show()

    # 柱状图 - 月度收入对比
    monthly_revenue = df.resample('M', on='Date')['Revenue'].sum()
    plt.figure(figsize=(10, 6))
    monthly_revenue.plot(kind='bar')
    plt.title('月度收入对比')
    plt.xlabel('月份')
    plt.ylabel('收入')
    plt.show()

    # 饼图 - 支出构成
    expense_categories = ['运营', '研发', '市场']
    expense_values = [400000, 300000, 300000]
    plt.figure(figsize=(8, 8))
    plt.pie(expense_values, labels=expense_categories, autopct='%1.1f%%')
    plt.title('支出构成')
    plt.show()

# 示例
plot_basic_charts(cleaned_data)

数据结构示例:

字段名类型示例值
chart_typestringline
x_axislist[‘2024-01-01’, ‘2024-01-02’, ‘2024-01-03’]
y_axislist[1000000, 1200000, 1300000]
labelslist[‘收入’, ‘支出’]

4.2.2 高级图表

  • 热力图
  • 箱线图
  • 散点图矩阵
import seaborn as sns

# 高级财务图表示例
def plot_advanced_charts(df):
    # 热力图 - 相关性分析
    plt.figure(figsize=(8, 6))
    sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
    plt.title('财务指标相关性分析')
    plt.show()

    # 箱线图 - 收入分布
    plt.figure(figsize=(8, 6))
    sns.boxplot(x=df['Revenue'])
    plt.title('收入分布')
    plt.show()

    # 散点图矩阵
    sns.pairplot(df[['Revenue', 'Expenses', 'Revenue_MA']])
    plt.suptitle('财务指标关系矩阵', y=1.02)
    plt.show()

# 示例
plot_advanced_charts(processed_data)

数据结构示例:

字段名类型示例值
chart_typestringheatmap
datadict{‘Revenue’: [1.0, 0.95], ‘Expenses’: [0.95, 1.0]}
annotationsboolTrue
color_mapstringcoolwarm

4.3 可视化图表

4.3.1 Matplotlib基础

  • 图形绘制
  • 样式设置
  • 子图布局
# 财务仪表板示例
def create_financial_dashboard(df):
    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
    
    # 收入趋势图
    ax1.plot(df['Date'], df['Revenue'], label='收入')
    ax1.set_title('收入趋势')
    ax1.set_ylabel('金额')
    ax1.legend()
    ax1.grid(True)
    
    # 支出构成饼图
    expense_categories = ['运营', '研发', '市场']
    expense_values = [400000, 300000, 300000]
    ax2.pie(expense_values, labels=expense_categories, autopct='%1.1f%%')
    ax2.set_title('支出构成')
    
    plt.tight_layout()
    plt.show()

# 示例
create_financial_dashboard(cleaned_data)

数据结构示例:

字段名类型示例值
dashboard_layoutstring2x1
chartslist[{‘type’: ‘line’, ‘title’: ‘收入趋势’, ‘x_axis’: ‘Date’, ‘y_axis’: ‘Revenue’}, {‘type’: ‘pie’, ‘title’: ‘支出构成’, ‘labels’: [‘运营’, ‘研发’, ‘市场’], ‘values’: [400000, 300000, 300000]}]

4.3.2 Seaborn高级可视化

  • 统计图形
  • 多变量分析
  • 主题设置
# 财务指标关系图
def plot_financial_relationships(df):
    plt.figure(figsize=(12, 6))
    sns.set_theme(style="whitegrid")
    
    # 收入与支出关系
    sns.scatterplot(x='Revenue', y='Expenses', hue='Revenue_MA', data=df)
    plt.title('收入与支出关系')
    plt.xlabel('收入')
    plt.ylabel('支出')
    plt.show()

# 示例
plot_financial_relationships(processed_data)

数据结构示例:

字段名类型示例值
chart_typestringscatter
x_axisstringRevenue
y_axisstringExpenses
huestringRevenue_MA
themestringwhitegrid

4.3.3 Plotly交互式可视化

  • 动态图表
  • 仪表盘创建
  • 网页嵌入
import plotly.express as px
import plotly.graph_objects as go

# 交互式财务仪表板
def create_interactive_dashboard(df):
    # 收入趋势图
    fig1 = px.line(df, x='Date', y='Revenue', title='收入趋势')
    
    # 支出构成饼图
    fig2 = px.pie(values=[400000, 300000, 300000],
                 names=['运营', '研发', '市场'],
                 title='支出构成')
    
    # 创建仪表板
    fig = go.Figure()
    fig.add_trace(fig1.data[0])
    fig.add_trace(fig2.data[0])
    
    fig.update_layout(
        title='财务仪表板',
        grid={'rows': 2, 'columns': 1, 'pattern': 'independent'}
    )
    
    fig.show()

# 示例
create_interactive_dashboard(processed_data)

数据结构示例:

字段名类型示例值
dashboard_typestringinteractive
chartslist[{‘type’: ‘line’, ‘x_axis’: ‘Date’, ‘y_axis’: ‘Revenue’, ‘title’: ‘收入趋势’}, {‘type’: ‘pie’, ‘values’: [400000, 300000, 300000], ‘labels’: [‘运营’, ‘研发’, ‘市场’], ‘title’: ‘支出构成’}]
layoutdict{‘title’: ‘财务仪表板’}

4.3.3 Plotly交互式可视化

  • 动态图表
  • 仪表盘创建
  • 网页嵌入
import plotly.express as px
import plotly.graph_objects as go

# 交互式财务仪表板
def create_interactive_dashboard(df):
    # 收入趋势图
    fig1 = px.line(df, x='Date', y='Revenue', title='收入趋势')
    
    # 支出构成饼图
    fig2 = px.pie(values=[400000, 300000, 300000],
                 names=['运营', '研发', '市场'],
                 title='支出构成')
    
    # 创建仪表板
    fig = go.Figure()
    fig.add_trace(fig1.data[0])
    fig.add_trace(fig2.data[0])
    
    fig.update_layout(
        title='财务仪表板',
        grid={'rows': 2, 'columns': 1, 'pattern': 'independent'}
    )
    
    fig.show()

# 示例
create_interactive_dashboard(processed_data)
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b76070299b3846cd9a9c9a13beeb8aa6.png#pic_center)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值