StackOverflowのデータを簡単にジョイン（結合）して、データをいろんな角度から見てみた

Qiita読者のみなさん！　プログラミング質疑応答サイト、Stack Overflowにお世話になったことはありませんか？　ありますよね？笑

![overview-stackoverflow.png](https://qiita-image-store.s3.amazonaws.com/0/91522/4494cab5-d740-713a-28a5-4d703b41f16c.png)




[Data Is Plural](https://tinyletter.com/data-is-plural)というサイトを登録しておくと、毎週水曜日に興味深いデータがソースと一緒に送られてきます。先週のData Is Pluralから送られてきたデータのうちのひとつにStack Overflowのデータがありました。

![email-stackoverflow.png](https://qiita-image-store.s3.amazonaws.com/0/91522/202676e4-1ad8-979c-6de4-ae373999a9b1.png)



データ分析Exploratoryチームでは、データリテラシー向上の意味も兼ねて、毎週水曜日に、Data Is Pluralのデータのどれかを使って、「誰が一番興味深い分析ができるか」というData Is Pluralコンテンストなるものをしています。‪#‎DataIsPlural‬というハッシュタグをつけてよくツイートしています。ぼくは、５つの中からStack Overflowを選び、Stack Overflowのデータを様々な角度から分析してみました。今回は、そのときに使ったJoinコマンドの使い方を説明したいと思います。そして、最後には、計算してビジュアライズしたチャートを7つほど載せたいと思います。


##Joinコマンドを使って、データを結合する

メールのStack Overflowの[リンク](https://github.com/dgrtwo/StackLite)をクリックするとStack Overflowのcsvデータが2つあるのがわかります。２つともダウンロードします。

![stackoverflow-github.png](https://qiita-image-store.s3.amazonaws.com/0/91522/749d9342-dd1c-3f82-05ea-38a8c46c159a.png)


ダウンロードしたデータをインポートします。

![import-stackoverflow.png](https://qiita-image-store.s3.amazonaws.com/0/91522/713accaa-da83-23bc-1963-144942f86a23.png)


questions-tagのcsvデータ。Tag列にプログラミング言語のデータがはいっていたりしますね。

![before-join.png](https://qiita-image-store.s3.amazonaws.com/0/91522/ec7ce68f-b6b9-1830-059f-29306b7b87e5.png)


questionsのcsvデータ。CreationDate列に質問が書かれた日付であったり、Score列に質問や解答に対する得点であったり、解答の合計数を表すデータがあったりしますね。

![before-join-stack.png](https://qiita-image-store.s3.amazonaws.com/0/91522/23a89f4b-c9be-82ed-c035-b8a5981bff25.png)


でも、この2つのデータフレームがバラバラになっていると、分析のやり方が限られてきます。でも、もしこの2つのデータフレームが一緒になっていれば、Tag列とCreationDate列を組み合わせて、人気言語ごとの累計質問合計数を出してみたりすることができますよね。つまり、この2つのデータフレームが結合されていると分析のバリエーションを増やしていくことができるのです。そういうときは、left_joinというコマンドを使うと便利です。


left_joinでは、引数に結合したいデータフレーム名とマッチしたい列名を入力すると、マッチした列以外の列を元のデータフレームに結合させることができるんです。よく上のデータを見てみると、Idという列は、questions-tagとquestionsデータフレームの両方に共通してありますね。なので、```left_join(question_tags, by=c("Id" = "Id"))```と入力してみましょう。そして、Runボタンを押します。

![tag-join.png](https://qiita-image-store.s3.amazonaws.com/0/91522/69f4b6c4-ba7f-955d-6dfa-5314eb64a48f.png)


これで、question_tagsデータフレームのId列以外の部分であるTag列をquestions列にジョイン（結合）させることができましたね。

Joinをすると、Stack Overflowのたくさんの列を使うことができるようになるので、このようにデータをいろんな角度から見ていくことができます。


##データを簡単に分析してビジュアライズする

興味がありましたら、それぞれのタイトルをクリックするとチャートがシェアされているページに飛びます。それぞれのページでは、データがどのように加工されたり計算されたかの詳細を、Dataタブ、もしくは、R Scriptタブの中で見ることができます。もしExploratory Desktopをすでにお持ちでしたら、Download ボタンを押して、チャートとデータをダウンロードしてインポートすることも簡単にできます。

###[人気言語ごとの質問増加率](https://exploratory.io/viz/Hidetaka-Ko/cf57c1f10020?cb=1469569460583)

![Compare-the-growth-of-particular-popular-language-in-StackOverflow-over-time.png](https://qiita-image-store.s3.amazonaws.com/0/91522/d4ac795b-2b24-d561-9080-2bf580321e22.png)


今日の時点までの2009年からの全ての質問を言語毎に集計した結果をそれぞれ100だとすると、どのようにそれぞれの質問の数が毎年増えていったかをヴィジュアライズしたのがこちらになります。Rが2014あたりから一気に加速していってるのがわかります。逆にPerl, Objective-Cは同じ時期から以前ほどの勢いがなくなってきたのがわかります。

社長にもリツイートされました笑
<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">This is cool <a href="https://twitter.com/hashtag/rstats?src=hash">#rstats</a> is accelerating the growth curb at <a href="https://twitter.com/StackOverflow">@StackOverflow</a>! <a href="https://t.co/l5ycunHRxC">https://t.co/l5ycunHRxC</a></p>&mdash; Kan Nishida (@KanAugust) <a href="https://twitter.com/KanAugust/status/758178565892481024">2016年7月27日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

###[人気言語ごとの質問がClosedになるまでの平均時間](https://exploratory.io/viz/Hidetaka-Ko/87f043c73ce4?cb=1469486722117)

![The_average_speed_at_which_questions_are_closed.png](https://qiita-image-store.s3.amazonaws.com/0/91522/288e9ffc-a8f0-3853-cf8b-05a336c93539.png)


人気言語ごとの質問がClosedになるまでの平均時間を計算しました。Rubyが一番時間かかってるのに対し、Rが一番速いですね。
コミュニティを大事にしてるからか、教えたがりが多いからか、答えがはっきりしてるからとか。

###[人気言語ごとのCorrelations](https://exploratory.io/viz/Hidetaka-Ko/281e584ef8b8?cb=1469411927713)

![Correlations_among_tags_on_questions_similarity.png](https://qiita-image-store.s3.amazonaws.com/0/91522/58e42266-bf8a-3fa4-ee75-1d7530ae0306.png)


人気言語ごとのCorrelations（類似関係）計算して出しました。方法としては、Tag, owner user ID （回答者のアカウント）でsummarizeして、Tagを、どのユーザーが何回、回答したかで特徴量化しています。この言語に応える人は、この言語にも応えるよねっていうcorrelationになっているはずです。
ビジュアライズして見てみると、PHPとJSが反応してたり、ScalaとJavaが反応してたり、JSがどれとも高くなっています。

###[人気言語ごとのStackOverflow内の平均得点数](https://exploratory.io/viz/Hidetaka-Ko/773657a84b36?cb=1469327130539)

![Which_popular_languages_tend_to_get_higher_or_lower_average_scores_in_StackOverflow.png](https://qiita-image-store.s3.amazonaws.com/0/91522/68360fcf-28b6-5932-2b93-4e5051a38c6d.png)


###[人気言語ごとのStackOverflow内の合計得点数](https://exploratory.io/viz/Hidetaka-Ko/dd92b9ea4a32?cb=1469326666187)

![Which_popular_languages_tend_to_get_higher_or_lower_total_scores_in_StackOverflow-ave.png](https://qiita-image-store.s3.amazonaws.com/0/91522/0ef61e3b-aefb-7a1e-5dd0-4a45ac305445.png)


###[平日と休日の人気言語ごとの質問回答数の比較](https://exploratory.io/viz/Hidetaka-Ko/ac88ad801e7d?cb=1469240145437)

![Which_popular_languages_tend_to_be_answered_in_StackOverflow_on.png](https://qiita-image-store.s3.amazonaws.com/0/91522/2d88a6a3-f8a2-8f88-863d-d051854179c7.png)


みなさん、休日は、プログラミングしたくないみたいですね笑 Rubyが休日に増えているのは、サイドプロジェクトでよく使われるからでしょうか。こちらの投稿は、アメリカ最大級の掲示板サイトRedditで取り上げられました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Which popular languages tend to be answered in StackOverflow on weekdays vs weekends ? <a href="https://t.co/uG42woklZ3">https://t.co/uG42woklZ3</a> <a href="https://twitter.com/hashtag/da?src=hash">#da</a>… <a href="https://t.co/y4FZIAYGlR">pic.twitter.com/y4FZIAYGlR</a></p>&mdash; /r/DataIsBeautiful (@DataIsBeautiful) <a href="https://twitter.com/DataIsBeautiful/status/762001047867064320">2016年8月6日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

###[人気言語ごとの累計質問合計数](https://exploratory.io/viz/Hidetaka-Ko/356147f61d07?cb=1469132250245)

![Which_popular_computer_programing_language_accumulating_Questions_the_most_in_StackOverflow.png](https://qiita-image-store.s3.amazonaws.com/0/91522/dd7d3355-814d-99d2-64ea-362e7f4d9d3f.png)

昔から、PHPがやっぱり強いですね。
こちらは、Augment, tidy, glance作ったR界隈の偉人、Stack Overflow社のデータサイエンティスト、デビッド氏とDataIsPluralの配信者、BuzzFeed社のJeremyさんからリツイートとリプをもらえました笑

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr"><a href="https://twitter.com/SoccerKinki">@SoccerKinki</a> <a href="https://twitter.com/jsvine">@jsvine</a> <a href="https://twitter.com/ExploratoryData">@ExploratoryData</a> awesome! have you checked out <a href="https://t.co/m0TnSUS0LN">https://t.co/m0TnSUS0LN</a>?</p>&mdash; David Robinson (@drob) <a href="https://twitter.com/drob/status/756324595809062912">2016年7月22日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr"><a href="https://twitter.com/SoccerKinki">@SoccerKinki</a> <a href="https://twitter.com/ExploratoryData">@ExploratoryData</a> Neat!</p>&mdash; Jeremy Singer-Vine (@jsvine) <a href="https://twitter.com/jsvine/status/756232929190219780">2016年7月21日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

これらは、あくまで一例で、まだまだたくさんの分析ができるので、よかったら試してみてください。

##興味を持っていただいた方、実際に触ってみたい方へ

[お役所のデータで消耗するのはもうごめん。データ分析ツールExploratoryを使って、お役所の汚いデータをスクレイピングからビジュアライズまでしてみた](http://qiita.com/21-Hidetaka-Ko/items/020b45078133d02ffaa7)もよろしかったらどうぞ

Exploratoryは[こちら](https://exploratory.io/
)からβ版の登録ができます。こちらがinviteを完了すると、ダウンロードできるようになります。


ExploratoryのTwitterアカウントは、[こちら](https://twitter.com/ExploratoryData
)です。

Exploratoryの日本ユーザー向けの[Facebookグループ](https://www.facebook.com/groups/1087437647994959/members/
)を作ったのでよろしかったらどうぞ

分析してほしいデータがある方や、データ分析のご依頼はhidetaka.koh@gmail.comまでどうぞ