精华内容
下载资源
问答
  • Mathorcup.ipynb

    2021-08-26 13:33:46
    Mathorcup.ipynb
  • mathorcup杯.pdf

    2021-07-16 14:18:48
    2021mathorcup杯B题
  • MathorCup特等奖论文.rar

    2021-02-02 13:28:02
    MathorCup;MathorCup;MathorCup;MathorCup;MathorCup;
  • 附源码 2020年第十届MathorCup高校数学建模挑战赛题目 A题 无车承运人平台线路定价问题 mathorcup数学建模 第十届mathorcup数学建模 mathorcup含金量

    想要看更加舒服的排版、更加准时的推送
    关注公众号“不太灵光的程序员”
    每日八点有干货推送,微信随时解答你的疑问
    公众号“不太灵光的程序员” 同时发布《【MathorCup】2020年 A题 无车承运人平台线路定价问题,特征间的相关性分析》

    2020年第十届MathorCup高校数学建模挑战赛题目

    A题 无车承运人平台线路定价问题

    本文解决问题1 的 特征间的相关性分析 问题

    想了解问题2 相关解题思路,关注公众号或点击下方链接:
    数据分析小白入门篇,2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题,定价评价

    想了解问题3 相关解题思路,关注公众号或点击下方链接:
    决策树预测成本价 2020年 MathorCup数学建模 A题 无车承运人平台线路定价问题

    题目详情附件及源码下载请关注公众号“不太灵光的程序员”回复关键字“MC2020A”

    对代码存在疑问,请在公众号留言,我会及时和您取得联系。

    问题 1:通过定量分析的方法,研究影响无车承运人平台进行货运线路定价的主要因素有哪些,并说明理由。

    问题 2:根据附件 1 数据,通过建立数学模型,对已经成交货运线路历史交易数据中的定价进行评价。

    问题 3: 建立关于线路定价的数学模型,给出附件 2 的线路任务的三次报价以及总成本定价,并填充在附件3 的表格中;给出你们的调价策略;评价你们对附件 2 的线路任务所给出的定价。

    其中附件 3 的表格以 Excel文件形式,连同论文答卷一起上传至参赛系统,请勿改变附件 3 中各任务ID 的原有顺序。

    附件 3 将用于测试报价的准确性,对于某个确定的任务,三次报价中有一次成交,则后续价格将不再考虑。

    附件 1:货运线路历史交易数据
    附件 2:待定价的货运线路任务单
    附件 3:计算结果

    三个问题分别是对特征间的相关性、给出定价的评价指标、预测总成本以及三次定价三个方向进行考查的,下面我们先对问题1进行解释。

    分析过程

    1、数据预处理(数据清理)

    数据预处理可以分为以下5个步骤,结合代码我们来说明如何进行相关性分析的:

    • 1.1. 读取给定的数据
    • 1.2 处理特征数据与问题无关的特征
    • 1.3 数据整合
    • 1.4 数据分类编码
    • 1.5 清洗后的数据存储

    1.1. 读取给定的数据

    从不同存储文件中读取数据集,预览数据集,观察特征数据。

    题目提供了附件1:货运线路历史交易数据.xlsx的数据集文件,在我们自己进行分析时,大多情况还需要自己去爬取数据,建议将数据保存成csv文件在进行分析。

    做数据分析时基础数据会有多种存储形式。可能是txt、csv 、excel文件。

    txt 和 csv 可以使用 pandas.read_csv 进行加载;

    excel 可以使用 pandas.read_excel 进行加载,当然也可以借助模块 xlrd 和 xlwt 数据读写。

    操作 excel 要比操作 csv 更耗时,推荐使用csv处理中间数据。

    源代码:

    def data_load(file_name):
        """
        加载数据
        :param file_name:
        :return:
        """
        types = file_name.split('.')
        if types[-1] == 'csv':
            df = pd.read_csv(file_name)
        elif types[-1] == 'txt':
            df = pd.read_csv(file_name)
        elif 'xl' in types[-1]:
            df = pd.read_excel(file_name)
            # 打开文件 需要注意 时间读取的问题
            # data = xlrd.open_workbook(file_name)
            # table = data.sheet_by_index(0)
            # data_lists = []
            # columns = table.row_values(0)
            # for i in range(1, table.nrows):
            #     data_lists.append(table.row_values(i))
            # df = pd.DataFrame(data=data_lists, columns=columns)
        else:
            raise(f"{file_name} 文件类型不支持")
        return df
    

    1.2. 处理特征数据与问题无关的特征

    数据中存在缺失值的删除对应行数据,样本数量极少的数据项也可以删除特征。

    在基础数据集中会有许多变量数据,部分变量可能是多余的,一方面是变量本身对于每次数据分析有使用价值的,故无法提高模型性能;另一方面过这些多余变量在构建模型时会消耗大量内存和计算能力。

    需要根据你对数据关联性的理解或者说是要去探究的相关性时变量值才存在意义。

    筛选特征时有两种方式:一种是删除数据集中无关的特征;一种是选择出有意义的特征。

    我个人觉得选择出有意义的特征对后续的代码阅读会更方便一点。

    pandas 对于 nan 的空值处理

    • df.dropna() 删除含有空值的行或列
    • df.fillna() 给缺失值赋予默认值
    • df.isnull() 判断是否是空值
    • df.isna() 判断是否是空值

    还有许多情况存在不是 nan 的空值,比如示例数据集中对没有的数据值使用字符串 N 进行填充,也需要删除这些无效数据。

    df = df[~df["线路总成本"].isin(["N"])]
    

    怎么知道哪些数据值是占比少的呢?

    使用 groupby 分组查看下特征数据的分布情况,对于 “是否续签” 等于 “续签ECP审批驳回或撤销” 的数据就可以考虑删除掉。

    print(df.groupby(by="是否续签")["是否续签"].count())
        # 是否续签
        # 已分拨续签           8752
        # 续签ECP审批驳回或撤销       7
        # 非续签             5859
    

    源代码:

    def data_preview(df):
        """
        预览数据结构
        查看数据前10行、后10后
        :param df:
        :return:
        """
        if df.empty:
            raise("数据集为空")
        print(df.head())  # 默认返回前10行
        print(df.tail())  # 默认返回后10行
        print(df.columns)
    
    
    def features_columns(df):
        """
        去除与定价无关的特征
        :param df:
        :return:
        """
        columns = ['总里程', '线路价格(不含税)', '调价比例', '线路指导价(不含税)', '实际到车时间', '交易成功时长', '是否续签',
                   '交易成功时间', '交易成功日期', '成交对象', '车辆长度', '车辆吨位', '始发地省份名称',
                   '实际靠车时间', '实际结束时间', '实际发车时间', '交易开始时间', '交易结束时间', '地区',
                   '线路总成本', '需求紧急程度', '标的_创建时间', '标的_创建日期', "交易对象", "目的地省份名称",
                   '计划发车时间', '计划靠车时间', '计划到达时间']
    
        df = df[columns]
        df = df[~df["线路总成本"].isin(["N"])]
        df = df[~df["线路价格(不含税)"].isin(["N"])]
        df = df[~df["线路指导价(不含税)"].isin(["N"])]
        df = df[~df["始发地省份名称"].isin(["N"])]
        df = df[~df["是否续签"].isin(["续签ECP审批驳回或撤销", "N"])]
        return df
    

    1.3. 数据整合

    存在多个特征合并表示一个具体特征含义的需要合并字段

    例如:交易日期 + 交易时间 = 交易时间

    这里要着重的讲一下为什么会有两种写法,如果你是个新手就认真看。

    我们上面提到了数据的存储方式 会有excel、txt、csv等形式。

    使用 pandas.read_excel 读取数据时,数据是有类型的,比如时间在 excel 中设置的时间格式,取出的是 datetime64 类型;

    使用 xlrd.open_workbook 读取的结果也是不一样的,时间读取的结果可能浮点数;

    使用 pandas.read_csv 读取数据时,取出的是 object 类型,可以当做字符串直接拼接的;

    这就是为什么很多人 down 的代码不能正常运行的原因了。

    源代码:

    def merge_columns(df):
        """
        存在 多特征整合表示 一个具体特征含义的 需要合并字段,
        例如 交易日期 + 交易时间 = 交易时间
        :param df:
        :return:
        """
        if df["交易成功日期"].dtype == 'datetime64[ns]':
            df["交易成功时间"] = df.apply(lambda x: x["交易成功日期"].strftime("%Y-%m-%d ") + x["交易成功时间"].isoformat(), axis=1)
            df["标的创建时间"] = df.apply(lambda x: x["标的_创建日期"].strftime("%Y-%m-%d ") + x["标的_创建时间"].isoformat(), axis=1)
        # 对于 read_csv 交易成功日期 object 类型 交易成功时间 object 类型
        else:
            df["交易成功时间"] = df.apply(lambda x: x["交易成功日期"].split(" ")[0] + " " + x["交易成功时间"], axis=1)
            df["标的创建时间"] = df.apply(lambda x: x["标的_创建日期"].split(" ")[0] + " " + x["标的_创建时间"], axis=1)
    
        return df.drop(["交易成功日期", "标的_创建日期", "标的_创建时间", ], axis=1)
    

    1.4. 数据分类编码

    如交易对象 分为 B、C、BC,分别将其记为 1,2,3

    源代码:

    def encode_columns(df):
        """
        如交易对象 分为 B、C、BC,分别将其记为 1,2,3
        :param df:
        :return:
        """
        df["成交对象"] = df["成交对象"].map({"B": 1, "C": 2, "BC": 3})
        df["交易对象"] = df["交易对象"].map({"B": 1, "C": 2, "BC": 3})
        df["是否续签"] = df["是否续签"].map({"已分拨续签": 1, "非续签": 2})
        df["需求紧急程度"] = df["需求紧急程度"].map({"常规订单": 1, "特急订单": 2, "紧急订单": 3})
    
        # '计划发车时间', '计划靠车时间', '计划到达时间'
        if df["计划发车时间"].dtype == 'datetime64[ns]':
            pass
        else:
            df["计划发车时间"] = pd.to_datetime(df["计划发车时间"])
            df["计划靠车时间"] = pd.to_datetime(df["计划靠车时间"])
            df["计划到达时间"] = pd.to_datetime(df["计划到达时间"])
    
        df["计划发车时间"] = df["计划发车时间"].dt.hour
        df["计划靠车时间"] = df["计划靠车时间"].dt.hour
        df["计划到达时间"] = df["计划到达时间"].dt.hour
        df["计划发车时间"] = df["计划发车时间"].apply(lambda x: 1 if 8 <= x <= 20 else 0)
        df["计划靠车时间"] = df["计划靠车时间"].apply(lambda x: 1 if 8 <= x <= 20 else 0)
        df["计划到达时间"] = df["计划到达时间"].apply(lambda x: 1 if 8 <= x <= 20 else 0)
    
        df["省内/外"] = df.apply(lambda x: 1 if x["始发地省份名称"] == x["目的地省份名称"] else 0, axis=1)
        return df.drop(["始发地省份名称", "目的地省份名称", ], axis=1)
    

    1.5. 清洗后的数据存储

    存储到新的文件中

    df.to_csv(f"car_new.csv", index=False, encoding="utf-8")
    

    2、相关性分析

    2.1. 统计学之三大相关性系数

    由于统计使用到相关系数比较频繁,先简单介绍一下这些系数。

    相关系数:考察两个事物(在数据里我们称之为变量)之间的相关程度。

    如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:

    • 1、当相关系数为0时,X和Y两变量无关系。
    • 2、当X的值增大/减小,Y值增大/减小,两个变量为正相关,相关系数在0.00与1.00之间。
    • 3、当X的值增大/减小,Y值减小/增大,两个变量为负相关,相关系数在-1.00与0.00之间。

    相关系数的绝对值越大,相关性越强,相关系数越接近于1或-1,相关度越强,相关系数越接近于0,相关度越弱。

    通常情况下通过以下取值范围判断变量的相关强度:

    分数相关性
    0.8-1.0极强相关
    0.6-0.8强相关
    0.4-0.6中等程度相关
    0.2-0.4弱相关
    0.0-0.2极弱相关或无相关

    2.2. 统计学之三大相关性系数

    Pearson皮尔逊相关系、Spearman秩相关系数、kendall等级相关系数

    2.2.1. pearson

    当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数

    适用范围:

    • 两个变量之间是线性关系,都是连续数据。
    • 两个变量的总体是正态分布,或接近正态的单峰分布。
    • 两个变量的观测值是成对的,每对观测值之间相互独立。

    2.2.2. spearman

    等级相关系数用来估计两个变量X、Y之间的相关性,其中变量间的相关性可以使用单调函数来描述。

    适用范围:斯皮尔曼等级相关系数对数据条件的要求没有皮尔逊相关系数严格,只要两个变量的观测值是成对的等级评定资料,或者是由连续变量观测资料转化得到的等级资料,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关系数来进行研究。

    2.2.3. kendall

    是一个用来测量两个随机变量相关性的统计值

    2.2 pandas 相关系数 DataFrame.corr 函数

    要在Python完成三种相关性分析只需要调用 corr 函数就可以实现,参数说明:

    • method:可选值为 pearson、kendall、spearman
    • pearson:相关系数来衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差
    • kendall:用于反映分类变量相关性的指标,即针对无序序列的相关系数,非正态分布的数据
    • spearman:非线性的,非正态分析的数据的相关系数
    • min_periods:样本最少的数据量
    • 返回值:各类型之间的相关系数DataFrame表格

    2.3 相关信息数据可视化

    源代码:

    df = pd.read_csv("car_new.csv")
    score = df.corr(method="spearman")
    plt.rcParams["font.sans-serif"] = ["SimHei"]
    plt.rcParams["axes.unicode_minus"] = False
    plt.figure(figsize=(10, 8))
    plt.title("各因素与线路间隔的相关性")
    plt.barh(score.columns, score["线路价格"])
    plt.show()
    

    在这里插入图片描述

    推荐阅读:

    展开全文
  • MathorCup大学生数学建模挑战赛历届优秀论文集,MathorCup大学生数学建模挑战赛历届优秀论文集,附带数据、代码。
  • mathorcup优秀论文

    2019-03-22 19:42:11
    mathorcup全国大学生建模挑战赛,第一届至第六届届优秀论文,一等奖、二等奖、特等奖论文。
  • mathorcup B题.rar

    2021-04-17 20:06:11
    2021年 Mathorcup B题 能量预测模型代码,对应文章: https://blog.csdn.net/weixin_42141390/article/details/115729199
  • 2018mathorcup 竞赛

    2019-03-30 09:35:44
    MathorCup高校数学建模挑战赛(以下简称“竞赛”)是由中国优选法统筹法与经济数学研究会主办的面向全日制普通高等院校在校学生的学科竞赛活动。竞赛坚持学会创始人华罗庚教授数学与行业应用实际紧密结合的思想,...
  • MathorCup试题论文.zip

    2020-03-24 10:05:14
    之前做MathorCup建模比赛时整理的历年试题及解答论文,从第一届到第八届的集合,其中1-6届有优秀论文,七八届只有题目
  • 2015年MathorCup论文

    2015-12-20 07:09:28
    数学建模,2015年MathorCup,二等奖。
  • 2018年MathorCup精选优秀论文.
  • 2017年Mathorcup特等奖论文,
  • 第九届MathorCup试题

    2019-04-11 08:03:22
    第九届MathorCup试题,抢先下载嘿嘿。 大家比赛加油哦!!!!
  • 2021年Mathorcup B题论文

    2021-08-26 23:28:23
    2021年自己参赛的Mathorcup挑战赛B题的获奖论文,题目是基于时间序列和神经网络预测团簇的全局最优结构,关键词有时间序列预测模型;BP 神经网络预测模型;蚁群算法;基于信息素更新机制改;进蚁群算法;拟合优度等...
  • 2018年Mathorcup全国大学生数学建模挑战赛试题汇总。。。
  • 2021年MathorCup高校数学建模挑战赛题目原件,包括ABCD四个题,及其数据和附件。
  • MathorCup数学建模挑战赛往届优秀论文集
  • MathorCup数学建模11-20历届题目及优秀论文
  • 2020年第十届MathorCup高校数学建模.
  • MathorCup高校数学建模挑战赛历届题目及优秀论文集.zip
  • 内容涵盖第一届至第六届MathorCup 优秀论文合集,A题及B题
  • 2018年国赛A题三等奖论文 2019MathorCup C题三等奖论文 是我们团队自己做的 可以给小白参考一下 大佬就没必要看了
  • 2019年MathorCup全国大学生数学建模竞赛荣誉奖(最高奖)优秀论文和答辩PPT,优秀论文和答辩PPT都有,c题没有,因为组委会也没有公布
  • MathorCup竞赛任务分配

    2021-04-14 20:55:29
    MathorCup竞赛任务分配: 总体要求: 比赛时间:15号上午8点-19号上午9点 作息要求:早上8:00-11:00 下午1:30-5:00 晚上6:30-10:00 总体进度: 15号: 上午:挑选赛题,群里实时交流。各抒己见。确定赛题 ...

    MathorCup竞赛任务分配:

    总体要求:

    比赛时间:15号上午8点-19号上午9点
    作息要求:早上8:00-11:00
    		  下午1:30-5:00
    		  晚上6:30-10:00
    

    总体进度:

    15号:

    上午:挑选赛题,群里实时交流。各抒己见。确定赛题
    下午:检索中文文献,发我进行汇总。分发文献进行阅读。
    晚上:阅读相关检索的资料,做适当笔记(备注+内容的形式+哪篇文献的形式发群里,写论文备用)
    	  例如:背景知识:背景知识的相关内容。《哪篇文章》
    	  群里讨论赛题解决方案。
    

    16号:

    上午:确定模型并弄懂该模型(负责建立模型的需弄懂,负责撰写论文的需了解)
    下午:学习该模型的案例并针对赛题建立模型。
    晚上:开始撰写论文(背景知识等次要部分),熟悉论文格式。建立模型。
    

    17号:

    上午:开始撰写论文(背景知识等次要部分) 建立模型的成员进行讨论,讨论遇到的问题。
    下午:给出最终的模型(图表,模型建立过程)
    晚上:小组讨论(梳理清晰每个问题的答案)
    

    18号:

    上午:论文撰写
    下午:论文撰写
    晚上:论文格式修改,提交论文。
    

    个人进度:

    A队员:负责代码:

    	15号:根据总体进度
    	16号:
    		上午+下午:根据总体进度
    		晚上:收集该模型相关的代码实现,并尝试调试成功。
    	17号:
    		上午:针对该模型,有针对的对代码进行修改,以满足竞赛。
    		下午:给出可运行成功的代码实现。
    		晚上:小组讨论时演示代码,并解释相关数据。
    	18号:
    		上午:完善代码,根据竞赛要求做相关代码的资料整理。
    		下午:整理好代码等资料,按比赛要求发给队长。
    		晚上:阅读论文,提出修改意见。
    

    B队员:负责建模:

    	15号:根据总体进度
    	16号:
    		上午+下午:根据总体进度
    		晚上:针对赛题进行建模
    	17号:
    		上午:针对赛题进行建模,建模队员讨论难点问题。
    		下午:给出最终模型(尽力而为),并记录建模过程中的图表等(用于撰写论文)。
    		晚上:小组讨论时解释模型,重点理清每个问题的解决思路。
    	18号:
    		上午:配合撰写论文的队员,理清撰写思路。
    		下午:整理相关建模材料,图表、数据等(注意命名规范)
    		晚上:阅读论文,提出修改意见。
    

    C队员:负责论文:

    	15号:根据总体进度
    	16号:
    		上午:整理好相关背景知识,形成素材。了解确定的模型的知识(阅读论文)
    		下午:学习论文撰写规范,弄清参赛论文写作要求。
    		晚上:初步撰写非重点内容(如:背景内容),确定字体,标题等等,给后面写作奠定规范。
    	17号:
    		上午:撰写好非重点内容(如:背景内容,介绍内容啥的)。
    		下午:初步撰写模型的介绍部分。
    		晚上:将小组讨论的每个问题的答案进行汇总,合理的安排好论文的排版。
    	18号:
    		上午+下午:按小组讨论的结果撰写论文。实时与队员讨论。
    		晚上:听取其它队员意见,进一步完善论文。
    
    展开全文
  • 第一到第九届MathorCup优秀论文(包含答辩PPT & 程序源码)。了解往年论文出题风格对对2020年MathorCup大有用处
  • 2018年MathorCup数学建模挑战赛D题 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,中国优选法统筹法与经济数学研究会决定主办2018年第八届MathorCup高校数学建模挑战赛(以下简称竞赛)。...
  • 【资源分享】2018年MathorCup数学建模挑战赛c题。
  • 2019年MathorCup高校数学建模挑战赛D题 2019年第九届MathorCup高校数学建模挑战赛 竞赛信息 竞赛简介 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,中国优选法统筹法与经济数学研究会决定...
  • 2017MathorCup杯 B题 共享单车建模论文,欢迎下载点评,有问题及时请及时联系博主。

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 318
精华内容 127
关键字:

mathorcup