ひとメモ

当ページのリンクには広告が含まれています

ニートに株がオススメの理由

ニートだけど株始めたら毎朝起きるのが楽しみになった

こんにちは。ニートです。(@hito_waft)
少し前から株取引を始めたのですが、それがとても楽しかったのでオススメしてみたいと思います。

早起きできる(起きる理由ができる)

ニートには仕事もなければ学校もなく、毎朝きちんと起きる理由がありません。
なのでついダラダラと夜更かしをして昼過ぎに目を覚まし、「自分はなんてダメ人間なんだ…」と思ったりしませんか?私はしょっちゅうしてました。

日本株取引は原則9時~15時(11時半~12時半までは休み)に行われます。
その1時間前の8時から、今この銘柄に何円でどれくらいの注文が来ているかわかる板というものを見ることができます。
なので大体その頃までには朝ごはんを食べて用意を済ませPCの前に座っていたいので、自然と朝7時くらいに起きられるようになりました。

これはいずれ社会復帰することを考えると、良い習慣ですね。そうでなくても健康的です。
(2017/9/27追記:実際に私も最近働き始めましたが、株のためにちゃんと朝起きてたから朝起きることが苦ではなく、働く辛さが軽減されています!)

社会勉強になる

「こんな会社があるんだー」と色々見たり、Yahoo!ファイナンスで平均年収ランキングを見たりして「へー」と思ったり楽しいです。
上場してるのだから大きな会社のはずですが、知らない会社だらけです。
身近なお店を運営してる会社の決算書を見て、「トリキ儲かってんなー」とか思ったり。
ニュースにも敏感になります。他にも色々。

働きたくなる(!)

ニートにはお金がありません。え?ある?いいっすね。
ある人はまあ別にいいんですが、お金ない人のほうが多いんじゃないかと思います。

私の場合親に甘やかされているので、たまにお金を貰ったりします。今はそれでちまちまと趣味と実(損)益を兼ねて勉強しながら取引してるのですが、やはり選べる銘柄にめっちゃ限りがあります。

普通は100株単位(1000株のことも)で取引されるので、1万円なら手数料を無視して100円以下の銘柄なら買えることになります。
今見たら28銘柄存在しました。ちなみに東証全体の普通株は3550銘柄ありました。1%以下ですね。(2017/8/2現在)

そして、あると言えばあるのですがそういう銘柄はワケありのことも多く、あんまりオススメできません。
私は初めて買った株が21円だったのですが、見事に高値づかみで後日損切りしました。手数料を含めると888円の損でした…。
1株ずつ買えるサービスもあるのですが、手数料が割高になったり取引時間が限られているなどあるので、やはりある程度まとまったお金があった方が良いです。
(1万円以下の少額でちまちま勉強するにはワンタップバイが今のところ一番良さそう。また気が向いたら証券会社の比較を書きます。)
(2017/9/6追記:個人の主観だらけの証券会社比較記事を書きました。↓)

hwhw.hatenablog.com

