Twitter APIとMeCabで街コンのエゴサーチをした話


社会人2年目エンジニアの関です。

突然ですがリンクバルの主要サービスと言えば・・・そう「街コン」ですね。
日頃街コンジャパンという街コンのサイトを保守・運用しているわけですが、やはり一般ユーザからのサービスへの評価が一番気になるところです。
しかしユーザ一人一人にインタビューするわけにもいかないですし、Twitterとかでエゴサーチをしようにも情報量が多すぎていまいち価値のある評価が良く分からない。
そこで今回は、Twitter APIとMeCabを使って「街コン」に関するツイートの中からより重要な単語・ツイートを分析・発見していきたいと思います。

制作物は以下で公開しています。
APIキーの取得・設定などを事前に行ってください。
https://github.com/hseki-luckey/api-mecab

1. 事前に準備するもの
MeCab
日本語形態素解析エンジン。名前の由来は開発者の好物とのこと。
php-mecab
PHPでMeCabを使うためのモジュール。
(諸々の事情でMAMPで使えるように設定したのですが意外と苦労しました;)
TwistOAuth
Twitter APIでごにょごにょやるためのライブラリ。使い方は超簡単。

2. 収集・分析手法
① Twitter APIを使って街コンに関するツイートをキーワード検索・収集
検索キーワード:街コン(※http、https、拡散、RTを除外)

② TF-IDF法により各単語、各ツイートの重み(重要度)を計算
TF-IDF法についてはこことか参照してみてください。
詳しい理論などは省きますが、要はオリジナリティって大事だよね☆ってことです。
※ README.mdにも書いたのですが、意味の無い文字列を弾くために今回はツイートから一部を除く記号とアカウント名を排除しています。

③ ②の結果をもとに重要な単語・ツイートを分析・発見
スクリプト実行により自動生成される以下の3つのCSVを使っていきます。
◆ data.csv
Twitter APIにより取得したデータを格納。
最大5000件取得可能(今回の場合は4376件取得)。

◆ tfidf_avg.csv
各単語の平均TF-IDF値を格納。

◆ tfidf_list.csv
各ツイートのTF-IDFの合計値を格納。data.csvと対応。

3. TF-IDF値が上位だった単語
◆ 荒らし
今回TF-IDF値が最も高かった単語。
ちなみに「街コン 参加」だと「怒り」という単語が3位に来ており、マイナスな単語も上位にそこそこ見受けられました。良い意見より悪い意見の方が重要度が高い、ということでしょうか。

◆ さがそ
「街コンさがそ」というツイートから。
街コンをお探しの際はぜひ街コンジャパンのご利用を。素敵なイベントが見つかるはずです。

◆ ジュン
街コンに行く報告をした友人(ジュンくん)に反応した模様。

◆ めんど
人それぞれのめんどくさいと思うポイントが書かれていました。
「申し込んだものの行くのが…」か「出会ったはいいもののその後のお付き合いが…」の2つが多かったかと。

◆ 相殺
「街コン相殺拳」という何やら強そうなツイートから。
どんな必殺技か非常に気になります。

4. おわりに
やはり意外な単語ほど上位にランクインするようです。
逆に「出会い」「パーティー」「開催」「合コン」「友達」などの街コンと掛け合わせてよく使われる単語は、軒並み下位になっていました。
TF-IDF法自体はアンケート結果の分析などにも有効なので、機会があったら使ってみるといいのでは。
最後に。今回TF-IDFの合計値が最も高かったツイートから。

街コンで出会った人と上手くいくといいな

ぜひ皆様、一度街コンに参加してみてください。

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆


Athenaを使ってS3のログファイルを検索してみる


AWSのサービスにS3のログ解析ツール「Athena」について書かせて頂きます。

Athenaとは?

https://aws.amazon.com/jp/athena/

Amazon Web ServiceのS3にある大量のログをSQLのクエリを書いて抽出できるサービスです。
大量のファイルが分割されていると解析するのが大変なのですが、

これらのファイルの入っているパケットを指定してAthenaの設定を完了すると、
以下のようにSQLクエリを実行するだけで検索できてしまいます。

