2020Mathcup 遇到问题总结

论文模板方面

画一条横线

Mathcup 有给定模板,但作为一个写了一本书的,有点东西的我,绝不苟合官方给定的模板。因此,我毅然决然的选择了 Latex 。首先表格是容易画的,但是表格下面的一条横线就很蛋疼。官方给定的模板如下:
原模板
那么横线究竟怎么搞呢?用如下命令:
\rule[水平高度]{长度}{粗细}
我论文模板用的是:
\rule[-2pt]{14.3cm}{0.15em}

效果如下:nice!!
Latex

目录页和摘要页不设置页码

\begin{abstract}

\end{abstract}
\thispagestyle{empty}   %摘要不相似页码
\newpage

\tableofcontents   % 生成目录
\thispagestyle{empty}   % 目录页不显示页码

\newpage
\setcounter{page}{1}   % 从下面开始编页码,并设置从1开始。

下划线

下划线可以直接用 反斜杠转意,而不需要用 $ $ 括起来,不用多此一举。当然,\vdots 什么的还是要用 $$ 括起来的。

公式带中文

有时候,用 rm 或者 mathrm 没用,这时候可以直接用 text

不带序号的section

\section*{我是不带序号的标题}

将无序号的 section 加入目录

可以用 \addcontentsline{toc}{section}{标题名}实现。但是要注意,这种方法是用欺骗的,实际上并没有真正加进去,他只是找了一个马甲。所以,这条语句要放在标题所在的位置,最好就在标题的下一行。当然标题名也好保持一致,不然西洋镜就被拆穿了。

同理也可以使用这种方法,将无序号的 subsection 抑或 subsubsection 加入目录中。

编程

如何获取 pandas 列名呢?(最快捷!!)

col = x2.columns.tolist()

如何删除 list 中的某个特定的元素呢?

xx.remove(要删的值)

Pandas 按列遍历

for indexs in X1.columns:

python 根据列名删除 pandas 列

df.drop(['B','C'],axis=1,inplace=True)

将 pandas 中的时间字符串列,转换为 datetime

y = lambda x:dt.datetime.strptime(x,'%Y-%m-%d')
df_tmp['date_rcd'] = df_tmp['date_rcd'].apply(y)

统计 skc 与2018-7-1 到 2018-10-1 的销售量

clu = np.unique(x1['skc'])
for i in clu:
    df_tmp = x1.loc[x1['skc']==i].copy().iloc[:,1:4]
    t_min = dt.datetime.strptime('2018-07-01','%Y-%m-%d')
    t_max = dt.datetime.strptime('2018-10-01','%Y-%m-%d')
    try:
        df_tmp = df_tmp.loc[t_min<=df_tmp['date_rcd']<=t_max] 
    except:
        sales.append(0)
    sales.append(sum(df_tmp['s'])) 
num_agument = dict(zip(clu,sales))

给字典排序

其中 reverse 表示方向排序

list1= sorted(dict1.items(),key=lambda x:x[1],reverse=True)    #
print(list1)

pandas loc 多条件定位

    ie = x3.loc[((x3['date_rcd']==s['date_rcd']) and (x3['skc']==s['skc'])]['ie']

只要把条件用括号括起来,再用一个括号把所有条件括起来,就不会报错了。

怎么判断 一个 pandas dataframe 为空??

df.empty 输出 True、False

Python怎么把一个元素的np.array化为一个数

直接 np.float 就可以了

Lambda 的骚操作:

def fun(x):
    if x is None:
        return np.nan
    else:
        try:
            return np.float(x)
        except:
            pass
skc['tag_price'] = skc['tag_price'].apply(fun)

pandas 删除包含缺失值的行

 skc.dropna(axis=0, how='any', inplace=True)

单因素方差分析

from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import warnings
warnings.filterwarnings("ignore")

model = ols('销量~小类',tmp).fit()
anovat = anova_lm(model)
print(anovat)

其中,小类为水平,其取值必须是字符串,如果是用数值表示,会被认为是布尔型,即二值性。换句话说,被误认为水平只要两个。

另外,求出来的显著度表示可以接受原假设的概率,别再忘了1!!!!!!!

求解 MAPE

虽然很简单,但我总是想着能否用现有的模块实现,于是我找到了方法:

def mape(y_true, y_pred):
    return np.mean(np.abs((y_pred - y_true) / y_true))

虽然没能够用钟爱的 sklearn 模块,但是我还是采纳了。

用 pd.DataFrame 创建 df 时,应该注意的地方

有一次,我有一个 list,list 里面是行为一的 series,我想要把 list 弄到一个 df上。由于 series 有列名,但是不是我满意的,而刚好创建 df 亦需要列名。 因此,我就想用 pd.DataFrame函数,再修改 columns 参数创建 df。但是,创建完后,发现居然 df 里面全部清一色是 nan!!!!

原来,如果 list 里面有 series,那么 columns 必须与 series 里面的 columns 保持一致

字典的创建

我想要创建一个空字典,再往里面添加进元素,应该怎么做?

tmp_dict = dict()
tmp_dict['new_key1']=new_value1
tmp_dict['new_key2']=new_value2

字典的遍历

for key,value in tmp_dict.items():
	print(key,value)

Pandas 按条件删除行

我的思路是,先用df.loc[df['条件列1'] 比较 condition].indexs提取出满足条件的行的索引,再用 drop 函数来删除,具体如下:

ind = df.loc[((df['条件列1'] 满足 condition1) & (df['条件列2'] 满足 conidtion2) | (df['条件列3'] 满足 condition3))].index
df.drop(index=ind,axis=0,inplace=True)

创建一个空 df 并向里面逐行添加

首先要创建 df,要定义 columns,之后向 df 里面插进 相应的字典。其中,字典的键必须与 columns 对应。

columns=['skc','周次','周售量','售价']
x1w = pd.DataFrame(columns=['skc','周次','周售量','售价'])
x1w = x1w.append(dict(zip(columns,b3)),ignore_index=True)

其中dict(zip())用于构建字典,b3是一个列表,长度为4。注意,必须添加 ignore_index = True,否则报错。

怎么判断 nan?

可以用 nan 不等于 nan 来判断,即

if a == a:
	print('not nan')
else:
	print('nan')

python list一次性加入三个元素

columns=['skc','周次','周库存','周售量','售价','小类']
sub_full = pd.DataFrame(columns=columns)
for i,s in x3w.iterrows():
    tmp = x1w.loc[((x1w['skc']==s['skc'])&(x1w['周次']==s['周次']))]
    if tmp.empty:
        continue
    else:
        sa = np.int(tmp['周售量'])
        p = np.float(tmp['售价'])
        c = np.int(tmp['小类'])
        b3= list(s)
        b3.extend([sa,p,c])
        sub_full = sub_full.append(dict(zip(columns,b3)),ignore_index=True)
    break

其中 s 为一行的 df

拼接两个行数相同的 df

full1 = pd.concat([full,df],axis=1)

改 axis 可以弄成列拼接。但是,可能会出现意外的结果。因此还是下面的比较妥当
ull1[one_hot.classes_] = df

怎么对np array内的所有元素开根

如果是对 np.array 的所有元素进行操作,用 math 模块的 sqrt 函数似乎没用,会跳出错误。不过用 np 模块的 sqrt 函数就行了。

猜你喜欢

转载自blog.csdn.net/weixin_42141390/article/details/106248805
今日推荐