Qiita APIから取得したJsonをPower BIに読み込ませる

Qiita API を使って記事を取得し、記事をAPIで取得してJSON形式で出力。
そのファイルをPower BI というMicrosoftのBIツールにインポートして分析してみました。
なお、今回はQiitaのトップコントリビューターの10名の神々を対象に実行しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2135866/bdc75c86-cca1-de55-75b4-2b381c350b58.png)


## 利用したもの
### API
- API Qiita API v2


### 実行環境
 - Windows 10 Home
 - Node.js
 - axios

### BIツール
Power BI　Desktop

https://powerbi.microsoft.com/ja-jp/


## 書いたコード
```Javascript

//ライブラリの読み込み
const axios = require('axios'); //APIをたたくaxios
const fs    = require("fs");    //標準出力のfs

// 文字コード
const charset = 'utf8';        //出力ファイルの文字コード
const result = './Result/';    //出力先のフォルダ
var response; 　               //GETの受け皿
var jsonArray = new Array();
var i = 0;

//神々
const Gods = [
    "jnchito",
    "rana_kualu",
    "hirokidaichi",
    "suin",
    "drken",
    "icoxfog417",
    "baby-degu",
    "Yametaro",
    "mpyw",
    "opengl-8080"
];

//メイン処理
async function main() {

   //forをネストするのも手間だし、１人あたり３回たたけば全件取得できるので、ヨシッ！！
    for(let userId of Gods){
        //page1
        response = await axios.get(
            'https://qiita.com/api/v2/users/'+ userId +'/items?page=1&per_page=100'
        );
        jsonArray.push(response);

        //page2
        response = await axios.get(
            'https://qiita.com/api/v2/users/'+ userId +'/items?page=2&per_page=100'
        );
        jsonArray.push(response);
        
        //page3
        response = await axios.get(
            'https://qiita.com/api/v2/users/'+ userId +'/items?page=3&per_page=100'
        );
        jsonArray.push(response);
    }

    //json形式でファイル出力!!
    for(let res of jsonArray){
        fs.writeFile(result + i +".json" , JSON.stringify(res.data, null, " "), charset, (err, data) => {
            if(err) console.log(err);
            else console.log('write end');
            }
        );
        i++; 
    }
}

//メイン実行
main();
```

## 結果
json形式での出力はしっかりできました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2135866/8ce3cec0-25e3-7a27-b83b-6b6e3a7b10dc.png)


####ツリーマップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2135866/afb48257-7888-19c4-57fb-c0106e381a5e.png)
きれいだなぁ。。。（棒）

#### 散布図と回帰直線
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2135866/0a4f6274-b3e5-6463-d1b7-e70715cff814.png)

コメントとLGTMとの間の相関は強くはなさそう？

## 躓きポイント
短いコードながらJavaScript初心者の私には難しいポイントがいくつかありました。

### 1. 型推論
Javascirptの型推論に悪戦苦闘。便利なようで使いこなすには時間がかかりそうです。
`axios.get()`の戻り値の型がわからず、メソッドをうまく呼び出せませんでした。
`Typeof()`で調べて公式リファレンスと小一時間ほど格闘しました。

### 2. Itterable
いてらぶる....。「反復可能」と訳すようです。Google大先生にご教授いただきました。
要は配列っぽいオブジェクトのことですよね。
配列ではないものを`for...of`文に渡そうとしてTypeErrorが発生してしまいました。

javascriptの組み込み型では、String, Array, TypedArray, Map, Setが該当するそうです。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Iteration_protocols


### 3. 標準出力
Power BI やその他のツールに連携するためにも、やはりファイルへの書き出しはマスターしておきたいところ。
しかし、`fn.writefile()`メソッドの使い方から始まり、文字コード、Json形式...と調べることはてんこ盛りでした。

https://qiita.com/tarotaro1129/items/135ef8d8ce4c1c08c9bb

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON

### 4.Power BI に複数のファイルを取り込む
Power BI は、SQLやExecelファイルなど多くのデータソースを取り込むことができます。
しかし、複数のファイルの一括で読み込むには工夫が必要です。


https://qiita.com/katz_PG/items/e758727066fb4047327d


https://docs.microsoft.com/ja-jp/power-bi/connect-data/service-get-data


## 終わりに
今回はJavaScriptを学習したアウトプットとして、Qiita APIを利用したデータの取得と分析にチャレンジしてみました。
分析はイマイチですが、「APIで情報を取得し分析の準備を整える」まではできたのでご容赦ください。

また、Power BIは基本的に無料で提供されています。
使いきれないほどの豊富な機能が備わっていて、なおかつ無料ですのでぜひ触ってみてください。