当前位置: 首页 > news >正文

机器学习 - 加油站数据分析

一、实验数据

数据集:“加油站数据.xls”
数据集介绍:该表记录了用户在11月和12月一天24小时内的加油信息,包括:持卡人标识(cardholder)、卡号(cardno)、加油站网点号(nodeno)、加油时间(opetime)、加油升数(liter)、金额(amount)
          
 

二、实验任务

a. 按照加油时间顺序对表0中的数据进行排序;
b. 统计加油站的站点数;统计用户总数(相同卡号按照同一人计算);统计17:30~18:30期间加油的人数和平均加油量,以及该时间段的加油总量在一天中的占比;
c. 按照月份可视化展示用户卡号为“1000113200000151566”的加油量;分析用户“1000113200000151566”常去的加油站点和通常的加油时间;根据加油时间、加油量、加油站点等因素分析该用户2007年是否有行为异常的时间,并进行解释说明。
d. 分析国庆节是否可以拉动加油站的经济增长(提示:可以跟整体和当月加油量的均值和方差进行对比); 
e. 某用户周六9:00~19:00时间自由,你推荐他什么时间去哪个加油站加油,为什么;
f. 分析2007年期间,加油站点“32000966”的汽油价格波动情况;

三、前期工作

数据预处理

数据整合

import pandas as pd# 读取整个Excel文件
xls = pd.ExcelFile('D:/MecLearning/加油站数据.xls')# 创建一个空的DataFrame,用于存储所有表页的内容
combined_data = pd.DataFrame()# 遍历Excel文件的每个表页,并将其内容合并到combined_data中
for sheet_name in xls.sheet_names:df = pd.read_excel(xls, sheet_name)combined_data = pd.concat([combined_data, df], ignore_index=True)# 将合并后的数据写入一个新的Excel文件
combined_data.to_excel('D:/MecLearning/合并后的数据.xlsx', index=False)print("数据已整合并写入新的Excel文件 '合并后的数据.xlsx'")

 时间列分割

import pandas as pd# 读取原始Excel文件
df = pd.read_excel('D:/MecLearning/合并后的数据.xlsx')# 将opetime列分割成年月日和时间两列
df['Date'] = df['opetime'].str.split().str[0]  # 提取年月日部分
df['Time'] = df['opetime'].str.split().str[1]  # 提取时间部分# 将修改后的DataFrame保存到原始文件中
df.to_excel('D:/MecLearning/合并后的数据.xlsx', index=False)print("修改后的Date和Time列已保存到原始文件中")

 

正式解题

a.按照加油时间顺序对数据进行排序:

import pandas as pd# 读取Excel文件
df = pd.read_excel('D:/MecLearning/加油站数据.xls')# 按照加油时间排序
df.sort_values(by='opetime', inplace=True)# 打印排序后的数据
print(df)

b.统计加油站的站点数,统计用户总数,统计17:30~18:30期间加油的人数和平均加油量,以及该时间段的加油总量在一天中的占比:

# 统计加油站站点数
station_count = df['nodeno'].nunique()# 统计用户总数
user_count = df['cardno'].nunique()# 过滤出17:30~18:30期间的数据
filtered_data = df[(df['opetime'] >= '17:30:00') & (df['opetime'] <= '18:30:00')]# 统计该时间段加油的人数和平均加油量
people_count = filtered_data['cardholder'].nunique()
average_liter = filtered_data['liter'].mean()# 计算该时间段的加油总量占比
total_liter = filtered_data['liter'].sum()
total_day_liter = df['liter'].sum()
percentage = (total_liter / total_day_liter) * 100print(f"加油站站点数:{station_count}")
print(f"用户总数:{user_count}")
print(f"17:30~18:30期间加油的人数:{people_count}")
print(f"平均加油量:{average_liter:.2f}升")
print(f"该时间段的加油总量占比:{percentage:.2f}%")

 

c.可视化展示用户卡号为“1000113200000151566”的加油量,分析用户常去的加油站点和通常的加油时间,并分析是否有异常时间段:

