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

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

TypeScript で Python の便利機能を模倣した関数を作成する

普段は Python (PyPy) で競プロしていますが、AtCoder を TypeScript で解いていくなかで、Python ではビルトインや標準ライブラリで提供されている機能が欲しい場面が多くありました。

だんだん TypeScript のテンプレートも育ってきたので、Python の便利機能(関数やコンテナ)を模倣した TypeScript の自作関数をまとめて紹介します。

`TypeScript (3.8)` (AtCoder の 2022/08/22 現在のバージョン)で動作することを確認済みです。

なお、Python の `input()` を模倣したものは以下の記事に書きました。

https://qiita.com/seijinrosen/items/5a3c54d574d9622cd2ce

## max(), min()

“`typescript:main.ts
const max = (data: number[]) => data.reduce((a, b) => Math.max(a, b));
const min = (data: numbe

元記事を表示

Pythonのフォーマッタをblackに移行してみたので色々所感をまとめてみる

最近以下の個人開発のPythonライブラリでフォーマッタをautopep8からblackに移行したので雑多に所感などをまとめておきます。

https://github.com/simon-ritchie/apysc

# blackとは

– Python界隈でこの記事執筆時点で一番スターの付いているPythonのフォーマッタライブラリです(執筆時点でGitHubのスターが約3万)。
– Pandasやscikit-learnなどのPython界隈の有名ライブラリ含め、非常に多くのリポジトリで使用されています(記事執筆時点でGitHub上のUsed byの表示が約17000リポジトリ)。
– 色を混ぜて別の色にできない黒色のごとく、基本的にスタイルの調整が効きにくくなっているのと調整せずに使うのが基本となっているようです。
– 融通が効かない代わりにプロジェクトごとにスタイルが異なっていたりといったことを避けられたり、最初のスタイルを決めたりする手間を省くことができます。つまり各プロジェクトでスタイルが統一されるためblackに慣れていればblack採用プロジェクトでは違和感

元記事を表示

Pythonでかな漢字変換 mozcpy の紹介

ちゃお…†
舞い降り…†
今回は、Pythonでかな漢字変換するという需要があるのかわからない mozcpy の紹介の紹介をします…†

# mozcpyとは
名前の通り Mozc の辞書を使って MeCab でかな漢字変換するというものです。ただ、普通の IME と違って変換結果をキャッシュしたりだとかそういう機能は一切持たず、ステートレスなシンプルなかな漢字変換です。名前に mozc と入っていますが、作者は Google とほぼ無関係の人間です。

# インストール方法
## MeCab
MeCabのバイナリをインストールします。MeCabのインストールの仕方はネット上にたくさんあるのでここでは割愛します。UTF-8での使用を想定しています。

## mozcpy
[PyPI](https://pypi.org/project/mozcpy/)にあるので下記コマンドを打つだけ!
“`
$ pip install mozcpy
“`

# 使用方法
## インポートとインスタンス生成
“`py
import mozcpy

converter = mozcpy.Convert

元記事を表示

Streamlit / How to create Components

https://discuss.streamlit.io/t/streamlit-components-community-tracker/4634

# Tutorial

https://dev.to/andfanilo/streamlit-components-scatterplot-with-selection-using-plotly-js-3d7n

https://streamlit-components-tutorial.netlify.app/

https://auth0.com/blog/introduction-to-streamlit-and-streamlit-components/

https://blog.streamlit.io/elm-meet-streamlit/

https://blog.streamlit.io/how-to-build-the-streamlit-webrtc-component/

元記事を表示

PydanticがRustで爆速になるという話

# はじめに

