基于Python数据分析的详细讲解+实战(含代码)

news2024/10/7 10:24:12

名字:阿玥的小东东

学习:Python、C/C++

主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主

目录

载入数据集

数据预处理

探索性数据分析

发现相关性

开发模型

模型部署

Python数据分析代码实战


在这个实战中,我们将使用Python来对一个销售数据集进行分析和处理,并以此生成有关销售趋势和产品性能的报告。具体来说,我们将:

  1. 载入数据集
  2. 进行数据预处理,包括清洗和转换数据
  3. 进行探索性数据分析,包括可视化和统计分析
  4. 发现相关性,包括特征工程和相关性分析
  5. 开发模型,包括模型选择、训练和评估
  6. 模型部署,包括将模型用于新数据的预测

这个实战将展示如何使用Python的pandas、matplotlib、seaborn和scikit-learn这些库来处理和分析数据。

  1. 载入数据集

我们首先需要导入需要的库,包括pandas、matplotlib和seaborn等。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

然后我们将数据集加载到一个DataFrame中。

df_sales = pd.read_csv('sales_data.csv')

  1. 数据预处理

在开始探索数据之前,我们需要对数据进行一些预处理。这包括检查缺失值、清洗数据以及转换数据类型等。

我们首先检查缺失值。

df_sales.isnull().sum()

然后我们根据需要填充或删除缺失值。

df_sales = df_sales.dropna() # 删除含有缺失值的行

接下来,我们需要清洗数据,包括删除不需要的列、重命名列名称等等。

df_sales = df_sales.drop(['Order ID', 'Ship Date', 'Ship Mode'], axis=1) # 删除不需要的列
df_sales = df_sales.rename(columns={'Order Date': 'Order_Date', 'Customer Name': 'Customer_Name', 'Product Name': 'Product_Name', 'Sales': 'Sales_USD'}) # 重命名列名称

我们还需要对数据类型进行转换。

df_sales['Order_Date'] = pd.to_datetime(df_sales['Order_Date']) # 转换Order_Date列为时间类型
df_sales['Product_Category'] = df_sales['Product_Name'].str.split(' - ', expand=True)[0] # 从Product_Name中提取Product_Category列

最后我们需要确保每个数据类型都正确。

df_sales.dtypes

  1. 探索性数据分析

现在我们可以开始探索销售数据集。我们需要使用pandas和seaborn这两个库进行探索性数据分析。

首先,我们可以使用describe函数来获取数据的基本统计信息。

df_sales.describe()

然后我们可以使用seaborn绘制箱线图来可视化销售数据的分布。

sns.boxplot(data=df_sales, x='Sales_USD')

接下来,我们可以绘制每个产品类别的销售额分布。

sns.barplot(data=df_sales, x='Product_Category', y='Sales_USD', ci=None)

然后我们可以使用seaborn的散点图和回归线来显示销售额和利润之间的关系。

sns.regplot(data=df_sales, x='Sales_USD', y='Profit_USD')

最后,我们可以使用matplotlib绘制每月的销售额。

df_monthly_sales = df_sales.set_index('Order_Date').resample('M').sum()

plt.plot(df_monthly_sales['Sales_USD'])
plt.xlabel('Month')
plt.ylabel('Sales (USD)')

  1. 发现相关性

此时,我们已经完成了关于数据的探索性数据分析,接下来我们需要探究销售额和其他特征之间的相关性。我们将使用特征工程来创建新特征,并使用scikit-learn的相关性矩阵和热力图来探索特征之间的相关性。

特征工程

首先,我们将DataFrame中的分类特征转换为数字特征。

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df_sales['Customer_Name_Encoded'] = le.fit_transform(df_sales['Customer_Name'])
df_sales['Product_Name_Encoded'] = le.fit_transform(df_sales['Product_Name'])
df_sales['Product_Category_Encoded'] = le.fit_transform(df_sales['Product_Category'])

然后我们将数据划分为特征和目标列。

X = df_sales.drop(['Sales_USD'], axis=1)
y = df_sales['Sales_USD']

接下来,我们将使用scikit-learn的相关性矩阵和热力图来探索特征之间的相关性。

corr_matrix = df_sales.corr()
sns.heatmap(corr_matrix, annot=True)

  1. 开发模型

现在,我们将使用scikit-learn训练和比较不同模型的性能。

首先,我们需要对数据进行划分,将数据集划分为训练集和测试集。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

接下来,我们将比较不同模型的性能,包括线性回归、决策树和随机森林模型。

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

