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

发布于:2025-08-06 ⋅ 阅读:(17) ⋅ 点赞:(0)

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

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

设置并启动 Ollama 服务。

sudo systemctl enable ollama
sudo systemctl start ollama

在这里插入图片描述

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

2.3 安装 Open WebUI

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

sudo apt update
sudo 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 -y
pip3 install pandas numpy matplotlib seaborn plotly jupyter

# 创建数据分析工作目录
mkdir -p ~/data-analysis-project
cd ~/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_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回答示例:

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 执行数据分析代码

# 创建分析脚本
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_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 仪表板部署测试

# 创建简单的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快速进行数据分析,并利用强大的可视化技术实现数据探索和洞察。


网站公告

今日签到

点亮在社区的每一天
去签到