import pandas as pd
import matplotlib.pyplot as plt
import warnings# 忽略特定警告
warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")# 读取Excel文件
df = pd.read_excel('D:/MecLearning/合并后的数据.xlsx')# 按照加油时间排序
df.sort_values(by='opetime', inplace=True)# 过滤出指定用户的数据,并明确创建一个副本
user_data = df[df['cardno'] == 1000113200000160000].copy()import matplotlib.pyplot as plt
import matplotlib.font_manager as fm# 查找支持的中文字体
font_path = fm.findSystemFonts(fontpaths=None, fontext="ttf")
for font in font_path:if "SimHei" in font:plt.rcParams['font.sans-serif'] = [fm.FontProperties(fname=font).get_name()]plt.rcParams['axes.unicode_minus'] = Falsebreak# 绘图代码
# 检查用户数据是否为空
if not user_data.empty:# a. 可视化用户加油量按月份user_data['opetime'] = pd.to_datetime(user_data['opetime'])  # 转换为日期时间类型user_data['month'] = user_data['opetime'].dt.month  # 提取月份monthly_data = user_data.groupby('month')['liter'].sum()  # 按月份统计加油量monthly_data.plot(kind='bar')plt.xlabel('month')plt.ylabel('liter')plt.title('User 1000113200000151566 liter')plt.show()# b. 分析用户常去的加油站点和通常的加油时间frequent_station = user_data['nodeno'].mode().values[0]frequent_time = user_data['opetime'].mode().values[0]print(f"常去的加油站点:{frequent_station}")print(f"通常的加油时间:{frequent_time}")# c. 根据因素分析异常时间段# 这部分需要进一步的数据分析和领域知识,以确定异常时间段# 查找超出正常范围的加油量mean_liter = user_data['liter'].mean()std_liter = user_data['liter'].std()threshold = mean_liter + 2 * std_liter  # 将2倍标准差作为异常阈值abnormal_periods = user_data[user_data['liter'] > threshold]if not abnormal_periods.empty:print("发现异常时间段:")print(abnormal_periods)else:print("未找到用户1000113200000151566的加油记录")

 

 

d. 分析国庆节是否可以拉动加油站的经济增长,可以比较国庆节期间的加油量与整体和当月加油量的均值和方差:

import pandas as pd
import matplotlib.pyplot as plt
import warnings# 忽略特定警告
warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")# 读取Excel文件
df = pd.read_excel('D:/MecLearning/合并后的数据.xlsx')# 假设国庆节日期范围为 '2007-10-01' 到 '2007-10-07'
national_day_data = df[(df['Date'] >= '2007-11-01') & (df['Date'] <= '2007-11-07')]# 计算国庆节期间的加油量均值和方差
national_day_mean = national_day_data['liter'].mean()
national_day_var = national_day_data['liter'].var()# 计算整体加油量均值和方差
overall_mean = df['liter'].mean()
overall_var = df['liter'].var()# 计算当月加油量均值和方差
current_month_data = df[df['Date'].str.startswith('2007-11')]
current_month_mean = current_month_data['liter'].mean()
current_month_var = current_month_data['liter'].var()# 打印比较结果
print(f"国庆节期间的加油量均值:{national_day_mean:.2f}升")
print(f"国庆节期间的加油量方差:{national_day_var:.2f}")
print(f"整体加油量均值:{overall_mean:.2f}升")
print(f"整体加油量方差:{overall_var:.2f}")
print(f"当月加油量均值:{current_month_mean:.2f}升")
print(f"当月加油量方差:{current_month_var:.2f}")

 

e. 推荐某用户周六9:00~19:00时间自由的加油时间和加油站点:

# 过滤出周六的数据
saturday_data = df[df['opetime'].dt.weekday == 5]# 过滤出9:00~19:00的数据
saturday_data = saturday_data[(saturday_data['opetime'] >= '09:00:00') & (saturday_data['opetime'] <= '19:00:00')]# 找出用户最常去的加油站点
frequent_station = saturday_data['nodeno'].mode().values[0]# 找出平均加油量最高的时间段
best_time = saturday_data.groupby('opetime')['liter'].mean().idxmax()print(f"推荐加油时间:{best_time}")
print(f"推荐加油站点:{frequent_station}")

f. 分析加油站点“32000966”的汽油价格波动情况:

计算price

import pandas as pd
import matplotlib.pyplot as plt
import warnings# 忽略特定警告
warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")# 读取Excel文件
df = pd.read_excel('D:/MecLearning/合并后的数据.xlsx')# 检查是否包含 'amount' 和 'liter' 列
if 'amount' in df.columns and 'liter' in df.columns:# 新增 'price' 列df['price'] = df['amount'] / df['liter']# 保存带有 'price' 列的新数据框到Excel文件df.to_excel('D:/MecLearning/合并后的数据_with_price.xlsx', index=False)
else:print("数据中缺少 'amount' 或 'liter' 列。")

 分析加油站点“32000966”的汽油价格波动