linear_model = LinearRegression()
tree_model = DecisionTreeRegressor(random_state=42)
forest_model = RandomForestRegressor(random_state=42)

models = [linear_model, tree_model, forest_model]

for model in models:
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    mae = mean_absolute_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print(f"Model: {type(model).__name__} | MSE: {mse} | MAE: {mae} | R2: {r2}")

  1. 模型部署

最后,我们将使用训练好的模型对新数据进行预测。

new_data = pd.read_csv('new_data.csv')
new_data = new_data.drop(['Order ID', 'Ship Date', 'Ship Mode'], axis=1)
new_data['Order_Date'] = pd.to_datetime(new_data['Order_Date'])
new_data['Product_Category'] = new_data['Product Name'].str.split(' - ', expand=True)[0]
new_data['Customer_Name_Encoded'] = le.fit_transform(new_data['Customer Name'])
new_data['Product_Name_Encoded'] = le.fit_transform(new_data['Product Name'])
new_data['Product_Category_Encoded'] = le.fit_transform(new_data['Product_Category'])

new_X = new_data.drop(['Sales'], axis=1)
new_y = new_data['Sales']

forest_model.fit(X, y)
new_y_pred = forest_model.predict(new_X)

print(new_y_pred)

Python数据分析代码实战

在这个实战中,我们将使用Python对一个电商数据集进行分析,以了解访问量、销售额、订单数量等指标的趋势,并针对性地提出一些策略性建议。具体来说,我们将:

  1. 载入数据集
  2. 进行数据预处理,包括清洗和转换数据
  3. 进行探索性数据分析,包括数据可视化和统计分析
  4. 发现相关性,包括特征工程和相关性分析
  5. 提出策略性建议

这个实战将展示如何使用Python的pandas、matplotlib、seaborn等库来处理和分析数据。

  1. 载入数据集

我们首先需要导入需要的库,包括pandas、matplotlib等。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

然后我们将数据集加载到一个DataFrame中。

df = pd.read_csv('ecommerce_data.csv', encoding='ISO-8859-1')

  1. 数据预处理

在开始探索数据之前,我们需要对数据进行一些预处理。这包括检查缺失值、清洗数据、转换数据类型等。

首先,我们检查缺失值并删除含有缺失值的行。

df.isnull().sum()
df = df.dropna()

然后我们删除不需要的列。

df = df.drop(['InvoiceNo', 'StockCode', 'Description', 'InvoiceDate', 'Country'], axis=1)

接下来,我们需要清洗数据,包括转换数据类型和去除异常值等。

df['CustomerID'] = df['CustomerID'].astype(int)
df['UnitPrice'] = df['UnitPrice'].astype(float)

df = df[(df['Quantity'] > 0) & (df['UnitPrice'] > 0)]

最后,我们需要确保每个数据类型都正确。

df.dtypes

  1. 探索性数据分析

现在我们可以开始探索销售数据集。我们需要使用pandas和seaborn这两个库进行探索性数据分析。

首先,我们可以使用describe函数来获取数据的基本统计信息。

df.describe()

然后我们可以使用seaborn绘制每月的销售额变化。

df['InvoiceMonth'] = df['InvoiceYearMonth'].apply(lambda x: x[:4] + '-' + x[4:])

monthly_sales = df.groupby(['InvoiceMonth'])['Sales'].sum().reset_index()

plt.figure(figsize=(12, 6))
sns.lineplot(data=monthly_sales, x='InvoiceMonth', y='Sales')
plt.xticks(rotation=45)
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

接下来,我们可以绘制每个国家的销售额分布。

country_sales = df.groupby(['Country'])['Sales'].sum().reset_index().sort_values(by='Sales', ascending=False)

plt.figure(figsize=(12, 6))
sns.barplot(data=country_sales, x='Country', y='Sales')
plt.xticks(rotation=45)
plt.xlabel('Country')
plt.ylabel('Sales')
plt.show()

然后我们可以绘制每个产品种类的销售额。

category_sales = df.groupby(['Category'])['Sales'].sum().reset_index().sort_values(by='Sales', ascending=False)

plt.figure(figsize=(12, 6))
sns.barplot(data=category_sales, x='Category', y='Sales')
plt.xticks(rotation=45)
plt.xlabel('Category')
plt.ylabel('Sales')
plt.show()

最后,我们可以使用seaborn的散点图和回归线来显示销售额和订单数量之间的关系。

sns.regplot(data=df, x='Quantity', y='Sales')

  1. 发现相关性

