基于华为开发者空间的Open WebUI数据分析与可视化实战

1 概述

1.1 案例介绍

本案例演示如何在华为开发者空间云主机上搭建Open WebUI环境,结合DeepSeek-R1模型进行数据分析、统计建模、数据可视化和业务洞察挖掘等实际数据科学任务。

1.2 适用对象

  • 数据分析师
  • 业务分析师
  • 数据科学工程师
  • 市场研究人员
  • 统计学专业学生

1.3 案例时长

预计 90 分钟

1.4 案例流程

  1. 开启华为开发者空间云主机
  2. 安装Docker和Open WebUI
  3. 部署Ollama和DeepSeek-R1模型
  4. 配置数据分析环境
  5. AI分析业务数据集实战

1.5 资源总览

资源名称 规格 单价(元) 时长(分钟)
开发者空间--云主机 4 vCPUs 8 GB Ubuntu 24.04 Server 定制版 0 90
Open WebUI Docker容器化部署 0 ---
Ollama 本地模型服务 DeepSeek-R1(本地部署) 0 ---
数据分析环境 Python + Pandas + Matplotlib 0 ---

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 的开发者和研究人员。

bash 复制代码
# 安装 Ollama 脚本
curl -fsSL https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0035/install.sh | sudo bash

设置并启动 Ollama 服务。

bash 复制代码
sudo systemctl enable ollama
sudo systemctl start ollama

接下来可以根据需要,借助 Ollama 工具来部署大模型。

2.3 安装 Open WebUI

打开云主机命令行窗口输入以下命令,更新软件包。

bash 复制代码
sudo apt update
sudo apt upgrade -y

卸载旧版本Docker(如果已安装)。

bash 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc

安装必要的依赖。

bash 复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加Docker的官方GPG密钥。

bash 复制代码
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加Docker的APT源。

bash 复制代码
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新APT包索引。

bash 复制代码
sudo apt update

安装Docker CE。

bash 复制代码
sudo apt install docker-ce

验证Docker是否安装成功。

bash 复制代码
sudo systemctl status docker

设置Docker自动启动。

bash 复制代码
sudo systemctl enable docker

安装 Open WebUI。

bash 复制代码
sudo docker pull ghcr.io/open-webui/open-webui:main

运行 Open WebUI 容器。

bash 复制代码
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模型提问,比如:"帮我写一个冒泡排序"。

如果访问失败,可以输入下面命令查看日志。

bash 复制代码
# 查看容器状态
sudo docker ps -a | grep open-webui

# 检查日志
sudo docker logs open-webui

2.4 准备数据分析环境

bash 复制代码
# 安装Python数据分析库
sudo apt install python3-pip -y
pip3 install pandas numpy matplotlib seaborn plotly jupyter

# 创建数据分析工作目录
mkdir -p ~/data-analysis-project
cd ~/data-analysis-project

3 实战项目

3.1 创建业务数据集

创建一个电商销售数据集用于分析:

bash 复制代码
# 创建销售数据CSV文件
cat > sales_data.csv << 'EOF'
date,product_category,product_name,sales_amount,quantity,customer_age,customer_gender,region,promotion_type
2024-01-15,Electronics,Smartphone,899.99,1,25,Female,North,None
2024-01-15,Electronics,Laptop,1299.99,1,32,Male,South,Discount_10
2024-01-16,Clothing,T-Shirt,29.99,2,28,Female,East,None
2024-01-16,Electronics,Tablet,499.99,1,45,Male,West,Bundle_Deal
2024-01-17,Books,Novel,15.99,1,35,Female,North,None
2024-01-17,Electronics,Headphones,199.99,1,22,Male,South,Flash_Sale
2024-01-18,Clothing,Jeans,79.99,1,30,Female,East,Discount_20
2024-01-18,Home,Coffee_Maker,89.99,1,40,Male,West,None
2024-01-19,Electronics,Phone_Case,19.99,3,26,Female,North,Bundle_Deal
2024-01-19,Books,Textbook,89.99,1,20,Male,South,Student_Discount
2024-01-20,Clothing,Jacket,149.99,1,38,Female,East,Seasonal_Sale
2024-01-20,Electronics,Smart_Watch,299.99,1,33,Male,West,None
2024-01-21,Home,Vacuum_Cleaner,199.99,1,42,Female,North,Discount_15
2024-01-21,Electronics,Wireless_Mouse,39.99,2,29,Male,South,None
2024-01-22,Books,Cookbook,24.99,1,36,Female,East,None
2024-01-22,Clothing,Sneakers,119.99,1,24,Male,West,Flash_Sale
2024-01-23,Electronics,Power_Bank,49.99,1,31,Female,North,Bundle_Deal
2024-01-23,Home,Lamp,69.99,1,44,Male,South,None
2024-01-24,Clothing,Dress,89.99,1,27,Female,East,Discount_25
2024-01-24,Electronics,Bluetooth_Speaker,79.99,1,34,Male,West,None
EOF

