AI大模型探索之路-实战篇10:数据预处理的艺术:构建Agent智能数据分析平台的基础

系列篇章💥

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研
AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研
AI大模型探索之路-实战篇6:掌握Function Calling的详细流程
AI大模型探索之路-实战篇7:Function Calling技术实战自动生成函数
AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用
AI大模型探索之路-实战篇9:探究Agent智能数据分析平台的架构与功能


目录

  • 系列篇章💥
  • 前言
  • 一、安装MySQL数据库
  • 二、数据集获取
  • 三、数据处理
    • 1、拆分数据集
    • 2、噪声数据填充
  • 四、生成文件
  • 五、业务数据入库
    • 1、建表
    • 2、加载业务数据
  • 结语


前言

在当今数据驱动的商业环境中,一个高效且智能的数据分析平台对于企业的成功至关重要。本系列文章已经介绍了Agent智能数据分析平台的基础架构和核心功能,本文将深入探讨平台的数据预处理步骤,这一步骤是实现高质量数据分析的关键。我们将重点讨论如何获取、处理并存储数据,以提升分析的效率和准确性。

一、安装MySQL数据库

步骤1:安装MySQL数据库

sudo apt-get update
sudo apt-get install mysql-server
sudo service mysql start

步骤2:创建数据库用户

CREATE USER 'iquery_agent'@'localhost' IDENTIFIED BY 'iquery_agent';

步骤3:给数据库用户赋权限

GRANT ALL PRIVILEGES ON *.* TO 'iquery_agent'@'localhost';
FLUSH PRIVILEGES;

二、数据集获取

在构建智能数据分析平台的过程中,获取并预处理高质量的数据集是确保后续分析有效性的关键步骤。为此,我们从Kaggle上选取了IBM提供的一个涉及客户流失率和服务信息的公开数据集,这份数据集不仅规模庞大,而且包含了丰富的客户行为数据和服务使用情况。
地址:https://www.kaggle.com/datasets/blastchar/telco-customer-churn
在这里插入图片描述

三、数据处理

1、拆分数据集

数据处理阶段是构建智能数据分析平台中至关重要的一环,它直接影响到最终分析结果的准确性和可靠性。在这一阶段,我们主要关注两个核心操作:拆分数据集和噪声数据填充。
1)查看数据集信息

import pandas as pd 
#加载数据集
dataset = pd.read_csv('源数据/WA_Fn-UseC_-Telco-Customer-Churn.csv')
pd.set_option('max_colwidth',200)
#查看前5条数据
dataset.head(5)

输出:
在这里插入图片描述

2)查看数据集字段信息

dataset.info()

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7043 entries, 0 to 7042
Data columns (total 21 columns):
 #   Column            Non-Null Count  Dtype  
---  ------            --------------  -----  
 0   customerID        7043 non-null   object 
 1   gender            7043 non-null   object 
 2   SeniorCitizen     7043 non-null   int64  
 3   Partner           7043 non-null   object 
 4   Dependents        7043 non-null   object 
 5   tenure            7043 non-null   int64  
 6   PhoneService      7043 non-null   object 
 7   MultipleLines     7043 non-null   object 
 8   InternetService   7043 non-null   object 
 9   OnlineSecurity    7043 non-null   object 
 10  OnlineBackup      7043 non-null   object 
 11  DeviceProtection  7043 non-null   object 
 12  TechSupport       7043 non-null   object 
 13  StreamingTV       7043 non-null   object 
 14  StreamingMovies   7043 non-null   object 
 15  Contract          7043 non-null   object 
 16  PaperlessBilling  7043 non-null   object 
 17  PaymentMethod     7043 non-null   object 
 18  MonthlyCharges    7043 non-null   float64
 19  TotalCharges      7043 non-null   object 
 20  Churn             7043 non-null   object 
dtypes: float64(1), int64(2), object(18)
memory usage: 1.1+ MB

3)数据集拆分
将数据集拆分为训练集数据和测试集数据,以备后面做数据分析有用