此时,我们已经完成了关于数据的探索性数据分析,接下来我们需要探究销售额和其他特征之间的相关性。我们将使用特征工程来创建新特征,并使用scikit-learn的相关性矩阵和热力图来探索特征之间的相关性。

特征工程

我们需要将类别特征转换为数字特征。

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df['Category_Encoded'] = le.fit_transform(df['Category'])
df['City_Encoded'] = le.fit_transform(df['City'])
df['State_Encoded'] = le.fit_transform(df['State'])

然后我们将数据划分为特征和目标列。

X = df.drop(['Sales'], axis=1)
y = df['Sales']

接下来,我们将使用scikit-learn的相关性矩阵和热力图来探索特征之间的相关性。

corr_matrix = df.corr()
sns.heatmap(corr_matrix, annot=True)

  1. 提出策略性建议

对于一个电商平台,如何优化销售额是非常重要的。根据以上的数据分析和特征相关性分析,我们可以提出以下几点策略性建议:

  • 优化用户购物体验:通过数据分析发现,用户关于退货产品的数量和总支出的相关性不高,表明退货率不是购物体验的决定因素。因此,电商平台应该致力于优化网站的购物体验,例如提供更多优惠券和折扣,在用户购物车页面提示更多相关产品等。
  • 提高广告效果:通过数据分析发现,销售额和广告支出之间的相关性比较高。因此,电商平台应该提高其广告效果,包括改进广告文案和图片,选择更好的广告渠道,以及调整广告投放策略。
  • 优化产品种类:通过数据分析发现,不同产品种类之间的销售额差异较大,因此,电商平台应该优化产品种类,在销售额较高的产品种类上进行加强和扩展。

结论

在本实例中,我们使用Python对电商数据集进行了探索性数据分析和特征相关性分析,并基于这些分析提出了策略性建议,以改进销售业绩。这个实例展示了如何使用Python进行数据分析和建立预测模型,提供了一种将Python应用于实际业务问题的方法。

在本实例中,我们使用Python对销售数据集进行探索性数据分析和特征工程,并使用线性回归、决策树和随机森林模型进行训练和比较。最后,我们使用训练好的模型对新数据进行了预测。这个实例展示了如何使用Python进行数据分析和建立预测模型,提供了一种将Python应用于实际业务问题的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue基础(一)

前言: Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。 …

【Vue2.0源码学习】内置组件篇-keep-alive

文章目录 1. 前言2 用法回顾3. 实现原理propscreateddestroyedmountedrender 4. 生命周期钩子5. 总结 1. 前言 <keep-alive> 是 Vue 实现的一个内置组件&#xff0c;也就是说 Vue 源码不仅实现了一套组件化的机制&#xff0c;也实现了一些内置组件&#xff0c;关于<k…

区块链系统探索之路:比特币核心的编译和探索

前几节我们研究了椭圆曲线&#xff0c;有限域等比特币和区块链所依赖的底层算法。问题在于这些算法不是独立存在&#xff0c;而是作为模块嵌入到整个区块链的体系之中。因此不了解区块链的体系组成或应用场景&#xff0c;那么我们就很难理解这些算法衍生出来的概念或者基于他们…

【硬件1】platform/i2c总线

文章目录 1.platform总线&#xff1a;相对于USB/PCI/I2C/SPI等物理总线来说&#xff0c;platform总线是一种虚拟的总线&#xff0c;实际并不存在&#xff0c;总线的工作就是就是完成总线下的设备和驱动之间的匹配。也就是在左手中找到与右手相匹配的设备驱动&#xff0c;并完成…

基于Java+Springboot的智能图书馆座位管理系统设计和实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

MySQL实战解析底层---为什么只查一行的语句,也执行这么慢

目录 前言 第一类&#xff1a;查询长时间不返回 第二类&#xff1a;查询慢 前言 一般情况下&#xff0c;如果说查询性能优化&#xff0c;首先会想到一些复杂的语句&#xff0c;想到查询需要返回大量的数据但有些情况下&#xff0c;“查一行”&#xff0c;也会执行得特别慢这…

第11讲:BootService 核心实现解析,Agent 的“地基”原来是这样的

之前介绍了 ServiceManager 加载并初始化 BootService 实现的核心逻辑。下图展示了 BootService 接口的所有实现类&#xff0c;本课时将深入分析这些 BootService 实现类的具体逻辑&#xff1a; 网络连接管理 在前面的介绍中提到 SkyWalking Agent 会定期将收集到的 JVM 监控和…

基于Java+Swing实现雷电小游戏

