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

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

jupyter labが動かなくなってしまった件について

# はじめに

インストールしているはずのjupyter labを立ち上げようと、
ターミナルでjupyter labコマンドを実行したら

“`
zsh:`jupyter-lab` command not found
“`
と表示されてしまったときの備忘録です。備忘録なので物語は進みません…。

# 動作環境
・MacBook Air (Retina, 13-inch, 2020)
・Big Sur11.4
・Python 3.8.9
・Anacondaは使用していません

# 実行したこと

(1)「jupyter lab存在しないよ」って言われたので再インストールしてみる

“`
(中略)
ERROR:Command errored out with exit status 1:
command:/Library/Developer/CommandLineTools/usr/bin/python3 -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘”‘”‘/private/var/folders/wh/d805s175

元記事を表示

Playwight for PythonでPytestコードが生成できるようになった

## サマリ

Playwright for PythonのVer.1.22からPytestコードが生成(codegen)できるようになっています。
本記事ではPlaywrightのインストールからPytestコードの生成までを試します。

https://playwright.dev/python/docs/release-notes#version-122

> – Codegen now supports generating Pytest Tests
![codegen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527184/863f1396-7282-e396-732d-fc18036ac0af.png)

## インストール

“`shell
pip install playwright pytest-playwright
playwright install
“`

## クイックスタート

シェル上で下記コマンドを実行してください。

“`shell
playwright co

元記事を表示

Pythonの点群・3Dメッシュ可視化ライブラリが多すぎてカオスなので整理してみる

最近Pythonで2次元/3次元問わずデータ処理を行うことが多いんですが、特に3次元データの方のライブラリが色々ありすぎて頭の処理が追いつかないのでちょっとだけ整理していこうと思います。
(随時更新予定…)

## PyVista