## 分离训练集数据和测试集数据,以备后面做数据分析有用
from sklearn.model_selection import train_test_split

train_data, test_data = train_test_split(dataset, test_size=0.20, random_state=42)

train_data = train_data.reset_index(drop=True)
test_data = test_data.reset_index(drop=True)

4)查看训练数据集

train_data.head()

输出:
在这里插入图片描述

5)查看测试数据集

test_data.head()

在这里插入图片描述

6)训练数据提取拆分

# 1. User Demographics(用户特征)
user_demographics_train = train_data[['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents']]

# 2. User Services(用户服务)
user_services_train = train_data[['customerID', 'PhoneService', 'MultipleLines', 'InternetService',
                         'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport',
                         'StreamingTV', 'StreamingMovies']]

# 3. User Payments(用户支付记录)
user_payments_train = train_data[['customerID', 'Contract', 'PaperlessBilling', 'PaymentMethod', 'MonthlyCharges', 'TotalCharges']]

# 4. User Churn(用户流失)
user_churn_train = train_data[['customerID', 'Churn']]

7)测试数据集提前拆分

# 1. User Demographics
user_demographics_test = test_data[['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents']]

# 2. User Services
user_services_test = test_data[['customerID', 'PhoneService', 'MultipleLines', 'InternetService',
                         'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport',
                         'StreamingTV', 'StreamingMovies']]

# 3. User Payments
user_payments_test = test_data[['customerID', 'Contract', 'PaperlessBilling', 'PaymentMethod', 'MonthlyCharges', 'TotalCharges']]

# 4. User Churn
user_churn_test = test_data[['customerID', 'Churn']]

8)数据检查

user_demographics_train.head()

在这里插入图片描述

2、噪声数据填充

在现实中,获取的数据往往包含一定程度的噪声,这些噪声可能由于数据采集、记录过程中的错误或遗漏造成。为了确保分析结果的准确性,我们需要对这些噪声数据进行处理。处理的方式可以多样,包括但不限于填充缺失值、平滑异常值或者基于算法预测合理的数据点。在这一环节中,我们模拟了一些噪声数据的生成,并展示了如何通过技术手段处理这些数据,从而提升数据的整体质量。
处理步骤如下:

  1. 在 user_demographics 表中随机删除一些行,总共删除5%条数据;
  2. 在 user_services 表中添加一些不在其他表中的客户ID,总共添加100个新用户ID;
  3. 在 user_payments 表中随机添加一些缺失值,总共删除100个值;
  4. 为 user_churn 表添加一些新的客户ID,总共添加50个新用户,其中25个记录为流失用户,25个记录为未流失用户。
import numpy as np

# Random seed for reproducibility
np.random.seed(42)

# 1. Remove some rows from user_demographics
drop_indices = np.random.choice(user_demographics_train.index, size=int(0.05 * len(user_demographics_train)), replace=False)
user_demographics_train = user_demographics_train.drop(drop_indices)

# 2. Add some new customer IDs to user_services
new_ids = ["NEW" + str(i) for i in range(100)]
new_data_train = pd.DataFrame({'customerID': new_ids})
user_services_train = pd.concat([user_services_train, new_data_train], ignore_index=True)

# 3. Add missing values to user_payments
for _ in range(100):
    row_idx = np.random.randint(user_payments_train.shape[0])
    col_idx = np.random.randint(1, user_payments_train.shape[1])  # skipping customerID column
    user_payments_train.iat[row_idx, col_idx] = np.nan

# 4. Add new customer IDs to user_churn
new_ids_churn_train = ["NEWCHURN" + str(i) for i in range(50)]
new_data_churn_train = pd.DataFrame({'customerID': new_ids_churn_train, 'Churn': ['Yes'] * 25 + ['No'] * 25})
user_churn_train = pd.concat([user_churn_train, new_data_churn_train], ignore_index=True)

数据查看

user_demographics_train

在这里插入图片描述
获取DataFrame的维度信息,返回一个元组,第一个元素表示行数,第二个元素表示列数

