编程学习网 > 编程语言 > Python > 50行python代码,打造一个AI图表生成器教程
2023
10-20

50行python代码,打造一个AI图表生成器教程

今天给大家分享如何使用 50行 python 代码构建一个 AI 图表生成器,只需要上传文件,就可以自动生成相应的图表。

概述
为了以最合适的图表类型来展示数据,通常我们必须依靠人工分析来选择图表类型,或者将分析过程整合到复杂的软件代码中,根据无数的条件生成图表。
如今,借助人工智能的功能,我们可以轻松构建复杂的应用程序,以根据数据特征和语言模型决策中的用户偏好生成最具适应性的图表。
通过利用 GPT-3.5 或 GPT-4 模型以及 Langchain 框架,代码规模可以减少至 50 行 Python 代码。
代码实现
现在,让我们逐步剖析 AI 图表生成器的实现过程。

1、安装库
可以直接使用 pip 进行安装
pip install langchain openai
pip install streamlit pandas
2、定义标签模式(Schema)
class DataFeature(BaseModel):
    chartType: str = Field(..., 
                        enum=["bar_chart", "area_chart", "line_chart"],
                        description="""
                        the chart type to visualize the dataframe strickly following rules:
                        Use 'area_chart': if the dataframe is monthly-basis, daily-basis, or yearly-basis
                        Use 'bar_chart': if the dataframe contains categorical data.
                        Use 'line_chart': if the dataframe is seconds-basis or smaller periods.
                        """)
    column: str = Field(..., 
                        description="""
                        the column name in the dataframe that is best for the x-axis
                        """)
在此模式中,我们创建了两个用于标记的强制属性:chartType 和 column。
ChartType:具有三个枚举选项的字符串属性,“bar_chart”、“area_chart” 或 “line_chart”。为了演示,规则并不复杂,为每月、每日或每年数据选择 “area_chart”,为分类数据选择 “bar_chart”,为基于秒或更短周期的数据选择 “line_chart”。

column:一个字符串属性,指定数据框中 x 轴的首选列名称。这将在稍后的图表显示中使用,以确保 x 轴有意义。

3、创建标签链并生成标签
只需通过加载 schema 和具有最新 “函数调用” 功能的 gpt-3.5-turbo-0613 模型来调用 create_tagging_chain_pydantic() 即可。

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
tagging_chain = create_tagging_chain_pydantic(DataFeatures, llm)
res = tagging_chain.run(text_input)
text_input 字符串是从用户之前提供的 CSV 文件转换而来的。
res 变量将包含从标记链生成的所需图表类型和列,如 res.chartType 和 res.column。
4、streamlit
Streamlit 作为一个基于 Python 的 Web 开发框架,提供了包括官方和第三方在内的各种类型的图表。
你可以查看官方文档 https://docs.streamlit.io/library/api-reference/charts
这里的目标是实现一个可以根据输入参数 chartType 和 column 显示这三个图表的函数。

import streamlit as st
import pandas as pd
文件上传器是 Streamlit 中的一个方便的小部件,用于在一行代码中接受用户的文件。
df_now = None
text_input = ''

st.title("AI Chart")

uploaded_file = st.file_uploader("Choose a dataset file", type=['csv'])
if uploaded_file is not None:
    df_now = pd.read_csv(uploaded_file)
    st.dataframe(df_now, use_container_width=True)

if df_now is None:
    st.stop()
    
text_input = df_now.to_string()
通过 Pandas 的 read_csv 方法,可以顺利地将文件读入 Pandas 数据帧对象 df_now。

st.dataframe() 用于在网页上显示可编辑的数据框。

使用 to_string() 方法从数据帧转换而来的字符串 text_input 将用于最后一节中的标记上下文。
下面来定义一个图表生成方法。
def show_chart(chartType, column):

    if chartType == "bar_chart":
        st.bar_chart(df_now, x=column)
    elif chartType == "area_chart":
        st.area_chart(df_now, x=column)
    elif chartType == "line_chart":
        st.line_chart(df_now, x=column)
    return True
然后使用标签属性来调用该方法,以显示相应的图形。

show_chart(res.chartType, res.column)
到这里,图表生成器的整体代码都已经介绍完了。
为了测试整个图表生成器应用程序,你可以从网上下载一些示例数据集或自行创建一些数据集。
以下是生成三个虚拟数据集的 python 代码,每个数据集对应一种图形。
import pandas as pd
import numpy as np

# Generating sample data
num_points = 100  # Number of data points
time_values = np.linspace(0, 10, num_points)  # Time values from 0 to 10 seconds
amplitude = 5  # Maximum voltage amplitude in volts
frequency = 1  # Frequency of the sinusoidal function in Hz
phase = 0      # Phase shift of the sinusoidal function in radians

# Generating voltage values using a sinusoidal function
voltage_values = amplitude * np.sin(2 * np.pi * frequency * time_values + phase)

# Creating the dataframe
data_continuous_voltage = {
    'Time': time_values,
    'Voltage': voltage_values
}

df_continuous_voltage = pd.DataFrame(data_continuous_voltage)
df_continuous_voltage.to_csv('continuous_voltage_data.csv', index=False)

data_regional_sales = {
    'Region': ['North', 'South', 'East', 'West', 'Center', 'Oversea', 'Others'],
    'Products Sold': [300, 250, 200, 350, 490, 220, 120]
}

df_regional_sales = pd.DataFrame(data_regional_sales)
df_regional_sales.to_csv('regional_sales_data.csv', index=False)

data_monthly_status = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    'Visits': [500, 600, 800, 700, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600],
    'Page Views': [1200, 1500, 1800, 1700, 2100, 2400, 2500, 2800, 3000, 3200, 3500, 3700],
    'Unique Visitors': [300, 350, 400, 380, 420, 460, 480, 500, 550, 580, 600, 620]
}

df_monthly_status = pd.DataFrame(data_monthly_status)
df_monthly_status.to_csv('monthly_status_data.csv', index=False)

以上就是50行python代码,打造一个AI图表生成器教程的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取