– https://github.com/pyvista/pyvista
– [Visualization Toolkit](https://vtk.org/) (VTK)をnumpyでラップした高レベルのAPI
– VTK・SLT・OBJ・PLYなど一通りメッシュが読める
– 結構GUIツールが揃っている感じ?
– 点群とメッシュの変換はできるらしい
– シミュレーション・レイトレーシング・GISで使えるとかなんとか

## Leafmap

– https://github.com/giswqs/leafmap
– lasを読み込める
– plyもいける?
– lasを読み込んだ時はlaspyのインスタンスが出来上がる
– 2次元データ処理寄り

## Open3D

– https://github.com/isl-org/Open3D

元記事を表示

メモ: Psycopg2 で配列に集約した結果をリストとして受け取るには、クエリに型をつければいい

時間がないので、ざっとメモ。

# 背景: PostgreSQL の array_agg は配列として集約する集約関数

こんな感じでユーザ `user_id` の通った学校の一覧 (`school` 列を配列にしたもの) を返すことができる。

“`sql
select user_id, array_agg(school) as schools
from …
where …
group by user_id
“`

これを psycopg2 で単純に受け取ろうとすると、`{‘foo’,’bar’}` のような配列の文字列表現が得られる。

# 問題: これを psycopg2 でリストとして受け取るには?

Python で扱うならリストとして受け取りたい。

# 解決策: クエリに型をつければいい

クエリには型がつけられる。配列であれば `<要素の型>[]` とすればいい。
たとえば前述の `school` 列の型が `varchar(…)` なのであれば、クエリをこうすればいい:

“`sql
select user_id, array_agg(school)

元記事を表示

CodinGameでNNを使う

# はじめに
[CodinGame](https://www.codingame.com/)では自分で作成したbotを使って他の人が作ったbotと対戦することができます。botに深層強化学習などのディープラーニング手法を使ってみたかったのですが、PyTorchを使うことはできず、また外部のリソースを用いることもできません。そのため、別の手段を用いる必要があります。
手順は以下の通りです。

1. PyTorchでネットワークを作成
2. 1のネットワークをCodinGame内で使用可能な形式に変換
3. Numpyで推論用のNNを作る

# PyTorchでのネットワークを作成
以下のようなConvolution、ReLU、Flatten、Linearのみからなるネットワークを作成しました。オセロのbot用に使うつもりなので入力サイズが64×64、出力クラス数を64としています。学習については割愛します。

“`python
import torch.nn as nn

class SLTrainingPolicy(nn.Module):
def __init__(self

元記事を表示

光量子で関数近似

# はじめに

量子計算には、 離散量 と 連続量 という二種類があります。

離散量を扱う目的では超伝導、イオントラップなどの実装が知られています。
離散量の場合、1量子は$0$か$1$か(あるいはその重ね合わせ)を取ります。状態は2つの複素数$\alpha,\beta$で指定できます。
量子の単位は 量子ビット と呼ばれ、イオン2個なら2量子ビットです。

連続量を扱う目的では光量子などの実装が知られています。
連続量の場合、1量子の状態は無数の複素数で指定されます。
例えば光量子の”位置$x$”を基底と考えると $\int_{x=-\inf}^{x=+\inf} x_{coeff.}|x> dx$ のような形で書けます。イメージとして。
同じように運動量$p$は $\int_{p=-\inf}^{p=+\inf} p_{coeff.}|p> dp$となります。
また、$x,p$の他に光子の個数$n$に着目した表現方法もあり、
$\sum_{n=0}^{n=+\inf} n_{coeff.}|n> dn$
このようになります。
基本としては ${x,p}$表現 or ${n}表現$

元記事を表示

Pythonで辞書を使うときに楽したい方へ

# 概要
突然ですが、Pythonの辞書を使うとき下記のように書いていませんか?
“`python
“”” numbersに格納された数値をカウントする辞書を生成 “””
numbers = list(map(int,input().split()))
dic = dict()
for num in numbers:
if num not in dic:
dic[num] = 0
dic[num] += 1
“`
おそらく本当は`if`の判定をなくして直接`dic[num] += 1`を行いたいですよね?
しかし直接それを書いてしまうと`KeyError`になってしまうから**仕方なく**書いてますよね?

なんと、下記の方法を使えば`if`文の判定をなくし、直接`dic[num]+=1`を行うことが出来ます!!

# defaultdict
存在しないキーが与えられると、**`KeyError`を起こさず**、定義した**関数**で初期化を行ってくれます。
つまり、キーの存在確認を行わず直接キーにアクセスすることが出来ます!

元記事を表示

日記: Codeforces Round #797 (Div. 3) A-FをPythonで解く

https://codeforces.com/contest/1690

# A. Print a Pedestal (Codeforces logo?)
mod 3で場合分けします。

$h3 < h2 < h1$であることが必要なので、$n$が3の倍数であるときある整数$k$に対して$k < k+1 < k+2$が($h1$が最小なものを探すという)条件を満たす最適な解です。$n$が3の倍数でない時を考えます。この時、余りのブロックを他に積まなければなりません。余りが1なら、$h2$あるいは$h3$を1つ高くすると条件を満たさないので、$k < k+1 < k+3$とするのが最適です。余りが2なら、$h1, h2$のみに積まないと条件を満たさないので$k < k+2 < k+3$とします。 時間計算量$O(1)$, 空間計算量$O(1)$です。

実装
“`Python
for _ in range(int(input())):
n = int(input())
n -= 3
ans =

元記事を表示

[2022年]IT系洋書1(オライリー)

O’Reillyの洋書を紹介します。
***
[Fluent Python[Amazon]](https://amzn.to/3tq7dxV)
![a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702119/d393d410-b04b-5046-4db9-bdd5afbc0584.jpeg)
– I. Data Structures
– 1 The Python Data Model
– 2 An Array of Sequences
– 3 Dictionaries and Sets
– 4 Unicode Text Versus Bytes
– 5 Data Class Builders
– 6 Object References, Mutability, and Recycling
– II. Functions as Objects
– 7 Functions as First-Class Objects
– 8 Type Hints in Function

元記事を表示

【Django】models.pyでデフォルト値を作成時刻にする方法

よく作成時間のカラムを作成するのに、
デフォルト値を作成時間にすることがあるかと思います。
その際に発生したWARNINGメッセージについて記載します。

## 各バージョン

* Django: 4.0
* Python: 3.10.2

## WARNING発生時のmodels.py
デフォルト値を作成時間にした際のmodels.py
“`models.py
from django.db import models
from datetime import datetime
# Create your models here.

class Todo(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(blank=True, null=True)
create_time = models.DateTimeField(default=datetime.now())
update_time = models.DateTimeField(defaul

元記事を表示

Streamlitの新機能マルチページを触ってみる

ロックの日初投稿です。

PythonコードだけでWebアプリが作れる[PyCaret](https://pycaret.org)ですが
先日Ver.1.10.0がリリースされてマルチページ機能が実装されました。
少し触ってみたのでまとめていきます。

https://blog.streamlit.io/introducing-multipage-apps/

# 環境
“`
Python 3.10.4
Streamlit 1.10.0
“`

# マルチページ機能とは
そもそもマルチページとはなんぞやという話ですが、
字面の通り、複数のページを用意できる機能です。

Streamlitは通常1ページの構成で、そのページの上ですべての動作が完結します。
ただ機能ごとにページを分けたいのが人情で、
下記サイトのように、st.radioをサイドバーに配置してマルチページを実装するのが一般的でした。

https://share.streamlit.io/andfanilo/streamlit-echarts-demo/master/app.py

ユーザがあれこれ工夫を凝らしている

元記事を表示

PythonでGCSを使ってみた

## やること
ベーシック認証を通してrequestsでデータ取得をし、CSVの形でGCSに格納する

## 前提
以前作成した下記記事の環境からスタート

https://qiita.com/sh19982580/items/11a918da6d1a03ddf265

## GCSコンソール

GCSのコンソール上で「バケットを作成」
※今回は名前が`test`
その下の階層に「フォルダを作成」
※こちらも名前が`test`

## コード
まずは、ローカルでCSVファイルを確認
requirements.txt

requests
google-cloud-storage

上記2つを追加、`pip install -r requirements.txt`

CSVファイルを格納しておく`download`フォルダを作成しておく

app.py

import os
from flask import Flask
import requests
from requests.auth import HTTPBasicAuth
f

元記事を表示

webスクレイピングについて

https://www.octoparse.jp/blog/10-myths-about-web-scraping/

詳しくは上記のサイトを見ていただけると幸いですが

一部を転記します

## Webスクレイピング

Web上に公開されている情報の中から特定のデータだけを自動抽出する「Webスクレイピング」が注目されています。
Webスクレイピングを活用することで、個人や企業活動のあらゆるビジネスシーンで業務効率化や、付加価値の創造に役立ちます。

Webサイトから自動的にデータを集めるWebスクレイピングを使えば作業効率を飛躍的に効率化します。
しかし、「そもそもWebサイトから情報を抽出するのは違法ではないか?」といった疑問を持つ方は特に多いでしょう。

結論として、Webスクレイピングそのものに違法性はありません。
データ分析を目的とし、新たに自社のデータベースとして活用する場合には問題ないとされています。

Webデータの活用は、民間に限らず政府も行っています。
たとえば、総務省では平成元年に消費者物価指数(CPI)の調査にWebスクレイピングの活用を発表しています。

元記事を表示

ERROR: The Compose file ‘./docker-compose.yml’ is invalid because

#### docker-compose up –build -d で ERROR: The Compose file ‘./docker-compose.yml’ is invalid because が出た時
“`
WARNING: The JUPYTER_HOST_PORT variable is not set. Defaulting to a blank string.
WARNING: The MINIO_ROOT_USER variable is not set. Defaulting to a blank string.
WARNING: The MINIO_ROOT_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MLFLOW_HOST_PORT variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_USER variable is not set. Defaulting to a b

元記事を表示

scipy.stats ジャック・ベラ検定 jarque_bera

# scipy.stats ジャック・ベラ検定 `jarque_bera`

データが尖度と歪度からみて,正規分布にしたがっているかを検定する。

サンプルサイズが 2000 以上の場合にのみ十分な近似ができる。小標本の場合には $\alpha$ エラーが大きくなりがちである。

`jarque_bera(x)`

“`python
from scipy.stats import jarque_bera
import numpy as np

np.random.seed(123)
x = np.random.normal(50, 10, 2000)
jarque_bera(x)
“`

Jarque_beraResult(statistic=4.35459209387323, pvalue=0.11334760325001603)

“`python
from scipy.stats import t
np.random.seed(123)
y = t.rvs(df=1, size=2000)
jarque_bera(y)
“`

Jarq

元記事を表示

CloudFunctionsにdeployしてエラーの場合

# エラー内容

“`
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function fail
“`
こんな感じで具体的な内容がわからない場合

# 原因

具体的な内容がわからない場合は、プログラムが悪い。今の所、それしか原因がなかった。
## 原因詳細1
引数が間違えていた
トリガーがGCSやpubsubの場合

“`python
def hogehoge(event, context):
“`

トリガーがhttp(s)の場合

“`python
def hogehoge(request)
“`

引数を取らないでやる処理の場合、ついつい引数無しで作ってしまっていた。

## 原因詳細2

requirements.txtの内容が不足している

ついつい忘れてしまう。

これはちょいちょい追加していきます。

元記事を表示

【Python】geopandasで描画したシェープデータをflaskでhtml上に画像出力できるようにした

シェープファイルをhtmlに表示させる方法を調べていくうちにPythonが持っているgeopandasという地図出力ライブラリだとshpの出力が可能だとわかり、シェープファイル(shp形式)を表示させてみました。

ところが、html上に表示させるためflaskを活用しようと思ったのですが、geopandas flaskで検索してもなかなか見つからず難航していたところ、shpファイルに対し、canvasを使って画像化する方法があることを知りました。そこで、flaskでその画像を表示できないか試行錯誤していくうちに、ひとまず方法を実現できたので、備忘録として記しておきます。

# 手順
手順は以下の通りです
1. matplotlibライブラリを使って、シェープデータを落とし込む表を作成する。
1. シェープデータを読み込み、plotメソッドで描画し、表に落とし込む。
1. 落とし込んだ表をcanvasで画像化する。
1. 画像化した表をflaskでhtml上に展開させる。

それぞれの方法はいろんなページで解説があるのですが、geopandasで描画したシェープデータをFlaskで表示

元記事を表示

将棋の囲いネットワークの頑健性を調べてみた

# はじめに
前回の記事[「将棋の囲いをネットワーク分析で定量化してみた」](https://qiita.com/igenki/items/cc74114e159ba1c167ab)では,将棋の囲いの**駒とひも**を**ノードとエッジ**に見立てることでネットワークを作成し,ネットワークの特徴量をもとに「囲いの特徴」を定量化してみました.後日この内容について,「囲いの駒の一部を削除してもネットワークの特徴はどれくらい保たれるか」という**囲いネットワークの頑健性**を調べてみてはどうかという興味深いご意見を頂きました.そこで今回も12種の囲い(矢倉,舟囲い,左美濃,エルモ囲い,雁木,居飛車穴熊,BIG4,美濃,高美濃,銀冠,振り飛車穴熊,中住まい)ネットワークを対象として,この頑健性を調べてみました.
なお,この記事は,@igenki,@splashBob,@karingoの3人で共同執筆しております.

# 頑健性の定義
囲いの

元記事を表示

Pythonの例外エラーログ、もうちょっと詳しく見たくない?

ある日の某Pythonアプリケーションのエラーログを眺めていると謎のエラーが…!

“`
Traceback (most recent call last):
File “/sandbox/app.py”, line 22, in
main()
File “/sandbox/app.py”, line 17, in main
sub()
File “/sandbox/app.py”, line 10, in sub
raise Exception(“sub error!”)
Exception: sub error!
“`

例外が起きたときのTracebackですね。
Exceptionに詳細が記録されていればわかりやすいのですが、上記のようになぜエラーが起きたのかわからないと困りますよね。

そんなとき、Tracebackのstackを追いかける事でそのときのローカル変数を取得できます。

こんなアプリケーションがあるとして
“`
def sub():
d = 4
e = 5
raise Ex

元記事を表示

コードベースで封筒の宛名とかをPDF出力できるツールを作った

コードベースで封筒の宛名とかをPDF出力できるツールを作った

JSONで宛名テンプレートと封筒のレイアウト指定してで印刷用のPDF吐く。

https://github.com/gretchi/envelope-maker

# 封筒作るん

JSON テンプレートから封筒に宛名とかの PDF 作るやつ

## Usage

“`shell
$ ./main.py -t [TEMPLATE_PATH] -p [LAYOUT_PATH] -o [OUTPUT] –a4
“`

`-t`: 宛先 JSON
`-p`: 封筒レイアウト JSON
`-o`: 出力先
`–a4` A4 互換モード(option)

宛名のサンプル: template.json
長形 3 号のサンプル: naga_3go.json

サイズ・位置パラメータは `mm` ミリメートル単位

### Dockerを使用したサンプル

“`shell
# Using docker
$ docker build -t envelope-maker .
$ docker run \
-v $PWD/dist:

元記事を表示

OTHERカテゴリの最新記事