よちよちpython

独習 python/Qpython/Pydroid3/termux

ブログを書く為にPydroid3をインストールした

AndroidスマホPythonの総合開発環境アプリ Pydroid3 をインストールしました。

Pydroid3のリンクを貼っておきます。

https://play.google.com/store/apps/details?id=ru.iiec.pydroid3

今回は、OpenPyXLの続きを書くのに飽きてきたので話し逸らしの投稿。


このブログを始めて3ヶ月ほど経ちます。
最初の頃は、はてなブログの編集画面にはてな記法で直接文章を書き、コードはコピペしてから引用符を付けて整形したりしていましたが、どうにも面倒臭い。 保存とプレビューがオンラインでしか出来ないなどの不都合もある。

ということで、次第にPCではJupyterNotebook、スマホではQpythonのQPyNotebookで書くようになりました。

これだとオフラインで書けるし、PythonコードとMarkdown記法の文章をセル単位で分けながらも一つのファイルの中に混在でき、更にコードをその場で実行して確かめられるので、非常に便利です。

そうして書いて出来るipynbファイルを一旦Markdownファイルに変換後、はてなブログの編集画面にコピペすれば手間がいくらか省けるようになりました。

しかしこれの問題は、PCのJupyterNotebookはDownload asのボタンから一発でMarkdownファイルに変換できるのですが、QPyNotebookはそれが出来ない。

仕方がないので、ターミナルアプリのtermuxから

$ jupyter nbconvert 何々.ipynb --to markdown

とコマンドを打って変換していますが、これも面倒。
シェルスクリプトを書いて自動化するなどの手もあるとは思いますが、そのスキルがない。ヤル気がないのかw


また、QPyNotebookは編集中にカーソルが正しく動かないとかスペースが上手く入力できないなどの不具合がたまに起きることがあり、どうも使いにくい。


そんなこんなでPydroid3をインストールした次第です。

参考にしたのはこちら

AndroidでJupyterを動かしてみた - そんなこと猫でもできる


利点としては

  • Pydroid3のインストール方法はGoogleプレイストアからダウンロードするだけで簡単。
  • 無料で利用できる。
  • モジュールのインストールがボタン一つで可能。
  • numpyやpandas、scikit-learnなど人気モジュールをインストールするだけで即座にサクサク動かせる。
  • ターミナルがついている。
  • PCと同じJupyterNotebookが動く。

などなど。

ちょっと使ってみましたが、JupyterNotebookが動くのが素晴らしい。scikit-learnが難なく動いて素晴らしい。
QpythonはQpythonでAndroidアプリを簡単に作成できるような利点がありますけど、pydroid3はそれよりは若干プログラミングに慣れた人向けかな。
アプリ自体がカッチリまとまったプロジェクトとして作られてあるように感じます。

そしてもう一つの問題、オフラインでのプレビュー。

今まで別のMarkdownプレビューアプリを使って見ていたのですが、次の物を新たにインストールしました。

https://play.google.com/store/apps/details?id=com.ekartoyev.enotes


もののついでに、Pydroid3のNotebookでscikit-learnが動くかテストします。
コードを実行後、markdownファイルに変換してEpsilonNotesでプレビューした画面を貼る。
Pydroid3のJupyterNotebook画面

f:id:chayarokurokuro:20190831224002j:plain


以下、コード

Pydroid3のJupyterNotebookでscikit-learnの実行をテスト。
import pandas as pd
from sklearn import svm,metrics
# XOR 演算結果
xor_input = [
        [0,0,0],
        [0,1,1],
        [1,0,1],
        [1,1,0]
]
xor_df = pd.DataFrame(xor_input)
xor_data = xor_df.iloc[:,0:2] # data
xor_label = xor_df.iloc[:,2:] #label
print(xor_df)
print("=======")
print(xor_data)
print("=======")
print(xor_label)
# 学習と予測
       0  1  2
    0  0  0  0
    1  0  1  1
    2  1  0  1
    3  1  1  0
    =======
       0  1
    0  0  0
    1  0  1
    2  1  0
    3  1  1
    =======
       2
    0  0
    1  1
    2  1
    3  0
clf = svm.SVC()
clf.fit(xor_data,xor_label)

pre = clf.predict(xor_data)

print(pre)
[0 1 1 0]
/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/site-packages/sklearn/utils/validation.py:761: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
      y = column_or_1d(y, warn=True)
    /data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/site-packages/sklearn/svm/base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.
      "avoid this warning.", FutureWarning)


ipynbをmarkdown変換後、EpsilonNotesでのプレビュー画像。

f:id:chayarokurokuro:20190831221328j:plain

f:id:chayarokurokuro:20190831221450j:plain



いま作業しながら気づいたが、pydroid3のJupyterNotebookでDownload as markdownをすると、セルとしてキレイにmarkdownに変換されていない所があるな…


ゆくゆくは、記事をはてなブログへ自動でアップロードできるようにしたい。
はてなAPI仕様がTwitter APIなどと比べて複雑で、未だ調べている段階。
はてなブログの下書き保存が画像にも対応し、プレビュー出来てオフライン編集も可能という、Googleドライブ風になれば一番楽なんですけどw

以上、pydroid3の個人的インストール記録まで。

追記
スマホでのJupyterNotebookですが外付けのキーボードがないと文字が入力できない場合がある(画面がソフトウェアキーボードに隠れて見えないなど)。

QPyNotebookはそこは回避した設計になっててスマホ単体だけで入力可能。

追記2
Pydroid3を起動すると出るエディタは日本語が入力できない!
キーボードを変更しても出来ません。対応していないんだとか。
コピペすれば実行できるのでインタープリタは問題ない。
JupyterNotebookは日本語入力できる。