Python数据分析实战:从零开始构建销售预测模型

news2024/12/24 9:06:15

随着大数据时代的到来,数据分析已经成为企业决策的重要依据之一。Python作为一种强大的编程语言,在数据分析领域有着广泛的应用。本文将通过一个具体的案例——销售预测——来演示如何使用Python进行数据预处理、特征工程、模型构建与评估。无论你是Python的新手还是有一定基础的开发者,都可以从中获得有价值的信息。
在这里插入图片描述

环境搭建

必要的Python库

确保安装了以下Python库:

  • Pandas:用于数据处理和分析。
  • NumPy:用于科学计算。
  • Matplotlib:用于数据可视化。
  • Scikit-learn:用于机器学习。

可以通过pip安装这些库:

pip install pandas numpy matplotlib scikit-learn

数据集下载

为了方便演示,我们假设已经下载了一个包含历史销售记录的数据集 sales_data.csv。该数据集包含以下字段:

  • Date:日期
  • Sales:销售额
  • AdBudget:广告预算
  • StoreType:商店类型
  • CompetitionDistance:最近竞争对手的距离

数据预处理

加载数据

首先,我们需要使用Pandas来加载数据集。

import pandas as pd

# 加载数据
data = pd.read_csv('sales_data.csv')

查看数据

查看数据的前几行,了解数据的基本情况。

# 显示前几行
print(data.head())

数据清洗

对数据进行初步的清理,比如去除缺失值、异常值等。

# 删除含有缺失值的行
data.dropna(inplace=True)

# 删除重复的行
data.drop_duplicates(inplace=True)

# 查看清洗后的数据
print(data.head())

探索性数据分析 (EDA)

接下来,我们对数据进行一些探索性分析,以了解数据的分布情况。

import matplotlib.pyplot as plt

# 绘制销售额的分布图
plt.figure(figsize=(10, 5))
plt.hist(data['Sales'], bins=50, color='blue', alpha=0.7)
plt.title('Distribution of Sales')
plt.xlabel('Sales')
plt.ylabel('Frequency')
plt.show()

# 绘制广告预算与销售额的关系图
plt.figure(figsize=(10, 5))
plt.scatter(data['AdBudget'], data['Sales'], alpha=0.5)
plt.title('Ad Budget vs Sales')
plt.xlabel('Ad Budget')
plt.ylabel('Sales')
plt.show()

特征工程

创建新特征

根据业务需求,我们创建一些新的特征变量。

# 添加月份和年份特征
data['Month'] = pd.DatetimeIndex(data['Date']).month
data['Year'] = pd.DatetimeIndex(data['Date']).year

# 添加是否节假日特征
# 假设节假日列表已经定义好
holidays = ['2021-01-01', '2021-01-18', '2021-02-15', ...]
data['IsHoliday'] = data['Date'].isin(holidays).astype(int)

特征选择

根据相关性分析选择最相关的特征。

# 计算特征之间的相关性
correlation_matrix = data.corr()

# 显示相关性矩阵
print(correlation_matrix)

# 选择相关性最高的特征
selected_features = ['Month', 'AdBudget', 'IsHoliday']

构建预测模型

划分数据集

将数据分为训练集和测试集。

from sklearn.model_selection import train_test_split

# 划分数据
X = data[selected_features]
y = data['Sales']
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

# 创建模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
predictions = model.predict(X_test)

模型评估

评估模型的性能。

from sklearn.metrics import mean_squared_error, r2_score

# 计算均方根误差
rmse = np.sqrt(mean_squared_error(y_test, predictions))

# 计算决定系数
r2 = r2_score(y_test, predictions)

# 输出评估结果
print(f'Root Mean Squared Error: {rmse:.2f}')
print(f'R^2 Score: {r2:.2f}')

结论

本文通过一个实际的销售预测案例,展示了如何使用Python进行数据预处理、特征工程、模型构建与评估。虽然这是一个简化的例子,但它为我们提供了一个很好的起点。在实际项目中,还需要考虑更多的因素,比如更复杂的特征工程、模型调参等。

