Articles in the Python category

  1. Plotly Dashを使って家の環境をダッシュボードで見れるようにしてみた: homeenvdashプロジェクトの紹介

    この記事は データ可視化 Advent Calendar 2020の参加記事です。

    前回は@kabu10さんの1年間人生の軌跡を記録してみた話でした。記録した後の可視化って楽しいのわかります。Googleデータポータルも便利ですよね。

    homeenvdashプロジェクトの紹介

    この記事はhomeenvdashというプロジェクトを紹介します。名前の通り家の環境をダッシュボードで見れるように作ったダッシュボードアプリです。

    主にPlotlyのDashを使っています。ソースコードはGitHubに公開済みですが今のところはとりあえず動くものです。

    動作させるためには2つのシステムが必要でセンサーノードとダッシュボードをそれぞれ用意します。

    この記事ではダッシュボード側の概要を紹介します。センサーノードの部分をざっくりいうと、Raspberry Piと温度/湿度/気圧を計測できるBME280をつないでGoogleスプレッドシートに記録しています。センサーノード側は次の記事で紹介します。

    そもそもなんでやろうとしたのか

    部屋の環境をスマートホーム的にしたくてそういう分野にちょっとした憧れとか夢を感じてます。元々データの可視化インフラが好きなのもあります。センシング機器も好きといえば好きで最近だとCOVI19の件もあってCO2センサーも使ってみたいです。

    もう1つは、実家の祖母が今年で98歳となりまして、元気ではありますが目が離せないのもあり見守り用途にも考えています。高齢者にとっては温度湿度はなかなか感じづらいもので、介助者側はいつでも部屋の状況を見れた方がいいためです。

    システム全体図

    こんな感じの組み合わせです。

    特徴を上げると

    • センサーノードを作りセンサーをつないで記録する。温度湿度気圧センサーのBME280をラズベリーパイに接続しています。
    • ダッシュボード本体はdashがベース
    • DBは(用意が面倒だったので …
  2. IoTでPythonがどのぐらい扱えるか調べてみる

    去年のPyConJP 2017でIoT周りとpythonは親和性高いし使えるプロジェクトも多いらしいことを聞いていたので、どんなものがあるか調べてみました。

    プレゼンテーション:Pythonの本気!RaspberryPiやEdisonを使ったIoTシステムの構築 | PyCon JP 2017 in TOKYO

    あと組み込み系のmrubyの話題もあったので、Pythonではどうなってるのか気になったのもあります。

    Python処理系

  3. macOSとHomebrewで作るpyenv+pipenvを使った複数pythonバージョンの仮想実行環境

    表題通りですが、割と悩んでしまったのでとりあえずメモです。

    なおまだしっくり来てるわけではないので、他にいい方法があれば教えてほしいです。

    homebrew-versionsがdeprecatedしてた

    すっかり忘れていたのですが、Homebrewにあるリポジトリ内の複数のバージョンを管理できる、homebrew-versionsがいつの間にか廃止(deprecated)されていました。1年前に終わってたようです。全く気がついてなかった。。

    Homebrew/homebrew-versions: Homebrew/versions (deprecated)

    💀 Homebrew/versions (deprecated)

    だそうです。骸骨。。

    表題のPythonですが、今まで3.4, 3.5, ...といったマイナーバージョンの管理はhomebrew-versionsを使っていたのですが、tapしたリポジトリは意味をなさなくなり、最近ではbrew upgradeするとhomebrew/coreのFomulaで定義されている最新版が入ってしまいます。

    このブログの記事を公開してる現在では3.7がリリースされたので有無言わずに3.7がインストールされます。

    homebrew-core/python.rb at master · Homebrew/homebrew-core

    (ちなみに2.7はpython@2でインストールできます。こちらも現在は2.7.15が入ります …

  4. pycgettbというpythonパッケージを作りました

    年末前に今年ちょっとした目標だったちょっとしたツールをPyPIに登録しました。PyPIデビューっていい響きですw

    pycgettb 0.1.2 : Python Package Index

    hrsano645/pycgettb

    このパッケージ、と言いますか同梱のコマンド(pysgettbcli)のほうが主役です。このコマンドの機能を一言で言うと帳票チックなExcelファイルからデータを吸い出してテキストデータにしてくれます。

    吸い出す元のExcelファイルと同じ形で抜き出したい場所に対して特別なフォーマットの文字列を埋め込み、その文字列と同じ名前を変数名としてjinja2テンプレートを作る事で、テキストファイルにしてくれます。

    言葉で説明するのがまだ腑に落ちないのもあって、具体的な使い方については英語のREADMEか日本語で書いたREADMEを見ていただければと思います。 ただ英語のREDAMEは翻訳サービスベースなのでちゃんとしたものになってないでとりあえず日本語のREADMEを見ていただければと。英語苦手なままです。。

    pycgettb/README.ja.rst at master · hrsano645/pycgettb

    なぜ作ったか?

    このパッケージには元となるその場しのぎレベルのスクリプトがありますが、本業でよく使うシチュエーションがあったので作りました。

    本業(家業)は自動車プレス金型設計事務所にいますが、プレス金型では圧力に関する計算を良くします。そのときに手計算は面倒なのもあってExcelで計算をして結果が見れるようにしています。

    その計算結果を今までは主に2次元の図面上に「手入力」してもらっていたのですが、流石に見るに堪えない思いもありどうにかしたいと考えていました。

    Excelで入力したセルのデータを吸い出してどうにかしようとした時の選択肢は、Excel VBAで計算した結果を別のファイルに出力したり、何かしらの方法で渡す手段を用意するのが普通ですかね? ファイル出力は実装したこともありますが、言わずもがな言語仕様も扱いづらい事もあって面倒です。

    他にはPythonなどの別の環境からExcelのファイルを読み込んでパーサー処理をするがあります …

  5. Python3.6のfリテラル文字列(f-string)が便利なのと怖い面について

    久々にpythonネタで、今年の2月に気がついてほったらかしにしてた話。

    fリテラル/フォーマット済み文字列リテラル/f-stringとは

    PEP-484で定義, 承認されてpython3.6に入った新しいリテラル表記です。簡単な例はこちら

    >>> name = "f-string"
    >>> f"{test} death!"
    'f-string death!’
    

    中身はstr.formatをそのまま使えるっぽいですが、変数名を直接かいて呼び出せるのが新しいです。

    使い方は公式ドキュメントを見たほうが早いです。

    2. 字句解析 — Python 3.6.3 ドキュメント

    辞書はどうする?

    良く辞書を展開する時があるのでfリテラルでも使えるのか試してみました。 公式ドキュメントを見たところ、ダブルクオーテーションの中でシングルクォーテーションを使えば展開できます。

    >>> td1 = {"name":"suzuki", "age":"32"}
    
    >>> f"{td1['name']}. age:{td1['age']}"
    'suzuki. age:32’
    

    が、いちいちクオーテーションを二種類使うとかっこ悪いですね。。。辞書の場合はstr.formatを使ったほうが楽かも。引数の展開が使えるので …

  6. Python Boot Camp for ishiilabを開催しました

    8/5の午後に、お手伝いしている大学の研究室内でここ数年行っているPython布教活動として、新参加ゼミ生向けのPython Boot Campを開催してみました。

    昨年までは、自分で用意したテキストを使って各自でテキストをこなすスタイルでやっていました。その時までの資料はこちら。

    GitHub - hrsano645/ishiilab_python_tutorial: 東海大学石井研究室の研究室内Pythonチュートリアルの資料です

    今年は、一般社団法人PyCon JPが各地で開催されている Python Boot Camp のテキストを利用させていただきました。CC-BY 4.0なので条件を守れるなら自由に利用できるようです。

    初心者向けPythonチュートリアルを日本各地で開催 — PyCon JP

    Python Boot Camp Text — Python Boot Camp Text 2016.04.28 ドキュメント

    自分が一応のレベルで用意したスライドはこちらです。補足説明ぐらい?しか書いておりません。

    参加された方は9人とほぼすべてのゼミ生が参加でした。昼過ぎから5時間ほどで休憩は自由。基本的にテキストをみんなでこなして、質問や困ったときはその都度受け付ける方法を取りました。

    結構みなさん進捗が良くて、一部はスクレイピングのテキストまでこなされていたようですがファイルの操作あたりで時間切れな方が多数でした。アドバイスする側としては、どの部分で躓いたかやトラブルがあったかが興味深く勉強になりました。思い出しながら様子を箇条書きで残しておきます …

  7. virtualenv(1.11.6) + windows 7で複数のPythonバージョン(64bit, 32bit含む)を使おうとすると失敗する件

    仕事で久々にWindowsのPythonを使おうと、pipのアップグレードやら入れてあるモジュールをアップグレードしてまして、

    virtualenvも1.11.6となってましたが、それを利用してpython2.7.8とpython3.4.2の仮想環境をつくろうとしたらエラーが出て戸惑った話です。

    要約

    • Virtualenv 1.11.6にて、64bitOSに32bitのPythonを複数バージョンごとに入れて、virtualenvをインストールしたバージョン以外のpython環境を指定して仮想環境をつくろうとするとエラーが起こる
    • virtualenv側でPythonのインストールされているリストを調べに行くコードに不具合がある
    • 修正はされているが、develop branchにあるので、githubのdevelop branchのモノをインストールすると動く
      • コード側のバージョンは1.12devとなってるので、1.12がリリースされたら改善しているはずです。
      • インストール方法は公式のドキュメントを見ればわかります。

    本題

    PS C:\Users\hiroshi> virtualenv --python="C:\python34\python.exe" testpy2
    Traceback (most recent call last):
      File "C:\Python27\lib\runpy …
  8. pythonで設定ファイルを使うときに何を使えばいいのか。をメモっただけの記事

    雑談

    お久しぶりです。9月から諸事情で活動全般が停滞してまして、ブログもさっぱり放置していました。

    Twitterなどなどは精力的に更新していましたが、ブログを書くとなるとちょっと体力いるなあと感じてしまってます。

    ブログのネタはたくさんありまして、Evernoteにはたくさんのドラフトな記事がありますので、少しずつですがアップしていこうと思います。

    本題

    ちょっと前にPythonで設定ファイルを扱いたいときに、どういった形式をどういったモジュールで扱えるのかを箇条書きしたりしたメモです。

    Python界隈では様々なモジュールがありますので、これのまとめが一概に言えるものではないのですが、あまりまとまった記事がなかったような気がするので上げてみようと思います。

    (Python公式でまとめられていた、ConfigParserShootoutの劣化版な感じでもあります。jsonとかyamlはないしまあいいかなと)
    https://wiki.python.org/moin/ConfigParserShootout

    なんで調べたの?

    GUIの設定ファイルを書くとき、ファイルをコンバートするような処理の時に、プロファイル定義を複数用意したかった時に悩んだので。

    何が問題になるか

    • 書きやすいか
    • 複数の値を持てるか
    • 複雑な構造(入れ子構造や行列とか)は作りやすいか
      • プロファイル的なものを管理するときに、1ファイルオンリーでやる場合は必要
      • 複数ファイル(conf.d的なディレクトリ)を使うならその限りではないと思う

    設定ファイルにはどんなものがあるか?

    ini

    • Winでよく見たりするけどLinuxのconfファイル系でも結構見る
    • セクションでカテゴリーにして、オプション名とバリューで設定を定義
      • 基本的に、[セクション] -> オプション = バリュー
    • よく使われるけど …
  9. PyConJP 2014で見たかったセッション

    書き忘れたので新しい記事に分けた(汗)

    備忘録なので箇条書きです。

    Pelicanのライブ映像は実は見たのですが、Wordpressから自前でこういうものを作るつもりでしたが、Pelicanいいですね。事務所のサイトもこれでリニューアルしたいな。

  10. Python3.4のLoggingモジュールでログメッセージの文字列フォーマットをstr.formatメソッドの書式指定文字列を使う方法

    タイトル長くてすみません。タイトル通りで使い方をただメモしたかっただけです。

    # これはダメ
    >>> logging.basicConfig(format="[str.format ver] :{} / {}".format(levelname, message))
    
    NameError Traceback (most recent call last)
    <ipython-input-15-6b4e7d3e1ac2> in <module>()
    ----> 1 loghandle=logging.basicConfig(format="str.format log :{} / {}".format(levelname, message))
    NameError: name 'levelname' is not defined
    # まあそうだよね・・・
    
    # これで出来ました
    >>> logging.basicConfig(format="[str.format ver …

About Me

実家の自動車プレス金型設計業(sano-design.info)に所属。
pythonと小さいガジェット好き
最近は諸事情で家事業が多め

スポンサードリンク