入門ソーシャルデータ①環境構築とTwitterAPI

こんばんは。先週末から風邪でダウンしている太鼓眼鏡です。

今日あたりからようやく調子が戻り始めたので、久しぶりにプログラミングをいじってました。

さて先々週辺りからいつもの友達とひたすら進めているのがこちら。

この本のスクレイピングの技術を使って、 こないだの記事をpython版で作り変えたりしてました。 taikomegane.hatenablog.jp

ただそちらは規約的にかなりグレー(というかアウト)なので、アップするのはやめにしています。

機械学習の方の最終目標は「チャットボットを作るようになること」 ちょっと処理的に理解できない箇所が増えてきているので、気長に頑張ろうと思います。

一方で、もう一つ買ったっきり進めてない本があったので今日はそちらの進捗報告。

入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

まずこの本だとvagrantfileが用意されてるので、それでいろいろ上手くいくはずが、 エラーを吐きまくるのでこちらは諦めました。

そこで、前述の本を参考にdockerで環境構築をしたので方法を簡単に紹介。

#dockerでminiconda3のコンテナをプルリクエスト
docker pull continuumio/miniconda3

#一応動作確認
docker run -i -t continuumio/miniconda3 /bin/bash
python3 -c "print(3*5)
exit

#コンテナの一覧を出してCONTAINER IDを確認
docker ps -a

#コンテナをコミット
docker commit "CONTAINER ID" 適当な名前

#自分の環境をマウントしてコンテナを起動
docker run -it -v 自分の環境:自分の環境 \
     -e LANG=ja_JP.UTF-8 \
     -e PYTHONIOENCODING=utf_8 \
     -p 8080:8080 適当な名前 /bin/bash

これでpython3が入った環境が出来上がり この後ソーシャルデータ入門のTwitterAPIを使うための準備をしていきます。

#pipをインストール
apt-get update
apt-get install -y python3-pip

#twitterをインストール
pip3 install twitter

で、これでいけると思ったら見つからないとエラーを吐いたので別の方法を探す。 同じエラーで悩んでいる人を発見。解決方法をぱくる。

stackoverflow.com

#まずtwitterをアンインストール
pip3 uninstall twitter

#その後インストールしなおし
wget https://pypi.python.org/packages/source/t/twitter/twitter-1.12.1.tar.gz
tar -xzf twitter*.tar.gz
python3 setup.py build
python3 setup.py install

これで上手くインストール出来ている。 ひとまずここまでで、TwitterAPIを使うための環境構築が終了。

この後TwitterAPIを入手する。

import twitter

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''

auth = twitter.oauth.OAuth(OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET)

twitter_api = twitter.Twitter(auth=auth)

print(twitter_api)

このファイルをさっきの環境で、

python3 oauth.py

とやって上手いこと返ってきたら、成功。

一応続きとして、世界とアメリカのトレンドを検索してみる。

import twitter

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''

auth = twitter.oauth.OAuth(OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET)

twitter_api = twitter.Twitter(auth=auth)

WORLD_WOE_ID = 1
US_WOE_ID = 23424977

worId_trends = twitter_api.trends.place(_id=WORLD_WOE_ID)
us_trends = twitter_api.trends.place(_id=US_WOE_ID)

print(worId_trends)
print("")
print(us_trends)

このコード、動いたのだけど結果はすごいことに、、、

[{'trends': [{'name': '#USAin4words', 'url': 'http://twitter.com/search?q=%23USAin4words', 'promoted_content': None, 'query': '%23USAin4words',
'tweet_volume': 14411}, {'name': '#WednesdayWisdom', 'url': 'http://twitter.com/search?q=%23WednesdayWisdom', 'promoted_content': None, 'query':
 '%23WednesdayWisdom', 'tweet_volume': 47481}, {'name': '#PhilJackson', 'url': 'http://twitter.com/search?q=%23PhilJackson', 'promoted_content':
 None, 'query': '%23PhilJackson', 'tweet_volume': None}, {'name': '#LifeWouldBeDifferentIf', 'url': 'http://twitter.com/search?q=%23LifeWouldBeD
ifferentIf', 'promoted_content': None, 'query': '%23LifeWouldBeDifferentIf', 'tweet_volume': None}, {'name': 'Michael Bond', 'url': 'http://twit
ter.com/search?q=%22Michael+Bond%22', 'promoted_content': None, 'query': '%22Michael+Bond%22', 'tweet_volume': 14472}, {'name': '#WhenWeRunTwitt
er', 'url': 'http://twitter.com/search?q=%23WhenWeRunTwitter', 'promoted_content': None, 'query': '%23WhenWeRunTwitter', 'tweet_volume': None},
{'name': "Trump Is China's Chump", 'url': 'http://twitter.com/search?q=%22Trump+Is+China%27s+Chump%22', 'promoted_content': None, 'query': '%22T
rump+Is+China%27s+Chump%22', 'tweet_volume': None}, {'name': 'Amtrak', 'url': 'http://twitter.com/search?q=Amtrak', 'promoted_content': None, 'q
uery': 'Amtrak', 'tweet_volume': None}, {'name': 'Zach Orr', 'url': 'http://twitter.com/search?q=%22Zach+Orr%22', 'promoted_content': None, 

これがめちゃくちゃ続きます。このあと綺麗にする方法も学ぶらしいので期待。

ひとまずここまでやってみてわかったのが、

  • この本python2で書かれているから、文法が異なることが多い
  • コードをそのまま書いただけじゃ動かないことが多い。都度修正が必要

まあエラーを一つずつ潰すのも勉強だと思って頑張ります。 ではまた。