数学建模常用代码总结-Python&MATLAB

数学建模过程中有许多可复用的基础代码,在此对 python 以及 MATLAB 中常用代码进行简单总结,该总结会进行实时更新。

一、文件读取

  • python (pandas)
    文件后缀名(扩展名)并不是必须的,其作用主要一方面是提示系统是用什么软件打开,另一方面提示文件内容格式。如.txt, .csv, .tsv 文件均为纯文本文件,只是 .csv, .tsv 说明了数据的分割方式分别为,\t 。既然都是文本文件,那就都可用 pandas.read_csvpandas.read_table 等进行读取,这里采用 pandas.read_csv
    .txt 文件
import pandas as pd
tsvfile = pd.read_csv('filename.txt')
tsvfile = pd.read_csv('filename.txt',skiprows=1)#跳过首行

.csv 文件

import pandas as pd
tsvfile = pd.read_csv('filename.csv')
tsvfile = pd.read_csv('filename.csv',skiprows=1)#跳过表头

.tsv 文件

import pandas as pd
tsvfile = pd.read_csv('filename.tsv', sep='\t')

.json 文件

import pandas as pd
jsonfile = pd.read_json('filename.json', orient = 'records')

.csv 文件转.json 文件

import csv
import json
csvfile = open('filename.tsv',r)
jsonfile = open('filename.json',w)

fieldnames = ("key1","key2","key3")
reader = csv.DictReader(csvfile,fieldnames) 

for row in reader:
    json.dump(row,jsonfile)
    jsonfile.write('\n')

.xlsx 文件

excel 是二进制文件,它保存有关工作簿中所有工作表的信息,也可对数据进行有关操作。

import pandas as pd
# 读取 Excel 数据,选取 sheet1 工作表
sheet_1 = pd.read_excel('demo.xlsx', sheet_name='Sheet1', na_values='n/a')
# 打印 sheet 表名
print(pd.ExcelFile('listings.xlsx').sheet_names)
# 打印数据头部
  print(sheet_1.head())

.xlsx 文件转 .csv

import pandas as pd
def xlsx_to_csv_pd():
  data_xls = pd.read_excel('demo.xlsx', index_col=0)
  data_xls.to_csv('demo.csv', encoding='utf-8')

.csv 文件转 .xlsx

import pandas as pd
def csv_to_xlsx_pd():
  csv = pd.read_csv('1.csv', encoding='utf-8')
  csv.to_excel('1.xlsx', sheet_name='data')
  • MATLAB
    同样的原因,MATLAB 读取文本文件均可用 textscan
    .txt 文件
clc;clear;
filename = 'filename.txt';
file = fopen(filename);%打开文件
columns = 's%s%s%s%s%s%';%读几列就有几个's%'
data = textscan(filename,columns,'delimiter', '	');%以制表符分隔
fclose(file);

.csv 文件

clc;clear;
filename = 'filename.csv';
file = fopen(filename);%打开文件
columns = 's%s%s%s%s%s%';%读几列就有几个's%'
data=textscan(filename,columns,'delimiter', ',');%以 , 分隔
fclose(file);

.tsv 文件

clc;clear;
filename = 'filename.tsv';
file = fopen(filename);%打开文件
columns = 's%s%s%s%s%s%';%读几列就有几个's%'
data=textscan(filename,columns,'delimiter', '	');%以制表符分隔
fclose(file);

.json 文件

MATLAB 读取 .json 文件需要下载 jsonlab 包。

clc;clear;
addpath('E:\PIR\PIR_V3.0\jsonlab-1.5'); %添加jsonlab包的存放路径

filename = 'filename.json'; %文件名称
jsonData = loadjson(filename);%jsonData是struct结构
data = jsonData.u';

二、绘图

  • MATLAB
    MATLAB 帮助文档点状图
plot(xi,yi,'>','Color',[x/255 x/255 x/255]);%右三角,颜色为(x,x,x)
%符号可为'o','.','+','>','<'等
xlabel('x/x')
ylabel('y/y')
title('Title')

set(gcf,'unit','normalized','position',[0.2,0.2,0.8,0.6]);%固定大小

折线图

xi=  1: 0.25:76;
yi = interp1(X,Y,xi,'spline');%插值,将步长由1变为0.25
plot(xi,yi,'Color',[x/255 x/255 x/255],'LineWidth',1);%颜色为(x,x,x),线条粗细为1
xlabel('x/x')
ylabel('y/y')
title('Title')

set(gcf,'unit','normalized','position',[0.2,0.2,0.8,0.6]);%固定大小

条形图

MATLAB bar

y=[1 2 3,1 2 3];%分组条形图
tiledlayout(2,1)%指定纵横比
bar(y);
bar(x,y);
bar(y,'stacked');%与y=[1 2 3,1 2 3]结合,同一个柱形上分层显示
bar(x,y,0.6);%相对宽度控制间隔
bar(y,'FaceColor',[0 .5 .5],'EdgeColor',[0 .9 .9],'LineWidth',1.5);%多参数

y = [10 15 20; 30 35 40; 50 55 62];
b = bar(y);
b(3).FaceColor = [.2 .6 .5];%每组第三列设为绿色

其他功能

%绘制多张
figure(i);
%plot
hold on;
figure(i+1);
%plot

%多线同图
%plot
hold on;
%plot
  • python
    点状图
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (48.0, 30.0) # 设置figure_size尺寸
plt.plot(X,Y,'.')
plt.xlabel("x-label",fontproperties=zhfont,fontsize='32')
plt.ylabel("y-label",fontproperties=zhfont,fontsize='32')
plt.title("title",fontproperties=zhfont,fontsize='32')

折线图

import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (48.0, 30.0) # 设置figure_size尺寸
plt.plot(X,Y)
plt.xlabel("x-label",fontproperties=zhfont,fontsize='32')
plt.ylabel("y-label",fontproperties=zhfont,fontsize='32')
plt.title("title",fontproperties=zhfont,fontsize='32')

其他常用功能

# 绘制多张
plt.subplot(221) # 两行两列的第一个
plt.plot(X1,Y1,'.')
plt.subplot(222) # 两行两列的第二个
plt.plot(X2,Y2,'.')
plt.subplot(223) # 两行两列的第三个
plt.plot(X3,Y3,'.')
plt.subplot(224) # 两行两列的第四个
plt.plot(X4,Y4,'.')

# 多张同图
plt.plot(X1,Y1,'.')
plt.plot(X2,Y2,'.')

# 设置分辨率
## 绘制分辨率
plt.rcParams['figure.figsize'] = (24.0, 20.0) # 默认的像素为[6.0,4.0],分辨率为100,图片尺寸为 600&400
plt.rcParams['figure.dpi'] = 300 # 直接设置分辨率,一般使用这两种方式之一
## 保存分辨率
plt.rcParams['savefig.dpi'] = 300 # 预先设定保存图片像素
plt.savefig(‘demo.jpg', dpi=200) # 保存时指定分辨率,一般使用这两种方式之一

# title 格式
## 该条(title 格式)参考`开码牛`的博客
plt.title('Interesting Graph',fontsize='large',fontweight='bold') 设置字体大小与格式
plt.title('Interesting Graph',color='blue') 设置字体颜色
plt.title('Interesting Graph',loc ='left') 设置字体位置
plt.title('Interesting Graph',verticalalignment='bottom') 设置垂直对齐方式
plt.title('Interesting Graph',rotation=45) 设置字体旋转角度
plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 标题边框
  • 常用配色

#5d7a9a

#ec554a

#ffad60

#8bc24c

#2d2d2d

#bc8420

#593e1a

#ffeb28

#996699

#0fff95