# 创建客户信息数据
cat > customer_data.csv << 'EOF'
customer_id,registration_date,total_orders,lifetime_value,satisfaction_score,preferred_category
C001,2023-06-15,12,2400.50,4.5,Electronics
C002,2023-07-20,8,1200.75,4.2,Clothing
C003,2023-08-10,15,3200.25,4.8,Electronics
C004,2023-09-05,6,800.60,3.9,Books
C005,2023-10-12,10,1800.40,4.3,Home
C006,2023-11-08,18,4500.80,4.7,Electronics
C007,2023-12-03,7,950.35,4.0,Clothing
C008,2024-01-14,5,600.25,3.8,Books
C009,2024-01-20,9,1650.90,4.4,Home
C010,2024-01-25,11,2100.55,4.6,Electronics
EOF

# 创建产品库存数据
cat > inventory_data.csv << 'EOF'
product_id,product_name,category,cost_price,selling_price,stock_quantity,supplier,last_restocked
P001,Smartphone,Electronics,650.00,899.99,45,TechCorp,2024-01-10
P002,Laptop,Electronics,800.00,1299.99,23,CompuMax,2024-01-08
P003,T-Shirt,Clothing,12.00,29.99,120,FashionHub,2024-01-12
P004,Tablet,Electronics,300.00,499.99,35,TechCorp,2024-01-09
P005,Novel,Books,8.00,15.99,80,BookWorld,2024-01-11
P006,Headphones,Electronics,80.00,199.99,67,AudioPro,2024-01-07
P007,Jeans,Clothing,35.00,79.99,55,DenimCo,2024-01-13
P008,Coffee_Maker,Home,45.00,89.99,30,KitchenMax,2024-01-06
P009,Phone_Case,Electronics,8.00,19.99,200,AccessoryPlus,2024-01-14
P010,Textbook,Books,45.00,89.99,25,EduBooks,2024-01-05
EOF

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回答示例:

python 复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')

# 设置中文字体和图表风格
plt.rcParams['font.sans-serif'] = ['DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
sns.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 执行数据分析代码

bash 复制代码
# 创建分析脚本
cd ~/data-analysis-project

# 安装所需库
pip3 install scikit-learn plotly dash

# 运行分析脚本
python3 eda_analysis.py

# 查看生成的图表
ls -la *.png

4.2 模型性能验证

bash 复制代码
# 创建模型验证脚本
cat > model_validation.py << 'EOF'
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd
import numpy as np

def 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()
EOF

python3 model_validation.py

4.3 仪表板部署测试

bash 复制代码
# 创建简单的Dash仪表板
cat > dashboard.py << 'EOF'
import dash
from dash import dcc, html, Input, Output
import plotly.express as px
import 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_fig

if __name__ == '__main__':
    app.run_server(debug=True, host='0.0.0.0', port=8050)
EOF

# 启动仪表板(在后台运行)
nohup python3 dashboard.py &

echo "仪表板已启动,访问 http://localhost:8050 查看"

5 总结

通过本案例,您已经掌握了:

  1. 环境搭建:在华为开发者空间搭建Open WebUI + DeepSeek数据分析环境
  2. 数据探索:使用AI进行探索性数据分析和可视化
  3. 统计建模:构建预测模型和机器学习算法
  4. 业务洞察:从数据中挖掘有价值的商业洞察
  5. 自动化工具:创建自动化分析流程和交互式仪表板
  6. 模型验证:评估模型性能和可靠性

这套数据分析工作流程可以应用到各种业务场景中,帮助企业做出数据驱动的决策。


通过阅读本文,您将完成从环境搭建到深度实战的全流程,能够在 Open WebUI 中高效利用本地 DeepSeek-R1 服务,使用AI快速进行数据分析,并利用强大的可视化技术实现数据探索和洞察。

相关推荐
叶常落2 小时前
【vibe coding】Kubernetes + Nginx Ingress 实现云端Workspace容器分配与域名访问方案
ai
就是帅我不改3 小时前
深度模拟用户行为:用Playwright爬取B站弹幕与评论数据
爬虫·数据挖掘
极光JIGUANG3 小时前
基于浏览器插件技术的AI客服机器人实现原理与架构解析
ai
银行数字化转型导师坚鹏6 小时前
坚鹏:AI智能体软件是知行学成为AI智能体创新应用引领者的抓手
ai·aigc·ai编程
华科云商xiao徐6 小时前
基于Mojo与Mechanize的Perl高效爬虫实现
爬虫·数据挖掘·数据分析
华科云商xiao徐6 小时前
PowerShell部署Windows爬虫自动化方案
爬虫·数据挖掘·数据可视化
华科云商xiao徐6 小时前
Nim开发高性能低成本爬虫的完整教程
大数据·爬虫·数据挖掘
athink_cn7 小时前
【紧急预警】NVIDIA Triton推理服务器漏洞链可导致RCE!
人工智能·安全·网络安全·ai
菜鸟冲锋号8 小时前
数据建设之明细层指标和汇总层指标结合方式
大数据·机器学习·数据挖掘