2017年11月17日

Tweet中の発生頻度が高い単語を可視化(Python+janome+WordCloud)

WordCloudを用いると文中に含まれる単語の発生頻度を可視化することができます。すでにあると思いますが、練習がてらTweet中に含まれる単語を下記のように可視化するWebサイトをPython+Janome+WordCloudで構築してみました。

20171116_WC_kumana_be.png

細かいプログラムや環境構築の内容は後程説明するとして、構築したこちらのサイトでTweet IDを入力してボタンを押すと下記の様な感じで30秒ぐらいで画像が生成されます。Twitter認証は不要にしているので他人のIDの結果も生成して見ることが出来ます。

20171116_WC_introduction.png

ちなみに、前述の画像にある通り、自分のTweetの場合は「くまくま」が一番目立ってますね(^^;

posted by くまなべ at 08:00 | Comment(0) | TrackBack(0) | Python

2017年10月29日

coconalaサンプル一覧表示サイトを作ってみた(Python)

TwitterやBlogのアイコンやサイトのヘッダなどのイラスト作成を個人に依頼するcoconalaというサイトがあります(イラスト以外にも色々な出品がありますが)

20171028_coconala_0.png


coconalaで検索した時の感想


下記の様な感じでcoconalaのサイトの検索機能で値段や納期などの検索はできますが、お願いする側としては、とりあえず絵柄を一覧で見てみたいと思うのではないかなーと思いました。

20171028_coconala_2.png


ということで

スクレイピングで、サンプルを一覧表示してサンプルをクリックすると各ID(サービス)に飛ぶサイトを作ってみました。ひとまず、下記のような感じでアイコン作成とイラスト作成で販売実績が多い人から順に並べています。

20171028_coconala_1.png

できあがったときに、パッと見カラフルで、見てて楽しい出来栄えになるのは作ってみて楽しいですね。
posted by くまなべ at 10:30 | Comment(0) | TrackBack(0) | Python

2017年10月17日

VALUの別の情報もつぶやいてみる(Python+MySQL+Tweepy)

下記のエントリでVALUの時価総額ランキングを呟くようにしました。
下記のエントリーでVALUの情報をスクレイピングしてMySQLに格納しました。...
今回は、時価総額だけでなく追加の情報もつぶやくようにしました。その内容についてのエントリーです。

追加のつぶやき

今回は、騰落率と新規公募時の時価総額のランキングをつぶやくようにしました。
下記をつぶやくまでに、幾つか注意した点を明記しておきます。

追加でスクレイピングした情報

今まではVALUのページの左側の情報のみを入手していましたが、今回は右側の情報も取得しました。

20171016_valu_0.png

また、今回は、右のように前日終値がついていないものは新規公募扱いとしてフラグを立てています。

20171016_valu_1.png

該当箇所のコードは下記となります。
    # em tagで順番に 現在値:時価総数:発行VA数:VALUER数となる
current_value = float(re.sub(",","",soup.select(".news_valu_left em")[0].string))
ag_market_value = float(re.sub(",","",soup.select(".news_valu_left em")[1].string))
value_issue = float(re.sub(",","",soup.select(".news_valu_left em")[2].string))
numerical_value = float(re.sub(",","",soup.select(".news_valu_left em")[3].string))

if soup.select(".news_valu_right em")[0].string == "---":
# 新規メンバーの場合
last_close_value = float(0)
last_first_value = float(re.sub(",","",soup.select(".news_valu_right em")[1].string))
last_top_value = float(0)
trunover = float(re.sub(",","",soup.select(".news_valu_right em")[3].string))
yearly_high = float(0)
yearly_low = float(0)
diff_rate = 0
newid = 1
else :
last_close_value = float(re.sub(",","",soup.select(".news_valu_right em")[0].string))
last_first_value = float(re.sub(",","",soup.select(".news_valu_right em")[1].string))
last_top_value = float(re.sub(",","",soup.select(".news_valu_right em")[2].string))
trunover = float(re.sub(",","",soup.select(".news_valu_right em")[3].string))
yearly_high = float(re.sub(",","",soup.select(".news_valu_right em")[4].string))
yearly_low = float(re.sub(",","",soup.select(".news_valu_right em")[5].string))
diff_rate = 100 * (current_value - last_close_value) / last_close_value
newid = 0

連投制限

Twitterでは全く同じ発言をつぶやこうとするとErrorが発生します(20回に1回ぐらいなら良いのかもしれませんが)。そのため前日と全く同じデータ・ランキングの場合にはTweetすることが出来ません。そのため、ランダムな数字を文末に挿入することにしました。該当箇所のコードは下記となります。
    for row in cur.fetchall():
tweet = tweet_prev + str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[index])+str(unit)+"\n"
#140文字以上になる場合は、140文字以内になるように分割してリストに追加
if len(tweet) > 130:
tweet_list.append(tweet_prev+"\n"+str(random.randint(1,100)))
tweet_prev = str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[index])+str(unit)+"\n"
tweet = ""
else:
tweet_prev = tweet
では、これらのことに注意して修正した全コードに続きます。
続きを読む
posted by くまなべ at 21:00 | Comment(0) | TrackBack(0) | Python