基于JavaSwing实现雷电小游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于java的雷电游戏基本功能包括&#xff1a;敌方飞机随机飞行、我方飞机手动控制飞行&#xff0c;射击比拼&#xff0c;游戏闯关等。本系统结构如下&#xff1a; &#xff08;1&…

Java中线程的创建与使用、Thread类的常用方法

1、什么是进程与线程 1.1 含义 1.1.1 进程 进程是指正在运行的程序的实例。在操作系统中&#xff0c;一个进程代表了一个正在执行的程序&#xff0c;它包括了程序的代码、数据以及程序执行时所需要的系统资源。 最直观的就是我们任务管理器&#xff1a; 任务管理器中的每一…

Centos7安装和配置Mysql5.7

第一步&#xff1a;获取mysql YUM源 进入mysql官网获取RPM包下载地址&#xff0c;下面就是mysql5.7的Yum仓库的rpm包&#xff1a; mysql5.7链接地址&#xff1a; https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 第二步&#xff1a;下载和安装mysql…

卷福的十年同学会

1.一通电话 某个上班日的午休时间里&#xff0c;小卷正趴在办公桌玩着手机准备睡一会&#xff0c;“叮咚”&#xff0c;一条微信消息弹出来&#xff0c;是大学的班群消息。 “五一期间大家来学校聚一下吧&#xff0c;今年是我们成为同学的十年了&#xff0c;大家提前报名哦&a…

Qt设置软件启动动画(支持图片和视频俩种方式)

目录 软件启动动画效果静态背景动态背景 程序启动动画QSplashScreen启动时加载静态图片启动时加载视频动画将启动动画置于所有窗口顶层 软件启动动画效果 先来看效果。下面录制了加载图片和gif动图的俩种效果。 静态背景 动态背景 这里我加载了一个gif的动图&#xff0c;你也…

AMBA AHB的burst termination

前言 在AMBA AHB协议中&#xff0c;AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。Burst传输中支持incrementing和wrapping。 Incrementing burst用于访问顺序的memory地址&#xff0c;burst中每个拍的地址都…

数据压缩的常用手段以及方法

0. 简介 之前我们在《经典文献阅读之–R-PCC(基于距离图像的点云压缩方法)》中提到了&#xff0c;我们可以通过一些算法层面来完成数据的压缩&#xff0c;而其实更简单或者说更直接的方法就是使用half这种形式来完成数据压缩。 1. half和float Half是用16位表示浮点数的一种…

什么是 FL Studio?2023年最新版 FL Studio21.0.3.3517中文版图文安装教程

什么是 FL Studio&#xff1f; FL Studio 是一个数字音频工作站 (DAW)。该软件借助各种编辑工具、插件和效果&#xff0c;让您可以录制、混音和掌握高度复杂的音乐作品。FL Studio 还允许您注册和编辑 MIDI 文件&#xff0c;您可以在众多可用乐器之一上演奏这些文件。FL Studi…

树莓派 python3.9降级为python3.7

今天烧录了一个官方烧录器中的最新的镜像&#xff0c;打开之后python的版本是3.9的&#xff0c;之前做的一些东西都是基于python3.7的&#xff0c;再重新架构十分麻烦&#xff0c;于是干脆就把python3.9进行降级&#xff0c;降为python3.7. 这个镜像不像之前的一些镜像&#x…

通用商城项目(上)

通用型产品&#xff08;电商&#xff09;发布解决方案落地实现&#xff08;基于分布式微服务技术栈&#xff1a; SpringBootSpring CloudSpring Cloud Alibaba VueElementUl MyBatis-Plus MySQL Git Maven Linux Nginx Docker 前后端分离&#xff09; 项目技术栈和前置技术 项…

【软件设计师暴击考点】操作系统知识高频考点暴击系列【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

Web网页制作-知识点(1)——HTML5介绍、HTML5的DOCTYPE声明、HTML基本骨架、标题标签、段落 换行、水平线图片图片路径、超链接

目录 HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 标题标签 段落、换行、水平线 图片 图片路径* 超链接 HTML5介绍 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后缀以.html结尾 HTML是一种标记语言&#xff0c;标…

自动化神器AutoIt,告别重复劳动

概要 计算机已经进入大众家庭多年&#xff0c;它给我们带来了便利&#xff0c;却也带来了枯燥、重复、机械的重复工作。今天&#xff0c;我要和大家分享一款自动化工具AutoIt&#xff0c;它能够帮助你告别这些烦恼&#xff0c;并提高工作效率。 AutoIt 是一款完全免费的Windows…