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

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

仮想環境内でのpythonのバージョン変更

仮想環境でのバージョン変更

pythonのバージョン変更を行なった際に、仮想環境内でのみ、バージョン変更が反映されていないことに気が付いた。

調べてみると、やはり仮想環境でのバージョンは、仮想環境作成時のバージョンに固定されるらしく、**仮想環境のクリア**を行う必要があると判明した。

バージョン変更の手順

初めに、**クリアを行うとpip installしていたものが全て削除されしまう**ので、それへの対応を行うため、以下のコマンドをターミナルで実行する。

ルートディレクトリにrequirements.txtを作成し,
`$ touch requirements.txt`

現在の環境でインストールしているパッケージとバージョンを書き込む。
`$ pip freeze > requirements.txt`

この作業を行うことで、バージョン変更後に、
`pip install -r requirements.txt`
を行うことで、インストールしていたパッケージとバージョンを一括でインストールできる。

以上の作業を行なった

元記事を表示

HTMLでPython(PyScript)を使って見た【まだまだ使いにくい】

2022年の5月くらいにリリースされた `PyScript` を今更ながら使ってみました。

## 使ってみた感想・難点

– 動作が遅い(最初にpython実行関連をダウンロードしてコンパイルするため)
– ライブラリを使うとさらに遅くなる
– HTML上でpythonを記述するので補完がない
– 情報が少ない
– 外部ライブラリで使えるものは少ない

## 使い方

`head` 内に以下を追加。

“`html
“`

あとは `body` の `py-script` 内にpythonのコードを書くだけ。

“`html print(“Hello, world!”); “`

