【分析】Twitter4Jと統計ソフトRを使ったTwitterの利用アプリとツイートの長さ(文字数)について(粗い分析)はてなブックマーク - 【分析】Twitter4Jと統計ソフトRを使ったTwitterの利用アプリとツイートの長さ(文字数)について(粗い分析)

Twitterのツイートの分析についてです。
ずっと考えていた位置情報を取得する方法はやはり難しいのでそれは置いておくとして、まずは簡単に始められる分析として前から気になっていた利用アプリとツイートの長さ(文字数)の関係について調べてみることにしました。

例えば、てぃーの場合iPhoneからとPC(ウィンドウズ、マック)からツイートしますが、iPhoneからの場合は打つのが速くないのでツイートが短くなる傾向があります。
これを踏まえて、

一般に携帯機器からのツイートはPCよりもツイートの長さが短くなるか?

ということを中心に分析してみました。


Twitter4Jを使ったツイートデータの取得


以前作成したTwitterの全ユーザーの公開ツイート(日本のみ)を取得する方法のうち、その2のStreaming APIのsampleを使いました。
利用アプリはTwitter4JのgetSource()で取得しました。
取得したツイートはタブ区切りCSV(別名TSV)形式にし、ファイルに出力して保存しました。

実行時刻は、2012/05/08 01:16〜02:00 の44分間
取得したツイート数は、9,680 でした。

作成したファイルをエクセルで加工して利用アプリの数の順位を求めました。
すると上位59位までの順位は次のようになりました(同数のものも別々の順位に)。
これより低い順位のものは利用数が少ないため分析では使わないことにしました。

twiran.png


統計ソフトRを使ったツイートの長さの分析


ツイートの長さの分析はフリーの統計ソフトRを使ってみました。
Rは久々でしたので忘れていることも多かったですが、ちょっとずつ進めて昔の勘を取り戻しながら行いました。
上で開いたエクセルのファイルをコピーし、Rコマンダー(Rcmdr)でデータのインポートをし、R用のデータセットを作りました。


ツイートの分析結果
利用アプリごとのツイートの長さの分布を見るために、以下のように箱ひげ図(→説明:Wikipedia)を作成しました。
(クリックで拡大)
t01_30_a.png
t31_59_a.png

この図より多くの利用アプリでツイートの長さが20〜60文字となることが分かりました。
期待していた“携帯機器からのツイートの長さは短くなる”という現象は見られませんでした。
てぃーにとっては意外ですが使い慣れている人にとってはそんなもんなんでしょうね。

一方で、次のアプリは他のアプリと文字の長さの分布が異なっていることが分かりました。

18位 Tweet Button
26位 EasyBotter
30位 ニコニコ動画
32位 twitterfeed
39位 ツイ助。
41位 HootSuite
42位 Twitter for BlackBerry
48位 BotMaker
50位 Twibow
 など


このうち、EasyBotter、twitterfeed、BotMaker、Twibowは自動投稿botです。
このことから自動投稿botのツイートの方が人間のツイートより長くなる傾向があることが分かりました。


リツイートを含まないツイートの分析結果

ただ、上の方法ではリツイートを含んでいます。
リツイートは本人のツイートではないのでそれを除いて分析してみました。
ツイートから「RT 」または「QT 」(ともに大文字で後ろに半角スペース)が含まれるものは分析から除く方法を取りました。
すると結果は次のようになりました。
(クリックで拡大)
t01_30_b.png
t31_59_b.png

全体的にツイートが短くなる傾向がありましたが、一部を除いてそれほどではないような感じです。
大きく変わったのは次のようなものです。

42位 Twitter for BlackBerry
55位 UberSocial for BlackBerry
56位 Janetter for Mac


うち2つが携帯機であるBlackBerryですが、BlackBerryを使う人はリツイートをよく使う傾向にあるのでしょうか?
数が多くないのでたまたまの可能性がありますね。。。


感想


今回の分析で分かったのは、

・ツイートの長さは20〜60文字となることが多い。
・ツイートの長さは携帯機器からでもPCからでも差はない。
・自動投稿botのツイートの方が人間のツイートより長くなる傾向がある。
・BlackBerryを使う人はリツイートをよく使う傾向がある。

