機械学習手法とその実装言語をQiitaのタグ情報から考察してみた

#初めに
初めての投稿。

大学時代、SVM（サポートベクターマシン）で旅行サイトのレビューのポジネガを判別するプログラムを作っていました。
当時はPythonを使っていましたが、他の機械学習手法だと違う言語が多いのかな？今はPython以外が人気なのかな？とか思ったので、Qiitaのタグ情報を集めることで考察してみました。

まずは、機械学習手法（SVM,Logistic regressionなど）がタグ付けられている記事をAPIで100件抜き出して、その記事の他のタグを見ることで、どの言語で作られているか確認します。
（言語も一緒にタグ付けするやろ、のノリです。）

QiitaAPIの練習なので、正しいかどうかは問題ではないですね。
ちなみに検索名は↓です。

|手法|検索名|
|:-:|:-:|
|線形回帰|Linearregression|
|ロジスティック回帰|Logisticregression|
|サポートベクターマシン|SVM|
|決定木|decisiontree|
|ランダムフォレスト|randomforest|
|ニューラルネットワーク|NeuralNetwork|
|ナイーブベイズ|NaiveBayes|
|k-means|k-means|
|主成分分析|PCA|
|ディープラーニング|DeepLearning|

#コード

```javascript:QiitaAPItest.js
// axiosモジュールを読み込む
const axios = require('axios');

//MLName:機械学習手法
//MLSearchName:検索する名称
//MLSearchNameをタグ付けしている記事100件からタグを取得し、[タグ名：数]のリストで返します。
async function taglist(MLName, MLSearchName) {
  var rtList={};
  let response = await axios.get('https://qiita.com/api/v2/items?per_page=100&page=1&query=tag:'+MLSearchName);
  for (let i = 0; i < response.data.length; i++) {
    for (let j = 0; j < response.data[i].tags.length; j++) {
      if(rtList[response.data[i].tags[j].name]){
        rtList[response.data[i].tags[j].name] +=1;
      }
      else{
        rtList[response.data[i].tags[j].name] =1;
      }
    }
  }

  //降順にソート
  var keys=[];
  for(var key in rtList)keys.push(key);
  function Compare(a,b){
    return rtList[b]-rtList[a];    
  }
  keys.sort(Compare);

  console.log('\n' + MLName);

  //上位5件表示
  for(let i = 0; i < 6; i++){   
    console.log(keys[i] + ':' + rtList[keys[i]]);
  }
}

taglist('線形回帰','Linearregression');
taglist('ロジスティック回帰','Logisticregression');
taglist('サポートベクターマシン','svm');
taglist('決定木','decisiontree');
taglist('ランダムフォレスト','randomforest');
taglist('ニューラルネットワーク','NeuralNetwork');
taglist('ナイーブベイズ','NaiveBayes');
taglist('k-means','k-means');
taglist('主成分分析','PCA');
taglist('ディープラーニング','DeepLearning');
```

#結果・考察
抽出したタグで、数が多い順に5個

|手法|タグ1|タグ2|タグ3|タグ4|タグ5|
|:-:|:-:|:-:|:-:|:-:|:-:|
|線形回帰|MachineLearning|Python|機械学習|memo|coursera|
|ロジスティック回帰|Python|MachineLearning|scikit-learn|classification|Marketing|
|サポートベクターマシン|機械学習|Python|scikit-learn|MachineLearning|機械学習入門|
|決定木|Python|MachineLearning|機械学習|決定木|randomForest|
|ランダムフォレスト|Python|機械学習|MachineLearning|scikit-learn|Kaggle|
|ニューラルネットワーク|DeepLearning|Python|機械学習|AI|MachineLearning|
|ナイーブベイズ|Python|MachineLearning|機械学習|scikit-learn|svm|
|k-means|Python|機械学習|クラスタリング|scikit-learn|MachineLearning|
|主成分分析|Python|機械学習|主成分分析|Python3|K-means:6|
|ディープラーニング|Python|機械学習|PyTorch|TensorFlow|Keras|

**全部Python！**
Rとかも出てくるかなと思ってましたが、やはりPythonが人気のようです。
Python楽ですよね。CとかJavaとか学んだ後にPython使ったら楽すぎて震えましたね。
Pythonが人気な理由もググってみました。

[Pythonの長所と短所についての考察](https://qiita.com/KatsunoriNakamura/items/dd567ea7cfaa99685453)

Qiita以外のリンク貼っていいのか迷ったので、貼っていません。
「Python 人気　理由」とかでググればたくさん出てきますね。

まとめると
**・コードが書きやすい
・利用できるプラットフォームが多い
・ライブラリが豊富**
が理由のようです。

機械学習では特に、ライブラリが多いのが選ばれる理由でしょうか。
ただ、機械学習は学習の過程でどうしても処理が大きくなってしまいます。
その点Pythonはインタプリタ型なので、唸れマシンパワーというところですかね。
コンパイル型でも一緒か。

私は1日かけて学習させた後にクソみたいなコードミスでエラーになったことが多々あります。
インタプリタ型が悪いのではないです。悪いのは私です。

#あとがき
APIの記事の検索方法に課題が残っています。
・スペースも込みで検索できない（例：Deep Learning）
・日本語で検索できない
QiitaAPIのhttps://qiita.com/api/v2/items?per_page=100&page=1&query=tag:
以降の記述方法を、もう少し勉強する必要があります。