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

news2024/11/24 17:56:46

一、实验数据

数据集:“加油站数据.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) * 100

print(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'] = False
        break

# 绘图代码
# 检查用户数据是否为空
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()


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

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

相关文章

React Native 样式及其布局

React Native 样式及其布局 参考 https://reactnative.cn/docs/flexbox 一、样式 在 React Native 中&#xff0c;你并不需要学习什么特殊的语法来定义样式。我们仍然是使用 JavaScript 来写样式。所有的核心组件都接受名为style的属性。这些样式名基本上是遵循了 web 上的 …

液滴微流控,助力国人单细胞

单细胞RNA测序&#xff08;scRNA-seq&#xff09;技术已经成为揭示单个细胞内RNA转录本的异质性和复杂性&#xff0c;以及揭示组织/器官/生物体内不同细胞类型的组成和功能的最先进的方法。迄今为止&#xff0c;单细胞RNA测序技术已经在动植物等真核细胞中取得了许多重要的发现…

【Python基础】IF、Else判断以及Whlie、for循环介绍符实例

运算符 1. if 语句体验2.逻辑运算3. if 语句进阶4.While循环4.1基本语法 5.break 和 continue6. for循环 1. if 语句体验 if 判断语句基本语法 在 Python 中&#xff0c;if 语句 就是用来进行判断的&#xff0c;格式如下&#xff1a; if 要判断的条件: 条件成立时&#xff0c;…

EasyCVR智能边缘网关用户信息泄漏漏洞

EasyCVR智能边缘网关用户信息泄漏漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"EasyCVR" 漏洞复现1. 构造poc2. 获取管理员账户密码3. 登录后台 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平…

车载终端构筑智慧工厂:无人配送车的高效物流体系

​随着科技的不断进步和应用&#xff0c;智能化已经成为许多领域的关键词。在物流行业中&#xff0c;随着无人配送车的兴起和智慧工厂的崛起&#xff0c;车载终端正引领着无人配送车的科技变革之路。 文章同款&#xff1a;https://www.key-iot.com/iotlist/sv900.html 车载终端…

springboot+vue基于hive旅游数据的分析与应用【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

成本中心修改后推送其他SAP系统更新成本中心(ALE)

成本中心修改后推送给其他系统 KSH2成本中心组新增成本中心&#xff08;服务器A 400client&#xff09; KAVB 输入成本中心组、控制范围、目标系统 Y 查看&#xff08;服务器B 430client&#xff09;

ubuntu 开机进入 advanced 选项 可选择内核 kernel

Ubuntu版本为22.04 1 .首先再命令窗口&#xff0c;输入 sudo gedit /etc/default/grub 命令打开grub配置文件 2.1 具体操作&#xff1a; 将 GRUB_TIMEOUT_STYLEhidden 注释掉 将 GRUB_TIMEOUT的值改为20&#xff08;界面引导显示时间&#xff09; 将GRUB_CMDLINE_LINUX_DEFA…

S32K312 DTCM在代码中使用示例

TCM是一种被直接集成在CPU芯片中的高速缓存&#xff0c;TCM又分为ITCM&#xff08;Instruction TCM&#xff09;和DTCM&#xff08;Data TCM&#xff09;。ITCM是用来存储代码段的&#xff0c;DTCM是用来存储数据的。 为什么要使用DTCM来存储数据&#xff1f;1&#xff09;频繁…

APP攻防--签名组件权限

前言 上文说到了反编译的方式&#xff0c;这期就深入到APP内部&#xff0c;即客户端安全。 安装包签名 在Android操作系统中&#xff0c;每个应用程序&#xff08;APP&#xff09;安装包&#xff08;APK&#xff09;都必须经过数字签名&#xff0c;以确保应用的完整性和来源…

【从删库到跑路】详解MySQL数据库的视图以及相关操作

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f384;视图介绍&#x1f384;视图特点&#x1f33a;基本操作⭐创建视图⭐查询…

java--对象在计算机中的执行原理

1.多个对象在计算机中的执行原理 解析&#xff1a;首先是先回扫描(scan)class文件&#xff0c;加载进入方法区&#xff0c;然后在扫描文件内部的main方法&#xff0c;扫描后会在栈内存中创造一个main空间&#xff0c;然后继续扫描第一节创造对象的话&#xff0c;然后就会在方法…

金融帝国实验室(Capitalism Lab)即将隆重推出『出口公司』功能

『金融帝国实验室』&#xff08;Capitalism Lab&#xff09;即将迎来v10.0.00重大版本更新&#xff01; 并将为〔实验性DLC〕引入全新【出口公司】功能。 ————————————— 【出口公司】允许您&#xff1a; >通过出口客户搜索查找全球买家&#xff1b; >建立…

企业如何防止文件泄密

企业如何防止文件泄密 安企神数据防泄密系统下载使用 在互联网飞速发展的时代&#xff0c;数据成为大多数公司的重要组成部分&#xff0c;数据安全则是企业的安身立命之本&#xff0c;管理者应当重视保密措施。企业应当采取一系列措施来防止文件泄密&#xff0c;以确保敏感信…

消息中间件——RabbitMQ(二)各大主流消息中间件综合对比介绍!

前言 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&#xff0c;炙手可热的Kafka&a…

Ambari-2.7.4和HDP-3.1.4安装

提示&#xff1a;Ambari-2.7.4和HDP-3.1.4安装 Hadoop集群安装目录 一、所需机器二、系统环境配置2.1准备2.2配置5台主机的SSH免密登录&#xff08;所有机器 &#xff09;2.3同步时钟&#xff0c;开启NTP服务&#xff08;所有机器&#xff09;2.4每台节点里配置FQDN&#xff0c…

10个技巧,确保项目团队按时完成任务

作为项目经理&#xff0c;你的绩效取决于有效的截止日期管理&#xff0c;以便按时交付项目。 然而&#xff0c;我们都知道&#xff0c;项目很少会按计划进行&#xff0c;因此&#xff0c;在时间和截止日期方面&#xff0c;能够驾驭项目中出现的众多不确定因素非常重要。本文将…

指针运算笔试题解析(1)

指针运算笔试题解析 题目一解析 题目二解析 题目三解析 题目四解析 题目五解析 题目一 #include<stdio.h> int main() {int a[5]{1,2,3,4,5};int *p(int*)(&a1);printf("%d %d",*(a1),*(p-1));return 0; } 答案&#xff1a;2 5 解析 int a[5]{1,2,3,4,5…

vscode1.83远程连接失败

&#xff08;报错信息忘记截图了 总之卡在vscode-server.tar.gz的下载那里&#xff0c;一直404&#xff0c;删了C:\Users\Administrator\.ssh\known_hosts也不管用 看了一下vscode1.83的commitID为a6606b6ca720bca780c2d3c9d4cc3966ff2eca12&#xff0c;网友说可以通过以下网…

XUnit单元测试(实用项目)——看完不会用你打我

一、简介 xUnit.net 是针对 .NET 的免费、开源单元测试框架&#xff0c;可并行测试、数据驱动测试。测试项目需要同时引用 xUnit和被测试项目&#xff0c;从而对其进行测试。测试编写完成后&#xff0c;用 Test Runner 来测试项目&#xff0c;Test Runner 可以读取测试代码&am…