Edited at

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

More than 3 years have passed since last update.

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

overview-stackoverflow.png

Data Is Pluralというサイトを登録しておくと、毎週水曜日に興味深いデータがソースと一緒に送られてきます。先週のData Is Pluralから送られてきたデータのうちのひとつにStack Overflowのデータがありました。

email-stackoverflow.png

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


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

メールのStack OverflowのリンクをクリックするとStack Overflowのcsvデータが2つあるのがわかります。2つともダウンロードします。

stackoverflow-github.png

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

import-stackoverflow.png

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

before-join.png

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

before-join-stack.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

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

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


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

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


人気言語ごとの質問増加率

Compare-the-growth-of-particular-popular-language-in-StackOverflow-over-time.png

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

社長にもリツイートされました笑



人気言語ごとの質問がClosedになるまでの平均時間

The_average_speed_at_which_questions_are_closed.png

人気言語ごとの質問がClosedになるまでの平均時間を計算しました。Rubyが一番時間かかってるのに対し、Rが一番速いですね。

コミュニティを大事にしてるからか、教えたがりが多いからか、答えがはっきりしてるからとか。


人気言語ごとのCorrelations

Correlations_among_tags_on_questions_similarity.png

人気言語ごとのCorrelations(類似関係)計算して出しました。方法としては、Tag, owner user ID (回答者のアカウント)でsummarizeして、Tagを、どのユーザーが何回、回答したかで特徴量化しています。この言語に応える人は、この言語にも応えるよねっていうcorrelationになっているはずです。

ビジュアライズして見てみると、PHPとJSが反応してたり、ScalaとJavaが反応してたり、JSがどれとも高くなっています。


人気言語ごとのStackOverflow内の平均得点数

Which_popular_languages_tend_to_get_higher_or_lower_average_scores_in_StackOverflow.png


人気言語ごとのStackOverflow内の合計得点数

Which_popular_languages_tend_to_get_higher_or_lower_total_scores_in_StackOverflow-ave.png


平日と休日の人気言語ごとの質問回答数の比較

Which_popular_languages_tend_to_be_answered_in_StackOverflow_on.png

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


人気言語ごとの累計質問合計数

Which_popular_computer_programing_language_accumulating_Questions_the_most_in_StackOverflow.png

昔から、PHPがやっぱり強いですね。

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

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


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

お役所のデータで消耗するのはもうごめん。データ分析ツールExploratoryを使って、お役所の汚いデータをスクレイピングからビジュアライズまでしてみたもよろしかったらどうぞ

Exploratoryはこちらからβ版の登録ができます。こちらがinviteを完了すると、ダウンロードできるようになります。

ExploratoryのTwitterアカウントは、こちらです。

Exploratoryの日本ユーザー向けのFacebookグループを作ったのでよろしかったらどうぞ

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