社会ノマド

備忘録と書きもの練習帳。とくに何らかのハンドリング系と、雑多な話題に関する読書録になるかなと思います。

Stataデータハンドリング (ラベリング編)

Stataでのデータハンドリングの際、ラベルなど貼り付けずそのままデータをいじっていたのだがいかんせん読みにくい。今回はラベリングの処理について残しておく。

1.ラベルをつける

変数と値へのラベルを貼り付ける^1

変数名へのラベリング

label variable 変数名 "つけたいラベル"

値へのラベリング

* ラベルを定義
label define ラベル名 1"できる" 2"ある程度できる" 3"あまりできない" 4"できない" 9"無回答"

* ラベルを貼り付ける
label values 変数 ラベル名

* 同じラベルを複数の変数に貼り付けたいとき
label values 変数1 変数2 変数3 ラベル名

2.値を見る

回帰などの分析の際、ラベルではなく値を知りたい場合がある。以下では2つの方法を紹介する。

  1. tabulate コマンドで数値を出力する方法

    tabulate 変数,nolabel と nolabel オプションをつける。表におけるラベルの表示が外れる。

  2. ラベルの定義を確認する方法

    label list ラベル名 で値とラベルの対応表が吐かれる。なお、ラベル名を指定しなければ全てのラベルが吐かれる。

註1.ラベルを貼り付けられないトラブル

ラベルを貼り付ける際、トラブル発生。

may not label strings
r(181);

データの読み込みかエンコードなどが悪かったのだろうか。値ではなく string(文字) と認識されているようなので、stringからnumericへ変換したら解決です。

stringをnumericへ変換

destring 変数, replace

pythonでツイート取得

 わかりやすいページが多いけれど練習と覚書きとして。python を用いて、ツイッターへアクセスしツイートを取得、テキストファイル(text.txt)に保存する。今後テキストを元に解析を行ってみる予定。

もくじ

  1. API認証
  2. python-twitter を用いてテキストの取得

1 API認証

使用するパッケージの選択

python における twitter では以下の3通りのパッケージが存在する。ざっと見た感じ twitter を用いているものが多い。今回は twitter パッケージを用いるが、いずれにせよどれかに統一して用いたほうがメソッド覚えやすい。

参照:twitter,tweepy, requests_oauthlib

APIの認証

APIの使い方まとめにわかりやすくまとめられているので参照。基本はアカウント登録をし、ここから4つのキー及びトークンを得ることができればOK。最近ではアカウントの方で電話番号の認証を行わないとAPI登録できないようなので注意。

2 python-twitter を用いてテキストの取得

twitter パッケージをインポート。twitter パッケージのApiメソッドを用い、先ほど得たキーとトークンで認証を行う。この認証を行わないと public timeline 以外にアクセスできない。

import twitter
 # Apiメソッドでアクセス認証    
api = twitter.Api (
  consumer_key = 'ここに自分のものを1',
  consumer_secret = 'ここに自分のものを2',
  access_token_key = 'ここに自分のものを3',
  access_token_secret = 'ここに自分のものを4'
  )

 以降はこの apiメソッドを用いることでTLや、お気に入り、フォロワーなどを得ることができる。以下では特定のアカウントのツイートをテキストファイルとして text.txt に保存している。 

# 特定アカウントのツイートを得る
userTL = api.GetUserTimeline(screen_name = "ここに特定アカウントID", count=200)

k = 0 # 初期値
while k<19: # 繰り返しでツイート取得
  tweets = [None]*len(userTL) # ここに取得したツイートをしまう
  for i in xrange(0, len(userTL)):
    f = open("text.txt" , "aw")
    tweets[i] = userTL[i].text.encode("utf-8")
    if "http" in tweets[i]: # URLカット
           tweets[i] = tweets[i].split("http", 1)[0]
    if "@" in tweets[i]: # リプライカット
           tweets[i] = tweets[i].split("@")[0]
    if "RT" in tweets[i]: # RTカット
           tweets[i] = tweets[i].split("RT")[0]
    f.write(tweets[i])
    f.flush()
    f.close()
  k += 1
  print k #これが19まで出ればうまくいってるはず
  maxid = userTL[len(userTL)-1].id
  userTL = api.GetUserTimeline( screen_name = 'ここに特定アカウントID', count=200, max_id=maxid)

 api.GetUserTimeline() で得たツイートは各ツイートごとに様々な属性を持っている(ツイート内容や、お気に入りの有無など)。そのため、テキストのアクセスにはuserTL[0].textのような形でアクセスする必要がある。API制限によって3200ツイートしか取得できないため、while文のkを制限している(なぜ18回まで回るのか不明。19回以上回すとエラーが起きる)。中のfor文は取得したツイートのテキストを text.txt に保存している。1回で200ツイート取得、中のfor文で各ツイートのテキストをtext.txtに書き込む。その後取得したツイートの最後のツイートidをmaxidに入れて、while文でmaxidより古い次の200ツイートを取得以下同…。と回している。  text.txtに書き込む際、ついでにURないしRTを含むツイートと、リプライをカットしている。  うまくいけば、これでディレクトリにtext.txtにツイートがテキストファイルで保存されているはず。

おまけ

twitterパッケージの引数やら属性がいまいちわからない。いろんなパッケージを触ってしまったらなおのこと。引数を知りたいときはimport inspectしてinspect.getargspec(apiなど)、属性を知りたいときは dir(userTL[0]) で一覧表示可能。結構使える。

反省と予告

  • twitterメソッドはやっぱりまとめておきたい
  • 取得したテキストデータを用いて分析