![e6b1bd2fb12081fd3ec8b6755e884bf0.g

元記事を表示

縦書きEPUBをPDFに変換する

## はじめに
こちらは縦書きのEPUBをPDFに変換したときの備忘録です。
変換ソフトやwebアプリ等で変換してもうまくいかず、
自分でやったところうまくいったので記事にしました。
Pythonを使ってますが、やってること自体は簡単なので別言語でもできると思います。

## 必要なもの
– Chrome
– EPUBファイル
– Python
– bs4 0.0.1
– lxml 4.9.1
– pypdf 3.3.0

## EPUBの展開
EPUBの実態は`zip`ファイルなので展開できます。
記事で使用するデモ用のepubは**夏目漱石**作の**こころ**使用しています。理由はフリーで手に入るからです。(ファイル名は`kokoro.epub`)
早速作業開始します。

`kokoro.epub`の拡張子を`.zip`に変更し展開します。
展開結果は以下のようになります。
“`
kokoro
│ content.opf
│ cover.jpeg
│ mimetype
│ page_styles.css
│ stylesheet.css

元記事を表示

②Portfolio using Python : Obtaining Data, Visualization in Python

## Objective
I would like to give a try to create something using Python rather than preparing in advance to know deeply about it.

Things I am doing are…

– obtaining historical data from Stock Market
– making data visualization (plot)

## 1: geting stock market data

There are several sources you can get historical daily price-volume stock market data from.
I use stooq(https://stooq.com/) this time.
(Yahoo is no longer being used since Pandas is no longer working with Yahoo Finance.)

##

元記事を表示

Django ORMのN+1問題について整理する

# 目的
Djangoでデータベースとやり取りする際に、ORMを使うことが多いかと思います。
ORMは非常に強力ですが、場合によってはレスポンスタイムの悪化を引き起こすことがあります。
今回はその原因となる「N+1」問題についてと、その解決方法を示します。

# N+1問題とは
データベース上のデータを取得する際に発生する性能の問題です。
一般的に、1つの主データに対して、それに紐づく複数のデータを取得する場合、1回のクエリで主データと全ての紐づくデータを取得することが望ましいとされます。

しかし、ORMを使用した際に、1つの主データに対して、それに紐づく複数のデータを取得する際、1つの主データに対して1回のクエリを発行し、その紐づくデータを1つずつ取得することがあります。
結果 **「主データ(1) + 紐づくデータ数(N)」** の数だけクエリが発行され、性能劣化を引き起こします。

:::note info
N+1問題とは
主データに紐づくデータ(N個)を取得する際
**「主データ(1) + 紐づくデータ数(N)」** の数だけクエリが発行され、性能劣化を引き起すこと
:::

元記事を表示

【Python】ネストしたforループは長い方を内側の順が速い

# はじめに
順序変更に対して同じ結果が得られるネストした繰り返し処理(forループ)の場合、長い方を内側にして回した方が処理が速いようです。(どこかでそのような記事を読んだことがあるのですが、探せませんでした。)
本記事では、その事について実際に計測して比較しました。

# 実装
Google Colabで作成した本記事のコードは、[こちら](https://colab.research.google.com/drive/1PawIR8_z8NkZd7X1Z_udkNrnKsJtRXXC?usp=share_link)にあります。

# 結果
Google Colabのセル内を[timeit](https://docs.python.org/3/library/timeit.html)で計測しました。100ループ(“-n 100“)を10セット(“-r 10“)した結果を表記しています。
計測には
## 2ネストループ
“`python:array[y][x]
%%timeit -r 10 -n 100
for i in range(10000):
for j i

元記事を表示

犬、猫、うさぎの画像を分類するWebアプリ

AidemyのAI アプリ開発講座の成果物として、3種類の動物の画像を識別するWebアプリを作成しました。
Google Colaboratoryでモデルを構築し、RenderでWebアプリを公開しています。
画像認識、Webアプリともに初めてとなりますので、いろいろとコメントいただけると嬉しいです。

## Webアプリ作成までの流れ
[1. 学習用データの準備](#step1-学習用データの準備)
[2. モデルの構築](#step2-モデルの構築)
[3. Webアプリの作成](#step3-webアプリの作成)
[さいごに](#さいごに)

## STEP1. 学習用データの準備
学習用データはスクレイピングで用意しました。
(スクレイピングの詳細については省略します)

* 取得した画像はGoogleDriveに保存し、GoogleColaboratoryにマウント

“`python
from google.colab import drive
drive.mount(‘./gdrive’)
“`
フォルダの階層は以下のようになっています。
content
├ gdr

元記事を表示

UbuntuにAnaconda+Flask環境を作成する

## 環境確認
“`sh
lsb_release -a
“`
“`
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
“`
## Anacondaのinstall
wgetでダウンロードしてきます。
https://www.anaconda.com/products/distribution#Downloads
“`sh
https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh
“`
ダウンロードしたスクリプトをbashで実行
“`:~/Anaconda3-2022.10-Linux-x86_64.sh
bash Anaconda3-2022.10-Linux-x86_64.sh
“`
“`:出力
Welcome to Anaconda3 2022.10

In order to continue the installation process, please revi

元記事を表示

Pythonでmultiprocessing(並列処理)を簡単に実装+可視化してくれるライブラリを作ってみた

# 前置き
Pythonで簡単に並列処理(multiprocessing)を行ってくれて、進捗を可視化してくれると助かると思ったため、それを実現するライブラリを作りました。
### 製作動機
面倒くさくて重たい処理をできれば並列処理したいなあ…ついでにその進捗もわかれば便利だなあ…
と思い、作りました。
またせっかくなのでtqdmではできないような、一行で並列処理とその進捗可視化できたら大変便利だと思ったのも動機の一つです。

https://github.com/Domzou-kun/prpl/blob/main/readme.md

この記事は基本的に**リポジトリのreadmeを日本語訳したもの**になりますが、Qiita用に編纂しています。

### QIita投稿動機
GitHubのraadmeは英語のため、日本人ユーザがわかりにくいと感じたため、日本語でも解説しておいた方が自身も便利であると感じたため、本記事を作成しました。

# prpl (progress-parallel)
`prpl`はPythonのライブラリであり、Pythonの標準ライブラリである`co

元記事を表示

Blenderのジオメトリーノード全種類名の名前とクラス

## ジオメトリーノード全種類の名前とクラス

ジオメトリーノードの名前からそのクラスを知りたかったので、全種類のデフォルトの名前とそのクラスの一覧を作成しました。

## 作成方法

ノードのクラスはシェーダーやコンポジットなどでも使われていますが、全て`bpy.types.Node`の派生クラスです。
そこで、`bpy.types.Node`の全派生クラスを実際にジオメトリーノードに作成して成功したものを抽出しました。

後で辞書として使いたいので、JSONで書き出しています。短い名前のときに、前から検索して別のノードと間違えないように逆順にしています。

“`python:make_all_nodes.py
import bpy

bpy.ops.mesh.primitive_plane_add() # dummy object
mds = bpy.context.object.modifiers.new(“GeometryNodes”, “NODES”)
mds.node_group = node_group = bpy.data.node_groups.new(“Geom

元記事を表示

pythonでkintoneアプリのレコードデータを取得する方法(1レコード)

# 最初に
 kintoneのアプリのデータを自動で一括取得したり、登録したりしたい状況があるかと思います。kintoneではREST APIが用意されており、いろいろなプログラム言語等からデータを簡単に取得したり登録したりすることができます。
 そこで、本記事ではpythonを使ってkintoneのアプリからレコード1件取得する方法をご紹介します。

kintone公式のkintone APIの使い方の説明に従います。
https://developer.cybozu.io/hc/ja/articles/202331474#step1

# 環境
* windows11
* python 3.11.1

# 準備するもの
* kintoneアプリ
* 上記の読み取り権限があるログイン名とパスワード
* アプリのレコードデータ

今回は下記のようなアプリを用意しました。
![kintoneのアプリ絵.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118247/770f6a2f-59ca-13ad-32

元記事を表示

pythonで数字のファイル名を1つずつずらして名前変更

1.txt ⇒ 2.txt
2.txt ⇒ 3.txt
3.txt ⇒ 4.txt

もっと良いやり方あったら教えてくださいm(_ _)m

“`python
import os
path = “./dirname”
folderfile = os.listdir(path)
file = [f for f in folderfile if os.path.isfile(os.path.join(path, f))]
newlist = sorted(file, reverse=True)
for f in newlist:
basename_without_ext = int(os.path.splitext(os.path.basename(f))[0])
before_name = os.path.join(path,f)
after_name = os.path.join(path, str(basename_without_ext + 1) + os.path.splitext(os.path.basename(f))[1])
os.ren

元記事を表示

TeachableMachineのモデルと同程度のファイルサイズのモデルをMobilenetV2で作成してみた

# はじめに

TeachableMachineで作成した画像分類のモデルをKerasの形式で出力すると、h5ファイルのサイズが2.4kBしかありません。TeachableMachineでは画像分類のモデルをMobileNetを使って転移学習により作成しています。
[前回の記事](https://qiita.com/_Moony/items/0f6635b2e47a941c1696)では、ファイルサイズが小さい学習モデルを得ることを目的として、MobilenetV2を使った転移学習のプログラム(TrainValidation_MobileNetV2_model.py)を作成して

https://github.com/repositoryfiles/Metallography-MobileNetV2

にアップしました。このプログラムでは、画像分類のモデルをh5ファイルで2.1kBのサイズで出力します。ファイルサイズで言えば、TeachableMachineと同程度のモデルが得られています。
今回はそのプログラムを簡単に解説します。素人作成のプログラムのため改良の余地が多々あり不十分な

元記事を表示

24時間ストリーミングのカメラ映像をリアルタイムで物体検知させ続けるのに苦労した

![Qiitaタイトル用.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140663/9ef5c90c-6740-f505-3176-d4f36187d64e.jpeg)

# サマリー
**・ストリーミング映像を表示させるのは意外と簡単で難しい
・ストリーミング映像を長時間表示させたときに見舞われたトラブル
・トラブルの解消
・まとめ**

ここではIPカメラからの道路の映像をストリーミングで垂れ流し、それをYOLOX+motopy(トラッキング)で車両をリアルタイムで検出して渋滞情報を表示する、というシステム構築の苦労話を書きます。

開発したシステムは道路に設置したIPカメラをターゲットにしているので、ストリーミングは24時間365日に対応することを想定しています。逆を言うと、こんな膨大な映像データはいちいちムービーファイルに落としているとキリがないので、ストリーミングで垂れ流してバックアップは取らず、その都度リアルタイム処理するのが現実的なわけです。

ただし1時間や2時間のストリーミングでは問

元記事を表示

NI DAQmx Python API で波形を生成しながら出力する

この記事は,ご覧のモジュールの提供でお送りします.

“`python
import numpy as np
import nidaqmx as ni
from nidaqmx import constants
“`
\*\*\*

長年生きていれば,DAQから波形を生成したくなることくらい一度はある.
それも,ちょっとした波形ではなく,1時間や2時間にもわたる,高サンプリングレートの波形だ.

“`python
fs = 800000 # サンプルレート 800 kHz
dur = 3600 # 波形の時間長さ 3600 sec
n_samp = fs * dur # 波形のサンプル数

def get_wav():
t = np.linspace(0, dur, n_samp) # 高サンプリングレート の
wav = np.sin(2 * np.pi * t) # 1 Hz sin波
return wav
“`

そこでパッと思いつくのは,数時間分の波形をそのまま`task.write()`に渡すことで

元記事を表示

【matplotlib】0を含んだ画像をlogスケールで白塗りにならずに表示する方法

# はじめに
matplotlibで0が含まれ画像を対数(log)スケールで表示するとき、以下の図の左側のように0の値が白塗りされてしまう事態に遭遇したことはないだろうか。0値にカラーをつけるなら、右側のような色になってほしいですよね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1599258/2c28e8d0-c1b2-36bc-bc9a-413001ba1ee6.png)

そこで、本記事では、**白塗りにならないで正しく表示する方法**を紹介します。

# 実装
Google Colabで作成した本記事のコードは、[こちら](https://colab.research.google.com/drive/1WSSfqg143g8StG32HUqmWxgqRJNB2E2N?usp=share_link)にあります。

## 各種インポート
“`Python:各種インポート
import cv2
import numpy as np
import matplotlib.pypl

元記事を表示

venv 仮想環境 gitのバージョン管理から外す

venv を gitignoreする方法をいつも忘れるので記載
下記ファイルを仮想環境のトップ階層に設置してpush

“`.gitignore
.Python
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
[Ss]cripts
pyvenv.cfg
.venv
pip-selfcheck.json
“`

元記事を表示

Python初心者がTwitterAPIを使用してにじさんじの新人のフォロワー数を取得する

# 完成形
![にじ新人ツイッターグラフ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118162/0eb47e38-e81b-849a-e5be-7dc9318b4ec2.png)

# 経緯
プログラム経験がないアプリケーションエンジニアだが、僅かなプライドからプログラム教室に通わず、Youtubeの動画にてPythonを学び始めた。
その中でTwitterAPIを説明した動画を視聴し、同時期にデビューが決まったにじさんじのタレント7名のフォロワー数の推移を表せれば面白いと考えた。
プログラム経験がなく、興味の赴くままのコードを使用しての記述のため、ソースコードにてお作法が守れていない、迂遠なロジックな部分が多々ある。
作成版→修正版→習熟版とソースを更新していき、自分の学習段階を図測るものとして使用したい。

# 使い方
①main.py にてTwitterAPIをたたき、ユーザー情報、フォロワー数などを取得し、niji_count.xlsx に更新する。
③test.py にてniji_co

元記事を表示

AtCoder ABC286 F – Guess The Number 2の雰囲気をつかむ

https://atcoder.jp/contests/abc286/tasks/abc286_f

公式解説だと各modをどう取るの?が省略されているのでその辺りの補足。

# 回転(rotate)する配列
この問題はindex $i$の値であるa_iをindex $a_i$にある値で置き換える操作をN回行います。

`a = [0,1,2]`という配列は何回置き換えても常に`[0,1,2]`となります。ここで、この配列を`a = [1,2,0]`と元のindexを一つシフトさせた(厳密には長さ$l$に対して各要素を$i+1 \mod n$とした)配列を入力したことを考えます。操作の旅に
“`
[1,2,0] -> [2,0,1] -> [0,1,2] -> [1,2,0] …
“`
というように配列を回転させたようになることがわかります。この周期は$l$であるので、$N$回、回転させた時に、$N \mod l$が何であるかは判定できます。例えば、結果が`[2,0,1]`なのであれば、`N=1,4,7,…のどれか`のようにN=1+(3の倍数)であることがわかります。

#

元記事を表示

PyGMTをAWS Fargateで使えるようにする

# はじめに
[ローカル環境でPyGMTを使えるようにはなった](https://qiita.com/ckw-1227/items/73e33e3a86e10c13f334)が、せっかくなのでAWS上で使えるようにしたいと思った。…思ってしまった。ので、試行錯誤してみた

# 構成
当初、できるだけ簡単な構成にしたくてPyGMTをコンテナLambdaで実行してみたのだが、PyGMTは実行時に/.gmtフォルダを作成するらしく、/tmp/以下にしか一時ファイルを保存できないLambdaではエラーが起きてしまった。
そのため搭載先をFargateに変更し、Fargate上で描いたテスト用の地図をファイルとして出力し、S3へ保存するプログラムを作成した。
![005_lambda_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/fe499106-6530-afd2-7672-9dd5c5b1b488.png)

# S3バケットの作成
事前に画像ファイル格納用のS3バケットを作成しておく

元記事を表示

OTHERカテゴリの最新記事