user_demographics_train.shape, user_services_train.shape, user_payments_train.shape, user_churn_train.shape

在这里插入图片描述

四、生成文件

经过预处理的数据需要被有效地存储和管理。为了实现这一点,我们使用Python来编写脚本,自动化地将清洗后的数据保存到CSV文件中。

import os
# 创建目标文件夹,如果它还不存在
if not os.path.exists('业务数据'):
    os.makedirs('业务数据')

# 保存 DataFrame 为 CSV 文件
user_demographics_train.to_csv('业务数据/user_demographics_train.csv', index=False)
user_services_train.to_csv('业务数据/user_services_train.csv', index=False)
user_payments_train.to_csv('业务数据/user_payments_train.csv', index=False)
user_churn_train.to_csv('业务数据/user_churn_train.csv', index=False)

user_demographics_test.to_csv('业务数据/user_demographics_test.csv', index=False)
user_services_test.to_csv('业务数据/user_services_test.csv', index=False)
user_payments_test.to_csv('业务数据/user_payments_test.csv', index=False)
user_churn_test.to_csv('业务数据/user_churn_test.csv', index=False)

五、业务数据入库

1、建表

create database iquery;
CREATE TABLE user_demographics (
    customerID VARCHAR(255) PRIMARY KEY,
    gender VARCHAR(255),
    SeniorCitizen INT,
    Partner VARCHAR(255),
    Dependents VARCHAR(255)   
);

CREATE TABLE user_demographics_new (
    customerID VARCHAR(255) PRIMARY KEY,
    gender VARCHAR(255),
    SeniorCitizen INT,
    Partner VARCHAR(255),
    Dependents VARCHAR(255)   
);

CREATE TABLE user_services (
    customerID VARCHAR(255) PRIMARY KEY,
    PhoneService VARCHAR(255),
    MultipleLines VARCHAR(255),
    InternetService VARCHAR(255),
    OnlineSecurity VARCHAR(255),
    OnlineBackup VARCHAR(255),
    DeviceProtection VARCHAR(255),
    TechSupport VARCHAR(255),
    StreamingTV VARCHAR(255),
    StreamingMovies VARCHAR(255) 
);

CREATE TABLE user_services_new (
    customerID VARCHAR(255) PRIMARY KEY,
    PhoneService VARCHAR(255),
    MultipleLines VARCHAR(255),
    InternetService VARCHAR(255),
    OnlineSecurity VARCHAR(255),
    OnlineBackup VARCHAR(255),
    DeviceProtection VARCHAR(255),
    TechSupport VARCHAR(255),
    StreamingTV VARCHAR(255),
    StreamingMovies VARCHAR(255) 
);

CREATE TABLE user_payments (
    customerID VARCHAR(255) PRIMARY KEY,
    Contract VARCHAR(255),
    PaperlessBilling VARCHAR(255),
    PaymentMethod VARCHAR(255),
    MonthlyCharges FLOAT,
    TotalCharges VARCHAR(255)
);

CREATE TABLE user_payments_new (
    customerID VARCHAR(255) PRIMARY KEY,
    Contract VARCHAR(255),
    PaperlessBilling VARCHAR(255),
    PaymentMethod VARCHAR(255),
    MonthlyCharges FLOAT,
    TotalCharges VARCHAR(255)
);



CREATE TABLE user_churn (
    customerID VARCHAR(255) PRIMARY KEY,
    Churn VARCHAR(255)
);

CREATE TABLE user_churn_new (
    customerID VARCHAR(255) PRIMARY KEY,
    Churn VARCHAR(255)
);

2、加载业务数据

接下来,将这些CSV文件导入到之前建立的MySQL数据库表中。这一步骤是通过加载数据操作来实现的,确保了数据按照预期的结构被准确地存储和索引,便于后续的查询和分析。

## 往数据库里导入数据

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_demographics_train.csv'
INTO TABLE user_demographics
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_services_train.csv'
INTO TABLE user_services
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_payments_train.csv'
INTO TABLE user_payments
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_churn_train.csv'
INTO TABLE user_churn 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

