Code: Select all
****************************************************************************************************************************************
*** 3.7.1. Поиск и удаление артефактов (робастная процедура)
*** Строится частотное распределение абсолютных частот встреч признаков в классах по матрице сопряженности Abs.dbf
*** и пользователю предоставляется возможность удалить редко встречающиеся факты (сочетания), как случайные выбросы или артефакты
****************************************************************************************************************************************
FUNCTION F3_7_1()
LOCAL GetList[0], GetOptions, oRmChart, oRegion1, oRegion2, oRegion3, ;
oRegion4, oRegion5, oRegion6, aBarGroup[0], aLineGroup[0], aPie[0], ;
aDonut[0], aBarGroupFloat[0], aBarGroupIndus[0], aLineGroupIndus[0], ;
aDataAxis1[0], aDataAxis5[0], aDataAxis6[0], cRegSvr, ;
cRmChart, cClsId, cRegQuery, nWhich, oStatus
******* Проверка возможности работать в системе ******************************************
IF M_KodAdmAppls = 0 // Выйти из системы если нет авторизации
LB_Warning("Вы не авторизовались в системе и не можете ей пользоваться!")
RETURN NIL
ENDIF
IF ApplChange() // Перейти в папку выбранного приложения или выйти из системы
LB_Warning("Необходимо задать (выбрать) хотя бы одно текущее приложение !!!")
RETURN NIL
ENDIF
IF .NOT. FILE("Abs.dbf") // Нет БД Abs.dbf
LB_Warning("В текущем приложении нет БД Abs.dbf. Необходимо ее создать в 3-й подсистеме !!!")
ENDIF
******* Подготовка данных (расчет частотного распределения абсолютых частот) *************
CLOSE ALL
USE ABS EXCLUSIVE NEW
SELECT ABS
N_Rec = RECCOUNT()
N_Col = FCOUNT()
Mess = '3.7.1. Подготовка данных для визуализации частотного распределения абс.частот'
@ 4,5 DCPROGRESS oProgress SIZE 95,1.1 MAXCOUNT 3*(N_Rec-2) COLOR GRA_CLR_BLUE PERCENT EVERY 100
DCREAD GUI TITLE Mess PARENT @oDialog FIT EXIT
oDialog:show()
nMax = N_Rec
nTime = 0
mMinX = 0
mMaxX = 0
DC_GetProgress(oProgress,0,nMax)
FOR i=1 TO N_Rec-2
DBGOTO(i)
FOR j=1 TO N_Col-3
Fv = FIELDGET(2+j)
mMinX = MIN(mMinX, Fv)
mMaxX = MAX(mMaxX, Fv)
NEXT
DC_GetProgress(oProgress, ++nTime, nMax)
NEXT
PRIVATE aData[mMaxX]
PRIVATE aLabelText[mMaxX]
AFILL(aData,0)
AFILL(aLabelText,' ')
mMinY = 0
mMaxY = 0
FOR i=1 TO N_Rec-2
DBGOTO(i)
FOR j=1 TO N_Col-3
Fv = FIELDGET(2+j)
IF Fv > 0
aData[Fv] = aData[Fv] + 1
aLabelText[Fv] = ALLTRIM(STR(Fv))
mMinY = MIN(mMinY, aData[Fv])
mMaxY = MAX(mMaxY, aData[Fv])
ENDIF
NEXT
DC_GetProgress(oProgress, ++nTime, nMax)
NEXT
DC_GetProgress(oProgress,nMax,nMax)
oDialog:Destroy()
***** ВИЗУАЛИЗАЦИЯ ГРАФИКА *************************************************************
***** Размер окна для отображения графика **********************************************
* --- RMChart ActiveX Control --
@ 0,0 DCRMCHART oRmChart SIZE 1140, 640 RESIZE DCGUI_RESIZE_RESIZEONLY
***** Колонки и линейный график: исходные данные ***************************************
DcAddLineGroup TO aLineGroupIndus ;
DATA aData ;
WHICHDATAAXIS 2 ;
STYLE RMC_LINE_CABLE ;
COLOR Green ;
LINESTYLE RMC_LSTYLE_LINE ;
SYMBOLSTYLE RMC_SYMBOL_BULLET ;
VALUELABEL 1
****************************************************************************************
DcAddDataAxis TO aDataAxis6 ;
AXISTEXT "Частота встреч фактов" ;
ALIGN RMC_XAXISBOTTOM ;
MINVALUE mMinX MAXVALUE mMaxX
DcAddDataAxis TO aDataAxis6 ;
AXISTEXT "Количество встреч частоты фактов" ;
ALIGN RMC_DATAAXISLEFT ;
MINVALUE mMinY MAXVALUE mMaxY
@ 10,10 DcChartRegion oRegion6 ; // Координаты нижнего левого угла поля построения графика в окне
PARENT oRMChart ;
SIZE 1100, 600 PIXEL ; // Размер поля построения графика в окне
CAPTION TITLE M_NameAppl BACKCOLOR Coral TEXTCOLOR FloralWhite FONTSIZE 10 BOLD ;
GRID ;
DATAAXIS aDataAxis6 ;
LABELAXIS LABELARRAY aLabelText ALIGN RMC_LABELAXISBOTTOM ;
LINEGROUP aLineGroupIndus
****************************************************************************************
***** Кнопки визу **********************************************************************
@ 620,0 DCPUSHBUTTON CAPTION 'Запись графического файла' SIZE 200,25 ;
ACTION {||SaveChartToBitmap(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Копирование в буфер обмена' SIZE 170,25 ;
ACTION {||SaveChartToClipboard(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Печать' SIZE 50,25 ;
ACTION {||PrintChart(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Удаление артефактов' SIZE 150,25 ;
ACTION {||Razrab()}
DCGETOPTIONS RESIZE PIXEL
DCREAD GUI ;
SETAPPWINDOW ;
FIT ;
TITLE '3.7.1. Частотное распределение абсолютных частот по Abs.dbf. (C) Универсальная когнитивная аналитическая система "Эйдос-Х++"' ;
OPTIONS GetOptions ;
EVAL {||oRMChart:RMCToolTipWidth := 100, ;
oRMChart:RMCUserWatermark := '(C) Универсальная когнитивная аналитическая система "Эйдос-Х++"', ;
oRMChart:RMCUserWMAlignment := RMC_TEXTRIGHT, ;
oRMChart:RMCUserWMFontSize := 20, ;
oRMChart:RMCUserWMLucent := 40, ;
oRmChart:mouseDown := ;
{|a,b,c,d,e,o|aData := e,nWhich := a,o:=Thread():new(),o:start({||BrowseCallbackData(nWhich,aData,oRMChart)})}, ;
oRmChart:mouseMove := ;
{|nMouseButton,b,nX,nY,aData|oRMChart:showToolTip( nMouseButton, nX, nY, aData )}, ;
oRmChart:draw(), ;
ShowDebugInfo(oRMChart)}
CLOSE ALL
RETURN NIL
*************************************************************************************************