わらってごまかす

ごまかしちゃだめ

PythonでTwitter Botを作るまでの長い長い物語(失敗編)

はじめに
この記事は失敗編です。
成功編はこちら

PythonでTwitter Botを作るまでの長い長い物語(完結編) - からあげ定食

大学でTwitterの分析をしている手前、botを作りたいと常々思っていました。普段大学ではRを使っているのですがRではどうにもならない。ということで、春休みにPythonを始め、「さあ、作るぞ!」と意気込んでいたあの頃はどれほど前であったでしょうか。

これはTwitterBotを作ることに奮闘したひとりの男の記録である。

RでTwitter APIには触れていたため、そんなに手こずること無くpyhtonからtweetを投稿するコードを書くことは出来ました。RではtwitteRというパッケージを使っていたので、Pythonでも似たようなものがないかと探していると、どうやらpython-twitterとtweepyというものが有名らしい。tweepyの方が簡単そうなのでそちらを使った。ちなみに、将棋が趣味なので、将棋の名言格言をランダムにつぶやくBotを作る。

次に、Pythonだ!、自動実行だ!、cronだ!ってことで大学のサーバーにアップしてcronで自動実行することにしました。
sshで大学のサーバに接続し、慣れないUNIXコマンドを打ちながらなんとかpyhonをインストールし、コードもアップロード成功。さあ実行だ!

ImportError: No module named tweepy

……ふむふむなるほど、どうやら外部モジュールを使いたいときはサーバーに設置しなければいけないらしい。そんなことは訳ない、やって差し上げようじゃないか。

gitからライブラリも用意し再び実行すると、謎の英語が。
どうやらお前には権限がないから無理だと……


……


……


その後、一心不乱にgoogle先生を質問攻めしたのですが僕にはできませんでした。PYTHONPATH、仮想環境、いろいろやってみましたが僕にはできませんでした……
ググっている印象では、きっと抜け道はあると思います。その入口まで来ている気もします。ただ、ドアの開け方が分からなかった……

第一章 大学のサーバーでTwitter Bot!編 〜完〜

第ニ章 GoogleAppEngin + tweepy 編に続く

PythonでTwitter Botを作るまでの長い長い物語(完結編) - からあげ定食

Rで関数の中でグローバル変数を定義する

通常、関数の中で定義した変数はその関数の中だけで有効で、関数実行後は残らない。例えば

x <- 10
myfunc <- function(){
  x <- 9999
  return(x)
}
myfunc()
# [1] 9999 #関数の返り値
x 
# [1] 10 #グローバル変数には影響していない

しかし、 <<- を使えばグローバル変数に代入することができる。

x <- 10
myfunc <- function(){
  x <- 9999
  x <<- 55
  return(x)
}
myfunc()
# [1] 9999 #関数内のローカル変数が返り値
x
# [1] 55 #関数内で定義したグローバル変数が更新されている

注意しなければいけないのは、関数内で定義している2つのxは別の変数であるということ。グローバル変数はあくまでグローバル変数であり、ローカル変数が優先される。(ローカル変数が定義されない場合はグローバル変数のxが返り値になる)グローバル変数とローカル変数は別の名前にしたほうが無難。

また、assign(変数, 値, env=.GlobalEnv)でもグローバル変数を定義でき、どうやらこちらのほうが推奨されているらしい。

(参考)
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/32.html

Rで変数を変えながらfor文を回す

for文を回すとき、代入する変数を毎回変えたいことがしばしばあるが、やり方が分からなかった。(ちゃんと調べたことがなかった)やっと調べたので、忘れないうちにメモ。

assign()関数とpaste()関数を使うとできる!

まずassign()関数は、名前に値を付置する、つまり代入する関数。例えば、

asssign(a,1)
a
# 1

# もしくは、こんな使い方も可能
b <- "x"
assign(b,1:10)
x
# [1]  1  2  3  4  5  6  7  8  9 10

paste()関数は文字列と文字列をつなぎ合わせる。便利な所は、引数に変数を持ってくることもできるところ。sep=は、繋ぎ目の記号等を決められる。(この場合は何もなし)