## 添加测试表的数据
LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_demographics_test.csv'
INTO TABLE user_demographics_new
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_services_test.csv'
INTO TABLE user_services_new
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_payments_test.csv'
INTO TABLE user_payments_new
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

LOAD DATA LOCAL INFILE '/root/autodl-tmp/iquery项目/data/业务数据/user_churn_test.csv'
INTO TABLE user_churn_new
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

结语

通过本文的介绍和指导,我们已经能够构建出一个具备完整数据处理流程的Agent智能数据分析平台。从数据的预处理到存储管理,每一步都旨在提升数据的质量及分析的准确性。随着技术的不断进步,这个平台将在未来发挥更大的作用,帮助企业在数据波涛中稳扬帆行,捕捉每一个商机。我们期待与读者共同见证这个平台在未来数据分析和决策支持领域中的成长与突破。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/660222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于眼图(复试笔试考过,工作常用测试手段)

一、什么是眼图 眼图是 一系列数字信号 在示波器上累积而显示的图形&#xff0c;它包含了丰富的信息&#xff0c;从眼图上可以观察出码间串扰和噪声的影响&#xff0c;体现了 数字信号整体的特征&#xff0c;从而估计系统优劣程度&#xff0c;因而眼图分析是 高速互连系统 信…

调试记录-U盘枚举失败之LPM影响

现象 板子接部分U盘出现枚举失败&#xff0c;看log像是硬件信号问题&#xff0c;如&#xff1a; [ 29.186464] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.079624] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.080200]…

QT7_视频知识点笔记_67_项目练习(页面以及对话框的切换,自定义数据类型,DB数据库类的自定义及使用)

视频项目&#xff1a;7----汽车销售管理系统&#xff08;登录&#xff0c;品牌车管理&#xff0c;新车入库&#xff0c;销售统计图表&#xff09;-----项目视频没有&#xff0c;代码也不全&#xff0c;更改项目练习&#xff1a;学生信息管理系统。 学生信息管理系统&#xff1…

部署ELK日志分析系统——超详细

ELK日志分析系统 文章目录 ELK日志分析系统资源列表基础环境一、环境准备二、部署Elasticsearch软件2.1、安装Elasticsearch软件2.2、加载系统服务2.3、更改Elasticsearch主配置文件2.4、创建数据存放路径并授权2.5、启动Elasticsearch2.6、查看节点信息 三、安装Elasticsearch…

普乐蛙VR大型航天科普馆VR博物馆太空舱模拟体验馆

主题科普馆、学校、家长、同学们看过来&#xff01;&#xff01;想身临其境体验太空漫游、登陆月球、探索月球地貌吗&#xff1f;&#xff01;以新颖有趣的VR设备体验形式&#xff0c;可以在寓教于乐中学习太空知识、亲自收集月球土壤等等。接下来&#xff0c;就让小编带大家乘…

DSM驾驶行为分析系统在渣土车管理中的应用

随着科技的不断进步&#xff0c;智能交通系统正逐渐成为现代交通管理的重要工具。其中&#xff0c;DSM驾驶行为分析系统以其独特的功能和优势&#xff0c;在提升驾驶安全性、优化驾驶员管理等方面发挥着重要作用。索迪迈科技将DSM驾驶行为分析系统成功应用于渣土车管理中&#…

借助Kong记录接口的请求和响应内容

和APISIX类似&#xff0c;Kong也是一个Api GateWay。 运行在调用Api之前&#xff0c;以插件的扩展方式为Api提供管理, 如 鉴权、限流、监控、健康检查等. Kong是基于Lua语言、Nginx以及OpenResty开发的&#xff0c;拥有动态路由、负载均衡、高可用、高性能、熔断&#xff08;基…

智能仓储物流系统(WMS)系列-管理查询调整

好的应用系统应是细分简单&#xff0c;界面简洁易操作&#xff0c;程序代码简洁易懂的。

