Python BeautifulSoup lxml でSTRAVA のtcxデータをグラフに表示する

STRAVA のtcxデータをグラフにします。
BeautifulSoupとlxmlでデータを取り込みます。ようするにlxmlファイルのスクレイピングです。
あとは、pandasとnumpy計算します。
斜度の計算も行いましたが、距離の微分で高度の微分を割っていますが、それで合っているかは不明です。緯度、経度からの計算方法もあったのですが、少し面倒なので今回は書きません。見つけたのは、他の言語だったので気が向いたらpythonでできるかやるかもしれませんが、予定は未定。

コードです。

written by gatamix

–スポンサーリンク–
Devotion!! Classic!!
Big Shots / Charizma & Peanut Butter Wolf

itunes

amazon

ラズパイ(43) 再インストール3回目とpyenvのインストール

再インストール3回目です。

早速記録をまず最新版のRaspbianのimgファイルをダウンロードします。
ダウンロード時間は結構かかる。

というようにバージョンがアップしてました。

sshから設定をしました。

書いたとおり、touch コマンドでsshという名前のファイルを作れば、sshできます。
詳しくはリンク先。
$sudo raspi-config
でローカルの設定などをしました。

これはgitを使ってみたかっただけです。

アップグレードしますが、時間が長かったです。
コマンドは
$sudo apt-get update
$sudo apt-get upgrade

pyenvをインストール(詳細はリンク先)


numpy とmatplotlib をインストール。今回はpipですんなりできた。

sudo pythonとすると、バージョンが違う。ユーザーの環境変数の設定が違うためらしい。

matplotlib でアニメーション

matplotlib でアニメーションのグラフを作ってみました。
sinとcosをFuncAnimationのほうで書いてみました。
imagemagickのインストールしていない場合は、インストールしないとエラーがでます。

参考

KURO
シアンのSin波から見るとオレンジのCos波が進んでいることがわかるよ

written by gatamix

Python3.6 にOpenCV3をインストール

環境は以下です。
MacBook Air MAC OSX Sierra 10.12.6
Python 3.6.1 :: Anaconda 4.4.0 (x86_64)
OpenCV3.3
 OpenCVとは

  インストールの参考にしたサイト

Anacondaでpythonはインストール。homebrewもインストールしてある条件です。

  opencv3のインストール

$brew tap homebrew/science
$brew install opencv3 –with-contrib –with-python3 –without-python

cv2.soファイルをインストールしたら
/usr/local/Cellar/opencv/3.3.0_3/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so
にあったのanacondaのsite-packagesにシンボリックリンクの作成を作成する。
バージョンなどが違う可能性がありますが、$open /usr/local/Cellar/opencv でfinderを開き、次々フォルダーを開いていくと見つかると思います。homebrewでインストールしたものは/usr/local/Cellar/配下に入る。(リンク先参照)
シンボリックリンクじゃなくて、PYTHONPATHに追加してもたぶん大丈夫だと思う。(未実行未確認)

  シンボリックリンクの作成

(hogeはユーザー名)
$ln -s /usr/local/Cellar/opencv/3.3.0_3/lib/python3.6/site-packages/cv2.cpython-36m-darwin.so /Users/hoge/anaconda3/lib/python3.6/site-packages

  実行

$python

>>import cv2
RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
Traceback (most recent call last):
  File "", line 1, in 
ImportError: numpy.core.multiarray failed to import

numpyのverが古いとのエラー

  アップデート

$pip install numpy -U
$python

>>import cv2

今の所は問題なし。

自分用のメモとしてpipでのインストールの関連記事を見つけたので貼っておきます。(未確認)

written by gatamix

Python Matplotlibでグラフの範囲を自動的に設定 & scipy でピークの検出

Gatamixです。
Matplotlib でグラフを範囲を自動で設定するようにプログラムしてみました。
通常でも自動で範囲が設定されますが、プログラムで設定してみました。
具体的には、以下のようなことをしています。
①最小と最大の値を算出する。
②最大と最小の差をとる。(温度の場合は下限値の設定は0℃で固定とするため、最大値とした。)
③差の20%をマージンとして設定する。
④範囲を設定する。(範囲の最大値と最小値にマージン分の余裕をとる。)
また、おまけで以下のこともしています。
scipyを使ってピークの算出を行って、ラベルをプロット。
y1、y2軸の小数の有効桁の指定。

KURO
scipyのメソッドの signal.argrelmax()で上側のピーク,signal.argrelmin()で下側のピークを検出できるよ

written by gatamix

ラズパイ(36) センサーで測定した値をメールで送る

