ロボットを作る

子供のころ、映画「STARWARS」 を観てワクワクし、ガンプラにドキドキしていた。時間が経つのも忘れてしまう、そんな時間をもう一度、取り戻すために、Raspberry pi を使って、オヤジがロボット作りに挑戦する!

やり始めてみると、なかなか思い通りに行かない。時間の経つのも忘れて悪戦苦闘中。 「こんなちっちゃな Raspberry Pi で、こんなことができるんだ」を日々実感している今日この頃。

メモ

価格.com で、HP Spectre x360 の価格を引っこ抜いてきて、LINE へ通知させる。

前半は、BeautifulSoup を使って、価格を部分をスクレイピング。
スクレイピングで、抜き出したい情報を成形しようとヘタな書き方になっているが、とりあえず価格のみを出せた。
# pull out "price"  from 価格.com
from bs4 import BeautifulSoup
import urllib as req

url="http://kakaku.com/item/J0000024058"

res=req.urlopen(url)
soup=BeautifulSoup(res, "html.parser")

price=soup.select_one(".colorprice")
price=price.encode('utf_8')
price=price.split('<span>')
price=price[1].split('</span>')


後半は、LINE の LINE Notify を使って、価格情報を通知。

LINE Notify
https://notify-bot.line.me/ja/

ログインするには、予めLINEアプリの「設定」で、アカウント>メールアドレス が[登録完了]になっている必要がある。

headersの Bearer の後ろの半角スペースが必要。
通知文は、payloadにまとめてあるが、msg 部分 と スクレイピングしてきた価格部分
# Notification to LINE
import requests

token="XXXXXXXXXXXXXXXXXXXXXXXXX"
url="https://notify-api.line.me/api/notify"
msg="HP Specre x360: "

payload={"message": msg + price[0]}
headers={"Authorization": "Bearer " + token}
line_notify=requests.post(url, headers=headers, params=payload)
取り敢えず、これでやりたかったことはできた。今は簡単にできてしまう。
IFTTTを使ってみて、連携していくことも考えたい。

株価をスクレイピングして、グラフ表示する。 いろいろググって、やっと収まった。

プログラムを2つに分けて

(1)データ取得編
Yahoo financeから「安川電機:6506」の2016/4/1-2017/5/1 の株価をGet


(2)グラフ化編
CSVに落としたデータを成形してグラフ化


(1)データ取得編
stockDataGet.py
最初のSSL 2行は、Yahoo Webでの SSLでつまずいたので入れた。

# -*- coding: utf-8 -*-
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

from bs4 import BeautifulSoup
import urllib2
import time
import numpy as np
import pandas as pd

page_num = 90 #適当に多めのページ数
stock_temp = []

# Code
# 6506.T : yasukawa 

for i in range(page_num):
   url = "https://info.finance.yahoo.co.jp/history/?code=6506.T&sy=2016&sm=4&sd=1&ey=
2017&em=5&ed=1&tm=d&p=" + str(i+1)

   html = urllib2.urlopen(url)
   soup = BeautifulSoup(html,"lxml")

   table = soup.find_all("table",{"class":"boardFin yjSt marB6"})[0]
   stock_extract = [value.get_text() for value in table.find_all("td")]
   stock_temp.extend(stock_extract)

   time.sleep(0.4)

stock_temp = np.array(stock_temp)

stock = stock_temp.reshape(int(len(stock_temp)/7), 7) #取得データは7項目
stock = pd.DataFrame(stock[:,1:8],index=stock[:,0])
#stock = pd.DataFrame(stock[:,1:8],columns=["date","start","high","low","end","volumn
s","adjusted"], index=stock[:,0])

# 取得した株価データのカンマ , を外す作業。ほんとに必要?
for i in range(6):
   stock.ix[:,i] = stock.ix[:,i].astype(str)
   stock.ix[:,i] = stock.ix[:,i].str.replace(",","").astype(float)

# Save to csv file.
stock.to_csv('stock_yasukawa.csv',encoding='UTF-8')



(2)グラフ化編
つぎに、入手した株価データをグラフ化する

stockAnalyse.py 

# -*- coding: utf-8 -*-
 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib.dates import date2num

fig = plt.figure()
ax = plt.subplot()

