Python関連のことを調べてみた2022年03月27日

Python関連のことを調べてみた2022年03月27日
目次

Python使って、LMIを解いて、倒立振り子の状態フィードバック制御器を設計する

# 概要
[『LMIによるシステム制御 ロバスト制御系設計のための体系的アプローチ』](https://www.morikita.co.jp/books/mid/092101) (蛯原義雄, 森北出版)の1章の問題をPython(cvxpy)で実装してみた.

この記事で得られること:

– Pythonを用いて、線形行列不等式(LMI; Linear Matrix Inequality)を解く.
– Pythonを用いて、制御器を設計し、倒立振り子の数値シミュレーションを行う.
– 具体的な例を通して、cvxpyの使い方をまとめる.

## 何で書こうと思ったか
PythonでLMIを解くときには、限られた選択肢しかない.(参考:[PythonのSDP実行時間比較](https://qiita.com/teatea/items/153f35af4b5eba873181))
さらに、困ったことに、cvxpyでLMIを解く日本語の記事がほっっとんどない.
そのため、[cvxpy 公式ドキュメント](https://www.cvxpy.org/index.html)を読んで、試行錯誤…

元記事を表示

「多次元正規分布の式ってどうなってるの?」の疑問に丁寧に答える

# 多次元正規分布の式、複雑すぎ問題
統計学の基本とも言える**正規分布**。

この正規分布は、下図のように**多次元の変数でも定義することができます**(**多次元正規分布**)

多次元正規分布は多くの機械学習アルゴリズム([主成分分析](https://quest-research.co.jp/research/principal-component-analysis)、[ナイーブベイズ分類器](https://qiita.com/aflc/items/13fe52243c35d3b678b0)、[マハラノビスタグチ法](https://www.toshiba-dme.co.jp/dme/coretec/hin/hin_mt.htm)、[混合ガウスモデル](https://datachemeng.com/gaussia

元記事を表示

機械学習で「よく使うけど意味はわからん!」となりがちな共分散を分かりやすく解説

# 共分散とデータ分析
データ分析について勉強していると、**共分散**や**分散共分散行列**という言葉が良く出てきます。
一般的には以下のように**変数同士の相関と関連したイメージ**を持たれている方が多いかと思います

共分散は主成分分析や相関分析、ベイズ推定などの分野で必須とも言える知識ですが、
有名書籍ではさらっと流されている例も多く、

特に以下の**多次元正規分布の分散共分散行列**$\boldsymbol{\Sigma}$をいきなり与えられて、

“`math
N(\boldsymbol{x} \mid \boldsymbol{\mu}, \boldsymbol{\Sigma})=\frac{1}{(2\pi)^\frac{D}{2}}\frac{1}{|\boldsymbol{\Sigma}|^\frac{1

元記事を表示

Pythonがプログラミング初学者に嬉しい理由 – Pythonチュートリアルと「退屈なことはPythonにやらせよう」

https://qiita.com/e99h2121/items/fc94960448cb3341f80b

> 社内にてプログラミング初歩をモブプロで楽しむ会が始まった

… のですが、その中でPythonチュートリアルも分かりやすいなあと思ったのでその感想文+「退屈なことはPythonにやらせよう」という本の紹介です。

## チュートリアル

https://docs.python.org/ja/3/tutorial/

> 1. やる気を高めよう

まずやる気を高めます。

### Pythonの魅力紹介

> コンピュータを使っていろいろな作業をしていると、自動化したい作業が出てくるでしょう。たとえば、たくさんのテキストファイルで検索-置換操作を行いたい、大量の写真ファイルを込み入ったやりかたでファイル名を整理して変更したり、などです。ちょっとした専用のデータベースや、何か専用のGUIアプリケーション、シンプルなゲームを作りたいかもしれません。

> あなたがプロのソフト開発者として、C/C++/Java ライブラリを扱う必要があるけども、通常の編集/コンパイル/テスト/

元記事を表示

楽天証券でレバナスを自分の買い増し基準通りに自動注文する

# 背景
「つみたてNISA枠で月○○円積立」という風に定額・定周期で積立する場合、各種証券会社サイトに元々備わっている積立設定を利用すれば十分でした。一方、「自分の買い増し基準に従って、好きな銘柄を好きな金額・タイミングで購入したい」と思った時、そんなてんこ盛り機能は見当たらず…

# この記事に書いてあること
– 24時間つけっぱなしのWindows PC上で自動注文プログラムを動かす方法
– 株価情報サイト(stooq)から株価を取得し、自分の買い増し基準通りに楽天証券サイトから買い注文を実行するpython(+selenium)プログラムの実装例

# この記事に書いていないこと
– 1日のほとんどの時間眠ったままのPCやスマホの上で自動注文プログラムを動かす方法
– 楽天証券以外の証券会社サイトやpython以外の言語による実装例
– 株式自動売買AIのように、買い増し基準自体を自動で調整するような機構

# おことわり
– この記事で紹介するプログラムはwebスクレイピングと呼ばれる挙動を含みます。実装例では各操作の間に1秒以上の遅延を入れて高負荷対策していますが、実装に

元記事を表示

PythonでNetworkManagerを操作する 【python-networkmanager】

PythonからNetworkManagerを操作し、Linuxのネットワーク設定を行えるようにします。
python-networkmanagerというライブラリを使用します。
このライブラリは特徴は、裏でnmcli等のツールを呼び出してパースしているのではなく、
D-busというものでNetworkManagerと直接やり取りしているところです。
残念ながらドキュメントがしっかりしていないので、自分用の備忘録を兼ねて書いていきます。

なお、こちらではRockyLinux8.5を使用しています。

# 準備

python-networkmanagerをインストールします。

“`bash:インストール
$ pip3 install python-networkmanager
“`

念のためNetworkManagerが動作しているか確認します。
“`:NetworkManager
$ systemctl status NetworkManager
● NetworkManager.service – Network Manager
Loaded: loaded (/

元記事を表示

[Python] 要素のスワップについてのメモ

## はじめに
プログラミングの勉強としてアルゴリズム関連の本を読んでいるのですが、バブルソートか何かの話で2つの要素をスワップする際のコードを見て「そんなことできるんだ」と思ったので、関連知識も含めてのメモです。

### どういうことかというと

“` python:python.py
>>> l=[1, 0]

>>> print(l)
[1, 0]
“`

最も単純化し、こんな配列を考えてみます。この二つの要素をスワップしたいとします。
誠実な方法としては、以下のような書き方が考えられます。

“`python:python.py
>>> l[0] = temp0
>>> l[1] = temp1

>>> l[0] = temp1
>>> l[1] = temp0

>>> print(l)
[0, 1]
“`

エレガントではないですね。
そんなとき、Pythonなら以下のように書けるということです。

“` python:python.py
>>> l[0], l[1] = l[1], l[0]

>>> print(l)
[0, 1]

#もしくは、2変

元記事を表示

【Python】取得したSQLite3のデータを辞書型に整える方法

PythonでSQLite3のデータを取得し、辞書型に整える方法を記載します。
辞書型は{ key : value }の構成にすることで情報の紐付けができるため、
どのような値なのかが分かりやすくなります。
今回はKeyをDBのカラム名、Valueは格納されているデータの値になります。

## 目指すゴール
以下のようなデータを作成します。

“`
[
{ “id” : 1, “fruit” : “apple”, “price” : 100 },
{ “id” : 2, “fruit” : “banana”, “price” : 150 },
{ “id” : 3, “fruit” : “peach”, “price” : 120 }
]
“`
for文で扱いやすいようリスト型の中に辞書型が複数存在するデータを作成します。

## データの準備
データを作成するスクリプトは以下になります。
“`python:insert.py
import sqlite3

db_name = ‘test.db’

conn = sqlite3.connect(db_n

元記事を表示

備忘録 : ABC243に参加したよ

## はじめに
競技プログラミングを初心者なりに頑張っているのですが、「どう解いたかを記録して、将来的に見返せるようにするといいよ」なんてことを小耳に挟んだので、備忘録として書いてみます。

### A – Shampoo

https://atcoder.jp/contests/abc243/tasks/abc243_a

問題文要約:
父(A ml使用)・母(B ml使用)・高橋君(C ml使用)が、V ml残っているシャンプーを順番に減らしていきます。
足りなくなっちゃうのは誰?

#### 考えたこと:
modを使うことも一瞬考えたけど、max(V) = 10^5なので、素直にVから減らしていくループを回し、負になった時点で終了すれば良さそう。

“`python:python.py
V, A, B, C = map(int, input().split())
while True:
if V-A < 0: print("F") break else: V -= A if V-B < 0:

元記事を表示

HerokuにGitHub経由でDjangoアプリをデプロイする。DBにはPostgreを使う。(2022.3.26)

最近、djangoアプリを使える様に練習中です。簡単な事から始めて徐々に自分が実装したい物を作りたいと思っています。

背景

前回、デプロイするアプリにCSSを反映する事が出来ました。データベースにはSQLite3を使いましたが、webアプリとして使いたい時はPostgreを使った方が便利な様です。実際SQLite3では、いろんなデバイスから入力した際、きちんと保存できていない事がありました。

前回の投稿
[デプロイするDjangoアプリ(メモアプリ)にCSSを反映させる(2022.3.19)](https://qiita.com/tan0ry0shiny/items/7dce5df9da62599bcd3d)

目的

今回はPostgreを使ってデプロイしたいです。

方法

今回は既に作っていたアプリのDBをSQLite3からPostgreに変更します。基本的には

[こちら(DjangoにPostgreSQLデータベースを導入する方法)](https://zenn.dev/hathle/articles/django-postg

元記事を表示

VOICEPEAKの音声にほぼドンピシャの字幕ファイルを作成するPythonスクリプト

VOICEPEAKの音声に字幕をつけて動画をつくる際に便利なPythonスクリプトをつくったので記事にします。

このスクリプトを使えばVOICEPEAKで音声ファイルを大量に出力した時でも、
ほぼドンピシャのタイミングで字幕を出すことができるはずです。[^4]
[^4]:筆者はこのスクリプトで1本の動画あたり最大で約1200件の音声ファイルに字幕をつけました。
ただし、動画の編集時に音声のタイミングを変更をしたら字幕も手動であわせる必要があります。
とはいえゼロベースよりだいぶ楽になるとは思います。

## この記事の成果物のサンプル(Youtube)
この記事で紹介するスクリプトで作成した動画です。

※ この動画は簡単のため黒背景に音声と字幕だけですが、ちゃんと映像も入れられます。

## 本記事の構成
– 記事の前半でVOICEPEAK〜動画編集ツールまでの一貫した流れで手順を説明します。
– 記事の後半で具体的なコードの内容を説明します。
– 記事の末尾にコード全文を掲載します。(コ

元記事を表示

全国の水族館の情報をスクレイピングしてみた

## はじめに
私は水族館が好きで、色々とあって全国の水族館の情報をスクレイピングしてみました。今回は、その方法をまとめました。

## 全国の水族館の情報をスクレイピングしてみた
### スクレイピングするページ
今回利用したページは以下です。一部載っていない水族館もありますが、そこは気にせず取得していきます。

http://www.web-aquarium.net/

上記のページに記載されている情報は転載を禁止されています。

### スクレイピングの流れ
今回のゴールは、前述したページより水族館の名前、ホームページのURL、住所を取得することを試みます。前述したページには各水族館の説明があるページのリンクが記載されているだけなので、元のページから各水族館のURLを取得し、水族館の説明のページをスクレイピングしていきたいと思います。

今回はPythonを使ってスクレイピングを行います。

### 実際のコード
“`python
# 必要なライブラリ
import requests
from lxml import html
from bs4 import Beautiful

元記事を表示

Pybullet + Chainerを使って強化学習で歩行動作を習得する

## 概要
本記事では、4足歩行ロボット(生物?)の歩行動作の学習をPythonを用いて行います。
前提知識として、強化学習の基礎(Q値や報酬、状態、行動、割引率、ポリシー、Actor-Criticなどについて)とニューラルネットワークの基礎(中間層、ニューロン数、学習率、活性化関数、最適化関数などについて)とPythonの基礎文法に関する知識があれば、スムーズに読めると思います。

## 実行環境
・Windows10
・Python3.7.9

## ライブラリ
以下のライブラリをpipでインストールしてください。

・ numpy (数値計算用の便利なやつ)
・ chainer (ディープラーニング用)
・ chainerrl (強化学習の色々なアルゴリズムが実装されている)
・ pybullet (物理エンジン、シミュレータ用)
・ gym (強化学習の環境を楽に定義できる便利なやつ)

## 今回の学習対象について
Pybulletのサンプル環境である”AntBulletEnv-v0″を用います。
蟻を模した四足歩行ロボットの歩行動作の学習を行う環境です。

状態空間は、連続

元記事を表示

Pipenvでの基本的な環境構築

Pythonパッケージの管理にPipenvを利用しています。

今回は、Pipenvで環境構築を行うときに、よく使用するコマンドをまとめました。

[公式ドキュメント](https://pipenv-ja.readthedocs.io/ja/translate-ja/basics.html)

## 前提

– `pyenv`と`pipenv`がインストールされていること。

## 自分が環境構築をするとき

### 作業ディレクトリのpythonのバージョンを指定する

pyenvを使ってバージョンの切り替えを行います。

“`shell
$ pyenv version # 使用できるインストール済みのPythonのバージョンが表示される
“`

上記コマンドを打って表示されたバージョンの中から選択します。

“`shell
$ pyenv local 3.9.1 # 現在のディレクトリでバージョンを指定する
“`

これで、コマンドを実行したディレクトリに、`.python-version`というファイルが生成され、バージョンが書き込まれています。

“`text

元記事を表示

指定した点から二値画像の前景まで最短線分を描画する

# [画像をグラフに変換](https://github.com/Image-Py/sknw)してノード間の経路探索がしたい

「マウスイベントで得た座標」とスケルトン画像は相性が悪いです.
点がスケルトン上に乗ることはまず無いと言っていいでしょう.
これを解決する「追加したノードから最も距離が近いエッジにノードを追加してエッジでつなぐ」操作はグラフっぽくないという直感があります.
なので画像処理で解決する関数を書きました.
もっといい方法があるよ!NetworkXで丁度良い関数があるよ!という方は是非コメント欄で教えてください.

## 処理

1. 全ての輪郭と指定した点との距離から最短距離を求めて
1. 求めた最短距離を半径とする円と入力画像の重複部分を円弧と見立てて
1. 円弧の重心と指定した点を通る線分を描画して
1. はみ出た部分を消去する

コンパスで二等辺三角形を描くように線分の終点が複数得られることが多いです.
![multiple_end_pts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

Pythonで日本語が含まれるJSONをファイルに書き込む際、可読性を上げるための最低限の設定

## 概要

PythonにはJSONモジュールを使うと、JSONをファイルに書き込むことが簡単にできます。json.dump()で可能です。

ただ、オプションを何も指定せずにファイルに書き込みを行うと、以下のような状態になります。

* 1行にまとめられた状態で書き込まれる
* 日本語のような非ASCIIコードはエスケープされる

よって、可読性を上げる最低限の設定をする方法を挙げます。

## オプション無しでjson.dump()を実行した場合

“`python
import json
tags = [{“pref”: “北海道”, “city”: “札幌市”}, {“pref”: “東京都”, “city”: “港区”}]

with open(‘./test.json’, ‘w’) as f:
json.dump(tags, f)
“`

### 実行結果

“`:test.jsonの内容
[{“pref”: “\u5317\u6d77\u9053”, “city”: “\u672d\u5e4c\u5e02”}, {“pref”: “\u6771\u4eac

元記事を表示

三菱MELSEC MCプロトコルをpythonで送信

# Pythonで三菱MELSECのMCプロトコル(Ethernet)を送信します
MCプロトコルは三菱のシーケンサのデバイスを値を読み書きすることができます
ここではpythonを使ってEthernet(UDP)でMCプロトコルで通信するクラスを作りました
MCP.py

https://github.com/OkitaSystemDesign/MC-Protocol

# 環境
#### 伝文
3Eフレームでバイナリコードを使用します
3EフレームはMELSEC-QnAシリーズのEthernetインタフェースで使用する伝文構成です
#### クライアント側環境
python 3.9

# 使い方
### オブジェクトの作成
“`python
mcp = MCProtcol3E(‘192.168.0.41’, 4999)
“`
MCProtocol3Eクラスは通信相手のIPアドレスとポート番号を指定してオブジェクトを作ります

### ワード単位でデバイスの読出し (最大640点)
“`python
data = mcp.read(‘D0’, 10)
“`
readメソッドで

元記事を表示

PythonでGoogleDriveへアクセス

# はじめに
Flaskから個人が持つGoogle Driveへアクセスするツールの話。

やりたかったことは、素性を知っている人たちの各々が撮影した写真をGoogle Driveへ集めたかったです。Google Driveのアプリをインストールしてない人もいるかもしれないし、アプリをインストールしてても、他人がシェアしてるGoogle Driveを、アプリ内で開く方法がわからなかったです。なので、Google DriveへアップロードするWebツールを作りました。

技術的には、誰かが作ったGoogle Diveのライブラリがいくつかあるけど、数年前前のだったり、メリットがわからなかったので、Google純正のライブラリを使いたくなりました。
またググって出てくるブログや掲示板が古かったり、複数の選択肢がある状態で、わからない頭で読んでも区別できなかったりで、苦労しました。

結果のソースはこちら

https://github.com/yo16/upload_to_google_drive

# 概要
■正解
1. GCPで、サービスアカウントを作り、Google Driveへのア

元記事を表示

plotlyの散布図(scattergl)で大きなデータセットを間引いて表示する

# はじめに
– plotlyで散布図を表示するには以下の手法がある。
– scatter: svg(ベクトル方式)で描画、保存できる。
– ただ、10k点以上の散布図に関しては動作速度の点からscatterglの使用が推奨されている
– scattergl: webgl(ラスター方式)で描画、保存。
– scatterよりは早い
– ただ、100k点以上の散布図に関しては動作速度が遅くなる
– 不思議なことに99999点まではまともに動く。[issue](https://github.com/plotly/plotly.py/issues/1271)に似た症状があるが、解決したと書かれている。
– pointcloud: scatterglの簡易機能版。非常に軽い
– 100k点でも問題なく表示できる
– 書式などの機能が制限されており、思い通りのxy軸の書式を作れない可能性が高い
– [廃止予定](https://community.plo

元記事を表示

PythonのListの作成速度調査

# 始めに
最近AtCoderを始めたのですが、なかなか処理速度を考えて処理を書くまでには至らず、
書き方ごとの処理速度に関する当たりをつけるため、とりあえずよくあるリスト作成の速度を調査してみた。

## 検証するケース

1 – forループでinfをN個持ったリストを作成
“`python
import time

def cal_for_inf(count):
start = time.perf_counter()
inf = float(‘inf’)
arr = [inf for i in range(count)]
end = time.perf_counter()
return end-start
“`

2 – *でinfをN個持ったリストを作成
“`python
def cal_multi_inf(count):
start = time.perf_counter()
inf = float(‘inf’)
arr = [inf] * count
end = time.perf_counter()
return end-st

元記事を表示

OTHERカテゴリの最新記事