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

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

miniforge / windows (うまくいっていない)

windows にベタに miniforge インストールする。

ダウンロードは、[miniforge の Releases](https://github.com/conda-forge/miniforge/releases) から一番シンプルなファイル名の “Miniforge3-Windows-x86_64.exe“ をダウンロードしてインストール。

インストールが終わって、仮想環境を作ろうとして、

“`
$HOME\miniforge3\Scripts\conda.exe create -n py39
“`

すると、proxy 関係ないはずなのに HTTP CONNECTION のエラーでつながらない。

というときは、

“`
$HOME\miniforge3\condabin\conda.bat create -n py39 python=3.9
“`

インストーラーを信じて、各自環境にインストールして、環境変数の PATH に miniforge3 のパスを設定**しない**ようにしたのに、正解の conda のパスを教えてくれないというイケズ

元記事を表示

windows10でPython用MeCabを使用するための準備(2022年1月)

# はじめに
windows10でpython用MeCabを使用するため環境を整えようとしたところ、いろいろエラーが出て、いくつかの記事をはしごしました。まとまった記事があっても良いな~と思ったので下記、一連の流れをざっくりとした記録として残します。

# 手順0. 環境
– Windows10 64bit
– Python 3.8.6
– Anaconda3 64bit

# 手順1. MeCab実行環境を導入:MeCabインストール
Windows10 64bitのため、以下からインストーラをダウンロード。

 https://github.com/ikegami-yukino/mecab/releases/tag/v0.996.2

mecab-64-0.996.2.exeをダウンロードしたら、右クリックから管理者として実行。
基本的には「OK」「次へ」「はい」ですが、文字コードをデフォルトをShift-JISからUTF-8にしておくこと。

 ★参考URL①: https://obenkyolab.com/?p=2682

# 手順2. mecab-pythonの導入:(mec

元記事を表示

[py2rb] 直列化

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 直列化 (Python)
“`python
import pickle
self.assertEqual(dict_, pickle.loads(pickle.dumps(dict_)))
“`
https://docs.python.org/ja/3.7/library/pickle.html

オブジェクトと、オブジェクトを直列化しさらに復元されたオブジェクトを比較していますが、Equal にならないこともあるのでしょうかねえ?
# 直列化 (Ruby)
“`ruby
assert_equal dict_, Marshal.load(Marshal.dump(dict_))
“`
https://www.shoeisha.co.jp/book/detail/9784798168845

独習Ruby 330p
> 7.2.7 オブジェクトのシリアライズ

ここでは、dumpをオーバーライドして特定のデータのみシリアライズする例が紹介されています。
# メモ
+ Python

元記事を表示

『エラトステネスの篩』の記述例(Python版)

[元記事](https://qiita.com/ytaki0801/items/40060bdad04edcd1bd3c)より分離しました.アルゴリズム等は元記事を御参照下さい.趣旨は元記事と同じく『「エラトステネスの篩」だとこれだけ速く素数が求まる!』ですが,ライブラリ等によってよりシンプルな記述表現がある場合など,他のプログラミング言語との比較を避けるため,個別記事としている次第です.特にPythonについては,現状で標準ライブラリと化しているNumPyを用いる場合とそうでない場合とで,記述表現や処理速度に大きな違いが出ています.

# 記述例および実行例

“`py:sieve.py
x = int(input())
a = [True] * (x+1)
a[1], r = False, []

for i in range(1, x+1):
if a[i]:
if i <= x**0.5: for j in range(i*i, x+1, i): a[j] = False r += [i] print(le

元記事を表示

[Python]コードサンプルが正しく動くことを担保し続けるためのdoctest入門

最近自作Pythonライブラリでがっつりdoctestを使い始めたので記事にまとめておきます。

# doctestってなに?

dostring内に書くコードサンプルを実際にPythonで動かしてエラーにならないことや返却値が正しいかどうかをチェックすることができる機能です。

※docstringについては必要に応じて以下の記事などをご確認ください。

https://qiita.com/simonritchie/items/49e0813508cad4876b5a

※Rustなどにも似たような機能がビルトインで入っています。

https://doc.rust-lang.org/rustdoc/documentation-tests.html

# doctestを書くとなにが嬉しいの?

docstringにコードサンプルが載っているとユーザーがエディタ上などでさくっと使い方を確認できてユーザーフレンドリーです。

一方で書いただけだとそのコードサンプルはテストやLintでチェックされるわけではありませんので正常に動作しないケースが発生し得ます。書いたときは動いていても日々の

元記事を表示

公開level botを改変して見やすくしていく

このサイトからcodeを取っていく

https://zenn.dev/dms/articles/8cf6c1b16f94c0

人のプログラムを改変していく

その前にlevelというフォルダ作っていてください

from discord.ext import commands
import discord
import os
import sqlite3

conn=sqlite3.connect("level.db", check_same_thread=False)
c=conn.cursor()

prefix="?"

token="トークン"

bot=commands.Bot(command_prefix=prefix)

c.execute("CREATE TABLE IF NOT EXISTS level(userid, level, exp)")

@bot.event
async def on_ready():
print("起動")

@bot.listen("on_message")
async def level_c

OpenVINOで推論してみた2 age-gender-recognition

# 初めに
OpenVINOで推論してみた第二回になります。前回の記事で顔検出をやりましたが、それを使って今度は顔認識を行っていきます。今回は年齢と性別を判定するものですね!
それでは早速やっていきます!!

https://qiita.com/cabocha725/items/a84997b93c37b08e6599

今回も最後に使った全コードを載せておきますので説明等不要な方はとりあえず実装してみてくださいね!!

# 実行環境
windows10
OpenVINO toolkit 2021.4.752
OpenVINO 2021.4.2
python 3.6
opencv 3.4.2

# age-gender-recognition-retail-0013

## モデル詳細
githubは[こちら](https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/intel/age-gender-recognition-retail-0013, "age-gender-recognition-0013

ラズパイ+OpenCVの画像処理の速度調査

# はじめに

[以前、ラズパイを使って子供の寝相の監視をした](https://qiita.com/mickie895/items/dbb7571388264e575ec8)が、そのときにMicroSDの容量不足に悩まされた。

OpenCVで保存すれば容量は減らせるのだが、撮影間隔を守ることができなかったので、
実際にどれぐらい時間に対して不安定なのかを確認していた。

もったいないのでとりあえず公開しておく。

# 時間測定用コード

適当な時間待ってから写真を撮って保存するのにかかった時間を計測するプログラムを書いた。
これを起動して、一晩放置してみた。

```python
from picamera import PiCamera
from picamera import array
from time import sleep
import datetime
import cv2

count = 0

with open("time.csv", "w") as w:
with PiCamera() as cam:
while count < 10

【Plotly】PythonのPlotlyで時系列データを可視化する

##1.初めに
Pythonでデータを可視化する際、matplotlibとseabornが定番だが、表示範囲やスケールを変える際の手間がかかる。
インタラクティブに表示範囲・スケールを変更できる可視化ツールとして、今回Plotlyの使い方を簡単にまとめた。

##2.プログラム

```python:visualize.py
import pandas as pd
import numpy as np

df_passanger = pd.read_csv("AirportPassengers.csv", sep=";", index_col=0)
print(df_passanger.head())

# Using plotly.express
import plotly.express as px

#fig = px.line(df_passanger, x="Month", y="Passengers", title='Life expectancy in Canada')
fig = px.line(df_passanger, y="Passengers", title=

【AtCoder】PythonでABC235 C問題(The Kth Time Query)を解く

せっかくQiitaのアカウントを取得しましたので、AtCoderの問題の解説を書いてみたいと思います。

# 問題

[HHKB プログラミングコンテスト 2022(AtCoder Beginner Contest 235)](https://atcoder.jp/contests/abc235/tasks/abc235_c)

# 考察

## やりたいこと

まずは落ち着いて問題文を読む。

長さNの数列 A がある。たとえば、A = \[ 1 1 2 3 1 2 \] (入力例1の場合) 。
この数列に対して、以下のようなクエリが飛んでくるので、順に答える。

・「1が1番目に出てくる場所はどこか?」 → 「1番目です。」
・「2が2番目に出てくる場所はどこか?」 → 「6番目です。」
・「3が2番目に出てくる場所はどこか?」 → 「ありません。(3は1個しかない)」
・「5が1番目に出てくる場所はどこか?」 → 「ありません。(5は一つもない)」

## 愚直な探索の計算量

一つのクエリが来たら、Aの先頭から順に要素を見ていって、たとえば「3が2番目に出てくる場所」がどこか

#1 Pandas入門

新たにpandasを学習し始めたので、学習した内容を記録しておきます。間違った内容を書いてしまう場合もございますのでその際はご指摘していただけるとありがたいです。
記事の内容はpandasを使用する上での最低限の内容になります。
#Pandasとは
Pythonで最もポピュラーなライブラリの一種で,主に表計算などのデータ処理が得意でSeriesやDataFrameなどの独自のデータ形式を持っています。
Excleやcsvなどの表形式のデータを読み込んで、計算を行うことができます。
#DataFrameとは
Pandasでは表形式のデータのことをDtaFrameと言い、Headerの中にcolumnがあり横1行のことをrecordと言います。
そして縦一列または横一行のことをSeriesといい、このSeriesが集まってできたものをDataFrameと呼びます。
#DataFrame基本操作
まず初めに、Pandasをimportします。

```
import pandas as pd
```
次に、kaggleからデータをread_csvインポートします、今回使用するのはTMDB50

【GCP】Cloud Functions (python)をCloud Build でdeploy する

# はじめに

Cloud Functions を python で使ってみるための調査をしました。いまどき、サーバレスでなくてはね、ということで、老体に鞭を打ち、休日に作業しています。戦いの証をこちらに掲げています。

https://github.com/xtkd77/XPT60-memorandum/tree/main/2022_01_16_python_cloudfunctions

# Quick Start から CDまで

## まずはQuick Start

Quick start は、コンソールだけでdeploy するところまでできます。テストも楽にできるんだなーというのが、印象的です。

https://cloud.google.com/functions/docs/quickstart-python

その後、gcloud による操作をここを読んでざっと理解しました。

https://cloud.google.com/functions/docs/quickstart#functions_quickstart_helloworld-python

これらを

天気予測AIを作る

#概要
[前回](https://qiita.com/TanakaSU/items/a382a2032c479f37ced2)、気温を予測するAIを作りましたが、天気を予測してみようと思い作りました

#環境
OS:Windows
言語:Python
エディター:Geany

#データを集める
AIに学習させるための気象データを集めましょう。
今回は気象庁のHPから過去の気象データをダウンロードします。

https://www.data.jma.go.jp/gmd/risk/obsdl/

年月日,平均気温(℃),降水量の合計(mm),日照時間(時間),最深積雪(cm),平均風速(m/s),最多風向(16方位),平均蒸気圧(hPa),平均現地気圧,等のデータをダウンロードしましょう。

#説明変数がテキストだった場合どうすればよいか?
今回は説明変数の中に風向き(16方向)がありますが、そのままでは使えません。なのでテキストを種類ごとにナンバリングしてくれる機能を使います。

```python
from sklearn import preprocessing
label = p

# mplfinanceで作成するローソク足チャートのチートシート

Pythonの```mplfinance```はローソク足チャートを作成するにあたって非常に便利なライブラリですが、描画するスタイルを自分の好みに編集する方法をまとめているサイトが全然なかったので、備忘録として記しておきます。

### pandas_datareaderを使ってデータを取得する
ローソク足を使うデータは以下のコードで取得したものを使用します。

``` python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data

# yahooから2021/01/01から2021/04/01の期間の日経平均のデータを取得
df_master = data.DataReader('^N225', 'yahoo', '2021-01-01', '2021-04-01')
```

### 1. mplfinanceに用意されているスタイルを利用する
mplfinanceライブラリに用意されているスタイル一覧は以下のコードで確

Pythonを使って周囲の Wi-Fi 情報(SSID・BSSID・電波強度)を取得する

# モチベーション

Windows で Wi-Fi の SSID と BSSID を取得したいと思ったのがきっかけ。
はじめはコマンドラインで `netsh wlan show networks mode=bssid` で Wi-Fi の一覧を取得しようかと考えていたのですが、[参考資料](# 参考資料)にある通り、何度実行しても同一のSSID/BSSIDになってしまったり、複数あるはずのSSIDが接続中のSSID1つだけになってしまったりしました。

[解決方法](https://teratail.com/questions/174005#reply-295932)を以下に引用します。

> C#を使ってWindowsAPIを呼び出すことでWifiの電波強度一覧を取得することができました。
> 使用したAPIはWlanScan()です。NativeWifiというオープンソースのライブラリを使って使用することができました。

上記を Python でもできないか調べたところ、`win32wifi` を見つけました。

# 環境
- Windows 10
- Python 3.6

生徒の努力は得点じゃなく、「音ゲー」ようなリザルト画面で評しました!

フランスの大学院で先生の仕事を行いながら、生徒のためにいつも新たな教え方を探しています。僕はプログラミングのレッソンを差し上げるので、そのお返しに生徒は応用問題をしなきゃいけません。

会社に仕事でも、学校の教育でも、先輩からもらったの感謝は第一な事って僕が絶対に思います。今回は先生として、その先輩になるだからこそ、感謝の正しい伝え方を探しに行きました。生徒の努力がちゃんと認めたら、自然に頑張ります。

生徒は得点を持ったなければならなくても、その先、応用問題がよくできたかどうかは伝えたい。でも結局、それは十分じゃないだと思いました。最初は、応用問題に関して生徒の努力をはっきり感謝したい。そうしたら頑張らなかった生徒は悔しいくて盛り上がって、よく頑張った生徒はもっと頑張ります。

---

## 得点のかわりは、何?

勇気付けられる物を考えたら「音ゲー」を思いだした、すなわち、リズムゲームです。一曲を遊んだ後で、リザルト画面は文字スコアで性能を見せます。

あまりできなくたら「B」スコアを当たって、普通にクリアしたら「A」スコアがあって、もっと上手なできたら「S」スコアがあって、それ

PythonのFastAPIをLambdaで動かそうと思ったらSQLModelも使ってみたくなったので調べてみた(テストまあまあ盛り)

# はじめに
Pythonでデータ分析やスクレイピングや画像認識などをやっているのですが、Webアプリのバックエンドとして仕事で本格的に利用したいと思い、いろいろ調べてみると、AWSの
LambdaでFastAPIを動かすとの話題が多く目に留まり、ふむふむ、と進めていくと、SQLModelも一緒に利用したいと思い、半日ほど試行錯誤してみたのでまとめてみたいと思います。

ソースは[github](https://github.com/small-java-world/sqlmodel_sample)に登録しております。

# SQLModelの概要
SQLModelは、直感的で使いやすく、互換性が高く、堅牢になるように設計されており、Pythonの型アノテーションに基づき、PydanticとSQLAlchemyを利用しています。
[SQLModelの公式ページ](https://sqlmodel.tiangolo.com/)

# 利用例

公式サイトのサンプルコードに出てくるHeroクラスとTeamクラスを対象とする利用例となります。

ファイル構成は以下のとおりです。

```

Lambdaで当日との日付の差分を算出する [ Node.js・Python ]

#はじめ
Lambdaで、当日の日付を`20220116`の形にし、5日後の日付`20220121`を引くと、`5`という数字が出せるようにすることを目的として、Lambdaを作成したため、まとめます。

#Lambdaコードの流れ

###当日の日付

1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓UTCをJSTに変換する
2. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓タイムスタンプに変更
2. 1642765665851
- ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
2. 20210116

###5日後の日付

1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓日付を5日進める
1. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
- ↓UTCをJSTに変換する
2. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
- ↓タイムスタンプ

League of Legendsの高ランクプレイヤーの試合情報を取得する (2022年版)

2022年からRiot Games APIから高ランクプレイヤーの試合情報を取得する方法が変わった為、備忘録として残す。

# 全体の手順
1. 高ランクのプレイヤーのsummoerIdを取得する
1. 各プレイヤーのpuuidを取得する
1. puuidに紐づくmatchIdを取得する
1. matchIdに紐づく試合情報を取得する
1. matchIdに紐づくタイムラインを取得する
※ タイムライン: いつ、どんなアイテムを購入したか? どのようなオブジェクトを破壊したか?など

2021年からの大きな変更点
日本サーバーの場合、エンドポイントは`https://jp1.api.riotgames.com/lol`が決め打ちだったが、2022年から、3のmatchId取得から`https://asia.api.riotgames.com/lol`に変更。

## 1. 高ランクのプレイヤーの情報を取得

手順: 取得したJSONの['entries']の中にある人数分のsummoerIdを抽出する
チャレンジャー帯
`https://jp1.api.riotgames

Windows のタスクトレイに Python アプリを常駐させ定期的にプログラムを実行する

# 常駐アプリを作ってみたい

お手軽にタイトルみたいな事ができないかと調べていたときに `pystray` というライブラリを知ったので[参考資料](# 参考資料)を見ながら作成してみました。
ご指摘やアドバイス等あればコメント頂きたいです。

# 環境

- Windows 10
- Python 3.9
- 追加ライブラリ
- `pystray`
- `schedule`

# プログラム

中身を確認しながら自己責任で実行してください。
アイコン (`sample.jpeg`) は ICOON MONO さんのフリー素材を使用しました。

```python:tray.py
from pystray import Icon, MenuItem, Menu
from PIL import Image
import time
import threading
import schedule

class taskTray:
def __init__(self, image):
self.status = False

##