import pandas as pd
import matplotlib.pyplot as plt
import warnings# 忽略特定警告
warnings.filterwarnings("ignore", category=UserWarning, module="matplotlib")# 读取Excel文件
df = pd.read_excel('D:/MecLearning/合并后的数据_with_price.xlsx')# 假设数据集包含汽油价格字段为'price'
station_data = df[df['nodeno'] == '32000966']
station_data['Date'] = pd.to_datetime(station_data['Date'])  # 转换为日期时间类型
station_data.sort_values(by='Date', inplace=True)  # 按照加油时间排序import matplotlib.pyplot as plt
import matplotlib.dates as mdates# 设置日期时间刻度格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))  # 设置刻度间隔为一个月# 绘制汽油价格的折线图
plt.plot(station_data['Date'], station_data['price'])
plt.xlabel('日期')
plt.ylabel('汽油价格')
plt.title('2007年加油站点32000966汽油价格波动情况')
plt.xticks(rotation=45)  # 旋转x轴标签,以防止重叠
plt.grid()  # 添加网格线
plt.show()

相关文章:

机器学习 - 加油站数据分析

一、实验数据 数据集&#xff1a;“加油站数据.xls” 数据集介绍&#xff1a;该表记录了用户在11月和12月一天24小时内的加油信息&#xff0c;包括&#xff1a;持卡人标识&#xff08;cardholder&#xff09;、卡号&#xff08;cardno&#xff09;、加油站网点号&#xff08;n…...

基于CMFB余弦调制滤波器组的频谱响应matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、CMFB余弦调制滤波器组原理 4.2、CMFB调制过程 4.3、CMFB特点 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................…...

helm一键部署grafana

一键部署命令 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack暴露服务 kubectl port-forward --address 0.0.0.0 deployment/prometheus-gr…...

pytorch复现_NMS

NMS&#xff08;非极大值抑制&#xff09;阈值是用于控制在一组重叠的边界框中保留哪些边界框的参数。当检测或识别算法生成多个边界框可能涵盖相同物体时&#xff0c;NMS用于筛选出最相关的边界框&#xff0c;通常是根据它们的置信度分数。 具体来说&#xff0c;NMS的工作原理…...

备份doris数据到minio

1、MINIO 设置 创建服务账户&#xff0c;记住ACCESS_KEY和SECRET_KEY 创建Buckets doris 设置region 在首页查看服务ip和端口号 2、创建S3备份库 因为minio是兼容S3协议的&#xff0c;所以可以通过s3协议链接minio。 CREATE REPOSITORY minio WITH S3 ON LOCATION "s3://…...

Linux中正则表达式等

grep命令&#xff1a;主要作用就是过滤查找文本内容 常用的选项有&#xff1a; -m 数字:匹配几次之后停止&#xff0c;按行匹配&#xff0c;不是按字符个数&#xff0c;例如 -v:取反 例如: -n:显示匹配的行号 例如&#xff1a; -c:仅显示匹配的行数&#xff0c;不显示匹配内…...

记一次并发问题 Synchronized 失效

记一次并发问题 Synchronized 失效 场景&#xff1a;为避免信息提交重复&#xff0c;给事务方法增加了synchronized修饰符&#xff0c;实际场景中仍然无法完全避免重复&#xff0c;原因是因为在第一个线程执行完synchronized代码段后&#xff0c;此时spring还未完成事务提交&a…...

手机平板摄像头如何给电脑用来开视频会议

环境&#xff1a; Iriun Webcam EV虚拟摄像头 钉钉会议 问题描述&#xff1a; 手机平板摄像头如何给电脑用来开视频会议 解决方案&#xff1a; 1.下载软件 手机端和电脑端都下载这个软件&#xff0c;连接同一局域网打开软件连接好 另外一款软件Iriun 也是一样操作 2.打…...

windows docker desktop 更换镜像 加速

最近 docker hub 访问不了; 经过研究 可以通过添加 代理镜像网址 添加代理服务器的方式 实现完美访问 1添加镜像网站 修改成国内镜像地址就能享受到飞一般的速度&#xff0c;但有一个问题&#xff0c;部分站点镜像不全或者镜像比较老&#xff0c;建议使用多个镜像站。 https…...

linux下多机器ssh免密码登录配置

20,21,22,23等4台机器配置ssh免密登陆 确认sshd配置 查看/etc/ssh/sshd_config文件&#xff0c;确认如下配置没有被注释掉&#xff1a; AuthorizedKeysFile .ssh/authorized_keys每一台机器修改hosts配置主机名&#xff08;可选&#xff09; 执行ssh命令&#xff0c;如…...