如果你对这个主题感兴趣或者有任何疑问,欢迎在评论区留言交流。希望这篇文章能对你有所帮助!

示例代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据
data = pd.read_csv('sales_data.csv')

# 数据清洗
data.dropna(inplace=True)
data.drop_duplicates(inplace=True)

# EDA
plt.figure(figsize=(10, 5))
plt.hist(data['Sales'], bins=50, color='blue', alpha=0.7)
plt.title('Distribution of Sales')
plt.xlabel('Sales')
plt.ylabel('Frequency')
plt.show()

plt.figure(figsize=(10, 5))
plt.scatter(data['AdBudget'], data['Sales'], alpha=0.5)
plt.title('Ad Budget vs Sales')
plt.xlabel('Ad Budget')
plt.ylabel('Sales')
plt.show()

# 特征工程
data['Month'] = pd.DatetimeIndex(data['Date']).month
data['Year'] = pd.DatetimeIndex(data['Date']).year
holidays = ['2021-01-01', '2021-01-18', '2021-02-15', ...]
data['IsHoliday'] = data['Date'].isin(holidays).astype(int)

# 特征选择
correlation_matrix = data.corr()
selected_features = ['Month', 'AdBudget', 'IsHoliday']

# 构建预测模型
X = data[selected_features]
y = data['Sales']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

# 模型评估
rmse = np.sqrt(mean_squared_error(y_test, predictions))
r2 = r2_score(y_test, predictions)

print(f'Root Mean Squared Error: {rmse:.2f}')
print(f'R^2 Score: {r2:.2f}')

请根据实际情况调整上述代码中的数据文件名、路径以及其他细节,以便更好地适应你的具体需求。

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

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

相关文章

【持续更新】Adoobe Afteer Effeects 2024 v24.5.0.052最新免费修改版

利用Adoobe Afteer Effeects CC,您可以轻松打造生动的动画标题、字幕以及下三分屏元素。无论是从零开始还是借助应用内丰富的预设动画,都能让您的文字以各种方式动起来,无论是旋转、滑动或是平移,创意无限。 将视频和图像融合在一…

负载均衡、高可用

负载均衡 负载均衡(Load Balance):可以利用多个计算机和组合进行海量请求处理,从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常…

华为HCIP证书好考吗?详解HCIP证书考试难易程度及备考策略!

华为认证体系主要分为三个层次:HCIA(Huawei Certified ICT Associate),HCIP(Huawei Certified ICT Professional)和HCIE(Huawei Certified Internetwork Expert)。作为中级认证,HCIP证书主要面向具备一定技术基础和项目实践能力的专业人士。在…

SQL 数据库设计、事务、视图 <13>

一、数据库设计 1.多表之间的关系 1) 一对一(了解) 如:人和身份证 分析:一个人只有一个身份证,一个身份证只能对应一个人 2)一对多(多对一) 如:部门和员…

【C语言】深入讲解指针(上)

文章目录 前言字符指针指针数组数组指针数组指针的定义&数组名和数组名数组指针的使用 指针和数组传参一维数组传参二维数组传参一级指针传参二级指针传参 结束 前言 之前我们初步了解了指针的概念,没有看过的大家可以移步到【C语言】初阶指针详解,…

手撕C++入门基础

1.C介绍 C课程包括:C语法、STL、高阶数据结构 C参考文档:Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …

day02--HTML CSS

一、HTML表单 表单的作用是用于采集用户再页面上填入的数据,并发送给后端服务器,经常用于用户注册、登录、xx信息添加、xx信息修改 1.1表单 1、input表示文本框 type属性:负责配置不同的输入框类型 text:普通文本框 password&…

服务器数据恢复—raid5阵列离线硬盘强制上线失败如何恢复数据?

