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

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

Python/sqlalchemyでテーブルをバージョン管理するalembicで困ったとき

# 前提

使い方、導入の仕方などはこちらの記事がが非常に有用でしたのでご参照ください。

https://qiita.com/penpenta/items/c993243c4ceee3840f30

この記事では使い方ではなく困った時の解決法などをいくつか書いていきます。また、随時更新します。

## 競合が起こった時

gitでもよくあることですがチームでバージョン管理していると競合が起こります。

“`java
alembic history –verbose
“`
こちらのコマンドでheadリビジョンを確認することができます。

バージョンはRivision IDで管理しているので競合を起こしているリビジョンのpyファイルを退避させましょう。

“`java
alembic upgrade head
“`

でテーブルが最新リビジョンと相違ない状態になったらsqlalchemyで定義してあるテーブルと退避させたpyファイルの相違している部分を修正し、

“`java
alembic revision –autogenerate
“`

しましょう。
alter文

元記事を表示

sudachipyを試してみた

| id | text |
|-:|:-|
|1|メロスは激怒した。|
|2|必ず、かの邪智暴虐の王を除かなければならぬと決意した。|
|3|メロスには政治がわからぬ。|
|4|メロスは、村の牧人である。|
|5|笛を吹き、羊と遊んで暮して来た。|

“`python
tokenizer_obj = dictionary.Dictionary(dict=”full”).create()
mode = tokenizer.Tokenizer.SplitMode.C
doc = []
for row in range(len(df)):
t = tokenizer_obj.tokenize(df[“text”][row], mode)
d = [m.normalized_form() for m in t if m.part_of_speech()[0] in [“名詞”, “動詞”]]
doc.append(d)
docs = pd.array([” “.join(doc[i]) for i in range(len(doc))])
print(docs)

#

元記事を表示

Slackのチャンネル名からIDを取得する

### 概要
Slackアプリケーションでチャンネル名からチャンネルIDを取得したい。
しかし、[API一覧](https://api.slack.com/methods?query=channel)では、channel関係はすべてdeprecatedになっている。

![Web API methods](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62253/d5156c9f-3cb7-bf13-6007-be4d359305f6.png)

### 解決策
[conversations.list API](https://api.slack.com/methods/conversations.list)を使うらしい。
`target_channel`のIDを`target_channel_id`に入れる例:

“`py
from slack_bolt import App

app = App(token=bot_token)
channels = app.client.conversations_li

元記事を表示

Python GitHubトレンドデイリーランキング!!【自動更新】

GitHub Trending をキャッチアップする習慣をつけて、強強エンジニアになろう。
この記事では、Python のGithubのトレンドデイリーランキングを25位まで紹介します。

# トレンドデイリーランキング

## 【1 位】 microsoft/routeros-scanner
https://github.com/microsoft/routeros-scanner

🌟 ***574*** star

## 【2 位】 lxgr-linux/pokete
https://github.com/lxgr-linux/pokete

🌟 ***673*** star

## 【3 位】 public-apis/public-apis
https://github.com/public-apis/public-apis

🌟 ***186,353*** star

## 【4 位】 vnpy/vnpy
https://github.com/vnpy/vnpy

🌟 ***17,929*** star

## 【5 位】 google-research/kubric

元記事を表示

【特徴量選択】Feature Relevance based Unsupervised Feature Selection

# はじめに
はじめまして.株式会社音圧爆上げくんにプロKagglerとして所属していますAshmeと申します.

業務の一環としてKaggleの様々なコンペティションに参加し,そこで得られた知見などを記事にして投稿しております.よろしくお願いいたします.

今回は現在のKaggleコンペティションに直接関係のあるものではありません.Twitterで流れてきたものですが教師なし特徴量選択の手法であるFRUFS(Feature Relevance based Unsupervised Feature Selection)という手法に興味があったのと,コンペティションで特徴量選択の1つとして使用することもできると考えたためこちらについて紹介します.

