基于华为开发者空间的Open WebUI数据分析与可视化实战_open-web ui
1 概述
1.1 案例介绍
本案例演示如何在华为开发者空间云主机上搭建Open WebUI环境,结合DeepSeek-R1模型进行数据分析、统计建模、数据可视化和业务洞察挖掘等实际数据科学任务。
1.2 适用对象
- 数据分析师
- 业务分析师
- 数据科学工程师
- 市场研究人员
- 统计学专业学生
1.3 案例时长
预计 90 分钟
1.4 案例流程
- 开启华为开发者空间云主机
- 安装Docker和Open WebUI
- 部署Ollama和DeepSeek-R1模型
- 配置数据分析环境
- AI分析业务数据集实战
1.5 资源总览
2 环境配置
2.1 开发者空间
华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云主机(点击免费领取)、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者 从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。
点击我的云主机,选择“打开云主机”,并进入桌面。云主机默认系统为 Ubuntu 24.04 Server 定制版。
2.2 安装Docker环境
2 环境配置
2.1 开发者空间
华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云主机(点击免费领取)、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者 从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。
点击我的云主机,选择“打开云主机”,并进入桌面。云主机默认系统为 Ubuntu 24.04 Server 定制版。
2.2 安装 Ollama
Ollama 是一个强大的开源工具,旨在帮助用户轻松地在本地运行、部署和管理大型语言模型(LLMs)。它提供了一个简单的命令行界面,使用户能够快速下载、运行和与各种预训练的语言模型进行交互。Ollama 支持多种模型架构,并且特别适合那些希望在本地环境中使用 LLMs 的开发者和研究人员。
# 安装 Ollama 脚本curl -fsSL https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0035/install.sh | sudo bash
设置并启动 Ollama 服务。
sudo systemctl enable ollamasudo systemctl start ollama
接下来可以根据需要,借助 Ollama 工具来部署大模型。
2.3 安装 Open WebUI
打开云主机命令行窗口输入以下命令,更新软件包。
sudo apt updatesudo apt upgrade -y
卸载旧版本Docker(如果已安装)。
sudo apt-get remove docker docker-engine docker.io containerd runc
安装必要的依赖。
sudo apt install apt-transport-https ca-certificates curl software-properties-common
添加Docker的官方GPG密钥。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
添加Docker的APT源。
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\"
更新APT包索引。
sudo apt update
安装Docker CE。
sudo apt install docker-ce
验证Docker是否安装成功。
sudo systemctl status docker
设置Docker自动启动。
sudo systemctl enable docker
安装 Open WebUI。
sudo docker pull ghcr.io/open-webui/open-webui:main
运行 Open WebUI 容器。
sudo docker run -d --network host -v open-webui:/app/backend/data --name open-webui --restart always -e OLLAMA_BASE_URL=http://localhost:11434 ghcr.io/open-webui/open-webui:main
大概等待两分钟,容器可以启动完成。
向deepseek-r1模型提问,比如:“帮我写一个冒泡排序”。
如果访问失败,可以输入下面命令查看日志。
# 查看容器状态sudo docker ps -a | grep open-webui# 检查日志sudo docker logs open-webui
2.4 准备数据分析环境
# 安装Python数据分析库sudo apt install python3-pip -ypip3 install pandas numpy matplotlib seaborn plotly jupyter# 创建数据分析工作目录mkdir -p ~/data-analysis-projectcd ~/data-analysis-project
3 实战项目
3.1 创建业务数据集
创建一个电商销售数据集用于分析:
# 创建销售数据CSV文件cat > sales_data.csv << \'EOF\'date,product_category,product_name,sales_amount,quantity,customer_age,customer_gender,region,promotion_type2024-01-15,Electronics,Smartphone,899.99,1,25,Female,North,None2024-01-15,Electronics,Laptop,1299.99,1,32,Male,South,Discount_102024-01-16,Clothing,T-Shirt,29.99,2,28,Female,East,None2024-01-16,Electronics,Tablet,499.99,1,45,Male,West,Bundle_Deal2024-01-17,Books,Novel,15.99,1,35,Female,North,None2024-01-17,Electronics,Headphones,199.99,1,22,Male,South,Flash_Sale2024-01-18,Clothing,Jeans,79.99,1,30,Female,East,Discount_202024-01-18,Home,Coffee_Maker,89.99,1,40,Male,West,None2024-01-19,Electronics,Phone_Case,19.99,3,26,Female,North,Bundle_Deal2024-01-19,Books,Textbook,89.99,1,20,Male,South,Student_Discount2024-01-20,Clothing,Jacket,149.99,1,38,Female,East,Seasonal_Sale2024-01-20,Electronics,Smart_Watch,299.99,1,33,Male,West,None2024-01-21,Home,Vacuum_Cleaner,199.99,1,42,Female,North,Discount_152024-01-21,Electronics,Wireless_Mouse,39.99,2,29,Male,South,None2024-01-22,Books,Cookbook,24.99,1,36,Female,East,None2024-01-22,Clothing,Sneakers,119.99,1,24,Male,West,Flash_Sale2024-01-23,Electronics,Power_Bank,49.99,1,31,Female,North,Bundle_Deal2024-01-23,Home,Lamp,69.99,1,44,Male,South,None2024-01-24,Clothing,Dress,89.99,1,27,Female,East,Discount_252024-01-24,Electronics,Bluetooth_Speaker,79.99,1,34,Male,West,NoneEOF# 创建客户信息数据cat > customer_data.csv << \'EOF\'customer_id,registration_date,total_orders,lifetime_value,satisfaction_score,preferred_categoryC001,2023-06-15,12,2400.50,4.5,ElectronicsC002,2023-07-20,8,1200.75,4.2,ClothingC003,2023-08-10,15,3200.25,4.8,ElectronicsC004,2023-09-05,6,800.60,3.9,BooksC005,2023-10-12,10,1800.40,4.3,HomeC006,2023-11-08,18,4500.80,4.7,ElectronicsC007,2023-12-03,7,950.35,4.0,ClothingC008,2024-01-14,5,600.25,3.8,BooksC009,2024-01-20,9,1650.90,4.4,HomeC010,2024-01-25,11,2100.55,4.6,ElectronicsEOF# 创建产品库存数据cat > inventory_data.csv << \'EOF\'product_id,product_name,category,cost_price,selling_price,stock_quantity,supplier,last_restockedP001,Smartphone,Electronics,650.00,899.99,45,TechCorp,2024-01-10P002,Laptop,Electronics,800.00,1299.99,23,CompuMax,2024-01-08P003,T-Shirt,Clothing,12.00,29.99,120,FashionHub,2024-01-12P004,Tablet,Electronics,300.00,499.99,35,TechCorp,2024-01-09P005,Novel,Books,8.00,15.99,80,BookWorld,2024-01-11P006,Headphones,Electronics,80.00,199.99,67,AudioPro,2024-01-07P007,Jeans,Clothing,35.00,79.99,55,DenimCo,2024-01-13P008,Coffee_Maker,Home,45.00,89.99,30,KitchenMax,2024-01-06P009,Phone_Case,Electronics,8.00,19.99,200,AccessoryPlus,2024-01-14P010,Textbook,Books,45.00,89.99,25,EduBooks,2024-01-05EOF
3.2 访问Open WebUI并创建分析对话
浏览器访问 http://localhost:8080
,创建管理员账户并登录。
开始数据分析对话。
3.3 探索性数据分析
对话1:数据概览分析
我是一名数据分析师,需要对电商销售数据进行全面分析。我有三个数据文件:1. sales_data.csv - 销售交易数据2. customer_data.csv - 客户信息数据 3. inventory_data.csv - 产品库存数据请帮我生成Python代码来进行初步的探索性数据分析,包括:1. 数据加载和基本信息查看2. 数据质量检查(缺失值、异常值)3. 描述性统计分析4. 数据分布可视化请提供完整的可执行代码。
预期AI回答示例:
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom datetime import datetimeimport warningswarnings.filterwarnings(\'ignore\')# 设置中文字体和图表风格plt.rcParams[\'font.sans-serif\'] = [\'DejaVu Sans\']plt.rcParams[\'axes.unicode_minus\'] = Falsesns.set_style(\"whitegrid\")def load_and_explore_data(): \"\"\"加载数据并进行初步探索\"\"\" # 1. 数据加载 print(\"=== 数据加载 ===\") sales_df = pd.read_csv(\'sales_data.csv\') customer_df = pd.read_csv(\'customer_data.csv\') inventory_df = pd.read_csv(\'inventory_data.csv\') print(f\"销售数据形状: {sales_df.shape}\") print(f\"客户数据形状: {customer_df.shape}\") print(f\"库存数据形状: {inventory_df.shape}\") # 2. 数据基本信息 print(\"\\n=== 销售数据基本信息 ===\") print(sales_df.info()) print(\"\\n销售数据前5行:\") print(sales_df.head()) # 3. 数据质量检查 print(\"\\n=== 数据质量检查 ===\") print(\"销售数据缺失值:\") print(sales_df.isnull().sum()) # 4. 描述性统计 print(\"\\n=== 描述性统计 ===\") print(sales_df.describe()) # 5. 数据可视化 fig, axes = plt.subplots(2, 3, figsize=(18, 12)) # 销售金额分布 axes[0,0].hist(sales_df[\'sales_amount\'], bins=20, alpha=0.7, color=\'skyblue\') axes[0,0].set_title(\'销售金额分布\') axes[0,0].set_xlabel(\'销售金额\') axes[0,0].set_ylabel(\'频次\') # 产品类别销售分布 category_sales = sales_df.groupby(\'product_category\')[\'sales_amount\'].sum() axes[0,1].pie(category_sales.values, labels=category_sales.index, autopct=\'%1.1f%%\') axes[0,1].set_title(\'产品类别销售占比\') # 地区销售分布 region_sales = sales_df.groupby(\'region\')[\'sales_amount\'].sum() axes[0,2].bar(region_sales.index, region_sales.values, color=\'lightgreen\') axes[0,2].set_title(\'地区销售分布\') axes[0,2].set_xlabel(\'地区\') axes[0,2].set_ylabel(\'销售金额\') # 客户年龄分布 axes[1,0].hist(sales_df[\'customer_age\'], bins=15, alpha=0.7, color=\'orange\') axes[1,0].set_title(\'客户年龄分布\') axes[1,0].set_xlabel(\'年龄\') axes[1,0].set_ylabel(\'频次\') # 促销类型效果 promo_sales = sales_df.groupby(\'promotion_type\')[\'sales_amount\'].mean() axes[1,1].bar(promo_sales.index, promo_sales.values, color=\'lightcoral\') axes[1,1].set_title(\'促销类型平均销售额\') axes[1,1].set_xlabel(\'促销类型\') axes[1,1].set_ylabel(\'平均销售额\') axes[1,1].tick_params(axis=\'x\', rotation=45) # 性别销售分布 gender_sales = sales_df.groupby(\'customer_gender\')[\'sales_amount\'].sum() axes[1,2].pie(gender_sales.values, labels=gender_sales.index, autopct=\'%1.1f%%\') axes[1,2].set_title(\'性别销售分布\') plt.tight_layout() plt.savefig(\'eda_analysis.png\', dpi=300, bbox_inches=\'tight\') plt.show() return sales_df, customer_df, inventory_df# 执行分析sales_data, customer_data, inventory_data = load_and_explore_data()
3.4 深度数据分析
对话2:销售趋势分析
基于上面的数据,请帮我进行更深入的销售趋势分析:1. 时间序列分析 - 销售趋势变化2. 相关性分析 - 各变量之间的关系3. 客户细分分析 - RFM分析模型4. 产品性能分析 - 销售排行和利润分析5. 异常值检测 - 识别异常交易请提供详细的分析代码和解释。
3.5 统计建模与预测
对话3:预测模型构建
现在需要构建预测模型来支持业务决策:1. 销售额预测模型 - 基于历史数据预测未来销售2. 客户流失预测 - 识别可能流失的客户3. 库存优化模型 - 预测最优库存水平4. 价格敏感性分析 - 分析价格对销售的影响请使用Python机器学习库(如scikit-learn)构建这些模型,并提供模型评估指标。
3.6 数据可视化仪表板
对话4:交互式仪表板
请帮我创建一个交互式的数据可视化仪表板,使用Plotly或Dash库,包含以下组件:1. 实时销售指标面板2. 产品类别业绩对比图3. 地区销售热力图 4. 客户年龄与消费行为散点图5. 促销活动效果分析图表6. 库存预警提醒面板请提供完整的代码实现。
3.7 业务洞察挖掘
对话5:业务智能分析
基于所有的数据分析结果,请帮我生成一份综合的业务洞察报告,包括:1. 关键业务指标总结2. 主要发现和洞察3. 存在的问题和风险4. 改进建议和行动计划5. 预测和趋势展望请以管理层可以理解的商业语言表述,避免过多技术细节。
3.8 自动化报告生成
对话6:报告自动化
请帮我创建一个自动化的数据分析和报告生成系统,要求:1. 定期自动处理新的数据文件2. 自动更新分析结果和图表3. 生成PDF格式的分析报告4. 设置异常情况预警通知5. 支持多种数据源接入请提供Python脚本实现这个自动化流程。
3.9 高级分析技术
对话7:机器学习应用
请展示如何在这个电商数据集上应用高级分析技术:1. 聚类分析 - 客户群体细分2. 关联规则挖掘 - 购物篮分析3. 时间序列预测 - ARIMA模型4. 推荐系统 - 协同过滤算法5. 异常检测 - 孤立森林算法每种技术请提供具体的代码实现和业务应用场景。
4 验证和测试
4.1 执行数据分析代码
# 创建分析脚本cd ~/data-analysis-project# 安装所需库pip3 install scikit-learn plotly dash# 运行分析脚本python3 eda_analysis.py# 查看生成的图表ls -la *.png
4.2 模型性能验证
# 创建模型验证脚本cat > model_validation.py << \'EOF\'from sklearn.model_selection import train_test_split, cross_val_scorefrom sklearn.ensemble import RandomForestRegressorfrom sklearn.metrics import mean_squared_error, r2_scoreimport pandas as pdimport numpy as npdef validate_sales_prediction_model(): \"\"\"验证销售预测模型性能\"\"\" # 加载数据 sales_df = pd.read_csv(\'sales_data.csv\') # 特征工程 sales_df[\'date\'] = pd.to_datetime(sales_df[\'date\']) sales_df[\'day_of_week\'] = sales_df[\'date\'].dt.dayofweek sales_df[\'month\'] = sales_df[\'date\'].dt.month # 编码分类变量 categorical_features = [\'product_category\', \'customer_gender\', \'region\', \'promotion_type\'] sales_encoded = pd.get_dummies(sales_df, columns=categorical_features) # 准备特征和目标变量 feature_cols = [col for col in sales_encoded.columns if col not in [\'date\', \'product_name\', \'sales_amount\']] X = sales_encoded[feature_cols] y = sales_encoded[\'sales_amount\'] # 分割数据 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = RandomForestRegressor(n_estimators=100, random_state=42) model.fit(X_train, y_train) # 预测和评估 y_pred = model.predict(X_test) mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f\"模型性能评估:\") print(f\"均方误差 (MSE): {mse:.2f}\") print(f\"R²分数: {r2:.3f}\") # 特征重要性 feature_importance = pd.DataFrame({ \'feature\': feature_cols, \'importance\': model.feature_importances_ }).sort_values(\'importance\', ascending=False) print(\"\\n特征重要性排名:\") print(feature_importance.head(10)) return model, feature_importance# 运行验证model, importance = validate_sales_prediction_model()EOFpython3 model_validation.py
4.3 仪表板部署测试
# 创建简单的Dash仪表板cat > dashboard.py << \'EOF\'import dashfrom dash import dcc, html, Input, Outputimport plotly.express as pximport pandas as pd# 加载数据sales_df = pd.read_csv(\'sales_data.csv\')# 创建Dash应用app = dash.Dash(__name__)app.layout = html.Div([ html.H1(\"电商销售数据分析仪表板\", style={\'text-align\': \'center\'}), dcc.Dropdown( id=\'category-dropdown\', options=[{\'label\': cat, \'value\': cat} for cat in sales_df[\'product_category\'].unique()], value=sales_df[\'product_category\'].unique()[0], style={\'width\': \'50%\'} ), dcc.Graph(id=\'sales-chart\'), dcc.Graph(id=\'age-distribution\')])@app.callback( [Output(\'sales-chart\', \'figure\'), Output(\'age-distribution\', \'figure\')], [Input(\'category-dropdown\', \'value\')])def update_charts(selected_category): filtered_df = sales_df[sales_df[\'product_category\'] == selected_category] # 销售图表 sales_fig = px.bar( filtered_df.groupby(\'region\')[\'sales_amount\'].sum().reset_index(), x=\'region\', y=\'sales_amount\', title=f\'{selected_category} 地区销售分布\' ) # 年龄分布图 age_fig = px.histogram( filtered_df, x=\'customer_age\', title=f\'{selected_category} 客户年龄分布\' ) return sales_fig, age_figif __name__ == \'__main__\': app.run_server(debug=True, host=\'0.0.0.0\', port=8050)EOF# 启动仪表板(在后台运行)nohup python3 dashboard.py &echo \"仪表板已启动,访问 http://localhost:8050 查看\"
5 总结
通过本案例,您已经掌握了:
- 环境搭建:在华为开发者空间搭建Open WebUI + DeepSeek数据分析环境
- 数据探索:使用AI进行探索性数据分析和可视化
- 统计建模:构建预测模型和机器学习算法
- 业务洞察:从数据中挖掘有价值的商业洞察
- 自动化工具:创建自动化分析流程和交互式仪表板
- 模型验证:评估模型性能和可靠性
这套数据分析工作流程可以应用到各种业务场景中,帮助企业做出数据驱动的决策。
通过阅读本文,您将完成从环境搭建到深度实战的全流程,能够在 Open WebUI 中高效利用本地 DeepSeek-R1 服务,使用AI快速进行数据分析,并利用强大的可视化技术实现数据探索和洞察。