1.IntelliJ IDEA 插件开发指南
2.Toad:基于 Python 的计计算标准化评分卡模型
3.OpenFOAM中的数据结构-icoFoam为例未完成
4.Qt编写的知名的开源软件列表
5.基于 Toad 的评分卡模型全流程详解(含 Python 源码)
6.IntelliJ IDEA插件开发自定义语言支持实战第五讲:Annotator(实时的警告和错误突出显示)
IntelliJ IDEA 插件开发指南
年,面对IntelliJ全家桶的算源使用,是计计算否还有人质疑其效能? 公司Terminus自研的框架Trantor催生了我们开发插件的需求,为了更好地整合其项目结构和特性,算源我们希望为IDEA用户打造一个便捷的计计算插件支持。在我的算源在线 评测 系统 源码GitHub上,不断更新的计计算示例代码展示了插件的一些功能实现。功能概述
...
踏入插件世界
插件开发主要分为几个类别:技术栈
开发IntelliJ插件所需的算源技术包括:创建插件
官方提供了以下指导:新建项目
项目基本结构,如plugin.xml配置文件
核心工具:PSI
PSI是计计算程序结构接口,用于解析文件、算源构建语法和语义代码。计计算IDEA内置许多插件,算源允许开发者操作工程元素,计计算自定义语言开发则需实现Parser等。算源PsiFile详解
PsiFile是计计算文件结构的基石,代表文件内容的语法结构。例如,Java文件对应PsiJavaFile,XML文件对应XmlFile。探索PSI结构
掌握View PSI结构工具,如Tools > View PSI Structure of Current File,通过Gradle:runIde沙箱来探索代码对应的复杂PSI元素。常用API与操作
插件开发涉及众多API,有些方法需要猜测或通过搜索找到。对PsiElement的写操作务必在writeAction上下文中进行。虚拟文件与转换
虚拟文件(VF)代表IntelliJ中的文件,与PsiFile间可通过Action转换。行动组件
使用com.intellij.openapi.actionSystem.AnAction创建并注册动作,例如在plugin.xml中定义。服务管理
利用ServiceManager获取服务实例,如ProjectService。Light Services在.3之后更加便捷,但需要注意一些限制。插件界面
IntelliJ提供了对话框组件、Swing UI Designer、EditorTextField等,以及UI检查器工具。Gradle插件
从Gradle IDEA插件的运行、调试,到构建和打包,都有相应的指导和工具。发布选项
官方提供了发布到JetBrains插件库和自定义存储库的方法,详细步骤需在build.gradle中配置。学习资源
深入学习IntelliJ IDEA官方文档、参考开源插件和社区,以及IDEA源码,是插件开发不可或缺的资源。 期待你的提问和交流,一起探索IntelliJ IDEA插件开发的无限可能。Toad:基于 Python 的githubjdk源码标准化评分卡模型
大家好,我是东哥。
在信贷风控领域,评分卡模型是最为常见和经典的工具。评分卡通过为信贷客户分配分数,依据不同的业务场景(贷前、贷中、贷后和反欺诈)进行评估,最终通过设置阈值给出评估结果。与XGB等机器学习模型相比,评分卡通常采用逻辑回归,因为它具有很强的特征解释性,属于广义线性回归模型。
今天要介绍的是一个开源评分卡工具——toad,它提供了一条龙服务,包括数据探索、特征分箱、筛选、WOE转换、建模、评估、分数转换等过程,极大地简化了建模人员的工作。toad的基本操作可以通过pip安装完成。
首先,使用read_csv读取数据,了解数据概览。在测试数据中,有万条记录,包含个特征。数据的时间跨度为年5月至7月,我们将使用3月和4月的数据作为训练样本,5月、6月、7月的数据作为跨期样本(OOT)进行验证。
接下来,通过toad的EDA功能进行数据探索分析,包括统计性特征、缺失值、unique values等信息。在进行变量筛选时,可以使用toad的quality功能计算各种指标,如iv值、gini指数、熵等,结果按照iv值排序。对于数据量大或高维度数据,建议使用iv_only=True。同时,要删除主键、牛王源码日期等高unique values且不用于建模的特征。
在完成初步筛选后,通过toad.selection.select函数进一步筛选变量,根据阈值设置进行特征选择,最终保留个变量,并得到筛选后的数据集和被删除的变量列表。
接下来是分箱过程,toad提供了多种分箱方法,包括等频分箱、等距分箱、卡方分箱、决策树分箱和最优分箱等。分箱结果对于WOE转换至关重要,toad支持数值型和离散型数据的分箱,并能单独处理空值。
在完成分箱后,进行WOE转换,将数据转换为更容易解释的分数形式。通过观察分箱结果并进行调整,确保WOE转换后的分数具有良好的单调性。
随后,应用逐步回归方法筛选特征,支持向前、向后和双向筛选。逐步回归通过使用sklearn的REF实现,通常情况下direction='both'效果最好。参数设置如正则化、样本权重等不在详细介绍范围内。
完成建模后,使用逻辑回归对数据进行拟合,并计算预测结果。风控模型常用评价指标包括KS、AUC、PSI等。toad提供了快速实现这些评价指标的方法。
评分卡转换是最后一步,将逻辑回归模型转换为标准评分卡,支持传入逻辑回归参数进行调整。
toad还支持GBDT编码,作为GBDT与LR建模的前置,以提高模型学习效果。
总结而言,toad提供了一套便捷的评分卡建模流程,大大简化了建模工作。在实际应用中,可以参考源码进行优化或扩展功能。
OpenFOAM中的数据结构-icoFoam为例未完成
撰写博客并整理思路确实能提高工作效率。我本想利用暑假进行一项关于 OpenFOAM 数据结构的深入研究,然而日程安排总是pnet源码让我疲于应对各种事务,仿佛永远在追赶时间的脚步。近期,因大雪封校和周五晚上的闲暇时光,我终于有了时间来解决这个问题。
我撰写这篇博客的目的,是希望从数据结构的角度,详细解析 OpenFOAM 如何对一个案例进行运算。我将从一个最简单的例子出发(1*2*3的网格),通过数字来演示 OpenFOAM 的运算过程。本文将分为两部分,首先分析不带湍流模型的 `icoFoam` 例子,之后有空时再探讨带湍流模型的 `pisoFoam`。
在深入代码之前,了解其数学表达式至关重要。关于 `icoFoam` 的数学模型,我主要参考了李东岳博士的论文。`icoFoam` 是一个基于 NS 方程(无湍流项)的简单例子,适用于分析流体动力学基本原理。
NS 方程描述了动量方程,我们假设忽略压力梯度项,以便进行动量预测。OpenFOAM 使用有限体积法(FVM)对每个项进行体积积分离散化,最终形成如下方程:
Vp * dU/dt = Ff - SS * ν * ∇U
其中,Vp 表示网格单元体积,Ff 为通量,SS 是网格单元面矢量,ν 是动力粘度,U 是速度向量,下标 n 表示当前时间步(已知),r 表示预测时间步(待求)。N 和 P 分别代表相邻网格单元和当前网格单元。
接着,我们将忽略了的压力梯度项加入方程中,得到:
Vp * dU/dt = Ff - SS * (p/rho) - SS * ν * ∇U
这里的 p/rho 表示单位压力,是 OpenFOAM 中定义的压力。
这实际上是一个线性方程,方程在某一时间 n 上,除了 U^r 未知,其他变量都是已知的,因此可以看作是求解线性方程组(ax=b)的问题。
接下来是压力泊松方程,我们需要根据 U^r 预测出下一时刻的压力 p^r,以完成循环并满足物理约束。
循环内,我们通过不断修正 U^r 和 p^r,加入动量方程和连续性方程的物理约束,最终得到满足这些约束的 U^r 和 p^r,再带入下一个时间步进行计算。
在 `pisoFoam` 中,蓝图源码循环的过程是如何更新速度和压力的呢?
将动量方程代入连续性方程,可以得到浓缩的 2 合 1 方程式,即压力泊松方程。其中,HbyA 是基于省略了压力项的动量方程计算出的速度预测值,用于更新变量。
通过 piso 循环,最终目的是在每个循环中得到满足 2 合 1 方程式的预测结果,这样得到的预测结果在物理上是合理的。
整个流程包括:
1. 获取第一个压力预测值,通过将动量方程带入压力泊松方程而求得。
2. 根据第一个压力预测值修正速度。
3. 循环重复直到收敛。
在理解了数学模型之后,接下来是观察代码,看看 OpenFOAM 是如何实现这些概念的。在图中,我总结了对 `icoFoam` 代码的理解,提供了一个清晰的视图。跑一个 1*2*3 网格的 case,如自带的 `cavity` case。
首先调整 `blockMeshDict` 为 1*2*3 的网格。
运行代码,观察网格形状。
从 0 到第一个时间步,再到从第一个到第二个时间步。
1. 从 0 到第一个时间步。
这段代码的主要目的是将动量方程放入求解器中,通过 `solve` 命令计算出预测速度 U^r。
疑问在于,`solve(UEqn == -fvc::grad(p));` 之后速度变量 U 直接更新,这在 C++ 中是合法的吗?U 不是 UEqn 的子变量,这行代码没有赋值给 U,怎么就能更新 U?
经过验证,在 `solve` 语句前后输出 U 的结果确实不同,说明 `solve` 确实修改了外部变量 U。
这种操作可能涉及指针(pointer)或引用(reference)的使用,以提高代码效率。在 C 语言中,这样的操作是常见的,但在不了解内存管理的情况下可能会引发问题。
通过复制一个引用实例,观察了 `icoFoam.C` 中的传递方式。从 `UEqn` 到 `solve` 函数的参数传递,可能是通过某种间接引用实现的。
在 `fvMatrix` 中,包含 A 和部分 b(如 `fvm::ddt(U)`)的结构。`fvMatrix` 分为两部分,一部分用于 A,另一部分用于 b。
观察到 `fvMatrix` 中确实包含引用变量 psi_,这是 U 的引用位置。`solve` 函数通过创建引用 psi 来更新 U 的值。
总结了 `fvMatrix` 的结构,确认了 `solve` 函数在更新 U 值时使用了引用或指针。
在了解了如何在矩阵 A 和 b 中进行操作后,我们接下来需要验证矩阵是如何变化的。
修改源代码,输出 `solve` 公式中的变量,进行比较。
对于输出的矩阵和源代码进行了详细的对比分析,确认了矩阵 A 和 b 的结构与预期一致。
最后,分析了整个 piso 循环过程,从预测速度到修正压力,再到最终得到满足物理约束的 U^r 和 p^r,整个流程在代码中得到了清晰的体现。
Qt编写的知名的开源软件列表
Qt是一个开发的跨平台C++图形用户界面应用程序开发框架,它既适用于创建GUI程序,也能用于非GUI程序的开发。最新版本是6.0。以下是一些由Qt编写的知名开源软件列表:
3DSlicer是一个用于可视化和医学图像计算的免费开源软件。
AcetoneISO是一款镜像文件挂载软件。
Adobe Photoshop Album是一款图像组织应用程序。
Arora是一款跨平台的开源网页浏览器。
Autodesk MotionBuilder是一款专业3D角色动画软件。
Autodesk Maya是一款用于3D建模和动画的软件。
Avidemux是一款多用途视频编辑和处理的免费软件程序。
Avogadro是一款高级分子编辑器。
BOUML是一款免费的UML工具箱。
chmcreator是一款开源的CHM开发工具。
CineFX是一款跨平台、开源、免费、视频剪辑软件。
CoCoA是一款交换代数计算软件。
Dash Express是一款支持互联网的个人导航设备。
DAZ Studio是一款三维图形演示/动画应用程序。
Doxygen是一款API文件产生器。
EAGLE是一款用于印刷电路板(PCB)设计的工具。
EiskaltDC++是一款使用直接连接协议的程序。
Emergent是一款神经网络模拟器。
FEKO是一款电磁场模拟软件产品。
eva是Linux版QQ聊天软件。
FreeCAD是一款自由开源的三维实体和通用设计CAD/CAE。
FreeMat是一款自由开源的数值计算环境和编程语言。
Full Tilt Poker是一款在线扑克程序。
Gadu-Gadu是一款实时通信软件。
Gambas是一款基于基本解释器的自由开发环境。
GoldenDict是一款开源的字典软件。
Google地球是一款三维虚拟地图软件。
GNS是一款Cisco网络模拟器。
Guitar Pro 6是一款a tablature editor。
刺猬大作战是一款基于百战天虫的开源游戏。
Hydrogen是一款高级鼓机。
ImageVis3D是一款体积射线投射应用。
Ipe是一款自由的矢量图形编辑器。
ISE Webpack是一款为Windows和Linux开发的免费EDA工具。
Kadu是一款使用Gadu-Gadu协议的波兰即时通信工具。
KDELibs是许多KDE程序都使用的共享库。
KeePassX是KeePass的多平台移植版本。
Last.fm播放器是著名互联网音乐社交网站的桌面客户端。
Launchy是一款开放源代码的快捷启动器。
LMMS是一款开放源代码的音乐编辑软件。
LyX是一款使用Qt作为界面的LaTeX软件。
Mathematica在Linux和Windows版本中使用Qt作为GUI。
Maxwell Render是一款帮助从计算机三维模型数据生成照片级真实感图像的软件包。
Mixxx是一款跨平台的开放源代码DJ混音软件。
MuseScore是一款WYSIWYG的乐谱编辑器。
MythTV是一款开源的数字视频录制软件。
Nuke是一款基于节点的合成器。
PDFedit是一款自由的PDF编辑器。
PokerTH是一款开放源代码的德州扑克模拟器。
Psi是一款基于XMPP网络协议的实时通信软件。
qBittorrent是一款自由的BitTorrent P2P客户端。
QCad是一款用于二维设计及绘图的CAD软件。
Qjackctl是一款用于控制插孔音频连接套件的工具。
QSvn是一款Linux、UNIX、Mac OS X和Windows的GUI Subversion客户端。
Opera是一款著名的网页浏览器。
Qt Creator是Nokia的免费软件、跨平台、集成开发环境。
Qterm是一款跨平台的BBS软件。
Quantum GIS是一款自由的桌面GIS。
Quassel IRC是一款跨平台的IRC客户端。
QupZilla是一款跨平台的开放源代码Webkit网页浏览器。
RealFlow是一款三维工业流体和动力学模拟器。
Recoll是一款桌面搜索工具。
Rosegarden是一款免费软件数字音频工作站程序。
SciDAVis是一款跨平台绘图与数据分析程序。
Scribus是一款桌面排版软件。
Skype是一款使用人数众多的基于P2P的VOIP聊天软件。
SMPlayer是一款跨平台多媒体播放器。
Spotify是一款音乐流媒体服务。
Stellarium是一款天文学的自由软件。
TeamSpeak是一款跨平台的音效通信软件。
Texmaker是一款跨平台的开放源代码LaTeX编辑器。
TeXworks是排版系统TeX的图形用户界面。
Tlen.pl是一款波兰人发明的实时通信客户端。
TOra是一款数据库管理工具。
UMPlayer是一款基于Mplayer的美观多媒体播放器。
UniversalIndentGUI是一款帮助用户美化代码的应用程序。
Valknut是一款使用直接连接协议的程序。
VirtualBox是一款虚拟机软件。
VisIt是一款开源型交互式并行可视化与图形分析工具。
VisTrails是一款科学的工作流管理与可视化系统。
VLC多媒体播放器是一款体积小巧、功能强大的开源媒体播放器。
VoxOx是一款统一通信软件。
WordPress基于Qt,适用于Maemo和Symbian。
wpa supplicant是一款IEEE.i的自由软件实现。
Xconfig是Linux的Kernel配置工具。
YY语音又名“歪歪语音”,是一个在中国大陆拥有庞大用户群的在线多人语音聊天和语音会议的免费软件。
咪咕音乐是中国移动倾力打造的正版音乐播放器。
WPS Office是金山公司(Kingsoft)出品的办公软件,与微软Office兼容性良好,个人版免费。
基于 Toad 的评分卡模型全流程详解(含 Python 源码)
欢迎关注@Python与数据挖掘 ,专注于 Python、数据分析、数据挖掘、好玩工具!
toad 是一个专为风险评分卡建模而设计的工具包,它功能强大且使用便捷,能简化模型构建过程中的多个步骤,包括数据探索、特征筛选、分箱、WOE变换、建模、模型评估、分数转换等,深受行业用户的喜爱。如果您在使用过程中遇到任何问题,欢迎在文末进行技术交流。
以下是基于 toad 的评分卡模型构建流程详解:
首先,要安装 toad,使用 pip 命令即可完成。
导入库和数据读取:演示数据包含条记录,个特征,其中个为特征变量,一列为主键和一列为标签(Defaulter)。数据中有离散型和连续型变量,且存在一定数量的缺失值。为了模型检验,使用 sklearn 的 train_test_split 函数将数据划分为训练集和测试集。
数据探索:使用 toad.detect 方法检测数据情况,获取每列特征的统计信息,如缺失值、唯一值、数值变量的平均值、离散型变量的众数等。此外,通过 toad.quality 方法输出每个变量的 iv 值、gini 指数、熵值和唯一值,结果按 iv 值排序。
特征筛选与分箱:使用 toad.selection.select 方法筛选变量,根据缺失值占比、iv 值、相关性进行变量选择。筛选后,从个特征中选出个变量。接着,使用 toad.transform.Combiner 类进行分箱,支持多种分箱方法,如卡方分箱、决策树分箱、等频分箱、等距分箱和最优分箱。根据实际需求调整参数,完成变量分箱。
WOE 转换:在分箱调整完成后,使用 WOE 转换方法。仅转换被分箱的变量,并确保所有变量经过 WOE 转换。
逐步回归特征筛选:使用 toad.selection.stepwise 方法进行特征筛选,调整参数以获得最佳结果。使用 toad.metrics.PSI 函数检验 WOE 转换后的特征稳定性。
建模与评估:首先使用逻辑回归(LR)构建模型,评估模型结果,常用指标包括 KS(Kolmogorov-Smirnov)值、AUC(曲线下面积)和 PSI(预测分箱稳定性指数)。使用 toad.metrics.KS_bucket 函数评估模型预测分箱后的信息,包括分数区间、样本量、坏账率和 KS 值。
评分转换:使用 toad.ScoreCard 函数将逻辑回归模型转换为标准评分卡。调整参数以适应实际需求,包括基准评分、比率、基准奇偶比等。
至此,通过使用 toad,可以快速完成评分卡模型的全流程构建。在实际工作中,根据数据特性和需求调整参数,以满足特定任务需求。本文提供了 toad 的功能介绍和评分卡建模基础流程,实际应用时,只需根据实际情况调整流程和参数即可。
关注@Python与数据挖掘,获取更多优质文章与技术交流。
IntelliJ IDEA插件开发自定义语言支持实战第五讲:Annotator(实时的警告和错误突出显示)
在IDEA插件开发中,Annotator的功能强大,不仅能基于PSI分析语法,还能深入语义层面,从而提供复杂语法和错误提示逻辑,并针对检测到的错误提供即时修复方案。当文件修改时,Annotator仅处理PSI树中变化的部分,提升开发效率。
以Spring AOP中的@annotation指示符为例,其后应紧跟有效的注解类全限定名。若输入的包名或注解类名无效,Annotator将能提供突出提示,类似Java中变量名未定义时的红色高亮与鼠标悬停提示。
实现此功能,首先创建AopAnnotator类,其核心逻辑是判断元素是否位于@annotation表达式内,随后将表达式字符串通过正则表达式分割,逐一验证包名与注解类名的有效性。若验证失败,则生成错误提示。
在plugin.xml文件中注册AopAnnotator,完成配置。
启动IDEA沙箱环境,尝试输入无效包名或注解类名,Annotator将立即显示错误提示,验证功能实现。
至此,Annotator的实现完毕,后续文章将介绍更多相关实践。
完整源码请访问:[GitHub链接]