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

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

printでリスト,辞書の値を出力する

“`
args = [1, 2, 3]
kwargs = {‘sep’: ‘?’, ‘end’: ‘*’}

print(*arg, **kwargs)
“`

出力
“`
1?2?3*
“`

元記事を表示

【Python】言語処理100本ノック用環境構築【WSL】

# はじめに
みなさんは言語処理100本ノックを知っていますか?
言語処理100本ノックとは東工大の岡崎直観先生らによって言語処理を楽しく学ぶことを目的として作成された問題集です。

https://nlp100.github.io/ja/

私の所属している研究室でも初学者向けの教材として利用されていますが、環境構築で躓いている人がかなりいたため、研究室内のページで環境構築の解説を作成しました。
しかし研究室内向けだけでは勿体ないと思い、この度Qiitanに投稿することにしました。
検索しても言語処理100本ノックのためのまとまった環境構築方法がなかったというのも大きな理由です。

# 注意
本記事で紹介している環境構築方法は言語処理100本ノックを解くことを主目的としているため、ほかの用途には適さなかったり、無駄が多かったりしますので、予めご了承ください。
また、本記事はWindowsユーザ向けなのでMacユーザの方は適宜読み替えたりしてください。
要望が上がればMac端末で動作を検証してからMac向けの記事を書くかもしれません。

# 環境構築
## まずはWSLを入れよう!

元記事を表示

Python + SeleniumWebDriver で不要な文字の出力を抑制する方法

[参考記事]
Python+SeleniumWebDriverではwebdriver_managerを使うといちいちdriverのexeを置き換えなくて済む
https://qiita.com/YoshikiIto/items/000f241f6d917178981c

この記事を見てwebdriver_managerを使ってみたところ大変便利だったのですが、

“`
[WDM] – ====== WebDriver manager ======
[WDM] – Could not get version for google-chrome. Is google-chrome installed?
[WDM] – Get LATEST chromedriver version for None google-chrome

“`

といったinfoの表示が少し鬱陶しかったので消しました。

この出力が出てくるようにどこが設定しているのかというと、
webdriver_manager\core\logger.py 内の

“`python:logger.py
__logger

元記事を表示

Docker Composeを使ったPython環境の用意

コンテナでPython環境を用意したい!けど調べるの面倒なんで備忘録としてまとめます。
# 構成
“`
.
├── Dockerfile
├── docker-compose.yaml
└── opt
└── test.py
“`

# Dockerfileの定義
“`shell
cat < Dockerfile
FROM python:3
USER root
RUN apt-get update
RUN apt-get install -y vim
RUN pip install –upgrade pip
RUN pip install –upgrade setuptools
EOF
“`

# docker-compose.yamlの定義
“`shell
cat << EOF > docker-compose.yaml
version: ‘3’
services:
python3:
restart: always
build: .
container_name: ‘python’
working_dir: ‘/

元記事を表示

なんちゃって解説 第2回 – ABC252 A~B問題(Cは後日)