2017年10月10日

VALUの時価総額ランキングを定期的につぶやいてみる(Python+MySQL+Tweepy)

下記のエントリーでVALUの情報をスクレイピングしてMySQLに格納しました。
下記のエントリーで、とりあえずMySQLに触ってみましたが、実用的なことを実施し...
そのDBを元に時価総額を降順に検索して下記の様にアカウント「@kumakuma_ap」でつぶやくコードを作成しました。またつぶやくタイミングはcronで設定しています。

Tweetを140文字以内にするために

今回のコードは下記の部分でTwitterの制限である140文字になるように分割しています。
    # 時価総額10位以内を順に取得
for row in cur.fetchall():
tweet = tweet_prev + str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[5])+"BTC\n"
#140文字以上になる場合は、140文字以内になるように分割してリストに追加
if len(tweet) > 140:
tweet_list.append(tweet_prev)
tweet_prev = str(rank)+"位:"+row[1]+"("+row[0]+"):"+str(row[5])+"BTC\n"
tweet = ""
else:
tweet_prev = tweet

rank=rank+1
# 残ったTweetをリストに追加
tweet_list.append(tweet_prev)
では、今回のコードに続きます。

続きを読む
posted by くまなべ at 08:00 | Comment(0) | TrackBack(0) | Python

2017年10月09日

レンタルサーバー(XREA)でcron設定をしてみた

下記のエントリーでVALUのデータを取得してMySQLのDBに格納するPythonのスクリプトを作成しました。
下記のエントリーで、とりあえずMySQLに触ってみましたが、実用的なことを実施し...
次に定期的にVALUのデータを取得するためにCronの設定を実施しました。

cron設定方法

1.実行用のスクリプト(001_valuCron.sh)を下記の様に作成
cd /virtual/kumanabe/public_html/cgi/ValuCheckFlaskS/
./valuCron.py
2.パーミッションを755に設定(最初は705設定となっていて動作しなかった)
chmod 755 /virtual/kumanabe/public_html/ -R
 
3.コントロールパネルのcronジョブを選択
20171005_cron_0.png

4.cronジョブの新規作成からスクリプト名や実行時間の設定を実施(今回は夜中の1時に設定)

20171005_cron_1.png

一応、これで設定は完了です。

ちなみにSSHでLOGINしたあとにcronetabで状況の確認も可能ですね
> crontab -l
0 1 * * * /bin/sh /virtual/kumanabe/001_valuCron.sh

posted by くまなべ at 20:00 | Comment(0) | TrackBack(0) | Python

2017年10月06日

ツイートの「公式RT直後のツイート」と「コメント付RT」の抜き出し(Python+Tweepy+Flask)のVerUP

下記エントリーなどで触れていたツイートの「公式RT直後のツイート」と「コメント付RT」表示Webアプリですが、アプリ用のアカウントを新たに作成してTwitter認証を不要にしつつ、UIを少し変更しました。
「ツイートの「公式RT直後のツイート」と「コメント付RT」の抜き出し」ですが、前...
ツイートの「公式RT直後のツイート」と「コメント付RT」の抜き出し用のPytho...
20171005_introduction.png
続きを読む
posted by くまなべ at 06:00 | Comment(0) | TrackBack(0) | Python

2017年10月04日

VALUのデータをスクレイピングしてMySQLのDBに格納してみた

下記のエントリーで、とりあえずMySQLに触ってみましたが、実用的なことを実施してみよう!ということで、VALUのデータをDBに格納してみました。
SQLをpythonで触ってみようということでMySQLをレンタルサーバーのxr...

スクレイピング⇒DB格納の流れ