c <- "ゴレライ"
paste("ラッスン",c,sep="") 
# [1] "ラッスンゴレライ"

この2つを組み合わせればfor文で変数を変えていくことができる。

for(i in 1:10){
  nam <- paste("y",i,sep="")
  assign(nam,i*i)
}
y1;y2;y3;y8;y9;y10
# [1] 1
# [1] 4
# [1] 9
# [1] 64
# [1] 81
# [1] 100

(参考)
http://www.is.titech.ac.jp/~mase/mase/html.jp/temp/assign.jp.html
http://futabooo.hatenablog.com/entry/20110910/1315634652

Rで絵文字!

Rで絵文字をつかえるらしいと聞き、居てもたっても居られずいろいろ遊んでみた

と記事を書こうとしたらブラウザ上で絵文字が打てない!

どうやらchromeでは絵文字が使えないようなのでFirefoxに切り替りかえて気を取り直してリトライ。

(追記)
近々chromeも絵文字対応するようです。
Google Chrome for OS Xがまもなく「絵文字」に対応へ - Appleをiするブログ


http://qiita.com/uri/items/bcb702faef242bdd9820を参考にとりあえずやってみた。

ramen <- "🍜"

ramen #エラー

message(ramen) # message()関数で表示すると出る(謎)

# 🍜

できた!

注意点としては、絵文字を" "で囲うことと、message()関数で表示すること。

どうでもいい情報だが、

ramensmax <- rep(ramen,10000)
message(ramensmax)

とニヤニヤしながら打ってみたものの、何も表示されなかった(涙)ので限界を調べてみたところどうやら最高は2047らしい。ほかの絵文字は試してない。ほんとどうでもいい。
また、message()を使わないと表示できないので、データフレームを作ることはできるが、表示することはできない。write.table()で書きだすことはできた。


もしかして、絵文字でプロットできるのでは……!と思いやってみたが、

plot(iris[,1],pch="🍳") #できない

f:id:fujit33:20150225030736p:plain:w500

🙅でした。

悔しいので、こんなことをしてうさばらし。(絵文字ではない)

par(bg="black")
plot(iris[,1],bg="black",pch="★",col="yellow",axi=F) 
axis(1,col="white",col.axis="white") #X軸を書く
axis(2,col="white",col.axis="white") #Y軸を書く

f:id:fujit33:20150225030746p:plain:w500

楽しい!笑

さらにさらに、

http://qiita.com/uri/items/bcb702faef242bdd9820

によると remoji なるパッケージがあるらしい!

公式:

https://github.com/richfitz/remoji

早速インストール

devtools::install_github("richfitz/remoji")
library(remoji)

message(emoji("sushi"))

# 🍣

Rはバージョン3.1.2以上に対応とのこと。

remojiに入っている絵文字であれば、emoji()関数に対応する名前を入れるだけで絵文字が使える。なんて便利なんだ!(?)

使える絵文字は

message(emoji(list_emoji(), TRUE))

で一覧表示できる(コンソールいっぱいに絵文字が並んでなかなか楽しい)
絵文字の名前が知りたいときは>|r|find_emoji("man")||<などで、manが含まれる絵文字の名前を検索できるが、例えば、🀄の絵文字の名前は何か、などを調べることはできないのでやっぱり不便。でもこういうのは楽しいことが大事だからOK。

これゼミで流行らしたい……

最初の投稿

メモ、進捗、つぶやきをまとめる場所をつくろうと思ってとりあえずブログを立ち上げました。

自己紹介

僻地の大学。環境と情報の学部。2年生。

そもそもよくわからない学部だが、主に統計、データ分析、マーケティング等の勉強をしている。

趣味はヨット。

この1年間、Rを使ってtwitterデータをあれこれする研究をしていた。そのあたりのことを、自分の整理含めて初学者向けにまとめられればいいなと思う。今年はPythonも使いたいので勉強中。

どんな感じになるかはわからないけれど飽きないように頑張ります。