当前位置: 首页 > news >正文

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 篇。


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

http://www.jsqmd.com/news/1163874/

相关文章:

  • 2026年思蕊淋嘉淋浴房:大型企业如何打造极致淋浴体验? - 米諾
  • WVP-GB28181-Pro分布式视频平台语音对讲功能深度解析与故障排查指南
  • 打卡第27天 - P5266 - 2026 - 7 - 10
  • XUnity.AutoTranslator终极指南:如何快速修复游戏翻译失效问题
  • UE5 使用 custom stencil + custom depth + world normal + material id map 制作描边效果
  • GBFR Logs终极指南:11个核心功能带你从新手到《碧蓝幻想Relink》数据专家
  • 【愚公系列】《移动端AI应用开发》041-DeepSeek与第三方服务的集成(第三方消息推送与实时通信)
  • clibcni核心组件解析:深入理解CNI插件架构
  • 幻想世界平台:下一代注意力容器的诞生
  • Python 实现基于 TCP 的聊天程序(Socket + threading + Tkinter + 4 节点并行)
  • 面试问题
  • openeuler/cpds-detector高级用法:自定义监控规则与告警策略全攻略
  • 2026国内GEO服务商TOP9:AI搜索优化公司能力、定位与预算对比 - 品牌深度评测
  • Fable 4D飞溅效果格式技术解析:原理、应用与实战指南
  • 2026广州低分中考学生出路:南沙低进高出民办高中朝晖高中升学解析 - 米諾
  • Windows右键菜单清理指南:3步告别臃肿右键菜单,提升工作效率50%
  • Python 工业边缘 CLI 实战:用 Typer 做参数校验、子命令与帮助文档
  • PilotGo-plugin-ELK与PilotGo平台集成:打造一体化运维管理
  • 5分钟掌握B站缓存视频转换神器:m4s-converter完全指南
  • 2026年北七家、小汤山仓储寄存/库房出租:无中介费、配套完善/业主直租、整租长租 - 硬核推荐
  • 内核Oops分析与crash dump调试实战:从恐慌信息到根因的精确定位
  • 跳跃游戏 II:从“接力赛”到“BFS 层级覆盖”——贪心 + BFS 的经典范式
  • BetterGI:原神智能辅助工具的完整使用指南
  • 2026年7月最新哈尔滨真力时官方售后服务网点地址及客服电话一览 - 亨得利官方服务中心
  • Kubernetes 系列【11】控制器:Deployment(无状态部署控制器)
  • 寄大件哪个物流最便宜?2026最新省钱攻略+比价技巧 - 快递物流资讯
  • 匹米替比Pimitespib:HGF通路靶向难治性肉瘤新选择
  • gitstats 统计工具
  • 2026广州有一生一案教学的民办高中吗?南沙朝晖高中分层培优介绍 - 米諾
  • 制造业生产现场管理:计划、组织、协调、控制与检测的全面实践