下記のエントリーのVALUデータのスクレイピングをベースとして修正を行っています。下記のエントリーでは詳細なコードについて明記していないのですが、あとで今回の「スクレイピング⇒DB格納」のコードに触れたいと思います。
最近、何かと話題のVALUですが、カテゴリーごとに情報を見てみたいと思いpyth...
まず、大まかな「スクレイピング⇒DB格納」の流れは下記になります。

1.VALUの各カテゴリーごとのリンクを取得
2.各カテゴリーごとのページから各IDのリンクを取得
3.各IDごとの情報を取得
4.DBに情報を格納

続いてメインコードになります。

続きを読む
posted by くまなべ at 20:00 | Comment(0) | TrackBack(0) | Python

2017年10月01日

レンタルサーバー(XREA)上でMySQLを触ってみた(Python+mysqlclient)

SQLをpythonで触ってみようということでMySQLをレンタルサーバーのxrea.com上で触ってみました。まずは「Pythonによるスクレイピング&機械学習 開発テクニック」のp136のテストコードが動作することを目標としました。

データベースの作成

まず初めにデータベースを作成します。とはいってもXREAのサポートページに記載されていることをそのまま実行して作成するだけです。

テストコードの実行(python3.5)

元々xreaにインストールされているpython環境の場合、mysqlclientのモジュールはインストール済みです。そのため、そのままで動作します。

テストコードの実行(anaconda)

下記のエントリーでも説明していますが、xrea上にanacondaで環境を構築しています。anaconda3-4.4.0にはmysqlclinetが含まれていません。そのため別途インストールする必要があります。
【解決編】と銘打ってもXreaPlusの有料プランにしただけなのですが、一応+α...
1.pip-8.1.2をインストールする

anaconda3-4.4.0のpipは「/etc」にアクセスします。そのためroot権限がないと使えません。しかしレンタルサーバーの場合、root権限を持つことは不可能なので、「/etc」にアクセスしないようにpipのバージョンを古くします。(pyenvでanaconda3-4.4.0を選択している状態で)
> wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
> tar zvxf pip-8.1.2.tar.gz
> cd pip-8.1.2
> python setup.py install
2.mysqlclientをインストールする

後は、mysqlclientをローカルにインストールするだけです
> python -m pip install mysqlclient --user


posted by くまなべ at 20:00 | Comment(0) | TrackBack(0) | Python

2017年09月30日

ノンプログラマーがPythonを初めて数か月の軌跡

ノンプログラマーがPythonを数か月触ってきました。ということで現時点でのまとめのようなエントリーです。下記で紹介する順番で実施していけば飽きずに初心者がPythonを段階的に触っていけるのではないかと思います。

前提条件

自分の技術レベルとしては下記となります。
・エンジニアだけれどプログラマーではない
・perlはログ解析のために触ったことがある
・CGIを触るのは初めて

まずは文法から


文法は「退屈なことはPythonにやらせよう」「実践力を身につける Pythonの教科書」の前半部分の文法の箇所を読んだり問題を解いて勉強しました。また、後からですが「PyQ」も1ヶ月間だけ受講しました。書籍だけだと文法は飽きてくるので「PyQ」をもっと先に実施しておけば良かったと思いました。

Webから注文履歴の取得


文法だけだと飽きてくるのでネットで注文した履歴の取得を次に実施しました。まずはじめは「Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド」のコードの拡張から始めました。requestsとかbeautifulsoupあたりを触りました。
以前に書いたのですが、家計管理上、毎月の自分が使った分は分類でまとめたEXCEL...
続いてSeleniumを用いてヨドバシの注文履歴を取得するコードを作成しました。自動でブラウザが動く様子を見るのは楽しかったです。
Amazon注文履歴取得の時にも書きましたが、家計管理上、毎月の自分が使った分は...

EXCELファイル操作

退屈なことはPythonにやらせよう」の12章を参考にしてSBI証券の保有資産データのEXCELグラフ作成を実施しました。EXCELだと実際の業務でも使うことがあるので、うまく使いこなせると良いなーと思いながら触っていました。
Python関連を連続して書いているけれど、投資に関連する内容も!ということでS...

PDFファイル操作

退屈なことはPythonにやらせよう」の13章を参考にしてPDFのTEXT解析を実施しました。今度本を自炊するときにはこのスクリプトを本活用したいと思っています。
結構前に本があふれて困っているという話をしましたが、売却するのではなく手元にデー...

