NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    디자이너 [개발자용] 디자이너 프레임워크를 이용한 나만의 매크로 프로그램 만들기 - 통계 함수 사용.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 에디터에는 여러가지 수학 함수와 통계 함수를 제공하고 있습니다. 이외에도 좌표, 가각형 영역을 쉽게 계산할 수 있는 사칙 연산도 제공합니다. 엑셀이나 기타 통계 관련 프로그램에서 제공하는 대부분의 함수를 제공하고 있습니다. 다만~ 연산이라는게 연속적인 작업이라서 단순한 계산 용도가 아니라면 스크립트로 복잡하게 구현하는건 상당히 귀찮은 작업입니다. 그래서, 엔지엠 매크로는 사용자가 직접 커스텀 모듈을 만들어서 추가할 수 있는 기능이 포함되어 있습니다. 연산의 중간 과정은 직접 구현하고, 결과만 매크로에 적용시킬 수 있습니다.

    hYt0j1b.png

     

     

    오늘 알아볼 중앙값은 통계쪽에 있습니다. 평균(Mean)과 중앙값(Median, 중간값)은 다릅니다.

    RydTCra.png

     

     

    [ 디자이너 프레임워크 ]를 참고해서 개발 환경을 구축하세요. 이미 Visual Studio(비주얼 스튜디오)를 가지고 있다면 바로 아래와 같이 진행하면 됩니다. 콘솔 프로젝트를 추가하고, 아래 코드를 붙여넣기 하세요. 코드에 주석은 모두 달아두었습니다. 이 글은 개발자분들을 대상으로 작성하고 있기 때문에 일반인분들이 보시기엔 다소 어려운 부분이 있을겁니다. 기본적인 내용은 알고 있다는 가정하에 진행합니다.

    using System;
    using System.Windows.Forms;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                var sv = new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
    
                TreeNode tn = sv.TreeView.Nodes.Add("A", "Analysis");
                var median = new NGM.Models.StatisticsFunc.MedianModel()
                {
                    FunctionKey = NGM.Definition.FunctionKey.STATISTICS_FUNCTION_MEDIAN,
                    DirectInputData = "1,2,3,4,5,6,7,8,9"
                };
    
                // 액션 목록을 관리하는 노드에 액션을 추가합니다.
                tn.Tag = median;
    
                // 스크립트를 실행합니다.
                sv.Play();
    
                // 엔지엠 매크로, 플레이어, 프레임워크는 모두 비동기로 동작합니다.
                // 작업자 스레드가 매크로 엔진보다 먼저 수행될수도 있습니다.
                // 작업을 동기적으로 처리하기 위해 매크로 엔진이 완료 되었는지 확인해야 합니다.
                while (sv.State == NGM.Definition.MacroState.Run)
                    System.Threading.Thread.Sleep(1);
    
                // 중앙값의 결과를 콘솔창에 표시합니다.
                Console.WriteLine(median.ResultData);
    
                // 프로세스가 종료되서 프로그램이 중지되는걸 방지합니다.
                Console.ReadLine();
            }
        }
    }

     

    실행(F5) 후 결과를 확인 해보세요.

    GqG4Zmp.png

     

     

    프레임워크의 클래스, 메소드, 열거형등등... 도움말을 확인하면서 코딩할 수 있습니다.

    sDkDSrL.png

     

     

    메뉴얼을 모두 작성한건 아니지만, 코딩에서 참고할만한 내용을 지속적으로 업데이트하려고 노력하고 있습니다.

    hv1I9VT.png

     

     

    가급적이면 질문은 홈페이지를 이용해주세요~ 그래야 다른 사용자도 참고할만한 자료가 누적되서 나중에는 큰 자산이 됩니다. 1~9까지 인자로 사용하는 데이터는 중앙값과 평균값이 동일합니다. 평균값을 구할 수 있도록 아래와 같이 코드를 변경하고, 실행 해보세요.

    using System;
    using System.Windows.Forms;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 매크로 엔진에서 가상으로 실행할 스크립트 뷰를 생성합니다. 
                // isBackground 파라메터를 false로 명시하지 않으면 뷰를 생성하지 않고 백그라운드로 실행됩니다.
                var sv = new Designer.Component.ScriptView(new Designer.ComponentDefault.MainView(), "/Dummy.ngs");
    
                TreeNode tn = sv.TreeView.Nodes.Add("A", "Analysis");
                var median = new NGM.Models.StatisticsFunc.MeanModel()
                {
                    FunctionKey = NGM.Definition.FunctionKey.STATISTICS_FUNCTION_MEAN,
                    DirectInputData = "1,2,3,4,5,6,7,8,9"
                };

     

    결과는 중앙값과 동일하게 5가 표시됩니다. 산술평균의 경우 모든 관측치의 값을 반영하므로 지나치게 작거나 큰 값들의 영향을 많이 받게 됩니다. 중앙값은 그 값보다 크거나 작은 관측치는 전혀 고려하지 않으므로 영향을 받지 않습니다. 그래서 통계의 오류를 수정하기 위해 중앙값을 사용하기도 합니다. 수율 관련쪽 일을 하다보니 기초 통계를 사용할일이 많았는데요. 이젠~ 주로 프로젝트 매니저를하고 있어서 대부분 다 까먹었습니다. 코딩도 안한지가 오래대서 개발도 서툴구요ㅠㅠ; 요즘 개발자들 보면 정말 천재인가 싶을정도로 아키텍트랑 코딩이 예술이더라구요. 점점 머리가 안따라가서 적응이 힘들어집니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천4 비추천0

    댓글목록

    등록된 댓글이 없습니다.