SQLクエリは業務で良く書きますので、データベースを触っていたサーバーサイドエンジニアでも使いやすいのではと思いました。

Athenaの設定方法

1、データベースを作成する

2、データフォーマットを指定する


※CSVやJSONのデータフォーマットも指定できます。

3、カラムを指定する

4、パーティションを指定する


※CreateTableを押すとAthenaで利用するデータベースの完成です。

Athenaを使ってやってみたかったこと

json形式でファイル出力されたS3のログをキーベースで検索して、簡単にS3のファイルからデータを抽出したかったのですが、結果できませんでした。
なぜかというと、ファイル転送を挟んだログファイルだったためにファイル自体がtsv形式だったので、json形式のデータフォーマットに適用できなかったためです。
カラム型にjson型があると嬉しいなと思いました。

TSV形式での検索

LIKE検索ができますので、ログ自体の検索はできましたし、レスポンスも遅いわけでもなく使い勝手は良かったです。

下記、簡単なクエリ例です。SQLと変わらないですね。
SELECT * FROM table_name WHERE column_name LIKE '%xxxxx%' LIMIT 100;

まとめ

AWSを使ってS3に溜まっているログをAthenaを使うだけで抽出できるので、今後も使っていきたいと思います。
導入も簡単なので、まだ使ったことのない方は試してみるとどうでしょうか。

最後に

リンクバルではエンジニアの採用を募集しています。採用はこちら


JMeterによるもっとも簡単な負荷テスト方法


リンクバルの井上です。
今回はJMeterで誰でもできるもっとも簡単な負荷テストをやってみます

JMeterの起動

まずJMeterを起動してみますすると下記のような画面が表示されるかと思います

テストは基本的にはこのテスト計画に対して作成していきます。

 

スレッドグループ設定

まずテスト計画を選択した状態で「編集」を押下し「追加」の「Threads」と見て行くと下記のようにスレッドグループが表示されますのでスレッドグループを選択しましょう

 

スレッドグループを追加すると下記のような画面が表示されます

ここではどのくらいの負荷をかけるか設定をします。

例えば「10のスレッドを20秒の時間をかけて処理開始し、スレッド毎にシナリオを1回だけ実行する」だと下記のようになるのでこの辺をいじれば基本的な負荷は大丈夫です

スレッド数: 10
Ramp-Up期間(秒): 20
ループ回数: 1 (無限ループのチェックボックスはオフにしてください)

 

GETリクエストの設定

次にスレッドグループを選択した状態で「編集」から「追加」、「サンプラー」と見て行くと下記のようにHTTPリクエストが表示されるので追加します。

 

追加したHTTPリクエストに下記のように今回は自分のローカルアプリケーションの設定をしていきます

今回は単純なページアクセスの負荷をかけるのでサーバ名、メソッド、パスのみ設定します

 

 

試験結果の表示

そして負荷をかけたら当然結果を見たいかと思いますので結果表示の設定をします。

また同じ手順でスレッドグループを選択した状態で「追加」、「リスナー」と見ていくと下記のように表示されるので「結果を表で表示」を追加します

 

 

さてようやく準備が整ったので負荷試験を実行します

実行する際は上のメニューにあるので緑の再生ボタンのようなボタンを押下すると実行されます。

すると結果は「結果を表で表示」で以下のように表示されるかと思います。

いかがでしたでしょうか?簡単な負荷試験ならこんなに簡単にテストが作れるんです!

リンクバルではエンジニアを積極募集中です。興味のある方は、こちらまでご応募ください。もちろん、社内の人間と面識があるのでしたら、直接にご連絡いただいてもかまいません。


【WordPress】投稿を集計するただひとつのプラグイン「Site Posts Stats」


社会人2年目エンジニアの関です。

WordPressの開発で、テーマとかプラグインを自作しているとなんだか上級者っぽい感じしませんか?かっこよくないですか?
ということで、私もかっこいい上級者に一歩でも近づきたいのでプラグインを自作してみました。

今回の制作物は以下で公開しています。
概要や画面説明などはREADME.mdを見てください。
https://github.com/hseki-luckey/site-posts-stats