こちらの手法は[DeepwizAI](https://www.deepwizai.com/)にて紹介されていた手法です.元の記事は[こちら](https://www.deepwizai.com/projects/how-to-perform-unsupervised-feature-selection-using-supervised-alg

元記事を表示

素数判定アルゴリズムいろいろ

与えられた$n$について、素数かどうか判定したい。
アルゴリズムをいろいろ考えてみよう

2022/03/23 @trawBerryMoon さん、ご指摘ありがとうございました。

# 1. ひたすら割る
$2$以上の数でひたすら割っていき、割れなければ素数、割れれば合成数。

“`python
def trial(n: int):
assert n > 1
i = 2
while i < n: if n%i == 0: return False i+=1 return True ``` # 2. 偶数は飛ばす $n\gt2$であれば、素数は全て奇数になる。 1よりも早く判定ができる。 ```python def trial_odd(n: int): assert n > 1
if n == 2:
return True
elif n % 2 == 0:
return False
i = 3
while i < n:

元記事を表示

SSE4.2: RDTSC と CRC32 の2命令だけで乱数らしきものを作る

# 値の生成方法

生成処理は、Intel IA32 の SSE4.2 に対応したプロセッサ命令で

“`asm:生成プログラム
RDTSC
CRC32 EAX, EDX
“`

二命令だけです。 EAX の値が乱数のようなものになるだろうという期待をします。

実際は、どんな数列になるかは実行してみなければ分からないので Python モジュールにしてみました。

# Python モジュール spcrand

メソッドは1つです

“`text:
spcrand() -> int: 符号なし整数(32ビット)で生成プログラム一回分
spcrand(count: int) -> bytearray: 生成プログラム count 回分で count * 4 バイトの数列
“`

**動作確認している環境**

OS
  macOS 12.2.1

C コンパイラ (Xcode 13.2.1)

  Apple clang version 13.0.0 (clang-1300.0.29.30)
  Target: x86_64-apple-d

元記事を表示

Numpyのため趣味的にPython 3.10をmakeする(M1 Mac: arm64アークテクチャ)

# はじめに
 M1 Mac (mac OS Monterey) を手に入れて、デフォルトで入るPython 3.8を使ってみたらNumpyが入らない。下の記事にあるように、Python 3.9以上のバージョンならばpipからNumpyはインストールできますし、新しいバージョンのPython自体もcondaやHomebrewから簡単にインストールすることができます[^h1]。

[^h1]: [macOS 64-bit universal2 installer](https://www.python.org/downloads/macos/)という物もあり…。

https://qiita.com/ketaro-m/items/ebae35c49d55aa86dfcf

 この時点で、素直に上記の方法に従えさえすれば問題 (Python3とNumpyのインストール) は解決されるのですが、この記事ではあえて、condaもHomebrewも使いたくないという場合に、ソースコードからPython 3.10をmakeして、M1 Macにをインストールする方法を記します。Python 3

元記事を表示

【Python】SQLite3の使用方法

# SQLite3をPythonで操作する
現在Django、Flaskなどのフレームワークを使用せずに、
簡単なWebアプリケーション(Todo管理アプリ)を開発してます。
DBを何にするか(何が使用できるか)調査したところ、標準でSQLite3が
使用できるとのことなので、
Pythonのsqlite3を使用してPythonのコードでsqlite3を操作する方法を記載します。
(初投稿のため優しく見守れっていただけると嬉しいです)

## 参考ドキュメント
python公式ドキュメント

https://docs.python.org/ja/3/library/sqlite3.html

## Pythonバージョン
Pythonバージョンは以下で確認できる。
“`
python -V
“`
Python 3.8.0

## 基本的な記載方法
基本的には以下のように記載方法になる。
“`python
import sqlite3
dbname = ‘example.db’

conn = sqlite3.connect(dbname)
cur = conn.cursor()

元記事を表示

部分和問題の3つのアプローチをPythonを用いて実装する

## 問題概要

n 個の正の整数 a[0],a[1],…,a[n−1] と正の整数 S が与えられる。これらの整数から何個かの整数を選んで総和が S になるようにすることが可能か判定せよ。可能ならば “Yes” と出力し、不可能ならば “No” と出力せよ。

【制約】・1≤n≤10・1≤a[i]≤1000・1≤S≤10000

【数値例】
1) n=3 a=(7,5,3) S=10 答え: Yes (7 と 3 を選べばよいです)

2) n = 2 a=(9,7) S=6 答え: No

問題概要はけんちょん様の[こちらの記事](https://qiita.com/drken/items/a5e6fe22863b7992efdb#%E5%95%8F%E9%A1%8C-3%E9%83%A8%E5%88%86%E5%92%8C%E5%95%8F%E9%A1%8C)から抜粋させていただいています

## iterative(反復的)なアプローチ

“`python
from sys import stdin

N, S = map(int, stdin.readline().spli

元記事を表示

Python3.10 で bit_count メソッドが追加されたので ABC 081 B – Shift Only を解いてみよう

Python 3.10 が登場しましたね。パターンマッチの追加などより大きく便利な変更も多くありますが、地味な更新点として、`int#bit_count`メソッドが追加されました。

これは POPCNT などとも呼ばれ、二進数表記した際の 1 の数を返すような関数です。たとえば、十進数の 5 は二進数では 101 となりますので、

“`python
assert (5).bit_count() == 2
“`

となります。

これまでも`n.bit_count()`の代わりに`bin(n).count(“1”)`とすることで同様の値を取ることができましたが、おそらく専用のメソッドを用意することで速度の改善が見込めると思われます。実際最近の CPU では POPCNT の専用命令を用意されていたりもするので、おそらくそちらを利用するものと思われます。専用命令がなかった場合でもより高速に求めるアルゴリズムが知られているので、高速化できるでしょう。

ちなみに Python の`int`型は多倍長整数を使っているため、負の整数に対して`int#bit_count`を使用するとどうな

元記事を表示

Google Cloud MonitoringのメトリクスをPythonで取得する

作ってみましたが、若干詰まったので書いておきます。

# コード
コード

“`py
from datetime import datetime, timedelta
from google.cloud import monitoring_v3

project = “your-project” # プロジェクト名
project_id = f”projects/{project}”
instance_name = “instance-name” # インスタンス名

# 今現在から過去1時間分のデータを取得
now = datetime.now()
time_span_hour = 1
start_ts = int((now – timedelta(hours=time_span_hour)).timestamp())
end_ts = int(now.timestamp())

# フィルターには色々設定可能はこちらを参照 https://cloud.google.com/monitoring/api/v3/filters
metric_filter = f’metric.

元記事を表示

CygwinにPythonをインストールする方法

# CygwinにPythonをインストール
Cygwinの設定をするため、**setup-x86_64.exe** を起動する。
**Python39**、**wget** を追加する。

# Cygwinにpipをインストール
以下の記事を参考

https://qiita.com/fujisystem/items/68c6b9dfdc5e0328c882

以上、CygwinにPythonをインストールする方法でした。

元記事を表示

Juliusで自作N-gramを使う方法

# bingram形式のN-gramを作成
N-gramの作成方法の詳細は前回の記事[**PythonでN-gramを作る(Julius)**](https://qiita.com/phiniki/items/9d4fe40389e054385787)に記載しております。

今回は作成したN-gramを **C:/Julius/my_julius/** にコピーしておく。

# 自作N-gramの適用
過去の[**Windows環境のPythonで大語彙連続音声認識エンジン Julius を使う方法**](https://qiita.com/phiniki/items/9729da0b66c16a7020d2)でダウンロードした音声認識パッケージ(dictation-kit-4.5)の **/dictation-kit-4.5/am-dnn.jconf** を開く。

以下の部分を見つける。
“`am-dnn.jconf
# The phone set of DNN-HMM is different from GMM-HMM, so requires another dictiona

元記事を表示

日記;回すだけIII ⑪ pythonでSDO、PDOの読み書き<その6 Profile Position Mode + アナログ入力(EPOS4)>ベータ版

 EPOS4のコントローラには、

– ディジタル入力4ポート、出力2ポート
– アナログ入力2ポート、出力2ポート

が用意されています。オブジェクト・ディレクトリに登録されているので、SDOで読み書きできます。前回ディジタル入出力を利用しました。今回はアナログ入力です。

### アナログ入力
 Analog I/O (X8)コネクタのピン番号と機能です。

1 white Analog input 1, positive signal
2 brown Analog input 1, negative signal
3 green Analog input 2, positive signal
4 yellow Analog input 2, negative signal
5 grey Analog output 1
6 pink Analog output 2
7 blue Ground
 1-2のアナログ入力1、3-4のアナログ入力2を利用します。ともに12ビット、±10Vの差動入力です。

### 機能を定義する
 WizardsのStartupからAnalog Input

元記事を表示

Python: コール可能なオブジェクト(関数とか)かチェックする

“`python

def f():
pass

async def af():
pass

class C:
@staticmethod
def s():
pass

@classmethod
def c(cls):
pass

def i(self):
pass

if __name__ == “__main__”:
print(callable(“x”)) # False
print(callable(None)) # False
print(callable(lambda x: x + 1)) # True
print(callable(f)) # True
print(callable(af)) # True
print(callable(C.s)) # True
print(callable(C.c)) # True
print(callable(C.__init__)) # True
pri

元記事を表示

ミリ秒が四捨五入されて日付が繰り上がってしまう問題

#目次
[何が起こったのか](#何が起こったのか)
[原因](#原因)
[解決策](#解決策)

# 何が起こったのか
openpyxlを使ってExcelに日付を出力(表示形式: yyyy-m-d)したところ、データベースの値(期待値)と異なる結果になってしまった。

・Excel
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526938/4082a2d0-3296-0118-496a-1150741e5cd3.png)

・データベース(期待値)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526938/aadf5782-3bcb-8ce9-5031-79329a5b147d.png)

このようにデータベース上は 2022/3/21 なのにも関わらず、Excelに出力された日付は 2022/3/22 となっており、日付が繰り上がってしまっている。

# 原因

Pythonでzipを展開する(Bandcampでダウンロードしたアルバムをアーティスト/アルバム名に展開)

書いた理由:
Bandcampでアルバムを大量にダウンロードしたが、zip内に直でmp3が置かれている。
「アーティスト名/アルバム名」フォルダに展開したい。

“`python:ZipOpener.py
# coding: utf-8

from zipfile import ZipFile
import os
import glob

#zipファイル名は「アーティスト名 – アルバム名.zip」を想定
delimiter = ” – ”

current_dir_name = os.path.dirname(__file__)
file_names = glob.glob(current_dir_name + “/*.zip”)

for file_name in file_names:
print(file_name)

artist_name, album_name = file_name[:-4].split(delimiter, 1)
tgt_dir = os.path.join(current_dir_name, artist_name, a

プロトコルクラスの代わりにジェネリック型を返す

### 概要
あるプロトコルを満たすオブジェクトを受け取り、そのオブジェクトを返す関数を考える。この関数の引数及び戻り値の型は、プロトコルクラスそのものより、プロトコルクラスを上界としたジェネリック型にしておくと都合が良い。

### 具体例
次のようなプロトコルを使ってソート関数を定義する。
ソート関数は破壊的で、利便性のためにソート結果を返すとする。

“`py
class Sortable(Protocol):
def __len__(self) -> int:

def swap(self, i: int, j: int) -> None:

def less(self, i: int, j: int) -> bool:

def sort(c: Sortable) -> Sortable:

return c
“`

この時、上のソート関数のように戻り値の型がプロトコルクラスになっていると、受け取ったオブジェクトに対する操作が制限されてしまう。

例えば

Lambda Layersを使って処理をまとめてみた

## 背景
アカウントAの複数のLambdaから別のアカウントのEC2の情報を取得する実装を行っていて、Lambdaの中がほぼ同じ処理なのでLambda Layersを使ってmodule化してみます
![スクリーンショット 2022-03-22 13.29.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501320/6dd8867f-882c-3f10-3d3d-0310dcb6e3df.png)

## 今回話すこと
– Lambda Layersの概要
– Lambda Layersの使い方

## 今回話さないこと
– クロスアカウントロール周り
– Lambdaのコードの解説
– Lambda関数の作成方法

## Lambda Layersの概要
公式には下記のような説明があります
>Lambda レイヤーは、追加のコードやデータを含めることができる .zip ファイルアーカイブです。

簡潔に言うと1つの関数を定義してそれを複数のLambda関数で使うことができるということです。!