数据动态展现:python柱状赛车动画制作教程

生成柱状赛车动画

在此代码示例中,我们将展示如何从 SQLite 数据库中读取数据,并使用 bar_chart_race 库来创建一个吸引人的柱状赛车动画。以下是代码的主要部分和它们的作用:

  1. 导入必要的库:

    • numpypandas:用于数据处理和分析。
    • sqlite3:用于连接 SQLite 数据库并读取数据。
    • bar_chart_race:用于生成柱状赛车动画。
    • matplotlib.pyplot:用于基本的图形绘制。
    • moviepy.editorspeedx:用于将生成的 GIF 转换为 MP4 格式,并调整视频播放速度。
    • os:用于处理文件路径和删除不必要的文件。
  2. 定义数据读取函数 read_data_from_db:
    此函数连接到 SQLite 数据库,读取指定的数据表,并对数据进行基本处理,例如重命名列名和设置索引。

  3. 定义生成柱状赛车图动画的函数 create_bar_chart_race:
    此函数读取数据,准备数据,并使用 bar_chart_race 库来生成柱状赛车动画。它还将生成的 GIF 转换为 MP4 格式,并允许用户通过参数调整动画的播放速度和背景颜色。

  4. 主函数:
    在主函数中,我们调用 create_bar_chart_race 函数,并为它提供必要的参数,以生成并保存柱状赛车动画。

下面是完整的代码:

# 生成柱状赛车动画

该代码示例展示了如何从SQLite数据库读取数据并使用`bar_chart_race`库来创建一个柱状赛车动画。

```python
# 导入必要的库
import numpy as np
import pandas as pd
import sqlite3
import bar_chart_race as bcr
import matplotlib.pyplot as plt
import moviepy.editor as mp
import os
from moviepy.video.fx.all import speedx

# 定义从数据库读取并处理数据的函数
def read_data_from_db(table_name, column_name=None):
    # 连接数据库
    conn = sqlite3.connect(r'D:\wenjian\python\smart\data\req_data.db')

    # 读取数据表
    query = f"SELECT * FROM {table_name}"
    dfdata = pd.read_sql_query(query, conn)

    # 关闭数据库连接
    conn.close()

    # 修改列名称,将指定列重命名为"date"
    dfdata = dfdata.rename({column_name: "date"}, axis=1)

    # 将数据舍入到三位小数
    for col in dfdata.columns:
        if col != "date":
            dfdata.loc[:, col] = np.round(dfdata.loc[:, col], 3)

    # 设置日期列为索引
    dfdata.set_index("date")

    return dfdata

# 定义生成柱状赛车图动画的函数
def create_bar_chart_race(table_name, column_name=None, filename=None, title="", dpi=300, speed=1, bgcolor='white'):
    """
    参数:
        table_name: 数据库表名
        column_name: 作为日期的列名
        filename: 输出文件的名称,如果提供,则保存为MP4文件,否则在Jupyter Notebook中以交互方式显示
        title: 图表的标题
        dpi: 图表的像素密度,每英寸的点数
        speed: 视频播放速度
        bgcolor: 背景颜色
    """
    # 读取数据
    df = read_data_from_db(table_name, column_name)

    # 数据准备,设置日期为索引,并且删除日期列
    df.set_index('date', inplace=True)
    df.index = pd.to_datetime(df.index)

    # 设置中文显示和背景颜色
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.facecolor'] = bgcolor

    # 使用 bar_chart_race 生成条形图赛跑图
    bcr.bar_chart_race(df, filename=filename+'.gif', title=title, dpi=dpi)

    # 将 GIF 文件转换为 MP4 文件
    clip = mp.VideoFileClip(filename+'.gif')
    clip = speedx(clip, factor=speed)  # 调整视频播放速度
    clip.write_videofile(filename+'.mp4')

    # 删除 GIF 文件
    os.remove(filename+'.gif')

# 调用函数
if __name__ == '__main__':
    # 参数分别是数据库表的名称、X轴的列、导出文件的名称、动画的标题、分辨率、动画播放速度、背景颜色
    create_bar_chart_race('测试2', '年份', '测试', title="测试2",  dpi=300, speed=2)

标题建议

  1. 数据可视化实战:创建柱状赛车动画
  2. 动态展示数据竞争:柱状赛车动画制作
  3. 从数据库到动画:制作柱状赛车图
  4. 数据动态展现:柱状赛车动画制作教程
  5. 创造视觉冲击:柱状赛车动画的制作与应用

标签建议

  • 数据可视化
  • 柱状赛车图
  • 数据处理
  • 数据动画
  • 数据库操作
  • 动态图表
THE END