簡単なCGIの作成

このページでも使用しているブログカード作成するために初めてCGIにチャレンジしました。CGI周りは「実践力を身につける Pythonの教科書」を参考にしています。車輪の再発明な感じかもしれませんが、実際にCGIを作って使うというプロセスを踏めたので楽しかったです。
WordPressやはてな等でよく見る「ブログカード」があります。多分↓な感じな...

Flaskを用いてWebアプリの作成

Flask+Tweepyでリツイート情報の取得

簡単なCGIが作れるようになったので、FlaskでWebアプリを作成することにしました。Flaskの前にDjangoに挑戦したのですが、初めて触るフレームワークにDjangoは無謀でした……。最終的にレンタルサーバのXREA上にデプロイしています。
「ツイートの「公式RT直後のツイート」と「コメント付RT」の抜き出し」ですが、前...

Flask+matplotlibで取得情報のグラフ化

続いて、日経平均やValuのデータを取得してきてmatplotlibでグラフ作成して描写することに挑戦しました。このあたりは一度Flaskを触ると同じような感じでWebアプリを作成することが出来るようになりました。
特定の株の証券コードを入力すると基準日からの騰落率を日経平均とともに折れ線グラフ...
最近、何かと話題のVALUですが、カテゴリーごとに情報を見てみたいと思いpyth...

環境構築について

レンタルサーバー上でのPython環境構築は羽陽曲折あったのですが、最終的にanacondaをベースとした環境に落ち着きました。(XREA Plusの有料プランを使っています)
【解決編】と銘打ってもXreaPlusの有料プランにしただけなのですが、一応+α...

参考図書と今後

エントリーでの途中でも触れていますが、主に下記の書籍を参考にしてPython学習を進めてきました。今後はSQLとかscikit-learnあたりに触れてみたいと思います。

実践力を身につける Pythonの教科書

  • 単行本(ソフトカバー)
  • – 2016/10/26
  • クジラ飛行机 (著)





posted by くまなべ at 20:00 | Comment(0) | TrackBack(0) | Python

2017年09月26日

【解決編】pyenv(anaconda)によるレンタルサーバー(XREA)上のPython環境構築

【解決編】と銘打ってもレンタルサーバーをXREA Plus(有料プラン)にしただけなのですが、一応+αで対応したので、だめだった対策と合わせて残しておきます。

最終的な方法

1.XREA PLUSに申し込んで容量を拡張する

2.pyenvを使ってanaconda3-4.4.0をインストールする
2-1.pyenvをgitからインストールする
> git clone https://github.com/yyuu/pyenv.git ~/.pyenv
2-2.下記を記載したbashrcを作成してbash上にてsourceする
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export TMPDIR="$HOME/tmp"
export PYTHON_PATH=./
eval "$(pyenv init -)"
2-3.anaconda(色々なモジュールを含んだ環境パッケージ)をインストールする
> pyenv install anaconda3-4.4.0
3.SystemのpythonでTweepyをローカルにインストールして3.6用にシンボリックリンクを張る
> python3.5 -m pip install tweepy --user
> pwd
/virtual/kumanabe/.local/lib
> ln -s python3.5 python3.6

NGだった方法

試行錯誤中に試してみてNGだった方法です。

[XREA Plus]
anacondaインストール後にanacondaのpythonでTweepyをインストール
⇒pipのversionが最新のため/etcへのアクセスが発生してRoot権限が必要となりNG

[XREA Plus/Free]
minicondaインストール後に必要なmoduleをインストール
⇒後からインストールすると結局容量が膨れ上がるので手間だけかかるのでNG

まっさらなpythonから必要なmoduleをインストール
⇒revisionの依存関係のためか、うまく動作してくれずNG

[さくらインターネット]
スタンダードプランでanacondaをインストール
⇒FreeBSDのためanacondaでのインストールはNG

というわけで

最終的にXREAにお金を払うことになりそうです。約2500円/年なので、1年pythonの勉強用に払ってみたいと思います。Freeで使用しているときに、たまに前触れもなく数日間SSHでloginできなくなるのが不安ですが……。あと、ファイル数制限がFreeでもPlusでも120000なのでanacondaをインストールしただけでギリギリ状態です。おそらく毎日警告メールが届くことになりそうです。

20170926_xrea_file.png
posted by くまなべ at 21:00 | Comment(0) | TrackBack(0) | Python