1 概述
1.1 案例介绍
本案例演示如何在华为开发者空间云主机上搭建Open WebUI环境,结合DeepSeek-R1模型进行数据分析、统计建模、数据可视化和业务洞察挖掘等实际数据科学任务。
1.2 适用对象
- 数据分析师
- 业务分析师
- 数据科学工程师
- 市场研究人员
- 统计学专业学生
1.3 案例时长
预计 90 分钟
1.4 案例流程
- 开启华为开发者空间云主机
- 安装Docker和Open WebUI
- 部署Ollama和DeepSeek-R1模型
- 配置数据分析环境
- 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 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.dayofweeksales_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 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_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快速进行数据分析,并利用强大的可视化技术实现数据探索和洞察。