最近ポッドキャスト聴く時間が少し減ってしまったんだけど、久しぶりに Talk Python to Me を聴いたらPydanticの話題でした(エピソードのリンクは[こちら](https://talkpython.fm/episodes/show/376/pydantic-v2-the-plan))。作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「**コアをRustで実装して17倍速くなる**」と言っていて、リンク張られていた[ドキュメント](https://pydantic-docs.helpmanual.io/blog/pydantic-v2/)を読みました。この記事はそこで語られていた内容を中心にPydantic v2についてご紹介します。

# Pydanticとは

v2の話の前に、そもそもPydanticとは何かについて簡単に触れておきます。PydanticはPythonの型ヒント情報を使ってデータバリデーション(データの妥当性検証)を行うライブラリです。予めデータの構造を定義しておいて、入力さ

元記事を表示

【備忘録】【ESP32】MicroPythonでSDカードにpythonコードを書き込み、SDカード上のpythonコードを実行する

# 0. はじめに

(ラズパイが入手困難なこともあり)今更ながら、最近、ESP32にハマっています。今回は、
MicroPythonでSDカードの読み書きとSDカード上のpythonコードを実行する方法を、備忘録としてまとめておきます。

なお、SDカードのアクセスはSPI接続です。

# 1. SDカードアダプタ

数年前に製作した、マイクロSDカードのSDカードアダプタに直接ピンヘッダをハンダ付けした物を使用します。3.3VのMCUなら直接接続できます。

2.54mmピッチのピンヘッダがギリフィット。各ピンの意味は下表の通り。
SPIでアクセスする場合は1〜7番ピンのみ接続するため、8・9番ピンのハンダ付けは不要です。

|ピン|SDモード|SPIモード|
|:-:|:-:|:-:|
|1|CD / DAT3|CS|

元記事を表示

pythonによる列生成法の実装と速度比較

# 結論

– 列生成法をpythonで実装し、CBCソルバーで解く場合は、pulpよりpython-mipが速い。
– 列生成法をpulpで実装する場合は、CBCソルバーを使うよりscipy.optimize.milpに変換して解くほうが速そう。

# 背景

pulp, python-mip, scipy.optimize.milpなど、混合整数線形計画(MILP)ソルバーをpythonで使用するためのモデラーやラッパーが色々ある。

ただし、pythonは遅いので、実際に本番運用する際は、求解時間だけでなくモデリングや解のエンコード/デコードにかかる時間にも注意しなければならない。特に、問題を分解して繰り返し解くようなアプローチをとる場合は、要注意である。

今回は代表的な問題分割方法といえる列生成法で、これらのラッパーを使った場合の速度比較を行う。

列生成法の初心者向けのわかりやすい文献として、宮本裕一郎先生の[「はじめての列生成法」](http://www.orsj.or.jp/archive2/or57-04/or57_4_198.pdf)があり、この文献で扱っているビン

元記事を表示

言語処理100本ノック 2015 :00

# 第1章 準備運動

テキストや文字列を扱う題材に取り組みながら,プログラミング言語のやや高度なトピックを復習します.

00. 文字列の逆順
文字列”stressed”の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

### 00. 文字列の逆順

>文字列”stressed”の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

#### コード
“`python
text = “stressed”
result = text[::-1]
print(result)
“`
#### 結果
“`python
desserts
“`

**反省点**

* Pythonのスライス処理で反転する方法がわからなかった
* reverseメソッドとreversed関数の違いがわかなかった
-> reverseメソッド:元のリストの要素を入れ替える
-> reversed関数:新しいリストで入れ替える、イテレータを戻すので注意

**参照**
* [【Python】スライス操作についてまとめ](https://qiita.com/tanuk1647

元記事を表示

【Python演算処理】高校までの数学と専門数学の挟間①「等差数列と一次関数」の学び直し。

相変わらず「高校までの数学と専門数学の挟間」の徘徊を続けています。この話題に戻るのも一体何度目やら…

### 「等差数列(Arithmetic Progression)と一次関数(Linear Function)の関係」についての再確認
等差数列(Arithmetic Progression)$[a_{-∞},…,a_{-3},a_{-2},a_{-1},a_0,a_1,a_2,a_3,…,a_∞]$とは、初項(First Term)$a_0$と公差(Common Difference)d、および各項の添字(Index)n($a_0$から数えた順番)を用いて表すと$a_n=a_0+dn$となる数列をいう。

“`python
import sympy as sp
import numpy as np
A,a,d,n,i,N = sp.symbols(‘A,a,d,n,i,N’)
AP=a+d*n

def Arithmetic_Pro

元記事を表示

DjangoでBootstrapを導入する

# 1. はじめに
今回はDjangoにBootstapを導入する方法を紹介します。
また、Bootstap導入後に前回の「[DjangoのWebアプリケーションにユーザ認証を追加する(django-allauth)](https://qiita.com/t-shirayama/items/11d022d78ea3c5623c80)」で作成したログイン画面に適用していきます。

# 2. django-bootstrap5をインストール
pipでdjango-bootstrap5をインストールします。
“`
pip install django-bootstrap5
“`

# 3. settings.pyの変更
settings.pyのINSTALLED_APPSにdjango_bootstrap5を追加します。
“`
INSTALLED_APPS = [

‘django_bootstrap5’, # 追加
]
“`

# 4. テンプレートに適用
テンプレートの先頭行に下記のコードを追加します。
“`
{% load django_bootstra

元記事を表示

python + OpenCVで画像を加工⑤ 動画の顔を検出してモザイクをかける

[前回の記事](https://qiita.com/HIROKOBA/items/ad593af066579228dc38)で画像の中から顔を検出し、モザイクをかけることができるようになりました。

今回は動画の中から人の顔を検出してモザイクをかけてみようと思います。

動画だと難しそう・・・と尻込みしてしまいそうですが「静止画像の連続が動画である」と考えると、それほど怖がる必要もないのかなという印象です。

最終的なコードはこちらになります。

“`python
import cv2

#モザイク処理を施す関数
def mosaic(img, mosaic_rate):
w = img.shape[1]
h = img.shape[0]

#画像を縮小→その後元の大きさに戻すことがモザイク処理
img = cv2.resize(img, (int(w * mosaic_rate), int(h * mosaic_rate)))
img = cv2.resize(img, (w, h), interpolation = cv2.INTER_NE

元記事を表示

結局全然理解していないオブジェクト指向matplotlib

# はじめに
matplotlibには2つの書き方があります。1つがpyplotモジュールを使った書き方(MATLABの書き方をベースにしているらしい)で、もう一つがfig, ax = plt.subplots()などの後にax.plotなどを使う書き方です。(参考: [The Lifecycle of a Plot](https://matplotlib.org/stable/tutorials/introductory/lifecycle.html))

どっちの書き方でも描ければ良いといえば良いのですが、細かい調整をしようとするとオブジェクト指向の書き方を身に付けた方が良いらしいです。

…という話を↓の記事で読んだ記憶はあるのですが、それ以来特に気にせず使っており、結局全然オブジェクト指向でのmatplotlibの書き方分かっていない(そもそもmatplotlib使って可視化を行うのが苦手)ので、これを機にちょっとでも克服しよう、というのが今日の記事の目標です。

[早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話](https:

元記事を表示

FlaskからStreamlitに乗り換える話 ~もちろん湯婆婆もあるよ~

# はじめに
前回、私はFlask単体で実現できないことをAjaxを使うという奇策でなんとか実装させた。

https://qiita.com/mo256man/items/d3f1761e8454d1bd8305

だが、これが王道のやり方だとは思えず、投稿後もほかの方法を模索していた。
Djangoならできるのか。Flaskより高性能だが難解という評価ゆえ私が選ばなかったDjangoなら。いや、DjangoもJinja2を使うとFlask勉強中に読んだことがある。ならばとりあえずはパスだ。
ほかにいい方法はないだろうか。そう考えて思い出したのが、勉強会で仲間がLTしてくれた手法、**Streamlit**だった。

# Streamlit
Streamlitはデータの可視化に特化したフレームワーク。ただし今回はグラフ化については触れない。
テキストの修飾にはマークダウンを使うのでこうやってQiitaに投稿している人はそう苦労せずに作ることができるようになるだろう。
起動にはPythonスクリプトの実行(IDEでのF5)ではなく`streamlit run ファイル名`というコマン

元記事を表示

csvファイルをpandasのread_csv()で読み込む際にヘッダーがずれてしまう

# はじめに
csv形式のファイルをpandasの`read_csv()`で読み込んだ際にヘッダーがずれてしまうことがあったため、その対策例を紹介します

# どんなことが起きるか(現象)
下記のようなcsvファイル(sample.csv)を`read_csv()`で読み込んだ際にヘッダーがずれることがあります。
sample.csv は1行目はヘッダー、2行目以降はデータとなるようなcsvファイルです。
データの末尾に「,」(カンマ) が入ってしまっています。

“`:sample.csv
path
hoge\hoge.txt,
“`

sample.csvを下記のhoge.pyで読み込むと・・・
“`python:hoge.py
import pandas as pd
df = pd.read_csv(‘sample.csv’)
print(df)
“`

下記の出力結果となってしまいます。データの方にNaNが入ってしまってますね。
“`:出力結果
path
hoge\hoge.txt NaN
“`

下記の出力結果となるのが理想です。

元記事を表示

【日曜大工】pythonでスロットマシンを開発した話。

色々な実行基盤での実行効率やスピード(メモリー消費量や処理速度)を調べています。
(例えば、JSの実行環境としては、Googleクラウドが最速と言われておりますね。)
そんな訳なので、Java、Python,JS,R等で色々と負荷の掛かるプログラムを作って、パフォーマンス分析をしております。
そんな作業の一環として、スロットマシンゲームを作りました。
尚、このサイトを大いに参考にしました。
https://camp.trainocate.co.jp/magazine/java-game/

下記のリールが3列あるスロットです。
“`
REEL_MARK_LIST = (‘7’, ‘BAR’, ‘?’, ‘?’, ‘Reply’,’♢’,’♢’, ‘Reply’, ‘?’,’Reply’,’♢’,’Reply’,’?’)
“`
1ゲームが、1枚ずつのBetです。
777が大当たりで、120枚のコイン払出。BAR並びなら30枚払出とかです。
尚、1リールは、13個絵柄があるので、トリプル7が揃う確率は、1/13**3=1/2197 となります。
これを、自分で何枚のコインで勝負するか

元記事を表示

tensorflow keras で 学習にかかった時間を保存する

# やりたいこと

tensorflow keras で各epochにかかった時間を計測して、どこかに(今回はmlflow)へ保存する。

# 方法
Callbackを自作して対応。

# コード

“`python
import mlflow
import time
import tensorflow as tf

class SaveElapsedTime(tf.keras.callbacks.Callback):
def __init__(self):
self.epoch_start_time = None
self.train_start_time = None

def _cal_elapsed_time(self, st):
return = time.time() – st

def on_train_begin(self, logs=None):
self.train_start = time.time()

def on_train_end(self, logs=Non

元記事を表示

Pymatgenチュートリアル④ 構造を扱う

### はじめに
材料研究とX線回折(X-ray diffraction、XRD)パターンの測定・解析は、切っても切り離せない関係にある。というか、「材料粉体を合成したら、まずはXRD」が基本中の基本と認識している。要するに合成した材料は、全てXRDをとる、というのが、材料化学者の嗜みである。必然的に、手元には大量のXRDデータが得られる。これを効率的に解析することは、業務効率化に欠かせないテクニックだろう。近年、こうしたアイデアは随所で見られ、XRDを自動解析するソフトウェアはいくつか報告されている。中でも、optunaとGSAS-IIを利用して、自動でRietveld解析を行うという論文(およびコード)は、界隈でかなりバズった。これに対して、忖度なく、すごい!と思うと同時に、optunaを使うなら、最初からoptunaで全部最適化すればいいのでは?という気持ちもあった。そういうわけで、簡易的にこれを実装するコード(フォークト関数でパターンをシミュレーションして、格子定数および原子座標、デバイ・ワラー因子を最適化するだけ)を組んでみたので、解説記事を書こうと思う。ただし、かなり長くな

元記事を表示

Blenderで最大マッチング問題を解いてミラーリングする

## メッシュのミラーリング

Blenderには、メッシュを対称にする機能があります(編集モードのメッシュの「対称にスナップ」)。これは、最も近い2点をマッチングさせています。
これはこれで便利なのですが、**個別に最近傍ではなく、全体的にバランスよく移動したい**ことがあります。
ここでは、それを**数理最適化**で実現するアドオンを紹介します。

## 具体例

対称のメッシュを作成します。
– `追加`の`メッシュ`の`グリッド`(Y軸方向の分割数=2、サイズ=0.2)
– 編集モードに入る
– 真ん中の辺を選び、`削除`の`辺を溶解`
– 上側の中よりの8点を選び、X軸方向に`0.01`移動

右上の5点を選び`メッシュ`の`対称にスナップ`を実行すると下記のようになります。ただし、実行ごとに変わる可能性があります。

元記事を表示

気象庁の過去の気象データをPythonでスクレイピングしてPostgreSQLにINSERTしてみた

# はじめに
## やること
– 気象庁の1日ごとの気象データをスクレイピングする
– 取得したデータをPostgreSQLのDBにINSERTする
– 取得するデータは2007年~2022年の「今日」の一日前まで、全国の観測地点でデータがあるところ

## 環境等
– プログラミング言語: Python3.10
– DBサーバ: Amazon AWS RDB
– 実行環境: Amazon AWS EC2
– スクレイピングに使うライブラリ: BeautifulSoup

## 参考にした情報
制作にあたり、以下の記事と記載のコードを参考にさせていただきました。
– [GoogleColaboratoryで気象庁の過去気象データをスクレイピングしてみた。](https://qiita.com/Cyber_Hacnosuke/items/122cec35d299c4d01f10)
– [気象データの観測地点一覧 (2017年3月時点)](http://k-ichikawa.blog.enjoy.jp/etc/HP/htm/jmaP0.html)

## やろうと思っ

元記事を表示

Deep Transformer Models for Time Series Forecasting

本稿ではTransformerを時系列データに適用した論文([Deep Transformer Models for Time Series Forecasting](https://arxiv.org/pdf/2001.08317.pdf “Deep Transformer Models for Time Series Forecasting”))の解説をしていきます。
# 1. 概要
1. 研究内容
Transformerモデルを用いてアメリカにおけるインフルエンザ様疾患数(ILI) [^1]の週次予測をしていく
1. 先行研究との比較
状態空間モデルやRNNなどのディープラーニングモデルと比べて精度が上がった。
1. 手法
Attentionを用いたTransformerモデル。
1. 検証方法
10週分のデータをエンコーダに入力して次の週のILI比率を予測していく。
1. 議論
時系列データのみならず時間情報と地理情報を持った時空間データにも適用されうる。

# 2. Introduction
### 研究動機
– インフルエンザは世界中で多くの死者を出しているが、CDCの集計

元記事を表示

OTHERカテゴリの最新記事