# indexとして使う日付を、matplotlib.finance.candlestick_ohlc関数で使えるようにtype変換する
# 日本語がなければ、pandas.read_csv の parse_dates で変換できたそうだ。
# Japanese date (string) -> Timestamp date
fmt='%Y年%m月%d日'
my_parser=lambda date: pd.datetime.strptime(date,fmt)
df=pd.read_csv('stock_yasukawa.csv',index_col=0,parse_dates=0,date_parser=my_parser)
df=df.sort_index(ascending=True)

# mpf.candlestick_ohlc use "datetime"
xdate = [x.date() for x in df.index]  # Timestamp -> datetime
ohlc = np.vstack((date2num(xdate),df.values.T)).T
mpf.candlestick_ohlc(ax,ohlc,width=0.7,colorup='g',colordown='r')

ax.grid()
ax.set_xlim(df.index[0].date(),df.index[-1].date())  # range of X-axis
fig.autofmt_xdate()

plt.show()


取り敢えずグラフ化できた。

★お世話になったページ
pandasで様々な日付フォーマットを取り扱う
Pythonでローソク足チャートの表示(matplotlib編)


Raspberry Pi3 で、NHKラジオ英語を定期的に録音して、ノートPC(Windows10)から聞く方法の備忘録。


RaspberryPi3

sambaをインストールして、とりあえず設定を。
printerは使わないので、[global] に printing =  bsd を入れる(?)
共有するフォルダ [/home/pi/REC] は、Windwos で [homes] で見える
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install samba

$ cd /etc/samba
$ sudo cp smb.conf smb.conf_org

$ sudo vi smb.conf

[global]
  printing = bsd

[homes]
  browseable = yes
  path = /home/pi/REC
 read only = no
 create mask = 0664
 directory mask = 0775

$ sudo touch /etc/printcap
最後の touch は、/var/log/samba/log.smbd にエラー吐いたので。


piアカウントで、sambaにアクセスするために。
$ sudo smbpasswd -a pi
New SMB password:  ←RaspPi3の pi アカウントのパスワードを。
Retype new SMB password:
Added user pi.

cronに入れる シェルプログラムは以下からもらってきた。
らじるらじるをrtmpdumpで録音する(8放送局対応)おまけで
https://gist.github.com/riocampos/5656450

crontab 設定。いつも迷う。
項目は、左から「分」「時」「日」「月」「曜日」
$ crontab -e
   :
10 09 * * 1,2,3,4,5 ~/bin/rec_nhk.sh NHK2 5 ~/REC enjoy_english
30 16 * * 7 ~/bin/rec_nhk.sh NHK2 75 ~/REC conversation


ノートPC

エクスプローラ > PC で右クリック > ネットワークドライブの割り当て

 ドライブ():Z:
 フォルダー:\\RASPBERRYPI\homes

 □ 別の資格情報を使用して接続する  ←チェックする

これでノートPC側から Raspberrypi3側に保存してある mp3 ファイルが聞ける。


Ubuntu(Vmplayer 上の GuestOS) に Tensorflowを入れてみる。

$ uname -a
Linux ubuntu 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$


# $ python —version
Python 2.7.6

# virtualenv による環境準備

$ pip install virtualenv  ←  エラーになった
Could not find any downloads that satisfy the requirement vertualenv

$sudo apt-get install python-virtualenv

$ mkdir ~/tensorflow
$ virtualenv -—system-site-packages ~/tensorflow
$ cd ~/tensorflow
$ source bin/activate

# TensorFlowのインストール
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

# お約束の Hello world! を
(tensorflow)$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import tensorflow as tf
>>> hello=tf.constant('Hello, Tensorflow!')
>>> sess=tf.Session()
>>> print sess.run(hello)
Hello, Tensorflow!
>>> a=tf.constant(5)
>>> b=tf.constant(17)
>>> print sess.run(a+b)
22
>>>

ずいぶんと間があいてしまった。

そもそも自分にプログラミング能力が無いことを反省し、基本的なことを勉強しようと思った。

今の時代、ネットで、しかも無料でできる。

Codecademy では、いくつかのプログラム言語を Web画面上でプログラム演習を進めていくことで順序だてて学習できる。

https://www.codecademy.com/

このサイトの Python を勉強している。いまのところ 80%まで進んでいる。

↑このページのトップヘ