といったものです。

まあ、取得したツイートの数がたったの9,680なので一般的に言えるとは言い切れません。

やはり詳しく見るためには取得する時間を数日単位として数十万ツイート以上取得する必要があるでしょうね。
そのためにはその間PCをつけっぱなしにするか、あるいはJavaが使えるサーバーをレンタルしてそこでプログラムを走らせる必要がありますね!!

そもそも分析も荒削りで厳密ではないです。
また、リツイートのあるものを除いた分析でも普通のリツイートとコメント付きリツイートを区別して除いていません。
コメント付きリツイートでは自分のツイートも付いているのでその部分についての扱いはどうすればいいかはっきりしません。
この場合の自分のツイートの長さは引用したリツイートの部分の長さに引っ張られますからね。

これらは今後の課題とすることにします。


↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
関連記事

テーマ プログラミング
ジャンル | コンピュータ


このエントリーをはてなブックマークに追加

【勉強】Twitter4Jを使ったTwitterのツイートの分析方法について考えてみたはてなブックマーク - 【勉強】Twitter4Jを使ったTwitterのツイートの分析方法について考えてみた

今日も予想通り小雨ぱらつく日でしたね。
明日は晴れるそうですがどうなんでしょう!?


さて、以前から考えているTwitter4Jを使ったTwitterのツイートの分析についてその方法を考えてみました。
てぃーはある出来事が起こったらそれに対するツイートがどんなふうに拡散されるか分析してみたいと考えています。
そのためのツイートの取得ツールとしてTwitter4Jを導入し、必要なプログラムを学びました。
といってもプログラム自体は簡単なもので今までに紹介してきた3種類(4つ)で充分です。