1. 開発に必要なもの
テーマユニットデータ
集計するにはそこそこの投稿数が必要。でも、ちまちま1記事ずつ準備するのもなぁ・・・。と思っていたらちょうどいいのがありました。
簡単なインポートだけで投稿だけでなくカテゴリやタグ、ユーザなども追加できます。超助かります。

Chart.js
グラフを表示するためのライブラリ。今回の主役と言っても過言ではない。
このプラグインでは円グラフ、棒グラフ、折れ線グラフの3種類しか使っていませんが、他にもレーダーチャートやドーナツグラフなど、グラフの種類が充実している地味な優れものです。
ダウンロードしてもよかったのですが、めんどくさかった諸々の事情により外部リンクで読み込んでいます。個人的にアニメーションが好き。

2. 導入方法
① githubからソースをダウンロードし、/wp-content/plugins内にフォルダを設置する

② wp-admin内「インストール済みプラグイン」から「Site Posts Stats」を有効化する

③有効化すると左枠メニューバーに「投稿集計」というメニューが表示される

3. 画面デモ
以下、実際に表示されるグラフです。
女子っぽくグラフの色はピンクで統一してみました。

① 年別投稿数

初期値には「post_date_gmt」が「0000-00-00 00:00:00」になっている投稿が設定されます。(ステータスはおそらく「draft」「 auto-draft」だと思います。)
地味に投稿数0件の表示が大変でした。

②ステータス別投稿数

集計対象となる投稿のpost_typeを「post」と「page」に区切っているため、対象ステータスは「inherit」以外です。
③もなのが9種以上サイト内に投稿ステータスが存在すると対応する色が存在しないのでエラーが起きます。WordPressデフォルトは8種類なので、普通に使う分には問題ないかと。

③投稿タイプ別投稿数

②でも説明しましたが、対象の投稿タイプを9種類以上にするとエラーが起きます。
現在は「post」と「page」に絞っていますが、集計範囲を広げる場合には十分注意してください。

④著者別投稿数

10件以上グラフに表示させるとラベルの文字が小さくなりすぎて何が何だか分からなくなるので、グラフの表示数だけは10件に絞っています。

⑤カテゴリ別投稿数

④と同じくグラフの表示を10件に絞っています。

4. おわりに
今回のプラグイン制作期間はおよそ10時間。
phpやsqlというよりもjsやcssに手間取ってしまいました。行き当たりばったりで画面構成を決めてしまったのと、関数の作り方が雑だったのが反省点です。
まだまだWordPress上級者にはほど遠いので、また違うプラグインを作ってみたいと思います。

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆


踏み台サーバを用いてTableauに外部のMySQLサーバを接続する


こんにちは、リンクバルの佐藤です。

最近BIツールのTableauを導入し始めたのですが、Tableau単体では外部サーバーのMySQLに接続できません。

開発用DBはAWS上にあるので、接続するには踏み台サーバーを経由する必要があります。

なのでSSH ポートフォワーディング(SSHトンネルともいう)で踏み台サーバーを経由する方法を備忘録的に書いておきます。

一度踏み台にアクセスしてしまえば、あとは放置で大丈夫です。

お膳立て

以下のコマンドを打ってsshポートフォワーディングしましょう。 参考URLはこちらです。

ssh -f -N -L 10000:localhost:3306 ユーザー名@サーバーホスト名 -p 22

これでSSHポートフォワーディングが完了しました。 一応接続できているかをtelnetを使って確認しましょう。 飛ばしても問題ありませんが念のため。

telnet サーバーのホスト名 10000

10000はローカルの10000ポートを指定しています。 先ほど接続先の3306ポートにマッピングしたものと同じポートを指定しています。

Connected to localhost.とターミナルに表示されれば接続されています。 明記してませんでしたが、ここまですべてMacです。Windowsではtelnetはデフォルトでは使えないので、有効化してあげる必要があります。

さてここまでお膳立てしてあげてから、Tableauを起動します。

Tableau起動後

サーバーへMySQLといって、

  • サーバーホスト名
  • ローカルポート番号
  • ユーザー名
  • パスワード

をぽちぽちしてサインインしてください。ここまでの設定で接続できるでしょう。

設定が終わったらググってTableauを存分に使い倒してやりましょう。 Tableauの作図方法は次回書くことにします。 では。