# はじめに
こんにちは、ひろとです。なんちゃって解説シリーズ第2回でございます。[前回の記事](https://qiita.com/Hiro527/items/6df4577119ba5ae13d60)はこちらから。注意点なども第1回の記事にありますのでまだ読んでない方はぜひお読み下さい。また、今回のC問題が時間内に解けていないので後日追加します。ただ数学のテストとかがあるのですこーし遅れるかもです。来週の週末目標でやります。

# ABC252
今回のAB問題は解きやすい問題でした。A問題は連想配列を使うか言語に用意されている関数を使うことになると思います。B問題はsetを使うか普通に値を比較していけば解くことができました。

## A問題 – ASCII Code
問題リンク: [A – ASCII Code](https://atcoder.jp/contests/abc252/tasks/abc252_a)

### 制約
– $ N $は90以上122以下の整数

### 入力
$ N $

### 出力
答えを出力

### 考察
Pythonの場合は`chr()`でAS

元記事を表示

scipy.stats: 正規分布の検定(オムニバス検定) normaltest

# 正規分布の検定(オムニバス検定) `normaltest`

データは正規分布からの標本といえるか?の検定。

$H_0$:母分布は正規分布である。

$H_1$:母分布は正規分布ではない。

以下の 2 論文に基づいたオムニバス検定である。

1. D’Agostino, R. B. (1971), “An omnibus test of normality for
moderate and large sample size”, Biometrika, 58, 341-348
2. D’Agostino, R. and Pearson, E. S. (1973), “Tests for departure from
normality”, Biometrika, 60, 613-622

`normaltest(a, axis=0, nan_policy=’propagate’)`

## 1. 正規乱数について検定を行う

平均値=50,標準偏差=10 の正規乱数 25 個について検定を行う。

“`python
from sc

元記事を表示

【Django】makemigrationsとmigrateについて

Djangoにて使用するmakemigrationsとmigrateコマンドについて記載します
## makemigrationsとは
makemigrationsは、models.pyに記載したカラム名は、文字列型などの情報をmigrationファイルに記載します
まずmodels.pyに以下のように記載したとします
“`models.py
from django.db import models
class Product(models.Model):
title = models.CharField(max_length=120)
description = models.TextField(blank=True, null=True)
price = models.DecimalField(decimal_places=2, max_digits=1000)
summary = models.TextField(blank=True, null=False)
featured = models.BooleanField(null=True)
“`
その後

元記事を表示

GitHub Actionsを利用してplaywrightを使ったAzure Functionsアプリをデプロイする(Python)

# はじめに
playwrightは実行前に以下のコマンドを実行してブラウザをインストールしておく必要がある。
“`bash
playwright install
“`
このときデフォルトではユーザーディレクトリ下にインストールされるが、環境変数の`PLAYWRIGHT_BROWSERS_PATH`にインストール先のパスを設定しておくことで任意の場所にブラウザをインストールすることが可能になる。
これを利用してAzure Functionsでplaywrightを使えるようにする。

# 今回動かすアプリ
コードは[公式のサンプルコード](https://playwright.dev/python/docs/intro#usage)をAzure Functions用に少し変更した。
アプリの内容は`http://playwright.dev`にアクセスし、ページのタイトルを返すというもの。

ポイントは`executable_path=’./browser/chromium-1005/chrome-linux/chrome`の部分。
`executable_path`はブラウザの実

元記事を表示

VSCodeのターミナルで「pyenv global」で「pyenv version」が書き換わらない

# 状況
`pyenv global x.x.x`で`pyenv version`が書き換わるはずなのに、VSCode内のターミナルで書き換わらない(普通のターミナルでは正しく書き換わる)

“`bash
$ pyenv global 3.8.10
$ pyenv versions # pyenv globalの設定が効いてない!
system
* 3.10.0 (set by PYENV_VERSION environment variable)
3.7.9
3.8.10
3.9.11
“`
のようになる

## 環境

VSCode 1.67.2
Python(VSCodeの拡張機能) v2022.6.2

# 解決方法
VSCodeのSettingで「pyenv」と検索→「Python > Terminal: Active Environment」のチェックを外す
![スクリーンショ

元記事を表示

Dogelog Player is now Self Hosting

## Introduction

Dogelog Player is a Prolog interpreter that is 100% written in Prolog itself. It currently targets the JavaScript and the Python platform. So far there was only a cross compiler available that could be used to generate Dogelog Player. This has been improved recently, the Dogelog Player can now compile itself, making it a self hosting system.

## Phylogenetic Tree
The Dogelog Player built-ins read_term/3 and write_term/3 are Prolog routines often using definite clause grammar (DC

元記事を表示

numpy, list の append の速度の違い

# やること

`numpy` と `python list` の `append` が結構速度が違うと見たので、実際に違いを計測してみる。

https://numpy.org/doc/stable/reference/generated/numpy.append.html

https://docs.python.org/ja/3/library/stdtypes.html#sequence-types-list-tuple-range

# コード

“`python
import numpy as np
import time
import matplotlib.pyplot as plt
import pandas as pd

data_nums = np.logspace(1, 5, 5)
# [1.e+01 1.e+02 1.e+03 1.e+04 1.e+05]
data_nums = data_nums.astype(“int64”)

df = pd.DataFrame(
index=range(len(data_nums)), columns=[

元記事を表示

Pythonで一様乱数の配列を生成するときの速度比較

# やること

**一様乱数の配列を生成するための時間を比較する**

一様分布とは。

https://ja.wikipedia.org/wiki/%E4%B8%80%E6%A7%98%E5%88%86%E5%B8%83#:~:text=%E4%B8%80%E6%A7%98%E5%88%86%E5%B8%83%EF%BC%88%E3%81%84%E3%81%A1%E3%82%88%E3%81%86,%E8%B7%9D%E9%9B%A2%E3%81%AE%E5%88%86%E5%B8%83%E3%82%92%E6%8C%87%E3%81%99%E3%80%82

# 一様乱数を生成するために使用したライブラリ

– “`numpy.random.uniform“`

https://numpy.org/doc/stable/reference/random/generated/numpy.random.uniform.html

– “`numpy.random.default_rng“` (Numpy version1.17以降で推奨されているようです)

https

元記事を表示

scipy.stats: 幾何平均と調和平均 gmean, hmean

# 1. 幾何平均 `gmean`

`gmean(a, axis=0, dtype=None, weights=None)`

“`python
from scipy.stats import gmean
x = [1.2, 3.1, 4.6, 2.2, 5.7]
gmean(x)
“`

2.9263054868319522

`gmean` 関数を使わずに計算すると以下のようになる。

“`python
import numpy as np
np.exp(np.mean(np.log(x)))
“`

2.9263054868319522

“`python
np.prod(x)**(1/len(x)) # 非推奨
“`

2.9263054868319527

“`python
以下のようなテストデータ(平均値=50,標準偏差=10)で幾何平均を求めてみる。
“`

“`python
from scipy.stats import norm
z = norm.rvs(loc=50, scale=

元記事を表示

分かった気になる「メルケプストラム」

# 1. はじめに
声質変換を実装する際に、特徴量としてメルケプストラムを使うことがあります。しかし、特徴量としてはメル周波数ケプストラム係数(以下、MFCC)ばかりが検索結果に表示されてしまい、違いが分からなくなることがありました。メルケプストラムとMFCCの違いを含め、その辺の用語の違いを明確にしながらまとめていこうと思います。(長くなりすぎたので、今回はメルケプストラムのみの紹介。)

## 1-1. なぜ混同するのか
僕が思う、メルケプストラムとMFCCを混同する理由は、[SPTK(Signal Process Toolkit)](http://sp-tk.sourceforge.net/)と音声信号処理で大変参考になるサイトである[人工知能に関する断創録](https://aidiary.hatenablog.com/archive/category/%E9%9F%B3%E5%A3%B0%E4%BF%A1%E5%8F%B7%E5%87%A6%E7%90%86)によるものだと思っています。SPTKはpythonの場合、山本氏が公開されたpysptkのことになりますね。
[人工知

元記事を表示

2点間距離の計算速度(pythonコード比較)(3次元空間のみ)

# 問題設定
:::note info
2点 A,B間の距離を pythonで **高速に** 計算したい。

A,Bそれぞれの座標は 変数a,bで表す。
:::

# 測定方法
jupyter notebookを使用。
座標a,bは `np.random.rand(3)`でランダムで生成した [^1]。
[^1]:a,bは毎ループ生成するのではなく、このプロジェクトを通してずっと同じものを使用。つまり、全く同じ計算をループさせて計測した。

時間の測定には `%%timeit`を使用した。
これは、そのセル内のコードを何度か繰り返して、計算時間の `平均 ± 標準偏差`を表示してくれる。

# 比較したコード
`numpy`しか使わない方法は、`numba`の `jit`で高速化できる。
これも試した。

1. `np.linalg.norm( a-b)`
`np.linalg.norm( a-b)` + `jit`

1. `np.sqrt( np.sum( np.square( a-b)))`
`np.sqrt( np.sum( np.square( a-b)))`

元記事を表示

scipy.stats: 平均値まわりの第 r 次母積率 moment

# 平均値まわりの r 次母積率

$(x-\mu)^r$ の期待値のことである。$\nu_r’$ で表すことが多い。

離散変数のときは

$\nu_r’ = \sum(x-\mu)^r f(x)$

連続変数のときは

$\nu_r’ = \displaystyle \int_{-\infty}^{\infty} (x-\mu)^rf(x)dx$

`moment(a, moment=1, axis=0, nan_policy=’propagate’)`

“`python
from scipy.stats import moment
x = [1.2, 3.1, 4.6, 2.2, 5.7]
“`

1次(デフォルト),2次,3次,4次の母積率(モーメント)

“`python
moment(x), moment(x, 2), moment(x, 3), moment(x, 4)
“`

(0.0, 2.6184, 0.6126720000000052, 11.18588832)

“`python
moment(x, [0, 1, 2, 3,

元記事を表示

scipy.stats: 記述統計 describe

# 記述統計 `describe`

サンプルサイズ,最小値,最大値,平均値,分散,歪度,尖度を求める。

`describe(a, axis=0, ddof=1, bias=True, nan_policy=’propagate’)`

“`python
from scipy.stats import describe
x = [1.2, 3.1, 4.6, 2.2, 5.7]
describe(x)
“`

DescribeResult(nobs=5, minmax=(1.2, 5.7), mean=3.3599999999999994, variance=3.2729999999999997, skewness=0.14460191499270095, kurtosis=-1.3684571122281206)

表示される variance は,デフォルトで `ddof=1`, `numpy.var(x, ddof=1)` すなわち,不偏分散である。

“`python
np.var(x, ddof=1)
“`

3.27299999

元記事を表示

Python実装のWebアプリケーションフレームワークOSSの比較(2022年版)

# 概要

2022年現在、Pythonで実装されたWebアプリケーションのフレームワークのOSSは多数あります。それらを様々な角度から比較してみましょう。
![python_fws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/324a8f71-e172-c05d-3065-bee4e0361bf4.png)

# 候補

2022年5月時点で、メジャーと思われるものは以下の通りです。対象はGitHubでソースコードを管理しているもので、Star数が1,000を超えているものに限定しています。READMEの最初などからOSSを最も端的に表している1文を抽出して、翻訳しています。

scipy.stats: 尖度と歪度

# 1. 尖度 `kurtosis`

`kurtosis(a, axis=0, fisher=True, bias=True, nan_policy=’propagate’)`

“`python
import numpy as np
from scipy.stats import kurtosis
x = [1.2, 3.1, 4.6, 2.2, 5.7]
“`

## 1.1. Fisher の定義(正規分布のとき 0 になる)

“`python
kurtosis(x) # g2:後述
“`

-1.3684571122281206

関数を使わずに計算すると以下のようになる。

“`python
from scipy.stats import zscore
np.mean(zscore(x)**4) – 3
“`

-1.3684571122281206

## 1.2. Pearson の定義(正規分布のとき 3 になる) `fisher=False`

“`python
kurtosis(x, fisher=False)
“`

機械学習の学習時にロスがNaNになるときにすること

まずデータを確認する。
その後にネットワークを疑う。

1. データセットにNaNやinfが混ざっている
1. 交差エントロピー誤差のlog()にゼロが入っている
1. 結果の値が小さすぎる

# データセットにNaNが混ざっている

意外とよくやる。
対処方法はNaNが含まれるデータは弾いてしまうか、または他の値に置き換える

## 欠損値を弾く

pandasを使っているならとても簡単で`df.dropna()`を使えば欠損値を含む行を削除してくれます。
“`py
df.dropna()
“`
欠損値が含まれる列を削除したいときは
“`py
df.dropna(axis=1)
“`

また、データ成形中にうっかりnumpy配列にNaNができてしまったら弾くようにしています。
“`py
def nan_checker(array):
“””
input ndarray
”’
return
配列にNaNが含まれない -> True
配列にNaNが含まれる -> False
“””
if np.any

OSS名 ロゴ
マーク
概要