【IDEA使用maven package时,出现依赖不存在以及无法从仓库获取本地依赖的问题】

Install Parent project C:\Users\lxh\.jdks\corretto-1.8.0_362\bin\java.exe -Dmaven.multiModuleProjectDirectoryD:\学习\projectFile\study\study_example_service "-Dmaven.homeD:\Program Files\JetBrains\IntelliJ IDEA2021\plugins\maven\lib\maven3" "…...

Flink 统计接入的数据量-滚动窗口和状态的使用

1、概述 在生产场景值&#xff0c;经常需要和上游、下游对数&#xff0c;离线场景可以直接 group by 再 count &#xff0c;但是实时场景中&#xff0c;如果使用 kafka 作为中间件&#xff0c;中间经过几个 job 的过滤转化后&#xff0c;再对照像 Doris 或 Clickhouse 中最终层…...

SpringBoot快速整合canal1.1.5(TCP模式)

SpringBoot快速整合canal1.1.5&#xff08;TCP模式&#xff09; 安装并配置MySQL主从⭐ 1&#xff1a;Docker安装MySQL8.0.28 docker pull mysql:8.0.282&#xff1a;创建目录&#xff1a; mkdir -p /usr/local/mysql8/data mkdir -p /usr/local/mysql8/log mkdir -p /usr/…...

docker打包container成image,然后将image上传到docker hub

第一步&#xff1a;停止正在运行的容器 docker stop <container_name> eg: docker stop xuanjie_mlir 第二步&#xff1a;将对应的container打包成image docker commit <container_id> <镜像名&#xff1a;版本> eg&#xff1a;docker commit 005672e6d97a…...

设计模式—创建型模式之原型模式

设计模式—创建型模式之原型模式 原型模式&#xff08;Prototype Pattern&#xff09;用于创建重复的对象&#xff0c;同时又能保证性能。 本体给外部提供一个克隆体进行使用。 比如我们做一个SjdwzMybatis&#xff0c;用来操作数据库&#xff0c;从数据库里面查出很多记录&…...

Zygote进程通信为什么用Socket而不是Binder?

Zygote进程是Android系统中的一个特殊进程&#xff0c;它在系统启动时被创建&#xff0c;并负责孵化其他应用进程。它的主要作用是预加载和共享应用进程的资源&#xff0c;以提高应用启动的速度。 在Android系统中&#xff0c;常用的进程通信方式有以下几种&#xff1a; Intent…...

API接口加密,解决自动化中登录问题

一、加密方式 AES&#xff1a;对称加密&#xff0c;快RAS&#xff1a;非对称加密&#xff0c;慢AESRAS&#xff1a;安全高效 加密过程&#xff1a;字符串》字节流》加密的字节流&#xff08;算法&#xff09;&#xff0c;解密有可能出现乱码&#xff0c;所以不能直接转成字符…...

COCOS2DX3.17.2 Android升级targetSDK30问题解决方案

一、luajit不兼容问题 不兼容版本&#xff1a;【2.1.0-bate2、2.1.0-bate3都存在异常】 出问题系统&#xff1a;Android11&#xff1b;Android10的系统部分机型有问题&#xff0c;部分机型正常 异常点1&#xff1a;c调用lua接口&#xff0c;pushObjiect的时候crash 异常点2…...

HarmonyOS鸿蒙原生应用开发设计- 隐私声明

HarmonyOS设计文档中&#xff0c;为大家提供了独特的隐私声明&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的内容产生的侵权意外情况等&#xff…...

【面试精选】00后卷王带你三天刷完软件测试面试八股文

前言 本人普通本科计算机专业&#xff0c;做测试也有3年的时间了&#xff0c;讲下我的经历&#xff0c;我刚毕业就进了一个小自研薪资还不错&#xff0c;有10.5k&#xff08;个人觉得我很优秀&#xff09;&#xff0c;在里面呆了两年&#xff0c;积累了一些的经验和技能&#…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…...

使用python进行图像处理—图像变换(6)

图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切&#xff08;shear&#xff09;以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…...

Ubuntu 安装 Mysql 数据库

首先更新apt-get工具&#xff0c;执行命令如下&#xff1a; apt-get upgrade安装Mysql&#xff0c;执行如下命令&#xff1a; apt-get install mysql-server 开启Mysql 服务&#xff0c;执行命令如下&#xff1a; service mysql start并确认是否成功开启mysql,执行命令如下&am…...