데이터 수집 귀찮게에서 프로그램을 작성하십시오.

소개



나는 세미나에서 통계 경제를 연구하고 있으며, 매일 엑셀과 스프레드 시트와 망설이고 있습니다.
그 중에서 복잡한 필터링이나 검색을 기존 기능만으로는 할 수 없었던 것이 있었기 때문에,
이때 프로그램 쓰는 편이 「편하고 빠르지 않을까」라고 생각하고 Node.js를 이용해 보았습니다.
또 당초는 GAS로 할까라고 생각하고 있었습니다만, 향후 데이터 수집으로 스크래핑을 하기 위해 크롤러등을 사용하는 것을 생각해 Node.js로 통일하기로 했습니다.
(VBA를 0에서 만지는 시간이 없었기 때문에 이번은 패스입니다,,,)

이 기사에서 이해



Node.js에서 엑셀 파일을 처리하는 방법

이번에



이번에는 특허 데이터를 사용하여 그 중에서 특정 기업
①특허총출원수
②특허공동출원수
③특허 단독 출원수
를 각각 계산한다는 것입니다.

엑셀 등의 기존 기능에서는 특허 총 출원수를 필터나 검색을 이용하여 구할 수 있습니다만, 공동 출원인지 단독 출원인지를 구별하기 위해서는 해당 셀과 전후의 셀 상태와 비교할 필요가 있다 그래서 프로그램을 쓰는 다른 것 같았습니다 (아마).
아래의 그림과 같이 되어 있고, 공란 개소가 있는 경우 전후의 특허와 같은 것 즉 공동 출원하고 있다고 볼 수 있다고 하는 견해입니다.



그래서 로직으로서는 이하입니다.
①검색시에 걸리는 수→총출원수
② 타이틀(변수명)이 있다→다음 셀의 타이틀이 공란인→공동 출원수
③ 타이틀이 있다→다음 셀의 타이틀이 공란이 아니다→단독 출원수
④제목 없음 → 공동출원수

이에 따라 구현하면

2~3초만에 처리가 끝나 결과를 출력해 주었습니다.

환경



macOS Catalina 10.15.4
npm: 6.4.1
node: v10.15.3

구현



구현 자체는 어렵지 않고, 거의 Node.js에서 엑셀 파일을 어떻게 취급하는가 하는 것이라고 생각합니다만, 모듈이 준비되어 있어 그것을 JSON 객체로 치환할 수 있으므로 간단하다고 생각합니다!

참고 기사나 공식 리포지토리의 링크를 게재해 두므로 그쪽에서 확인해 봐 주세요.
Node.js에서 Excel 파일 읽기 / 쓰기
리포지토리
const XLSX = require("xlsx");
// 対象ファイルの読み込み
const book = XLSX.readFile("Sample.xlsx");
// 対象シートの読み込み
const sheet = book.Sheets["Results"];

// JSONオブジェクトとして取得
let sheet_json = XLSX.utils.sheet_to_json( sheet );

//検索したい企業のID
const searchCompanyId = "JP9011101031552";

//固定変数名
const APPLICANT_BVD_ID_NUMBER_VALIABLE = "Applicant(s) BvD ID Number(s)"
const TITLE_VALIABLE = "Title"

var jointPatentNumber = 0;
var simplePatentNumber = 0;
var totalPatentNumber = 0;
let cellNumber = 0;

searchCompanyId(searchCompanyId);

function serchPatentNumber(id) {

    for( let cell of sheet_json){
        cellNumber++;
        if(cell[APPLICANT_BVD_ID_NUMBER_VALIABLE] == id) {

            totalPatentNumber++;
            if (cell[TITLE_VALIABLE] == undefined) {
                //共同特許の場合:タイトルが空欄ということは共同出願としてみなすことができる
                jointPatentNumber++;

            } else {

                var nextCell = sheet_json[cellNumber+1];
                if (nextCell[TITLE_VALIABLE] == undefined) {
                    //共同特許の場合:現在のセルの特許タイトルがあったとしも、次のセルの特許タイトルがない場合共同特許としてみなすことができる
                    jointPatentNumber++;

                } else {
                    //単独同特許の場合:現在のセルの特許タイトルがあり、次のセルの特許タイトルもある場合単独特許としてみなすことができる
                    simplePatentNumber++;
                }
            }
        }
    }

    console.log("特許総出願数:" + totalPatentNumber);
    console.log("特許共同出願数:" + jointPatentNumber);
    console.log("特許単独出願数:" + simplePatentNumber);

}

끝에



한 번 이런 프로그램을 써버리면 쓸 수 있고, 자신 취향에 커스터마이즈 할 수 있기 때문에 좋았다고 생각했습니다.
만약 다른 사람의 참고도 되면 좋다고 생각합니다.

좋은 웹페이지 즐겨찾기