数据分析小白入门篇,2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,定价评价
想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送,微信随时解答你的疑问
公众号“不太灵光的程序员” 同时发布《2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,定价评价》
2020年第十届MathorCup高校数学建模挑战赛题目
A题 无车承运人平台线路定价问题
本文解决问题2 的 定价评价 问题
想了解问题1 相关解题思路,关注公众号或点击下方链接:
数据分析小白入门篇,mathorcup数学建模 A题 无车承运人平台线路定价问题,特征间的相关性分析
想了解问题3 相关解题思路,关注公众号或点击下方链接:
决策树预测成本价 2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题
题目详情附件及源码下载请关注公众号“不太灵光的程序员”回复关键字“MC2020A”
对代码存在疑问,请在公众号留言,我会及时和您取得联系。
题目回顾
问题 1:通过定量分析的方法,研究影响无车承运人平台进行货运线路定价的主要因素有哪些,并说明理由。
问题 2:根据附件 1 数据,通过建立数学模型,对已经成交货运线路历史交易数据中的定价进行评价。
问题 3: 建立关于线路定价的数学模型,给出附件 2 的线路任务的三次报价以及总成本定价,并填充在附件3 的表格中;给出你们的调价策略;评价你们对附件 2 的线路任务所给出的定价。
其中附件 3 的表格以 Excel文件形式,连同论文答卷一起上传至参赛系统,请勿改变附件 3 中各任务ID 的原有顺序。
附件 3 将用于测试报价的准确性,对于某个确定的任务,三次报价中有一次成交,则后续价格将不再考虑。
3、定价评价
3.1. 假定评价指标
我们将对历史交易数据中的定价的评价分 假设分为由两部分来决定,一部分是收益率, 一部分是响应时长。
收益率
收益率 =(线路价格 - 线路成本)/ 线路成本
接下来我们把收益率划分为分类数据也就是数据离散化:
收益率 [min, 0, 0.5, max] 分别 为 不合理 合理 非常合理
响应时长
存在在给定的时间内任务没有司机接单,订单线路调价的情况,所以 响应时长 只用 交易成功时长 来计算可能还不够准确,当有调价的情况是 应该是 调价审核完成时间 到交易结束的时长 。
昨天的 代码里把 “调价审核完成时间”, “业务类型”, “需求类型2” 特征给删除了,注意补充上
因为 调价审核完成时间 存在 N 值情况,我们可以 把出现 N 的值 由 “交易开始时间” 补充,这样 交易结束时间 减 调价审核完成时间 就是我们要的 响应时长 了。
观察了下 交易成功时长的 数据 交易成功时长的最小是 0 平均值 1604.89 最大值 50746 ,单位是分钟,转换成天来分析可能合适点。
接下来 我们把响应时长划分为分类数据:
响应时长 [min, 1, 2.5, max] 分别 为 非常合理 合理 不合理
3.2 对历史数据进行评价
利用 收益率 和 响应时长 来综合评价历史定价是否合理。
- 如果收益率 和 响应时长 都是合理或者非合理,那么历史定价就是非常合理的,
- 如果收益率 和 响应时长 有一个不合理,那么历史定价就是合理;
- 如果收益率 和 响应时长 都是不合理,那么历史定价就是不合理;
由 收益率 和 响应时长 生成 综合评价 特征
3.3 数据可视化
查看 综合评价评分 占比,占比使用 饼状图 更直观一点。
plt.pie 饼状图 x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化; labels :(每一块)饼图外侧显示的说明文字; explode :(每一块)离开中心距离; startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起; shadow :在饼图下面画一个阴影。默认值:False,即不画阴影; labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧; autopct :控制饼图内百分比设置,可以使用format字符串或者format function '%1.1f'指小数点前后位数(没有用空格补齐); pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6; radius :控制饼图半径,默认值为1; counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。 wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。 textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。 center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。 frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。 rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。
源代码
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("car_new.csv") df["收益率"] = (df["线路价格"] - df["线路总成本"]) / df["线路总成本"] yield_rate_category = [df["收益率"].min(), 0, 0.5, df["收益率"].max()] yield_rate_lables = ["不合理", "合理", "非常合理"] df['收益率评价'] = pd.cut(df['收益率'], yield_rate_category, labels=yield_rate_lables) df["调价审核完成时间"] = df.apply(lambda x: x["交易开始时间"] if x["调价审核完成时间"] == "N" else x["调价审核完成时间"], axis=1) df["响应时长"] = (pd.to_datetime(df["交易结束时间"]) - pd.to_datetime(df["调价审核完成时间"])).dt.total_seconds() / (60 * 60 *24) response_time_category = [df["响应时长"].min(), 1, 2.5, df["响应时长"].max()] response_time_lables = ["非常合理", "合理", "不合理"] df['响应时长评价'] = pd.cut(df['响应时长'], response_time_category, labels=response_time_lables) def evaluate(yield_rate_lables, response_time_lables): if yield_rate_lables in ["非常合理", "合理"] and response_time_lables in ["非常合理", "合理"]: return "非常合理" elif "不合理" == yield_rate_lables == response_time_lables: return "不合理" else: return "合理" df["综合评价"] = df.apply(lambda x: evaluate(x["收益率评价"], x["响应时长评价"]), axis=1) # df.to_csv(f"car_new3.csv", encoding="utf_8_sig", index=False) # df = pd.read_csv("car_new3.csv") # 创建一个画布 画布比例 plt.figure(figsize=(6, 7)) # 解决中文显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 声明标题 plt.title("历史货运线路交易定价评价") # 将数据载入画布 plt.pie( df.groupby(by="综合评价")["综合评价"].count(), labels=["不合理", "非常合理", "合理"], explode=(0.3, 0, 0), # 将某一块分割出来,值越大分割出的间隙越大 autopct='%.2f', # 每块的占比 shadow=True, # 阴影设置 startangle=30, # 逆时针起始角度设置 ) # 添加图例 plt.legend(loc="upper right", fontsize=10, bbox_to_anchor=(1.1, 1.05), borderaxespad=0.3) # loc = 'upper right' 位于右上角 # bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边 # ncol=2 分两列 # borderaxespad = 0.3图例的内边距 # 保存的文件名 分辨率 # plt.savefig('历史货运线路交易定价评价.png', dpi=300) plt.show()
推荐阅读:
- 数据分析小白入门篇,mathorcup数学建模 A题 无车承运人平台线路定价问题,特征间的相关性分析
- 无车承运人平台线路定价问题
- [Kaggle] 数据建模分析与竞赛平台介绍
- Python数据分析处理(一)——处理剔除异常值 以全国数学建模(CUMCM 2011 A题)为实例
- 数据分析与挖掘入门——学习笔记(一)python中常见的各种数学,字符串符号以及函数
- 程序员笔记|3个问题带你入门数据建模
- 小白数学建模模型入门(一)
- 小白学数据分析----->3D移动网络游戏需要关注的问题
- Python数据分析处理(二)——数据的标准化处理归一化(极差变换)以数学建模(CUMCM 2011 A)为实例(两表同名行列对应计算)
- [Kaggle] 数据建模分析与竞赛平台介绍
- 小白数学建模模型入门(二)
- 数学建模笔记一,层次分析法(评价类问题)
- 数学建模--医疗保险欺诈的发现--模型:评价类的数学模型和多元统计模型--方法:”改进的”主成分分析,聚类分析,判别分析,相关分析
- [Kaggle] 数据建模分析与竞赛平台介绍
- 数学建模————统计问题之评价(三)
- 数学建模入门-python实现多层次模糊综合评价
- 2019.4.24.数学建模第八章学习(数据的统计分析和描述)
- Python数据分析在数学建模中的应用汇总(持续更新中!)
- 视频教程-数据分析小白入门指南-Python
- 数学建模-数据分析