以前不屑于记录科研生活中常用的一些命令行代码,因为觉得即学即用即可,没必要专门记录,但发现要用的时候还是要百度学习两三个网页才行,十分费时费力,所以我选择花点时间整理下来。
1.读取excel或者csv
X=pd.read_csv("K:/MustToDo/PredictionTask/ex1/CompleteDataset/All.csv",index_col=0)
这里解释一下,index_col这个参数表示的是行索引所使用的列序数,当表格数据第一列是索引而没有真实含义时(保存的时候把数据框的原索引一起保存了),指定index_col=0即可,这样读取就不会出现unnamed的字段,还有就是文件地址最好不要含有中文字符。还有编码问题,如果数据框原来显示正常,使用to_csv等内置函数保存后再读取基本没问题,也不用特别设置编码,如果要用excel打开的话最好设置一下编码方式。
2.绘图的整饰元素
图标中有中文的最好加这一句,否则会乱码
chinese =matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
下面几个是横轴、纵轴、图例、标题的整饰代码
plt.xlim(1992,2015) plt.ylim(min_y-100,max_y+1e5) #设置x轴刻度 plt.xticks(np.arange(1992,2017,1)) plt.xlabel() #设置图例 plt.legend(legends,labels,loc='best',prop=chinese) plt.title("普通小学分省招生人数折线图",fontproperties=chinese)
代码中legends和labels来自:
for colname in transposed_items.columns[1:]: indices=transposed_items[colname].index y=[] x=[] for index in indices: if "GDP" in index: y.append(transposed_items[colname][index]) x.append(int(index[3:])) min_y=min(min_y,min(y)) max_y=max(max_y,max(y)) print(colname+' && '+index) print(max_y) plt.scatter(x,y) legend,=plt.plot(x,y) legends.append(legend) labels.append(colname)
这里解释一下:plt.plot()绘图命令类似于搭积木,一层一层往图上面叠放。
3.绘制折线图:
min_y=1e20 max_y=-1 legends=[] labels=[] ''' @featureName为列名,即要对某一列特征绘制折线图 @plotName为图名 ''' def plot_line_chart(featureName,plotName): global min_y,max_y,legends,labels for colname in transposed_items.columns[1:]: indices = transposed_items[colname].index y = [] x = [] for index in indices: if featureName in index: y.append(transposed_items[colname][index]) x.append(int(index[len(featureName):])) min_y = min(min_y, min(y)) max_y = max(max_y, max(y)) print(colname + ' && ' + index) print(max_y) plt.scatter(x, y) legend, = plt.plot(x, y) legends.append(legend) labels.append(colname) plt.xlim(1992, 2019) plt.xticks(np.arange(1992, 2019, 1)) plt.legend(legends, labels, loc='best', prop=chinese) plt.title(plotName, fontproperties=chinese)
4.绘制箱线图,这里有一个感觉不错的模板,把四分位点和均值、中值都标注在图里了。
def plot_box_graph(feature_name,plotName): box_list = [items[feature_name + str(year)][1:].dropna() for year in range(1993, 2015)] plt.boxplot(box_list, patch_artist=True, labels=[i for i in range(1993, 2015)], notch=True, sym='*', showmeans=True, boxprops={'color': 'black', 'facecolor': '#9999ff'}, flierprops={'marker': 'o', 'markerfacecolor': 'red', 'color': 'black'}, meanprops={'marker': 'D', 'markerfacecolor': 'indianred'}, medianprops={'linestyle': '--', 'color': 'orange'}) plt.title(plotName, fontproperties=chinese) plt.xlim(1992, 2015) # 设置x轴刻度 plt.xticks(np.arange(1992, 2015, 1))
这里的boxlist需要解释一下,boxlist的每个元素都是该箱线图的每个box里的一系列数据,后面的都是建议参数不赘述。
5.即时保存(这个要说三遍)
实验有时做到一半,中间数据结构不太适合保存为csv,可以使用pickle来序列化,读取时直接反序列化读取就是那个中间数据结构。代码如下:
#训练集测试集格式化存储 import pickle as pk with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/X_train.pk','wb') as f: pk.dump(X_train,f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/X_test.pk','wb') as f: pk.dump(X_test,f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/y_train.pk','wb') as f: pk.dump(y_train,f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/y_test.pk','wb') as f: pk.dump(y_test,f) #训练集测试集格式化读取 with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/X_train.pk','rb') as f: X_train=pk.load(f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/y_train.pk','rb') as f: y_train=pk.load(f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/X_test.pk','rb') as f: X_test=pk.load(f) with open('K:/MustToDo/PredictionTask/ex1/CompleteDataset/y_test.pk','rb') as f: y_test=pk.load(f)
未完待续。