私はメンタル病気持ちというのもあり長い間働いてないのですが、働いて50万くらいは種銭を貯めたいなぁと求人を探しています。
→(2017/9/6追記:短時間の仕事ですが決まりました!株のおかげやで…。種銭貯めて好きな株買います(´ε` ))

社会参加できる

少額とはいえ市場にお金を投入し、証券会社にも手数料を払うということは経済活動に他なりません。人間誰でもできる範囲のことしかできないので、できる範囲のことやりながら胸張って生きましょう。
銀行に預金しているならまだしも、タンス預金なんかしちゃうとデフレで日本がヤバイ。らしいので生活に影響のない範囲でもっと多くの人が投資したらいいのになぁと思います。

(おまけ程度)勝ち組になれる可能性ができる

これはちょっと、「そういうこともあればいいなぁ」くらいのほのかな希望でお願いしますね。あんまり鼻息荒くして無理すると破産しますからね。
ニートの人は普通の社会のレールからは一旦はずれてるわけで、人にもよるとは思うけど「もうこの人生はダメだな…」と思ってたりしませんか?そういう気持ちを抱えたまま生きるのはとても辛いと思います。

株取引でいきなり億万長者になるってのは、まずないです。だけど例えば人間関係が辛くてどうしても長く働けないって人が、家でできる仕事として株取引するのはありかもしれません。
もちろん大損ぶっこいたら辛いと思いますが、辛さの質が違いますよね。言っておきますけど借金抱えるような無茶なことはダメですよ。
それで食べていくってのはまた大変な道だと思うし、どっちみちある程度の種銭を手に入れるのに働く必要はあります。

でも希望があるっていいよね!一緒に頑張りましょう~

人生で初めて株を買いました 7/14取引記録

「株始めました」って、「LOVEはじめました」に似てる

Python使って何かしたいと思いつつも、何もできてないので最近興味のある株取引について書いてみようと思います。

なけなしの1万円

「まず働いて小金を貯めるぞー!」と一瞬思ったものの、派遣会社の電話面接の時点で心が折れました。あと落ちました。
何でも病気のせいにするのもアレですが、私は双極性障害で学歴・職歴がズタボロなのでまあ雇われないんですよね。なので障害者手帳を取って、作業所的なところで働こうと思ってますが、諸々の手続きに時間がかかるのでその間は勉強しておきます。
29歳無職にはまとまった種銭がないので、お財布にかろうじてあった1万円を勉強代として使います。元は親から貰ったお金ですが…。

バーチャル取引も楽しいけど

トレダビを7/6から始めて、ちびちびと利確できたり損切りしたりとやって、今評価損も含めて92,851円マイナスになってます。トレダビは1千万円から始まるので、0.92%くらいの損かな。
実際に取引を始めるまで、なるべくたくさん失敗しておきたいからまあいいかなって感じです。

でもバーチャルだと現実には持ってない金額を動かすし、どうしてもただのゲーム感覚なんですよね。
現実で9万円強も損したらかなりのうつ期に入ってると思うし。社会勉強にはなって楽しいけど。
というわけで現物のお金で取引するのにも慣れておきたくて低位株(安い株)を買うことにしました。

1万円で買える銘柄はかなり限られる

大体100株か1000株で1単元なので、手数料無視して100円(1000株1単元なら10円)までの株を買える事になります。かつPERが低めであるとか、自己資本比率が高めかとか、本を見ながら良さそうな銘柄を探すわけです。
単元数以下の株を買うサービスもあるけど、手数料が割高なのでうまみなさそう。

そして見つけた銘柄がランド(8918)

不動産系の会社です。7/13の終値が18円。
7/13の15時に決算短信が出たところで、売上高が前年同期比で305%とあと太陽光発電の新しい事業にも取り組んでいきますいい感じやでみたいなことが書いてあったので、「これはめっちゃ上がっちゃうんちゃーん?」と思いました。ストップ高ってやつ?とか思ってました。

ただヤフーの掲示板見てると、せいぜい25円くらいまでしか上がらんみたいな意見が散見されて、前と同じで寄り天(始値が一番高くて後は下がる)だ、と言ってる人もいました。
そこで改めて過去のチャートを眺めた感じ、確かに寄り天の恐れもあるなと思ったので、始値から4円上がったら成行注文(カブドットコムにはこういう注文方法がありました)にする事にしました。
そこまで上がらなければ落ちるだけだから買わないでおこうという判断です。

いざ購入

やっぱり少額であっても現実のお金を使うとなると緊張しますね。夜は中々寝付けず、朝もいつもよりかなり早く目が覚めました。
8時になったら気配値(いくらでどれくらいの数量の注文が入ってるか)が見れます。9時が近付くにつれてどんどん大きくなる数字…。今思えば売り優勢な感じだったのですが、「これ買えないのでは?(その後どんどん上がるのでは)」と思って、始値+4円で注文入れてたのを始値+2円に、その後更に不安になって始値+1円まで条件を緩めてしまいました。

そして9時。始値は21円でした。
始まったー!と思ったらすぐ約定。23円まで上がりましたが、どんどん落ちて終値は17円。
400円の評価損ですね。あと手数料が96円。

来週に期待、でなければ塩漬け

今日の出来高がかなり多くなったので注目を浴びて、来週もしかしたら少し上がるかもしれないです。そうでなくてもしばらく持ち続けたら、上がるかも?上がったらいいなー。

反省点

買うこと優先になってしまった。

どんどん値を上げていく流れじゃなければ買わない方がいいと思って始値+4円で成行注文と決めたのに、ついつい買いたい欲に負けてしまった。結果、買えたけど下がってしまった。
後場ほとんどの時間を18円から19円で推移してたので、焦ってさえなければ18円で買えただろうなー。買うべきかどうかは別として。

情報不足

安く株を大量に持ってて、それを売りさばきたい会社(?)があるらしい。それで融資を受けたとかなんとか。
あまりに大量だから、最後まできっちり売り切れるように株価があげ過ぎないようにしてるのかもしれない。それでももう少し高めになっても良さそうなもんだけど、ちょっとよくわからない。
その会社が持ってる株が残り少なくなってきたら上げてくるのかもしれない。

それはともかく、それを知ったのが注文約定してからというのが問題で、それを知るきっかけは昨日のうちにあったのに上がる上がると思って重要視せず調べもしなかった。

そもそもその会社を別に好きじゃない

不動産のことよくわからない。あと自然災害増えてるし、地方に限定された不動産系の会社って、分散投資の1銘柄ならいざ知らず単独で持つ銘柄としてはリスク高いのでは?わからん。今持ってるのはリスクというほどの金額じゃないからいいけど。
やっぱり株価が多少下がっても、この会社が好きだから応援したいと思えるような株を持ちたい。
現状で買える低位株では中々難しいかもしれないけど、見つからないなら無理に買わないようにしたい。

手数料がかかった

今回はカブドットコム証券を使って96円かかった。時間分散して95円100円105円みたいに3回に分けて注文して全て約定したら288円もかかってまう。
当面は1日に10万円以上の取引する予定ないので、1日10万円以下なら手数料無料の松井証券を使う。
松井証券の口座開く手続きはしたから来週には使えるだろうに、ここでも今すぐ買いたい欲に負けてしまった。

Pythonで作ったTwitterのbotをHerokuで動かす

目次

「botを作ったはいいけど、それを常に動かしておく方法がわからない…。」→Herokuで解決!

Twitterのbotを作るのは割と簡単なのですが、それを常に動かしておく方法が少しわかりにくいです。
なので今回はHerokuを使った定期投稿のやり方を説明していきます。
この記事ではコードやAPIキーの取得方法などの細かい説明を省いているので、わからなければ過去記事を参照してください。

hwhw.hatenablog.com

環境によって細かいところが違うので、詳しくはHerokuの公式のチュートリアルを見てください。英語ですがわかりやすいです。
Getting Started on Heroku with Python | Heroku Dev Center

Herokuにデプロイするまでの準備

Herokuのアカウントを準備する

Cloud Application Platform | Heroku
上のリンクへ行き、Herokuのアカウントを取得しておきます。制限はありますが、無料で使えます。ただしアカウントの認証にクレジットカードの登録が必要になります。

HerokuのCLI(コマンドラインインターフェース)をインストールする

ほとんどの作業はターミナルを使用して進めます。そのためにまずCLIをインストールします。

公式のチュートリアルを見て進めてください。
(ラズパイの場合ですが、OSはLinux系のRaspbianなのでUbuntu/Debian系のやり方で進められるかなと思ったら無理だったので、standalone用のやり方でインストールしたらうまくいきました。
以下のようにOSはlinux, archはarmに置き換えて指定しました。forbiddenエラーみたいなのが出たらsudoで実行します。 )

wget https://cli-assets.heroku.com/branches/stable/heroku-linux-arm.tar.gz  
mkdir -p /usr/local/lib /usr/local/bin  
tar -xvzf heroku-linux-arm.tar.gz -C /usr/local/lib  
ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku

インストールできたらheroku loginでログインしておきます。

作業用フォルダを作る

ターミナルで作業用フォルダを作って、そこに移動しておきます。

mkdir 作りたいフォルダ名
cd 上で作ったフォルダ名

用意するファイル

作ったフォルダの中に、以下のファイルを入れておきます。
それぞれの中身は順番に説明します。  

  • Procfile
  • runtime.txt
  • requirements.txt
  • index.py
  • tweet.py

Procfile

Herokuにこれを動かせばいいんだよと指示するファイル。拡張子なし。

web: python index.py

runtime.txt

Pythonのバージョンを書いておくファイル。

python-3.6.1

requirements.txt

必要なモジュールを書いておくファイル。ここに書いておくと、pipからインストールしてくれます。
virtualenvの仮想環境で必要なモジュールをインストールして、pip freeze > requirements.txtとしておくと簡単。
サンプルのbotではこんな感じ。

bottle==0.12.9
certifi==2017.4.17
chardet==3.0.3
idna==2.5
oauthlib==2.0.2
requests==2.17.3
requests-oauthlib==0.8.0
urllib3==1.21.1

index.py

botとは直接関係ないけど、動作を安定させるための(?)ダミープログラム。

#coding:utf-8
import os
from bottle import route, run

@route("/")
def hello_world():
        return "hello world"

run(host="0.0.0.0", port=int(os.environ.get("PORT",5000)))

tweet.py

botの本体プログラム。これは後述するherokuのスケジューラで定期実行します。

# coding: utf-8 

from requests_oauthlib import OAuth1Session
import json
import os
import random
import datetime

twitter = OAuth1Session(os.environ["CONSUMER_KEY"],  os.environ["CONSUMER_SECRET"], os.environ["ACCESS_TOKEN_KEY"], os.environ["ACCESS_TOKEN_SECRET"])

tweets = ["文言1","文言2","文言3"]

randomtweet = tweets[random.randrange(len(tweets))]

timestamp = datetime.datetime.today() + datetime.timedelta(hours=9)
timestamp = str(timestamp.strftime("%Y/%m/%d %H:%M"))

params = {"status": randomtweet + " " + timestamp}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)

デプロイする

Gitを使います。

heroku create
git add .
git commit -m "first commit"
git push heroku master

TwitterのAPIキーはセキュリティ上、プログラムに直接書かずに環境変数に設定します。***部分を自分のbot用APIキーに置き換えてください。クオーテーションマークはいりません。

heroku config:set CONSUMER_KEY=*** CONSUMER_SECRET=*** ACCESS_TOKEN_KEY=*** ACCESS_TOKEN_SECRET=***

まず手動で動くか確認

heroku run python tweet.py

動いたら次へ。

スケジューラを設定する

これを設定して初めてbotが自動で動くようになります。

$ heroku addons:create scheduler:standard
$ heroku addons:open scheduler

開いたらAdd new jobを押します。
すると新しいタスクができるので、$の後にpython tweet.pyと入力し、頻度などを設定しsaveすれば終わりです。やったね。

botの内容を変更する時は

ローカルで変更してから、あげ直します。
botのフォルダに移動してから下記のような感じでOK。詳しくはgitでぐぐーる。

git add 変更を加えたファイル
git commit -m "変更内容を簡潔にコメント"
git push heroku master

参考サイト

簡単!Herokuで動くTwitter botをPythonで実装する - Qiita
Getting Started on Heroku with Python | Heroku Dev Center
サルでもわかるGit入門〜バージョン管理を使いこなそう〜【プロジェクト管理ツールBacklog】

おまけ(自分用メモ:virtualenvの使い方)

virtualenv hoge
source hoge/bin/activate

関連記事

hwhw.hatenablog.com

最近口内炎があんまりできない

口内炎が最近できてないことに気付いて調べてみた

こんにちは。石巻貝の口は口内炎に似ていると思う、ひと(@hito_waft)です。
昔はしょっちゅう口内炎ができて痛い思いをしていたのですが、「最近はあんまりできないな?」と思ったので、Twitterでいつ頃からできてないのか見てみました。

グラフにするとこの通り


どこかで「フロスや歯間ブラシを使い始めてから口内炎ができなくなった!」という話を見たので、もしかしてそれが関係あるのかと調べました。
それぞれの単語が含まれるツイートを月ごとに集計してグラフにしています。

ただし口内炎ができた時は「口内炎痛い」などとツイートするのに対し、フロスや歯間ブラシは使い始めてからは毎日使っているので、いちいちツイートしません。なので使い始めた時期を特定するためにだけ見ています。

これを見ると、確かに2014年頃から口内炎ができていないようです。(「ツイートしてないだけでは?」と思うかもしれませんが、私は口内炎ができたら大体いつも痛い痛いと騒ぎます)
一方関係があるかと思ったフロスや歯間ブラシは特に関係なさそうです。歯ぐきの調子は良いですが(^з^)-♪

2014年から何が変わったか?

「じゃあ、何で口内炎できなくなったのかなー」と2014年の事を考えてみました。すると私にとってかなり大きなできごとがあったことがわかりました。
それは… メンタルクリニックへの通院開始!です。(私は双極性障害持ちです)

意外ですねー。そうでもないですか?
病院に通って薬を飲みだして、すぐに効き目が現れたわけではなかったのですが、それまで「自分がクズだからうまく社会に馴染めないんだ…」と思っていたのを、先生に「辛かったな。病気がそうさせてるのであって、自分が悪いんじゃないんやで」と言ってもらい、救われたように感じたのを覚えています。

それでストレスが大幅に減ったのかもしれませんね。はたまた薬飲んでる影響かもしれませんし、ただ私が年齢を重ねたことによるのかもしれません。わかりません。
でも面白いなーと思って記事にしました。口内炎に困ってやってきた人には役立たない記事でしたね。こめんね。


この記事のようなグラフの作り方↓ hwhw.hatenablog.com

口内炎ができた時は、ちょっと怪しいかなくらいの段階ですぐにこれを貼って寝る。すると翌朝口内炎が育っていない!2日か3日貼るとそのまま消えてくれます。以前はめっちゃお世話になりました。 ↓
【指定第2類医薬品】トラフル ダイレクト 12枚 ※セルフメディケーション税制対象商品

無料のはてなブログから違うブログサービスに引越す時、役立つかもしれない方法

無料のはてなブログからよそのブログサービスへの引越しは少し面倒

こんにちは。ひと(@hito_waft)です。
表題ですが、無料のはてなブログからエクスポートしたファイルを、そのまま別のブログサービスにインポートすると、はてなキーワードのリンクタグも一緒にくっついてきます。無料で使わせてもらってるので文句を言える立場ではないのですが、「さすがによそのブログに引越してまで付いてきていらんわい…」ということで簡単にリンクを外せるプログラムをPythonで書きました。
それをはてなブログに載せるのもどうかと思いますが、某ブログサービスが色々ややこしくて引越しをやめたのでここに書きます。はてなブログいいよね!

コード

# coding: utf-8

# In[1]:
import re

# In[2]:
regex = re.compile(r'<a class="keyword" href=\"(.*?)>(.*?)</a>')


# In[3]:
list = []

with open("/hoge/hoge.txt", "r") as f: 
    for text in f:
        words = re.sub(regex, "\\2", text)
        list.append(words)


# In[4]:
with open("/hoge/hoge_別の名前.txt", "w") as g:
    for out in list:
        g.write(out)
        
print("OK")

使い方

  1. In[3]の/hoge/hoge.txt部分をはてなブログのエクスポートファイルのパスに書き換えます。
  2. In[4]の/hoge/hoge_別の名前.txt部分には、はてなキーワードのリンクを消した後のテキストを格納するファイルのパスを置きます。先にファイルを作らなくてもプログラムを実行した時に勝手に作ってくれるので大丈夫。元のファイルにしてもいいんですが、もし予期せぬ出力のトラブルがあると面倒なので別のファイルを指定しています。間違えて関係ない他のファイルに上書きしてしまわないように気をつけてください!何か起こっても私は責任を取れません…
  3. 出力したテキストファイルを、中身を念のため確認してからインポートしてください。

詳しく説明

  • In[1]では正規表現を使うためのreモジュールをインポートしています。
  • In[2]では使用する正規表現をコンパイルしています。はてなキーワードへのリンクは
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>こんな感じになっています。(CSVへのリンク例)
    なので、<a class="keyword" href="ここはそれぞれ違う">hoge</a>という形のリンクを、hrefの中身が違っていてもきちんと抜き出せるように正規表現で指定しているわけです。正規表現についてはかなり奥が深いので、詳しくは公式ドキュメントなどを見てください。
    ちなみにここで使っている変数名regexは英語で正規表現という意味です。だからreモジュール。たぶん。
  • In[3]では、まず変換したテキストを入れる空のリストを作っています。続いてエクスポートしたファイルをwith文(こうすると後でclose()しなくて良い)を使ってf(as fの部分)という名前で開きます。その中の不要なリンクをre.subを使って置き換えています。words = re.sub(正規表現, ここに指定した文字列で置き換える, 対象のテキスト)の形で指定しています。
    第一引数の部分は直接正規表現を指定してもいいのですが、何度も同じ表現を繰り返し使う場合はコンパイルしておいた方が実行速度が速いそうです。あと見た目もスッキリわかりやすいですね。第二引数は上のコードの中では正規表現の中に(.*?)というグループが2つあるのでその2つ目という感じです。それをlistに追加しています。何度も言うようですが正確に知りたい人は公式ドキュメントなどを見てください。
  • In[4]でそれを新しくファイルに書き込んで終わりです。何となく、終わったら画面にOKと出力されるようにしました。インポートする前に出力がおかしくなっていないか一応確認してください。

参考

https://docs.python.jp/3/library/re.html(公式ドキュメント)
http://qiita.com/ao_love/items/6b5299b06214348c03a1
http://www.aipacommander.com/entry/2014/06/17/184220
http://springstar.hatenadiary.jp/entry/2017/01/22/キーワードリンクを消してすっきり。(はてなブ

Pythonを使ってツイートをグラフにしてみよう!(月によって違いはあるのか?編)

こんにちは。ひと(@hito_waft)です。

前回自分のツイートから単語を抜き出して、簡単にグラフ化する方法を紹介しました。

hwhw.hatenablog.com 

前回は全ての期間を対象にグラフを作りましたが、今回は月によって単語の出現頻度に変化があるのか調べてみたいと思います。今回使うライブラリはpandas、numpy、matplotlibの三つです。なければpip3 installしておいてください。

(2017/4/12:追記あり)

 

今回作るグラフの例

こちらをご覧ください。

f:id:hwhw:20170406110349p:image

私が愛してやまない[Alexandros]の川上洋平さんについて言及したツイートの数を、月毎に平均したグラフです。6月から8月にかけてツイートが増えていることがわかります。これはたぶん、夏フェスなどでメディアへの露出が増え、それを見てかっこいいかっこいいとわめいていたのだと思います。

このように、全期間で作ったグラフだけ見ていてもわかりにくい季節の傾向などが可視化できるようになります。使い方はあなた次第。

 

早速コードを見てみましょう

gist.github.com

 

とりあえず使って見る人向け手順
  • 13行目の"/hoge/tweets.csv"となってるところを、自分が保存した全ツイート履歴のCSVファイルのパスに書き換えます。
  • 続いて20行目にキーワードを入れます。前回はいくつか同時にグラフを出すことができましたが、今回はややこしいので一度に一つだけ。{"label":"keyword"}の形式でlabelの所には凡例に出す名前を入れます。ここは文字化けするのでローマ字で。keywordにはツイートから抜き出したい単語を入れます。表記揺れ(猫、ネコ、ねこ等)は|(縦棒)で区切って入力します。例では"洋平|ようぺ"となっていますね。

そして実行するとグラフが出ます。色々キーワードを変えて遊んでみましょう。

 

もう少し詳しく解説

In[3]ブロックまではほぼ前回の記事と同じなので割愛します。気になったら前の記事を参照してください。

In[4]ではまずgraghという名の空リストを作っています。ここにグラフ用のデータを入れていきます。

forループでは、データフレームのインデックスの中で1月なら1月のデータだけ(2010-01,2011-01,2012-01...)を抜き出してmean()で平均を出し、graphリストに追加しています。それを1月から12月まで12回繰り返しています。

これでデータはできましたが、リストのままではグラフにできないようなので、これをpandasのデータフレームに直しておきます。ついでに簡易なラベル(1〜12)を付けています。

そして棒グラフでプロット。kind="bar"の所を"line"に変えれば折れ線グラフになったりします。このグラフの設定は色々細かくできるようですが、私はあんまり調べてないので興味のある人は自分で調べて試してみてください。

 

追記:コメントアウトしてある部分を外すと、キーワードを含むツイートそのものを出力するようにしています。数が多いと省略されますが、雰囲気くらいはつかめます。

 

おまけ:こんな可愛い星空みたいなグラフもできました。一つ一つの星は、実はかなりネガティブな言葉をツイートした数ですが…笑

f:id:hwhw:20170406145915p:image

 

Pythonで自分のツイートをグラフにして分析してみよう!(改訂版)

 こんにちは、ひと(@hito_waft)です。

以前こんな記事を書きました。 

hwhw.hatenablog.com

出てくるグラフは同じなんですが、もっといい感じのプログラムで簡単にツイートをグラフにできるようになったので記事にしておきます。

 

この記事を読んでできること

f:id:hwhw:20170330020229p:image

 上のグラフを見てください。私はロックバンドのサカナクションと[Alexandros]が好きなのですが、それぞれのボーカル、山口一郎さんと世界一かっこいい川上洋平さんについてツイートした回数を月ごとの集計でグラフにしたものです。(名前が入ってるツイートだけ)

 2011年の9月頃からサカナの一郎さんのファンになり、2012年の9月頃から[Alexandros]の洋平さんのファンになり、その後は完全に[Alexandros]派になった様子が見て取れます。

 大きな波が来てるのはたぶんライブに行った時か何かでしょう。

こんな感じのグラフを簡単に作ることができます。ただTwitterの過去ログを眺めるだけより楽しいよ!

 

前提

Python実行環境は整っているものとします。pandasとmatplotlibがないならインストールしておいてください。

 あらかじめ全ツイート履歴をダウンロードして解凍しておいてください。そのうちのCSVファイルを使います。

 

では早速コードを見てみましょう

gist.github.com

 すぐ使う人向け、使い方解説

12行目のhoge/tweets.csvとなってるところを自分が保存したツイート履歴のCSVファイルのパスに置き換えます。

19行目では{"key1":"value1", "key2":"value2", ...}の形式で、ツイートから抜き出したい単語を指定します。keyのところにはグラフの凡例に出す名前を入れます。※日本語だと文字化けするのでローマ字で。valueのところには抜き出したい単語そのものを入れます。ここでは日本語で大丈夫。表記揺れがあるものを同時に抜き出したい場合、|(パイプ)で区切ります。猫、ネコ、ねこ等を一緒に抜き出せます。(例では洋平|ようぺ)

 そして実行!するとグラフが出てきます。色々言葉を変えて楽しみましょう。

 

詳しく解説

In[1]のブロックでは使うライブラリをインポートしています。

 

In[2]ではCSVファイルを読み込んでいます。その際parse_dates= オプションでタイムスタンプを日時情報として扱えるようにしています。

次の行でタイムスタンプをデータフレームのインデックスにし、その次の行でツイートした内容が入っている"text"以外の列(個々のツイートのID等)をなくしています。この段階ではツイート内容にタイムスタンプインデックスがついただけのデータフレームになっています。

 

In[3]ではディクショナリ形式でキーワードを指定しています。for文ではその指定したキーワードをitemsメソッドで同時に取得し、keyを列の名前としてデータフレームに列を追加しています。その中身はvalueで指定したキーワードがtextに含まれるか含まれないかの真理値シリーズです。

ここまできたら、ツイートの内容は邪魔になるので(残っていると文字列なのでsumできない)dropメソッドで落としておきます。axis=1というのは列を扱うというオプションです。指定しなければ行(axis=0)に対して操作が行われます。

 

In[4]ではインデックスにしたタイムスタンプを月毎にまとめ、それぞれの列の値も合計しています。真理値はTrueが1、Falseが0として扱われるのでそのままsumメソッドで合計できます。そしてプロット。グラフができました。やったね。

 

 

全部この本(Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理)を読んでできるようになりました。(私が読んだのは第1版ですが、Python3に対応した第2版が出てるので買うしかない)

Amazonではそんなに評価高くなかったので、どうかなーと思ったのですが、めちゃめちゃ役に立ちました。pandasの作者さんが書いたそうな。pandas愛を感じます。Twitterのデータ取得は認証がいるようになったので、できませんでしたが、それ以外は特に問題なく動きました。

こういう本を一冊通読しておくのは自分の能力の底上げになりますね。情報の一つ一つはググれば出てくるかもしれませんが、それで行ったり来たりする時間の無駄を考えると、読んで良かったなと思います。

今まで入れるだけ入れてたけど使い方がよくわからなかった、IPythonやjupyter notebookをこの本を見てから使うようになったのですが、もうね、めっっっっっちゃ便利です。特に私のように試行錯誤を繰り返す初心者には心強い味方になってくれるでしょう。みんなも使うといいよ。