Juliaがちょっとバズっているらしいと聞いたから本当にそうか、確かめてみた

###この記事は？
新年に入ってからJuliaが少しバズっているらしいとの噂があったので、Qiitaの投稿数の時系列プロットをしてみて確かめた記事です。

###Juliaがバズっている？
ちょっと前から個人的興味でJuliaを触っていたのですが、そのときいろいろ参考にさせていただいた[投稿をしているかた](https://twitter.com/bicycle1885)がこのような発言をしていたので気になりました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Juliaのブーム，どうせ1日か2日くらいで終わるだろうと思ったが，1週間経つけど未だにチュートリアルへのアクセス数がが落ちない(むしろちょっと伸びてる)。<a href="https://t.co/fDUOlGIH99">https://t.co/fDUOlGIH99</a> <a href="https://t.co/VWpARTbeyv">pic.twitter.com/VWpARTbeyv</a></p>&mdash; (｢・ω・)｢ｶﾞｵｰ Julia㌠ (@bicycle1885) <a href="https://twitter.com/bicycle1885/status/950728544069459968?ref_src=twsrc%5Etfw">2018年1月9日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

###Qiitaでの投稿数を調べてみた
Juliaのタグが付いている投稿を調べてみました。その際に[QiitaのAPIのPythonラッパー](https://qiita.com/petitviolet/items/deda7b66852635264508)を使わせていただきました。

###Qiita API
Qiita APIを使うのにちょっと詰まったので備忘録的に記録を残しておきます。

qiita_v2.pyはpipを使えるので

```console
$ pip install qiita_v2
```

します。使い方は[こちら](https://qiita.com/petitviolet/items/deda7b66852635264508)を参考に、と書いてあったのでヒアドキュメントを見ながら使ってみました。

今回は'Julia'タグが入っている投稿を抽出したかったので`QiitaClient.list_tag_items`メソッドを使います。

```python
import matplotlib.pyplot as plt
from qiita_v2.client import QiitaClient
import datetime as dt

access_token = "**************************"
client = QiitaClient(access_token)
```

アクセストークンは今回は自分のアカウントの認証をしましたが、qiitaアカウントを持っていなくても、`QiitaClient.create_access_token()`で作れるようです。自分のアカウントでアクセストークンを作る場合は自分のQiitaページの設定→アプリケーション→個人用アクセストークンで作れます。

'Julia'タグがついた投稿が欲しかったので

```python
request = client.list_tag_items('Julia')
json = request.to_json()
```

としたところ、帰ってきたjsonは20要素しかないようでした。Juliaタグがついた投稿は手動検索だと220くらいあったので何かおかしいです。

###ラッパーの中身
仕方がないのでラッパーのソースを読んでみたところ、`client.list_tag_items('Julia')`は　'https://qiita.com/tags/Julia/items' を返すことになっていました。これだと、1ページ目にある項目しか引っ張ってこれないことになります。引数paramsにクエリパラメータを入れられるようだったので2ページ目以降は`params={'page': n}`のようにしてページを指定することにしました。手作業で12ページあることを確かめたので

```python
n_pages = 12
time_stamps = []

request = client.list_tag_items('Julia') # 1ページ目
json = request.to_json()
for i in range(len(json)):
    time_stamps.append(json[i]['created_at'])
    
for page in range(2, n_pages+1):
    request = client.list_tag_items('Julia', params={'page': page})
    json = request.to_json()
    for i in range(len(json)):
        time_stamps.append(json[i]['created_at'])
```

としてタイムスタンプだけ抽出しました。同じ処理が二回書いてあったりしますがお気に召されぬよう・・・

###タイムスタンプ処理
このままだとタイムスタンプはstr型のままなのでdatetime型に直します。time_stampsの要素は

```python
print(time_stamps[0])  #=> 2018-01-08T21:12:45+09:00
```

のようになっているのでタイムゾーン情報をカットします(本当はこの処理いらない？)

```python
time_stamps = list(map(lambda x: x.replace("T", " "), time_stamps))
time_stamps = list(map(lambda x: x.replace("+09:00", ""), time_stamps))
```

その後datetime型に直します。

```python3

time_stamps = list(map(lambda x: dt.datetime.strptime(x, "%Y-%m-%d %H:%M:%S")
```

これでmatplotlibに渡せるようになりました。

後はヒストグラムにでもしてみればいいでしょう。

```python
plt.hist(time_stamps, bins=20)
plt.xlabel("Date")
plt.ylabel("Number of Posts")
plt.xticks([dt.date(2013, 1, 1), dt.date(2014, 1, 1), dt.date(2015, 1, 1),
 dt.date(2016, 1, 1), dt.date(2017, 1, 1), dt.date(2018, 1, 1)])

plt.show()
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/180568/544d5a54-9b63-7479-0c7e-9d44b7e2fb1c.png)

確かに最近爆発的に投稿が増えているみたいですね!