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 函數就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章