Python多线程和多进程的运行速度比较

通过一个图像合成视频的脚本案例测试了一下Python3在单线程、多线程和多进程下的运行速度。发现多线程可以一定程度上提高运行速度(将1个线程拆为4个线程,提速大约83%),但是不能达到完全的并行运算,据说是因为threading模块并不能真正调用多个处理器。在多进程下运行,可以接近完全平行的运算速度。 ...

December 16, 2022 · 2 min · Sheng, D.

非期望产出SBM模型的数学推演及Python实现

带有非期望产出的SBM模型(slacks-based measure)可用于处理多个投入和产出变量的效率测度问题,可用于工业经济绿色发展效率的分析。在绿色发展分析中,需要同时考虑经济收益(期望产出)和负面环境效应(非期望产出)的问题,一方面要提高经济收益,另一方面需要减少污染排放,是投入、期望产出和非期望产出三方权衡的问题。1 这个帖子记录了和非期望产出SBM模型苦苦斗争一个星期的学习成果。 数学原理 DEA模型/CCR模型 DEA SBM模型是数据包络分析(Data Envelopment Analysis, DEA)的一种。在DEA模型中,假定存在$n$个可比决策单元(decision making units, DMU),记为$DMU_j(j=1,2,\dots,n)$; 每个$DMU$有$m$种投入,记为$X_i(i=1,2,\dots,m)$,每种投入的权重为$v_i$; 有$q$种产出,记为$Y_r(r=1,2,\dots,q)$,每种产出的权重为$u_r$. 对第$k$个可比决策单元而言,其投入产出比(技术效率)为 $$ H_k=\frac{\sum_{r=1}^qu_rY_{rk}}{\sum_{i=1}^mv_iX_{ik}}, $$ 限定范围为$H_k\in[0,1]$. 现要求在所有可比决策单元的效率均不超过$1$的条件下,调节权重$[v_1,v_2,\dots,v_m]$和$[u_1,u_2,\dots,u_q]$,使得被评价的单元$DMU_k$效率值最大化。即如下规划模型: $$ \begin{aligned} \max&~~ z=\frac{\sum_{r=1}^qu_rY_{rk}}{\sum_{i=1}^mv_iX_{ik}}\\ s.t.&~~ \frac{\sum_{r=1}^qu_rY_{rj}}{\sum_{i=1}^mv_iX_{ij}}\le1~ (v_i\ge0,u_r\ge0)\\ &~~ i=1,2,\dots,m;~r=1,2,\dots,q;~j=1,2,\dots,n \end{aligned} $$ 该模型所确定的权重系数组合是对于$DMU_k$最有利的。由于$\sum_{i=1}^mv_iX_{ik}>0$,模型的规划条件即为 $$ s.t.~~\sum_{r=1}^qu_rY_{rj}-\sum_{i=1}^mv_iX_{ij}\le0; $$ 在上述线性规划模型中,所要求的是投入和产出项目的指标权重,在原始意义上就是$\vec u$和$\vec v$。模型指定了一个可比决策单元$DMU_k$,在规划过程中力求这个单元最终的效率评价达到最高。实际应用中,如何选择这个特殊的$DMU$必然会成为问题的关键。或许需要根据决策者的感性判断(或其他手段辅助),选定一个最优的决策单元,或者人为设置一个对照的“理想型”,将其视为效率最高的情形。 投入导向CCR 令$t=\left(\sum_{i=1}^mv_iX_{ik}\right)^{-1}$,则模型的目标函数为 $$ \max ~~ z=t\sum_{r=1}^qu_rY_{rk}=\sum_{r=1}^qtu_rY_{rk}, $$ 令$\mu_{r}=tu_r, \nu_{i}=tv_i$,根据$t$的定义可知$\sum_{i=1}^m\nu_iX_{ik}=1$;将规划条件两边同乘$t$,得到 $$ s.t. ~~ \sum_{r=1}^q\mu_{r}Y_{rj}-\sum_{i=1}^m\nu_{i}X_{ij}\le0. $$ 从而将非线性规划模型转换为线性规划模型: $$ \begin{aligned} \max &~~ z=\sum_{r=1}^q\mu_{r}Y_{rk}\\ s.t. &~~ \sum_{r=1}^q\mu_{r}Y_{rj}-\sum_{i=1}^m\nu_{i}X_{ij}\le0~(\mu_r\ge0, \nu_i\ge0)\\ &~~ \sum_{i=1}^m\nu_iX_{ik}=1\\ &~~ i=1,2,\dots,m;~r=1,2,\dots,q;~j=1,2,\dots,n \end{aligned} $$ 其对偶模型为(对偶模型求解过程见文末)...

August 10, 2022 · 7 min · Sheng, D.

Sci-Hub + Python爬虫实现文献批量下载

操作思路 在Web of Science或者其他学术搜索引擎上查找所需要的文献,然后将全体检索结果的信息导出成Excel(包括作者、标题、出版年份、期刊、DOI号等等) 以DOI号为检索条件,到Sci-Hub下载文献,将这一过程写成爬虫进行批量处理 导出DOI号序列,写成循环来逐个爬取 以DOI号检索文献,进入下载页面,查找到保存按钮对应的元素,下载到本地 将下载的PDF文件按照自己的标准重命名 手动补全无法在Sci-Hub上得到的文献 ...

May 18, 2022 · 4 min · Sheng, D.

我国海水水质数据分析

环境数据分析课程的大作业,主要目的应用一下课上学到的一些数据分析方法。 通过爬虫获取我国沿海海水水质的监测数据; 以散点图直观反映水质类别的分布和随时间变化情况; 将化学需氧量数据转换为正态分布,以海区/省份为分类变量进行单因素方差分析; 将无机氮数据转换为正态分布,用Pearson分析和线性回归分析考察化学需氧量和无机氮数据的相关性; 利用机器学习,从多个污染指标数据预测海区分类。 ...

April 24, 2022 · 10 min · Sheng, D.

用Python爬虫爬取高校教师邮箱

最近在做的一个科研训练项目需要向某一交叉领域的专家们发送问卷调查。于是想到通过爬虫爬取国内各大高校在环境、建筑、能源等专业的教授的信息(姓名、邮箱、研究领域等等),再根据研究方向初步筛选,得到待定的专家组名单。🕷️ 预先准备 安装python第三方库:requests,re,csv(必要) 正则表达式在线测试工具:在线正则表达式测试 (oschina.net)(非必要) ...

March 18, 2022 · 2 min · Sheng, D.