Gatamixです。
センサーを使っての一つの目標だったデータの送信を行ってみました。
使ったセンサーはいつものLPS25Hです。
処理の流れは以下です。
①データの取得(温度、気圧)
②CSVに記録
③プログラムで自動でグラフ作成
④メールでCSVファイルとPNGファイルを送信する
記録:添付ファイルのヘッダーを追加するところでスペルミスをしました。
メールの添付ファイルがファイル名が表示されないという結果があらわれて、
ミスをしてもメールは送信されたので原因が究明に時間がかかりました。
*MIMEについてMultipurpose Internet Mail Extensionsの略である。
電子書式で色々なフォーマットを取り扱うための規格。
ここが間違えると上手く表示されない。


以下コード(長いですが参考までに記載します。)

written by gatamix

ラズパイ(32) センサーで測定したデータをグラフに自動描画する

Gatamixです。
Raspberry piの調子がイマイチですが、LPS25Hを使って以下のことをやってみました。
①データの取得(温度、気圧)
②CSVに記録
③プログラムで自動でグラフ作成
スケールを自動にするとオフセットでグラフが表示されるのでオフセットをなしに設定しました。
以下プログラム。
Raspberry pi でascii コードのエラーで℃が表示できなかったのを解決しました。
(python 2.7だからか?Mac python 3.6では表示できた。)
温度の単位をTex 形式で表示できるので、
変更。deg. → $^\circ$C

written by gatamix

ラズパイ(29)NumpyとMatplotlibをインストールする

Gatamix です。
今回は、Raspberry Piに Matplotlibをインストールを行ってみます。
下記リンクを参考にしたのですが、Matplotlibをインストールしようとしたら、
エラーとなりました。とりあえず下記に従ってNumpyを入れました。

$sudo pip install –upgrade pip
$sudo pip install numpy psutil python-dateutil pytz tornado pyparsing six

Matplotlibは、apt-getからもインストールできるので、こちらからインストールします。(パッケージ管理的にあまりよくないけどしかたない。)
$sudo apt-get install python-matplotlib
CUIなので、画像に出力しようとしたら、エラーがでました。
backendの設定が原因のようなので、変更します。

/etc/matplotlibrc をバックアップしたあと、TkAgg を Aggに変更します。

#backend      : TkAgg
backend      : Agg

Ipythonで確認

In [1]: import numpy as np
In [2]: import matplotlib.pyplot as plt
In [3]: x = np.arange(-3, 3, 0.1)
In [4]: y = np.sin(x)
In [5]: plt.plot(x, y)
Out[5]: [<matplotlib.lines.Line2D at 0x7410b050>]
In [6]: plt.savefig("graph.png",bboxes_inches="tight")

追記 2018/8/21
再インストールしてraspberry pi (Stretch 2018-06-27)に変更した。python3.6.1をpyenvでインストールしました。だめもとでpipでnumpy,matplotlibをインストールしたらすんなり入った。pythonやpipのバージョンの違い?で前回は入らなかったのだろうか?
written by gatamix

Python Matplotlibでグラフを画像に出力する

Gatamixです。
前回のグラフを体裁を整えて、画像に出力してみます。
今回はy軸を2軸にしてみようと思います。
概略
①マーカー、線の色、ラベルをデータセット時に設定する
②次に軸のラベル、タイトルなどを設定する
③軸の範囲や目盛りやグリットなども設定する
④凡例を設定する
軸が一つの場合は
plt.legend()
でも表記されるのですが、
2軸だと下記のコードのように一工夫が必要なようです。(リンク先を参考にしました。)


⑤グラフの出力をする
pngとsvgに出力してみました。
このほかまだまだ、細かい設定はできるようです。

HAI
保存は png, pdf, ps, eps, svgの画像形式に対応しているみたい。
MIKE
保存の際にdpiを指定すると解像度が変更できます。

written by gatamix

Python csvファイルをグラフ描画用にnumpyで読み込む

Gatamixです。
センサーで取り込んだデータをグラフ描画用にpythonで取り込んでみます。
使用するのは、Numpyのライブラリーです。
(ただ描画するだけですが、Matplotlibも使ってみます。)
Anacondaをインストールしていれば、パッケージはインストールされています。
追記
MacではMatplotlib で描画の際にうまくいかない可能性があります。
私も表示の際にbackend エラーが表示されました。
下記リンクのようにbackendの設定を変更するとうまくいく可能があります。
*変更前に設定ファイルのバックアップは推奨です。


やってること
①Numpyでヘッダーの2行分読み込まないでデータを読み込ませます。
②データの行列を入れ替える。
③一応グラフに出力する。
↓コードです。

jupter notebookで確認した結果も貼り付けておきます。

csvをリンク先に置いたら、ブログのアクセスが微妙になったので、
下に内容を貼り付けます。
20170609_205740_test_lps25h.csv

2017-06-09 20:57:40
time(sec),Pressure(hpa),Temperature(°C)
0,1000.635498046875,26.0125
1,1000.624267578125,26.01875
2,1000.673095703125,26.014583333333334
3,1000.735107421875,26.027083333333334
4,1000.57568359375,26.041666666666668

written by gatamix