2020第三届中青杯问题总结
文章目录
- 论文上
- 如何双栏排版?
- 公式换行对齐
- 怎么设置行距
- 编程
- Pandas 读取 Excel 文件的 Sheet
- 怎么生成一个2019年1月1日,到2020年3月26日的时间序列呢?
- DataFrame 左连接
- 如何将多个dataframe保存到同一个excel中的不同sheet里
- 用 Matlab 读取 Excel 表格
- 用Matlab找出 NaN 所在的行
- 剑荡八荒式画图(Python)
- Dickey-Fuller 检验
- df 怎么把第一列设置为索引
- df 按时间分组
- Python 画箱型图
- ValueError: Length of values does not match length of index
- 怎么创建特定长度的,值为 nan 的 array
- 剑荡八荒式画图——2
- 怎么把 df index 设置为第一列——2
这篇文章是写给我自己看的,里面有很多技巧,当然大家也可以学习一下。
论文上
我是一个人参赛,只靠自己。论文用的 Latex。
如何双栏排版?
在需要双栏排版的地方,加入如下语句:
\begin{multicols}{2}\end{multicols}
排出来效果是这样的:
公式换行对齐
需要对齐的长公式可以用split 环境,它本身不能单独使用,因此也称作次环境,必须包含在equation 或其它数学环境内。split 环境用 \ 和& 来分行和设置对齐位置。
\begin{equation}\begin{split}x=&a+b+c+\\
&d+e+f+g\end{split}
\end{equation}
怎么设置行距
\renewcommand{\baselinestretch}{1.25}
编程
Pandas 读取 Excel 文件的 Sheet
如图:
如何将十只股票的数据全部读进 Python 中呢?
X0 = pd.read_excel(r'../附件/附件:十支股票参数.xlsx',0)
X1 = pd.read_excel(r'../附件/附件:十支股票参数.xlsx',1)
X2 = pd.read_excel(r'../附件/附件:十支股票参数.xlsx',2)
。。。
X9 = pd.read_excel(r'../附件/附件:十支股票参数.xlsx',9)
怎么生成一个2019年1月1日,到2020年3月26日的时间序列呢?
(用于生成一个空表格,在填进去,然后找出缺失数据)定义一个类,再导入文件使用接口。
# -*- coding: utf-8 -*-
"""
Created on Fri May 29 21:07:59 2020@author: Administrator
"""import re
import calendar
import datetimeclass FormatError(ValueError):passclass Date(object):@classmethoddef date_range(cls, start=None, end=None, periods=None, freq=None, input_format=None, out_format=None):"""生成时间序列:param start: 序列开始时间:param end: 序列结束时间, 给定start时, 结束时间不包含end:param periods: int, 生成的时间序列长度:param freq: 要生成时间序列的时间间隔:param out_format: 是否输出格式化后的字符串, 若要输出可指定输出格式. "%Y-%m-%d %H:%M:%S":param input_format: 若start或end是字符串且无法自动推断时间格式则需指定格式:return: [date or date_str]"""start = cls.str_to_date(start, input_format)end = cls.str_to_date(end, input_format)out = []if start is None and end and periods:for i in range(periods-1):old, end = cls.date_replace(end, cls._freq(freq), mod="-")if i == 0:out.append(old)out = [end] + outelif end is None and start and periods:for i in range(periods-1):old, start = cls.date_replace(start, cls._freq(freq), mod="+")if i == 0:out.append(old)out.append(start)elif periods is None and start and end:i = 0while True:old, start = cls.date_replace(start, cls._freq(freq), mod="+")if i == 0:out.append(old)i += 1if start < end:out.append(start)else:breakelse:raise ValueError("start, end, periods 须且只能指定其中两个")if out_format is True:out = [str(i) for i in out]elif out_format is not None:out = [i.strftime(out_format) for i in out]return out@staticmethoddef date_replace(date, freq=(0, )*6, mod="+"):timedelta = datetime.timedelta(days=freq[2], hours=freq[3], minutes=freq[4], seconds=freq[5])if mod == "+":if sum(freq[:2]) == 0:old = datedate = date + timedeltaelif sum(freq[2:]) == 0:y = date.year + freq[0] + (date.month + freq[1] - 1) // 12m = (date.month + freq[1] - 1) % 12 + 1old = date.replace(day=calendar.monthrange(date.year, date.month)[1])date = date.replace(year=y, month=m, day=calendar.monthrange(y, m)[1])else:raise ValueError(" '年月' 不能同时和 '日时分秒' 作为间隔")elif mod == "-":if sum(freq[:2]) == 0:old = datedate = date - timedeltaelif sum(freq[2:]) == 0:y = date.year - freq[0] + (date.month - freq[1] - 1) // 12m = (date.month - freq[1] - 1) % 12 + 1old = date.replace(day=calendar.monthrange(date.year, date.month)[1])date = date.replace(year=y, month=m, day=calendar.monthrange(y, m)[1])else:raise ValueError(" '年月' 不能同时和 '日时分秒' 作为间隔")else:raise ValueError("mod值只能是 '+' 或 '-' ")return old, date@staticmethoddef _freq(freq=None):"""设置时间间隔:param freq: "Y2m3d4H5M6S" 表示间隔 1年2月3日4时5分6秒:return: [年, 月, 日, 时, 分, 秒]"""freq_ = [0] * 6if freq is None:freq_[2] = 1return freq_for n, i in enumerate(["Y", "m", "d", "H", "M", "S"]):r = f'((\d*){i})'s = re.search(r, freq)if s:freq_[n] = int(s.group(2)) if s.group(2) else 1return freq_@staticmethoddef str_to_date(string, format_=None):"""字符串转时间, 默认自动推断格式:param string: 时间字符串:param format_: 格式:return: 对应的时间类型, 输入非字符串则原值输出"""if not isinstance(string, str):return stringif format_:return datetime.datetime.strptime(string, format_)s = re.match(r'(\d{4})\D+(\d{1,2})\D+(\d{1,2})(?:\D+(\d{1,2}))?(?:\D+(\d{1,2}))?(?:\D+(\d{1,2}))?\D*$', string)if s:result = [int(i) for i in s.groups() if i]return datetime.datetime(*result)s = re.match(r'(\d{4})\D*(\d{2})\D*(\d{2})\D*(\d{2})?\D*(\d{2})?\D*(\d{2})?\D*$', string)if s:result = [int(i) for i in s.groups() if i]return datetime.datetime(*result)else:raise FormatError("自动推断失败, 请指定format_")
导入文件使用:
from Daterange import Date #Daterange是我取的 py 文件名,下面是使用方法
print(Date.date_range(datetime.datetime(2018, 9, 18), periods=10))
print()
print(Date.date_range('20180918', '2018-09-28'))
print()
print(Date.date_range(end='20180927', periods=10))
print()
print(Date.date_range('20180918', '2018-09-28', out_format=True))
print()
print(Date.date_range('2018/09/18', '2018-09-28', out_format="%Y-%m-%d"))
print()
print(Date.date_range('2018年9月18日', '2019-09-28', freq="m", out_format="%Y-%m-%d"))
print()
print(Date.date_range('2018/9/18', '2018-9-19', freq="3H", out_format=True))
DataFrame 左连接
df1:co12 col1
0 1 a
1 2 bdf2:co13 col1
0 11 a
1 33 cprint pd.merge(left=df1, right=df2, how='inner', left_on='col1', right_on='col1')
----------co12 col1 co13
0 1 a 11print pd.merge(left=df1, right=df2, how='left', left_on='col1', right_on='col1')
----------co12 col1 co13
0 1 a 11
1 2 b NaNprint pd.merge(left=df1, right=df2, how='left', left_on='col1', right_on='col1')
----------co12 col1 co13
0 1 a 11
1 NaN c 33
如何将多个dataframe保存到同一个excel中的不同sheet里
writer = pd.ExcelWriter('result.xlsx')
for i in X:i.to_excel(excel_writer=writer,sheet_name=i,index=False)
writer.save()
writer.close()
X为多个 dataframe 构成的 python 列表
用 Matlab 读取 Excel 表格
我想用 Matlab 里的 cftool 来填补缺失值。然后,只要将模型输出,就可以直接拿来使用。(点击 Save to workspace)
之后,只要在 workspace 里面,输出 y = fittedmodel2(x) 就可以了。
用Matlab找出 NaN 所在的行
[m n] = find(isnan(X))
剑荡八荒式画图(Python)
plt.rcParams['font.sans-serif']=['SimHei'] #画图时显示中文字体
plt.rcParams['axes.unicode_minus'] = Falsefor i, ax in enumerate(axes.flat):ax.hist(X[i].iloc[:,-1])ax.set_xlabel('柱状图',fontsize=14)
Dickey-Fuller 检验
它可以用于验证 时序数据是否稳定,具体可点击链接:https://www.docin.com/p-1628484711.html,用法如下:
from statsmodels.tsa.stattools import adfuller
result = adfuller(X[1].iloc[:,-1])
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():print('\t%s: %.3f' % (key, value))
df 怎么把第一列设置为索引
for i in range(10):X.append(pd.read_excel(r'../附件/填充后数据.xlsx',i,index_col = '时间'))
直接在读取的时候用index_col
声明即可。
df 按时间分组
首先要把时间设置为索引,具体方法见上。之后,用 pandas 的 Grouper 模块即可,如下所示:
tmp = X[i].iloc[:,-1] # tmp 为 Series(主要是我要画箱子图)months groups = tmp.groupby(pd.Grouper(freq='30d')) #groupby 接口for name,group in groups: #groups 是一个乱七八糟的数据结构,我们要做的是遍历他,使之可用。 这里的 group 就是一个 Series 了。months[name.month] = group.valuesmonths.boxplot()
Python 画箱型图
箱型图能够反映数据部分总体,或者局部的变化。如下所示
虽然能够用 Pandas 直接画出箱型图,但是却不能和 plt 联动,因此对于画多个箱型图来说,比较不方便。那么,如何用plt 来画箱型图呢?
plt.boxplot(x=df.values,labels=df.columns,whis=1.5)
plt.show()
ValueError: Length of values does not match length of index
fig, axes = plt.subplots(10,1, figsize=(8, 6),subplot_kw={'xticks':[], 'yticks':[]},gridspec_kw=dict(hspace=0.05, wspace=0.1))
for i, ax in enumerate(axes.flat):tmp = X[i].iloc[:,-1]groups = tmp.groupby(pd.Grouper(freq='30d'))month = pd.DataFrame()for name,group in groups:try:month[str(name.year)+str(name.month)] = group.values #这里由于有“剩余”,所以导致长度不匹配,故需要另外处理,如下:except:l = len(group.values)month[str(name.year)+str(name.month)] = np.nan #先给他赋值为 nan,再用数据替代。month[str(name.year)+str(name.month)].iloc[0:l] = group.valuesax.boxplot(x=month.values,labels=month.columns,whis=1.5)ax.set_xlabel('日期序列',fontsize=14)
怎么创建特定长度的,值为 nan 的 array
month[str(name.year)+str(name.month)] = np.array([np.nan]*31)
剑荡八荒式画图——2
fig = plt.figure(figsize=(9,12))
for i in range(10):ax = fig.add_subplot(10,1,i+1)tmp = X[i].iloc[:,-1]plot_acf(tmp,lags=30,ax=ax,title='')
怎么把 df index 设置为第一列——2
df.index = df.iloc[:,1]
2020第三届中青杯问题总结相关推荐
- 第三届中青杯数模本科组问题一———股票选择和投资组合方案(excel、python-Markowitz模型、夏普比率模型)
完整代码:后期上传至github 数据集:资源库 问题一:投资者购买目标指数中的资产,如果购买全部,从理论上讲能够完美跟踪指数,但是当指数成分股较多时,购买所有资产的成本过于高昂,同时也需要很高的管理 ...
- 2020年中青杯全国大学生数学建模竞赛题目【本科组】——纪念第一次训练模型!
一.题目: B题(本科生组):股指与国家经济自1990年12月19日上海证券交易所挂牌成立,经过30年的快速发展,中国证券市场已经具有相当规模,在多方面取得了举世瞩目的成就,对国民经济的资源配置起着日 ...
- 2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解
2020 年 "联想杯"全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解 萌新又来写题解啦 原题链接 (不是按照题号顺序来的QWQ) L. Lottery Ticke ...
- 第三届“先导杯”开赛,欢迎参与
第三届"先导杯"计算应用大奖赛(以下简称"先导杯")已拉开帷幕. 自2020年办赛至今,前两届赛事共吸引了700多所海内外重点高校.科研机构.知名企业中2000 ...
- 第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...
近日,第三届"达观杯"文本智能信息抽取挑战赛正式上线启动(点击阅读原文,跳转报名页面),6月28日至8月31日,面向所有参赛选手开放竞赛结果提交.本届"达观杯" ...
- 设计赋能,数联杭温!2020温州“市长杯”·数字设计(杭州)专项赛开始报名啦!...
点击上方蓝色字关注我们~ 设计江湖 瓯越论剑 巅峰对决 谁夺魁? 如果你是一名设计师 你的未来一定在 温州"市长杯" ☆ 2020"市长杯" 中国(温州)工业设 ...
- 第三届“达观杯”文本智能算法大赛参赛指南
比赛介绍 2019 年 6 月 28 日,第三届"达观杯"文本智能信息抽取挑战赛正式开赛,同期面向参赛选手开放竞赛结果提交.本届比赛由中国人工智能学会吴文俊人工智能科学技术奖办公室 ...
- 2020年蓝桥杯模拟赛2020.3.25直播笔记
2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...
- 总奖金64万!含吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...
●赛题背景● 以"数据驱动创新,赋能智慧城市"为主题的2020中国华录杯·数据湖算法大赛,围绕"华录数据湖+智慧城市"的核心理念,着力于智慧城市业务中的真实应用 ...
- 吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...
●赛题背景● 随着互联网的高速发展,"万物数据化"浪潮奔腾而来.数据湖围绕数据的全生命周期管理打造新一代数字基础设施,在硬件层面构筑了高性能.低成本.智能化.高安全的数字经济底座, ...
最新文章
- 【译】Monolith first —— Martin Fowler 对于微服务架构的看法
- Java历程-初学篇 Day05选择结构(2)
- CSS单位之战:EM与。 REMs ...打架! ?
- Go Web编程--应用数据库
- 小红旗图标在excel如何输入_excel数据核对技巧:如何用函数公式标识输入正误...
- 你的早鸟票特权仅剩2天!百度、快手、商汤、图森等重磅嘉宾确认出席AI ProCon 2019...
- 全屏显示一个图片文件
- idea中异常处理快捷键
- hot-S22和X参数的原理(转)
- 你觉得成都这类城市,哪方面发展最值得期待?
- android 随机昵称,按键安卓版随机起名代码
- java framemaker教程_Freemarker入门案例
- Leetcode DAY6: 有效的字母异位词 and 两个数组的交集 and 快乐数 and 两数之和
- Kubeadm安装高可用的K8S集群--多master单node
- Generative Adversarial Networks(CGAN、CycleGAN、CoGAN)
- ASP.NET:性能与缓存 转帖 张逸老师(http://www.cnblogs.com/wayfarer/articles/48347.aspx)...
- JavaScript 制作百度输入预测功能
- 数学建模-2014年D题 储药柜的设计
- 利用java模拟双色球选号代码分享
- qt 判断字符串中是否含有中文字符_Qt 中文字符串问题