フォロー(フレンド)とフォロワーの片思い・片思われを抽出する方法
検索してその結果を表示する方法
・全ユーザーの公開ツイート(日本のみ)を表示する方法
 (PublicTimelineStreaming APIのsample


一方で残念ながらTwitterにはいろいろと制限があることも分かってきました。

1.1時間当たりの接続回数に上限があるため、対象とするユーザー情報・ツイートは
  数が多い場合はすべてを取得することはまずできない。
2.全ユーザーの公開ツイートはStreaming APIを使えば接続回数に制限はないが、
  一般には約1%の抽出したデータしか使えない。
3.全ユーザーの公開ツイートはStreaming APIではそれまでのツイートは取得できない。
4.位置情報はほとんどの人が情報がない(当然ですが)。



データの蓄積について


上の1.3.についてです。
Twitterからは蓄積データは取得できないので工夫しないといけないですね。
検索で取得できるデータも恐らく最近2週間程度の情報なのでふだんからデータを蓄積しておく必要がありそうです。
それでも1ユーザでは1時間当たりの接続回数に上限があるため、多くのデータを取得するには複数のユーザで常時接続をし続けないといけないですね。
そのためには普通のクライアントのPCではなく、サーバーでプログラムを走らせ続けるのがいいでしょう。

ツイッターはAPIを公開しているので世にはいろいろなツイッターのアプリがありますが、ウェブサービスのものが多いのはこのためでしょうね。
つまりユーザーのPCでの実行では接続回数の上限を超えてしまうので、ウェブサービスにして事前にサーバーに蓄積しておいたデータを使うことで接続上限を回避して実行を可能にしているのでしょう。

サーバー上でプログラムを常時走らせておくのはお金とちょっとした労力があればできますが、それだけに力を注いでしまうと単なる創造性のないプログラマで終わってしまいますね。。。
このブログで行うべきは創作活動なのでこのことを忘れないようにしないといけませんね^^


位置情報について


上の4.についてです。
各ツイートやプロフィールに位置情報を入れられますがふつうは入れている人はいません。
当たり前ですね。

それでも次のようにいくつかのサービスではツイートと位置情報を絡めたものがあります。

あなたのまわりのカゼ話題度をチェック! カゼミルプラス
http://kazemiru.jp/


インフルくん
http://mednlp.jp/influ/


これらはどのようにして位置情報を取得しているのでしょうか?!
単にツイートに含まれている位置を表す単語から判断しているのでしょうか?
今はこれらのツイートの話題が少ないので調べられませんでしたが、今後はさらに深めて調べていきたいと思います。


↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
関連記事

テーマ プログラミング
ジャンル | コンピュータ


このエントリーをはてなブックマークに追加

【Twitter4J】Twitterの全ユーザーの公開ツイート(日本のみ)を表示する方法(その2、Streaming APIのsample)はてなブックマーク - 【Twitter4J】Twitterの全ユーザーの公開ツイート(日本のみ)を表示する方法(その2、Streaming APIのsample)

その1に続いてTwitterの全ユーザーの公開ツイート(日本のみ)を表示する方法についての2つ目の方法です。

今回はStreaming APIのsampleを使います。
参考にしたのは以前購入した「Twitter API ポケットリファレンス」です。

Twitter API ポケットリファレンス (POCKET REFERENCE)Twitter API ポケットリファレンス (POCKET REFERENCE)
(2011/07/15)
山本 裕介

商品詳細を見る



Twitter Streaming APIとは、データ解析などで大量のデータを必要とする開発者のために用意されたAPIで、一度接続するとHTTP接続を保ったまま自動的にデータを流し続けてくれます。
Streaming APIには次の種類があります。

1.Streamed Tweets…パブリックなツイートを取得
 ・sample…パブリックなツイートから約1%のツイート
 ・firehose…すべてのパブリックなツイート
 ・filter…指定した条件にマッチするツイート
 ・links…リンクを含むツイート
 ・retweet…リツイート

2.ユーザーストリーム…ユーザーのタイムライン、@関連、DMなどを取得

3.サイトストリーム…多数のユーザーのタイムライン、@関連、DMなどを受信
           多数のユーザー向けのWebサービス用


単にTwitterの全ユーザーの公開ツイートがほしい場合はsample、firehoseとなります。
ただ、firehoseはグーグルなどの一部の大企業が大金を払って手に入れることができるだけなので個人で行う場合はsampleを使うことになります。
全体の約1%のツイートになりますが、常時データを取得できるので少ないと考えるか十分と考えるかは時と場合によりますね。

ではコードです。

import twitter4j.*;


public class TwitterSampleStream {

public static void main(String[] args){

try{
TwitterStream twitterstream = new TwitterStreamFactory().getInstance(); //自動的に認証してくれる

twitterstream.addListener(new MyStatusAdapter());
twitterstream.sample();

} catch(Exception e){
e.printStackTrace();
}
}
}

//コンソールに出力する
class MyStatusAdapter extends StatusAdapter {

public void onStatus(Status status){

//ユーザの情報を取得
User user = status.getUser();

//日本のもののみを抽出
//「その1」での方法を参照

//ツイートから改行記号を除去
String strText = status.getText();
strText = strText.replaceAll("\r\n"," ");
strText = strText.replaceAll("\r"," ");
strText = strText.replaceAll("\n"," ");

//コンソールに出力する(タイムゾーン、位置情報、日時、ユーザ名、ツイート)
System.out.println(user.getTimeZone() + "\t" + status.getGeoLocation() + "\t" + status.getCreatedAt() + "\t" + user.getScreenName() + "\t" + strText);
}
}

「日本のもののみを抽出」する箇所については、その1での方法を参照してくださいね。


↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
関連記事

テーマ プログラミング
ジャンル | コンピュータ


このエントリーをはてなブックマークに追加

【Twitter4J】Twitterの全ユーザーの公開ツイート(日本のみ)を表示する方法(その1、PublicTimeline)はてなブックマーク - 【Twitter4J】Twitterの全ユーザーの公開ツイート(日本のみ)を表示する方法(その1、PublicTimeline)

今回はTwitterの全ユーザーの公開ツイート(日本のみ)を表示する方法についてです。
2つ方法があります。

1つ目の方法をこの記事で、2つ目の方法を別記事で紹介します。

まず1つ目はPublicTimelineを用いる方法です。
一度に20件取得できます。繰り返し実行することで数を増やせますね。

コードは次のようになります。
日本のツイートのみを抽出する方法については<方法1><方法2>のどちらかを使います。
この方法については次のページを参考にさせていただきました。
ありがとうございました。
 →01.151a_bot - 陽昇れども地の底に光届かず
 →「Java」文字列の中に日本語が含まれてるかどうかの判断


import java.util.List;
import twitter4j.*;


public class TwitterPublicTimeline {

public static void main(String[] args){

try{

Twitter twitter = new TwitterFactory().getInstance(); //自動的に認証してくれる

//パブリックタイムライン取得
List<Status> statuses = twitter.getPublicTimeline();

for (Status status : statuses) {
//statusとuserの使い分けに注意!

//タイムライン上のユーザの情報を取得
User user = status.getUser();


//※日本のツイートのみを出力する
//<方法1>
//文字列の中に日本語が含まれている場合のみ出力する
if (containsNihongo(status.getText()) == true){

//ツイートから改行記号を除去
String strText = status.getText();
strText = strText.replaceAll("\r\n"," ");
strText = strText.replaceAll("\r"," ");
strText = strText.replaceAll("\n"," ");

//コンソールに出力する(タイムゾーン、位置情報、日時、ユーザ名、ツイート)
System.out.println(user.getTimeZone() + "\t" + status.getGeoLocation() + "\t" + status.getCreatedAt() + "\t" + user.getScreenName() + "\t" + strText);
}


//<方法2>
//タイムゾーンが東京、大阪、札幌(Tokyo, Osaka, Sapporo)の場合のみ出力する(nullの場合に注意)
//if (user.getTimeZone() != null && (user.getTimeZone().equals("Tokyo") ||
// user.getTimeZone().equals("Osaka") ||
// user.getTimeZone().equals("Sapporo"))){

// //ツイートから改行記号を除去
// String strText = status.getText();
// strText = strText.replaceAll("\r\n"," ");
// strText = strText.replaceAll("\n"," ");

// //コンソールに出力する(タイムゾーン、位置情報、日時、ユーザ名、ツイート)
// System.out.println(user.getTimeZone() + "\t" + status.getGeoLocation() + "\t" + status.getCreatedAt() + "\t" + user.getScreenName() + "\t" + strText);
//}
}
} catch(TwitterException te){
te.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}

//文字列の中に日本語が含まれているかどうかの判断
public static boolean containsNihongo(String str) {
for(int i = 0 ; i < str.length() ; i++) {
char ch = str.charAt(i);
Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(ch);

if (Character.UnicodeBlock.HIRAGANA.equals(unicodeBlock))
return true;

if (Character.UnicodeBlock.KATAKANA.equals(unicodeBlock))
return true;

if (Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS.equals(unicodeBlock))
return true;

if (Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS.equals(unicodeBlock))
return true;

if (Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION.equals(unicodeBlock))
return true;
}
return false;
}
}

<方法1>では文字列の中に日本語が含まれている場合のみ出力、<方法2>ではタイムゾーンが東京、大阪、札幌(Tokyo, Osaka, Sapporo)の場合のみ出力するようにして抽出をしています。
位置情報を付けてツイートする人はあまりいないし、プロフィールの場所の情報も必ずしも入っているわけではないのでこの方法にしてみました。
この場合も一長一短なので必要に応じて使い分けたり組み合わせたりする必要がありますね。
20件取得したうち日本のもののみなので数はかなり減りますね。。。

まあ、すでにウェブサービスとして同様のものがあるので単にツイートを眺めたいという場合はこちらでいいですね。
 →Twitterをもっと便利にみんなとつながるサービス〜meyou.jp(ミーユー)
自分でアプリを作りたい場合やツイートを分析したい場合に自分でプログラムを組むということになります。


↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
関連記事

テーマ プログラミング
ジャンル | コンピュータ


このエントリーをはてなブックマークに追加

【Twitter4J】検索してその結果を表示する方法はてなブックマーク - 【Twitter4J】検索してその結果を表示する方法

今日はあいにくの雨でしたね。
明日から連休後半ですが2日間は雨のようで残念です。

さてツイッターを使った創作活動の下地になるTwitter4Jについて。
Twitter4Jの勉強はネットと以前購入したTwitter APIの開発用「Twitter API ポケットリファレンス」を使っています。

Twitter API ポケットリファレンス (POCKET REFERENCE)Twitter API ポケットリファレンス (POCKET REFERENCE)
(2011/07/15)
山本 裕介

商品詳細を見る


この「Twitter API ポケットリファレンス」はその名の通り辞書的なもので、開発を進めていく途中で分からないことがあれば調べるという感じの本です。
TwitterのAPIは各言語ごとにいろいろとありますが、この本ではTwitter4jについてはその使用例まで本書にコードを書いてあるのでとても便利です。
いずれ本書についてレビューを書くかもしれません。


では、今回は検索してその結果を表示するという内容です。
今回は基礎の基礎で全然凝ったプログラムじゃないですが^^
次のようにします。
(次のページを参考にさせていただきました。ありがとうございました。
 →twitter4jからtwitterの検索APIを利用する - AjakuPanic のチラシの裏

import java.util.List;
import twitter4j.*;

public class TwitterSearch {

public static void main(String[] args) {

Twitter twitter = new TwitterFactory().getInstance(); //自動的に認証してくれる

try {

String strText;

//検索語を指定する(※ここでいろいろとオプションを設定することができる)
Query query = new Query("東京");

//検索結果を取得
QueryResult result = twitter.search(query);

//検索結果のツイートを取得
List<Tweet> twiSerches = result.getTweets();

//ツイートの表示
for (Tweet tweet : twiSerches) {

//改行記号を除去する
strText = tweet.getText().replaceAll("\r\n"," ");
strText = strText.replaceAll("\r"," ");
strText = strText.replaceAll("\n"," ");


//コンソールに出力する(位置情報、日時、ユーザ名、ツイート)
System.out.println(tweet.getGeoLocation() + "\t" +tweet.getCreatedAt().toString() + "\t" + tweet.getFromUser() + "\t" + strText);
}

} catch(TwitterException te){
te.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
}


上の「検索語を指定する(※ここでいろいろとオプションを設定することができる)」の箇所でオプションを設定できるので、より検索条件を絞ることができるようになります。
詳しくは参考にさせていただいたページやTwitter4jの解説ページを参考にしてください。


てぃーはプログラムの内容よりも結果を使った分析の方をメインにやってみたいと思っています。
上のコードにもあるように位置情報を取得してこれを使って何か分析をできたらと思っています。
しかし普通ツイートに位置情報を入れる人はいません(nullとなります)。。。
てぃー自身も入れていないので人のことを言えません。個人を特定される可能性が高いので当然ですね。
あることが起こったらそれに対するツイートがどんなふうに拡散されるか見てみたいのですが、別な方法で位置情報を知るにはどうすればいいのでしょう?!
ツイート本文の地理的用語から判断するしかないのでしょうか。
この辺りはもっと詳しく掘り進める必要がありますね。




↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
関連記事

テーマ プログラミング
ジャンル | コンピュータ


このエントリーをはてなブックマークに追加
自作iPhoneアプリ
年齢計算★学歴欄作成e-スペル(e-Spelling)
自作Macアプリ
Interval Timer EXデジカメ撮影日を一括変更 for Macデジカメ変更日を撮影日に一括変更 for Mac

有名雑誌「Mac Fan 2012月3月号」に
「Interval Timer EX」が掲載!! →詳細
自作イラスト(pixivで公開)
プロフィール

てぃー

Author:てぃー
iPhoneアプリ開発、Macアプリ開発、イラスト描きなどの創作活動をしています。
自分が楽しいと思うものを創作します。
プログラム経験はObjective-C,Visual Basic,Visual C#,Perlです。
イラストはIllustStudioとIntuos4を使って描いています。
デジタル製品(いわゆるデジモノ)と本も好きなのでそのレビューも。

Twitter :teapipin
pixiv:
詳しい自己紹介:こちら

フォロー&マイピク大歓迎です!
みなさんよろしくお願いします!

はてなブックマークでの人気記事
今月のアクセス数の多い記事
カレンダー
04 | 2012/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
カテゴリ

全記事の一覧を表示


DVD (2)
Twitter
月別アーカイブ
リンク
最新記事
最新コメント
amazon おすすめ
amazon Ad
ブログパーツ