大型跨境商城系统平台的技术架构分析

随着全球化的深入发展&#xff0c;大型跨境电商平台在如今的商业环境中扮演着越来越重要的角色。这些平台不仅仅是为了提供商品和服务&#xff0c;它们更是连接不同国家和地区消费者与供应商之间的桥梁。在这篇博客中&#xff0c;我们将深入探讨大型跨境商城系统平台的技术架构…

Hadoop运行wordcount实例任务卡在job running的多种情况及解决方法

第一种&#xff1a;配置问题 这是别人的图片&#xff0c;据楼主排查解决是因为hosts配置问题… 现象&#xff1a;各种无法运行、启动 解决办法&#xff1a; 1、修改日志级别 export HADOOP_ROOT_LOGGERDEBUG,console 查看下详细信息&#xff0c;定位到具体问题解决 第二种&…

二叉树链式结构的前序_中序_后续_层序遍历【详细图解】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

前端知识1-4:性能优化进阶

性能优化进阶 Navigation Timing API navigationStart / end 表示从上一个文档卸载结束时 > 如果没有上一个文档&#xff0c;这个值和fetchStart相等 unloadEventStart / end 标识前一个网页unload的时间点 redirectStart / end 第一个http重定向发生和结束的时间 fetch…

【Numpy】深入解析numpy中的split方法

NumPy中的split方法&#xff1a;深入理解与实际应用 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主…

windows镜像虚拟机创建共享文件夹详细步骤 -- 和本地电脑传输文件

第一步&#xff1a;关闭客户机 第二步&#xff1a;右击“虚拟机名称”或菜单栏的“虚拟机”–>“设置” 网络适配器选择NAT或者其他的都可以 来到“选项”&#xff0c;启用共享文件夹&#xff0c;具体如下图&#xff1a;点击添加&#xff0c;添加主机文件夹。然后确定 第三步…

百度ERNIE系列预训练语言模型浅析(4)-总结篇

总结&#xff1a;ERNIE 3.0与ERNIE 2.0比较 &#xff08;1&#xff09;相同点&#xff1a; 采用连续学习 采用了多个语义层级的预训练任务 &#xff08;2&#xff09;不同点&#xff1a; ERNIE 3.0 Transformer-XL Encoder(自回归自编码), ERNIE 2.0 Transformer Encode…

mp4文件损坏怎么修复?三种修复办法分享!

对于我们平时使用到的MP4视频文件&#xff0c;有时候在播放时会遇到文件损坏&#xff0c;无法正常打开&#xff0c;针对这个问题&#xff0c;如何修复损坏的MP4视频文件&#xff1f; 首先&#xff0c;我们需要了解MP4文件损坏的可能原因。常见的原因包括&#xff1a;逻辑损坏、…

《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相

剧情背景 在《庆余年 2》22集中&#xff0c;林相跟大宝交代完为人处世的人生哲理之后&#xff0c;就要跟大宝告别了 在《庆余年 2》23集中&#xff0c;林相在告老还乡的路上与婉儿和大宝告别后 范闲也在与婉儿的对话中知道黑骑调动是绝密&#xff0c;并把最近一次告老还乡梅…

【服务器部署篇】Linux下Node.js的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

Kprobe实现原理

kprobe其实就是将某个要检测的指令备份&#xff0c;再替换成int3(x86)或者未定义指令(arm)来触发异常&#xff0c;再调用对应体系的异常处理函数来执行我们自定义的hook&#xff0c;执行完我们自定义的hook,再将备份的指令放回原来的位置继续往下执行 下面我们就来看下linux内核…

web题解 Easy_SQLi or 雏形系统 (解题方法思想)

1.Easy_SQLi 1&#xff09;打开题目环境&#xff0c;如下是一个类似弱密码的格式&#xff0c;但是它又说是sql&#xff0c;还是按sql注入来 2&#xff09;.这里我尝试判断它的注入类型&#xff0c;但是一只不对&#xff0c;我便想着用万能密码试试&#xff0c;怎料直接登录成功…