服务器数据恢复环境: 某品牌2850服务器上有一组由6块SCSI硬盘组建的raid5磁盘阵列,上层操作系统为Redhat linuxext3文件系统。 服务器故障&初检: 服务器在运行过程中突然瘫痪,管理员对服务器中的raid进行检查后发现有两块硬盘…

P3572 [POI2014] PTA-Little Bird

[POI2014] PTA-Little Bird - 洛谷 核心思路 注意力惊人。 注意到,只有两种决策 选高过自己的树中代价最小的 或者 选低于自己的树种代价的最小的1。 取最小值 显然 不等式: 恒成立。 由此,维护一个优先队列即可。 AC 代码 #includ…

宠物空气净化器推荐买吗?清除浮毛的效果好吗

家里养了两只哈基米,它们每天的日常就是早上跑酷、中午跑酷、晚上还在跑酷,有时候看着很好玩,每天都活蹦乱跳的,这在说明它们很健康,我把它们养得很好,所以原谅它们经常跑跑跳跳得行为,虽然会把…

库室联管联控系统DW-S306|是一套智能化系统

装备库室联管联控系统(DW-S306)是依托互3D技术、RFID技术、数据库技术、AI、视频分析技术对库室装备进行统一管理、分析的信息化、智能化、规范化的系统。 本解决方案利用现有内部网络,部署部队装备库室联管联控系统,形成一套上下…

ai大模型之争-落地场景分析20240817

大模型之争: 目标:吸引客户的注意力,养成客户习惯,占领市场 结语 对于研发人员而言:浏览器插件,开发工具的大模型:通义灵码真是效率倍增的神器 对非研发普通人而言:增加很多便捷工…

DolphinScheduler集群部署问题(趟坑)总结

目录 官方文档 官方项目地址 问题解决 官方文档 DolphinScheduler | 文档中心 (apache.org) 官方项目地址 部署及使用过程中的问题可以参见项目Issue:Issues apache/dolphinscheduler GitHub GitHub - apache/dolphinscheduler at 3.2.2-release 问题解决 1、JVM在运…

ThreejsWebGPU运动残影demo

功能点 实例化SkinnedMesh 修改NodeMaterial着色器 节点材质系统 shader 语言 使用uniform和attribute 中合其他几篇博客中的内容 代码仓库 克隆后需要放到three源码同级别目录下 运行 three源码部分不在git仓库中(太大了) 使用vscode的live-server启动后访问 http://127.0.0.…

HarmonyOS NEXT - Navigation组件封装BaseNavigation

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新,请前往github查看最新代码 在demo中这些组件和工具类都通过module实现了,具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils 官方介绍 组件导航 (Navigation)(推…

​【迅为电子】RK3568驱动指南|第十七篇 串口-第197章 串口通信协议

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

vue3 ts 集成 supermap

文章目录 1. 依赖安装2. 模块声明3. css 全局引入4. 地图加载 1. 依赖安装 npm install supermapgis/iclient-leafletnpm install leaflet2. 模块声明 env.d.ts declare module leaflet {const L: any;export default L; }declare module supermapgis/iclient-leaflet3. css …

高数3.5 极值与最值

1. 极值 1.1. 定义 1.2. 推论 1.3. 求极值的步骤 1.3.1 方法1 1.3.1.1 例题

BCLinux8.*构建部署nmap 7.95

定义SPEC文件 首先从nmap的github上下载SPEC定义文件,然后进行修改,如下: # To build a static RPM, add # --define "static 1" # to the rpmbuild command line. To build without Ncat, add # --define "buildnc…

FastHTML:使用 Python 彻底改变 Web 开发

什么是 FastHTML?🌐 FastHTML 是一个现代 Python Web 应用程序框架,其真正目的是让 Python 开发人员轻松进行 Web 开发。它大大减少了对 JavaScript 和 CSS 构建交互式和可扩展 Web 应用程序的依赖。FastHTML 通过使用 Python 对象来表示 HTM…