news 2026/7/10 23:22:19

AI 工具开发实战(7):开发一个 AI 数据看板——用 Streamlit 上传文件自动分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI 工具开发实战(7):开发一个 AI 数据看板——用 Streamlit 上传文件自动分析

AI 工具开发实战(7):开发一个 AI 数据看板——用 Streamlit 一行代码部署数据分析应用

前几篇都是 CLI 和插件工具,这篇做一个带界面的——AI 数据看板

用 Streamlit + Pandas + LLM,上传 Excel/CSV,AI 自动分析数据、生成图表和洞察。

工具做什么

上传 Excel/CSV 文件 ↓ 1. 自动预览数据(前 10 行) 2. AI 分析数据特征(分布、异常值、趋势) 3. 生成可视化图表 4. 对话式数据问答:"上个月销售额最高的品类是什么?"

项目结构

aidash/ ├── app.py # Streamlit 主程序 ├── analyzer.py # AI 数据分析 ├── requirements.txt └── .env

核心代码

# app.pyimportstreamlitasstimportpandasaspdimportplotly.expressaspxfromanalyzerimportAIAnalyzer st.set_page_config(page_title="AI 数据看板",layout="wide")st.title("📊 AI 数据看板")# 初始化 AI 分析器if'analyzer'notinst.session_state:st.session_state.analyzer=AIAnalyzer()# 上传文件uploaded_file=st.file_uploader("上传 Excel 或 CSV 文件",type=['csv','xlsx'])ifuploaded_file:# 读取数据ifuploaded_file.name.endswith('.csv'):df=pd.read_csv(uploaded_file)else:df=pd.read_excel(uploaded_file)st.session_state.df=df# 数据预览col1,col2,col3,col4=st.columns(4)col1.metric("行数",len(df))col2.metric("列数",len(df.columns))col3.metric("缺失值",df.isna().sum().sum())col4.metric("数值列",len(df.select_dtypes('number').columns))# 数据表格withst.expander("📋 数据预览",expanded=True):st.dataframe(df.head(20),use_container_width=True)# AI 分析ifst.button("🤖 AI 分析数据",type="primary"):withst.spinner("AI 正在分析..."):analysis=st.session_state.analyzer.analyze(df)# 数据洞察ifanalysis.get("insights"):st.subheader("💡 关键洞察")forinsightinanalysis["insights"]:st.info(insight)# 推荐图表ifanalysis.get("charts"):st.subheader("📈 推荐图表")forchartinanalysis["charts"]:col_name=chart["column"]chart_type=chart["type"]ifchart_type=="bar"andcol_nameindf.columns:counts=df[col_name].value_counts().head(10)fig=px.bar(x=counts.index,y=counts.values,title=f"{col_name}分布")st.plotly_chart(fig,use_container_width=True)elifchart_type=="line"andcol_nameindf.columns:ifpd.api.types.is_numeric_dtype(df[col_name]):fig=px.line(df[col_name].dropna().head(200),title=f"{col_name}趋势")st.plotly_chart(fig,use_container_width=True)# 对话式问答st.subheader("💬 数据问答")question=st.text_input("输入你的数据问题",placeholder="例如:销售额最高的品类是哪个?")ifquestion:withst.spinner("AI 正在回答..."):answer=st.session_state.analyzer.ask(df,question)st.markdown(answer)
# analyzer.pyfromopenaiimportOpenAIimportosimportjsonfromdotenvimportload_dotenv load_dotenv()client=OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),base_url="https://api.deepseek.com/v1",)classAIAnalyzer:"""AI 数据分析引擎。"""defanalyze(self,df):"""分析数据并返回洞察和图表建议。"""# 准备数据摘要summary=self._get_data_summary(df)response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"system","content":f"""你是一个数据分析专家。分析以下数据摘要,返回 JSON 格式: {{ "insights": ["洞察1", "洞察2", ...], "charts": [{{"column": "列名", "type": "bar|line|pie", "reason": "原因"}}, ...] }} 数据摘要:{summary}"""}],temperature=0.3,)try:returnjson.loads(response.choices[0].message.content)except:return{"insights":[],"charts":[]}defask(self,df,question):"""回答数据相关问题。"""summary=self._get_data_summary(df)sample=df.head(5).to_string()response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"system","content":f"基于以下数据回答用户问题。\n\n数据概览:{summary}\n\n数据样本:\n{sample}"},{"role":"user","content":question,}],temperature=0.3,)returnresponse.choices[0].message.contentdef_get_data_summary(self,df):"""生成数据摘要。"""returnf""" 形状:{df.shape[0]}行 x{df.shape[1]}列 列名:{list(df.columns)}数据类型:{dict(df.dtypes.astype(str))}数值列统计:{df.describe().to_string()iflen(df.select_dtypes('number').columns)>0else'无'}缺失值:{dict(df.isna().sum())}"""

使用方式

pipinstallstreamlit pandas plotly openai python-dotenv streamlit run app.py

浏览器打开http://localhost:8501,上传文件 → AI 自动分析 → 生成图表。

总结

一个实用的 AI 数据看板,核心三步:

  1. Streamlit 做界面(一行代码部署)
  2. Pandas 处理数据
  3. LLM 做分析和问答

比传统 BI 工具灵活,比手动分析快 10 倍。


本文是《AI 开发者工具链实战》系列的第 7 篇。


如果觉得有用,欢迎点赞 + 收藏 + 关注

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 23:20:48

解决 VSCode 代码提示慢的一批的异常问题!

VSCode 的默认设置一般不会导致代码提示很慢,除了电脑本身问题外,通常都是插件导致的!尤其是 Ai 插件 Copilot临时推迟或禁用/删除 Copilot所以我们直接先临时关闭一下 Copilot 看看性能是否有所改善?或者直接禁用 Copilot 试试如…

作者头像 李华
网站建设 2026/7/10 23:20:23

幻想世界平台:下一代注意力容器的诞生

一个还没有出现的产品。一种还没有被命名的欲望。一个一旦出现,就会让十亿人住进去的新世界。一、引言:一个还没有出现的产品最近我翻了一下自己的账单,发现一个有意思的数字:我每个月花在AI Agent上的钱,大概是260元人…

作者头像 李华
网站建设 2026/7/10 23:19:55

第一章Netty,FileChannel结合ByteBuffer进行读写

基于前文对 FileChannel 核心特性(阻塞模式、必须配合 ByteBuffer)及大文件处理(内存映射、零拷贝)的讨论,以下是使用 FileChannel 结合 ByteBuffer 进行标准文件读写的完整示例。此方式适用于中小文件的通用读写场景。 一、完整代码示例 该示例演示了如何写入字符串到文…

作者头像 李华
网站建设 2026/7/10 23:18:51

订货小程序如何帮助批发零售行业转型

在批发零售行业中,订单处理方式正在发生明显变化。过去,很多批发商、经销商、零售门店和区域代理商主要依靠电话、微信、纸质单据或Excel表格完成订货。客户下单靠沟通,业务员接单靠整理,仓库发货靠人工核对,财务对账靠…

作者头像 李华
网站建设 2026/7/10 23:17:50

第一章Netty,聚集写入 (Gathering Writes)

核心概念:聚集写入 (Gathering Writes) ‌聚集写入‌是指将数据从多个缓冲区(Buffer Array)中按顺序“聚集”并写入到一个通道(Channel)中。操作系统会按数组顺序,依次将每个缓冲区中剩余的数据(从 position 到 limit)写入通道。 简单示例: public static void mai…

作者头像 李华