Python3関連のことを調べてみた2020年08月29日

Python3関連のことを調べてみた2020年08月29日

pyautoguiを【超適当に】マルチディスプレイ環境に対応させる Part2

前回の記事:[pyautoguiを【超適当に】マルチディスプレイ環境に対応させる Part1](https://qiita.com/kznSk2/items/a6833c095aec3b8ce72e)

# 目的
pyautogui.locateOnScreen()で得た座標を、そのままpyautogui.click()に渡したい。

# 環境
python 3.8.5
pyautogui 0.9.50
pyscreez 0.1.26
OS windows限定
[win32api](https://github.com/mhammond/pywin32/releases)
上記はpipからインストールできないので、リンクから自分の環境にあったものをダウンロードしてインストールする必要がある。

# 調査
locateOnXXX()系の関数は大体locateOnScreen()を呼び出しているので、この関数を修正する。

~~~python:pyscreez\__init__.py

def locateOnScreen(image, minSearchTime=0, **kwargs)

元記事を表示

[Python]randrange()とrandint()の違い

#環境
・Python 3.8.5
・osx10.15.6

#はじめに
`Python`で初めてランダムな数を用いるとき同じような表記があったので違いを記した。

#randrange()とは
`random.randrange(a, b)`は『a』から『b-1』までの整数を返す。
引数が1つの場合は『0』から引数マイナス1の整数を返す。

#random.randint()とは
`random.randint(a, b)`は『a』から『b』までの整数を返す。

#違いは
最後の数を含むか含まないかの違い!
`random.randrange(a, b)`の方は最後の値を含まないので`len(配列)`と組み合わせて
配列の繰り返し処理の便利です!

#参考
random関数について
・https://www.lifewithpython.com/2013/04/random.html

元記事を表示

Cloud DataflowでBigQueryにストリーミングインサートする時のちょっとした注意

# 問題
Dataflowで、[Build-in I/Oのライブラリ](https://beam.apache.org/releases/pydoc/2.23.0/apache_beam.io.gcp.bigquery.html)を使って、BigQueryにストリーミングインサートでデータを挿入しようとすると思わぬエラーに見舞われた。

# こういうコード

“`pubsub2bigquery.py
import argparse
import logging
import json

from past.builtins import unicode

import apache_beam as beam

from apache_beam.io.gcp.pubsub import ReadFromPubSub
from apache_beam.io.gcp.bigquery import WriteToBigQuery
from apache_beam.options.pipeline_options import PipelineOptions
from apache_beam

元記事を表示

pyautoguiを【超適当に】マルチディスプレイ環境に対応させる Part1

# 目的
pyautoguiをマルチディスプレイ環境下でも使いたい、より正確にはマルチディスプレイ環境下のサブディスプレイ内で画像認識させたい。
# 環境
python 3.8.5
pyautogui 0.9.50
pyscreez 0.1.26
OS windows限定
# 調査内容
参考:[pyautoguiのlocateOnScreen()がマルチディスプレイ非対応な理由](https://qiita.com/tatmius/items/b6ff8fa81d09c95374bd)
上記記事にて、以下の記述を発見。
>PILのimageGrab.grab()がデュアルディスプレイに対応していない

これを読んでおや?と思い、imageGrab.grab()の定義を確認してみた。

~~~python:imageGrab.py
def grab(bbox=None, include_layered_windows=False, all_screens=False, xdisplay=None):
~~~
~~~python:grab()
all_screens=False
~~~

元記事を表示

JupyterLabをローカルとリモートで使い始める方法。git拡張もできる。

##始めに

JupyterLabを導入した時の個人的なメモ。環境構築は忘れやすいので。

####参考資料

* Installation — JupyterLab 2.2.6 documentation
https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html

* JupyterLabのすゝめ – Qiita
https://qiita.com/kirikei/items/a1639954ce5ccaf7ac3c

####実行環境

Anacondaユーザーはpipと競合するので、この記事の対象外です。

* macOS Catalina 10.15.6
* pip 20.2.2
* python 3.8.5

##インストール

“`
$ pip install jupyterlab
“`
これだけです。ただし、Jupyter Notebook 4.3以上が必要なので

“`
$ jupyter notebook –version
“`
で確認しておきます。この時は6.

元記事を表示

GitHub Actionsを利用してpytestする

# はじめに

本記事では、GitHub Actionsを利用して、Pythonのテスト実行とカバレッジ計測をするGitHub Actionsを作成したいと思います。

[GitHub Actions](https://github.co.jp/features/actions)とは、GitHubが提供するCI/CDのサービスです。

今までCircleCIを利用していましたが、いつの間にかGitHub Actionsが利用できるようになっており、試しに使ってみたら便利だったので記事にしました。

CircleCIと比べてGitHub Actionsが良いな思ったのは以下の3点です。(GitHub ActionsとCircleCIを両方ガッツリ使っているわけでは無いので、間違った内容を言っていたらすいません。)

1. CircleCIでCIを実行するためには、CircleCI上で初期設定を行わなければならず、GitHubとは異なるサイトで設定を行うのが煩雑
1. GitHubにpackage(pythonの登録は現時点ではできないですが、将来的に来そう)やrelease(tag)を登

元記事を表示

【Python】動的にimportできるライブラリを自作しました

こんにちは!ぬこすけです!
pythonにはimportlibというモジュールを動的にimportしてくれる組み込みライブラリがあるのですが、それをもっと使いやすくするようなライブラリを自作しました!

* github:https://github.com/hiroki0525/autoload_module

## このライブラリでスバリ何ができる?
パッケージ名を指定することで、**配下のモジュールを動的にimportした上で、モジュールで定義されているクラスオブジェクトを取得することができます!**
具体的には次のようなPythonコードを書くことができます!

* ディレクトリ構成

“`
project/
├ example.py
└ validator/
├ validator_a.py
├ validator_b.py
└ validator_c.py
“`

* validator_a.py

“`python
class ValidatorA:
# bとcも同様
def valildate(self, input):

元記事を表示

Pandasでwarningが発生した箇所の見つけ方

## 背景
pandasでwarningが発生したけど、どこで発生したかわからないことがたまにあります。そのようなときはpandasのオプションをセットして、warningではなくerrorをraiseするように設定すれば、warningの発生箇所を素早く特定できます。

“`python
pd.options.mode.chained_assignment = ‘raise’
“`

## 例
“`python
import pandas as pd
pd.options.mode.chained_assignment = ‘raise’

df = pd.DataFrame({‘a’: [1, 2, 3], ‘b’: [4, 5, 6]})
df2 = df[df[‘a’] == 2]
df2[df2[‘b’] == 5] = 1
“`

## 出力

“`
Traceback (most recent call last):
File “/Users/hogehoge/python/lib/python3.7/site-packages/IPython/core/i

元記事を表示

AtCoder Beginner Contest 176 C問題「Step」解説(Python3,C++,Java)

皆さんこんにちは!Ruteです!
この記事は、AtCoder Beginner Contest 176の問題のC問題の解説になります!!
A問題・B問題の解説を見ていない方は、以下の表で示したリンクよりご確認下さい。
##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|[ABC176 B](https://qiita.com/rute_not_route/items/d22bafa86bdf1140b217)|この記事です!!|

それでは、C問題の解説を始めます。

#問題概要
$N$人が1列に並んでいて、前から$i$番目の人の身長は$A_i$である。
それぞれの人の足元に、高さ$0$以上の踏み台を設置し、全ての人が以下の条件を満たすようにしたい。

条件:
(自分の身長と)踏み台を込めて身長を比較したとき、自分より前に、自分より背の高い人が存在しない

この条件を満たす

RとPythonのDocker作業環境の構築

# 前提
* WSL2でdocker環境を構築していること
(構築方法は以下で紹介)
* コマンドプロンプトを管理者権限で開いて、WSL上で操作していること

[WSLでdockerの環境構築](https://qiita.com/SeijMura/items/a61f3d8d693d7c9f4efb)

# Dockerfile

以下のコードを、ローカルの作業ディレクトリ内に”Dockerfile”という名前で配置してください。

~~~docker
FROM ubuntu:18.04

# set timezone
RUN apt-get update \
&& apt-get install tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN date

# install packages
RUN [“/bin/bash”, “-c”, “\
apt-get update \
&& apt-get install -y \
vim \
buil

簡単にRESTful APIのラッパーを開発するライブラリ「apywrapper」

## TL;DR

– 「[apywrapper](https://github.com/sh1ma/apywrapper)」というライブラリを開発した

– 爆速でAPIラッパーが開発できる
– RESTfulなAPI__のみ__をサポート
– https://github.com/sh1ma/apywrapper

APIのラッパーを作るときに考えることはリクエスト処理やレスポンスデータのシリアライズなど様々あると思いますが、真にデータを欲しているとき、それらについて考え、悩むのは時間の無駄と言えるでしょう。

_サーバにパラメータを投げると、レスポンスにオブジェクトが返ってくる_

実際、やりたいのはこれだけのことです。

それを`apywrapper`で実現するコードを紹介します

## 例

“`python
from dataclasses import dataclass
from apywrapper import Apy

api = Apy(host=”https://example.com/api”, headers={“api_token”

RaspberryPiでメモリリークに対応した話

メモリリークなんて考えたことなかった。

[以前書いたコード](https://qiita.com/shin1007/items/4d7eb0ef1eee5b551215)をラズパイでは知らせてたらメモリエラーが出てきてだめになりました。ガーベージコレクション`gc.collect()`じゃ対応しきれていなかったので、OSに標準搭載の定時実行機能を利用したよ、という話。
全体としては、「毎7分に起動して、色々読み込んでもらって、毎0分に指定のことを実行してもらう」みたいな処理にした。

# 対策1:OS標準搭載の定時実行機能の利用
“`sh
crontab -e
# nano editorの選択
1
# 以下のものを追記
# 分 時 日 月 曜日 コマンド
7,17,27,37,47,57 * * * * python /home/pi/Desktop/abcdefg.py
# 保存
Ctrl + O
# 決定
Enter
# 終了
Ctrl + X
# 確認
crontab -l
“`

# 対策2:実行したら抜けるためのコードを追加
別に`import sys`しなくてもエラ

RSSのデータをZabbixへ格納する(外部チェック編)

 RSS のアップデートを Zabbix で監視する仕組みを簡単に作ってみました。Zabbix 単体の機能では実装できないため。Zabbix の外部チェックを使用し実装してみました。
 RSS をテキストに出力し、前回との差分を取得するという形でも良かったのですが、Zabbix サーバに障害が発生し、別のサーバで稼働させるとなったときに、チェック用のファイルをわざわざ移すのは面倒だし、絶対に忘れると思い、外部チェックを選択しました。

## 環境
– CentOS 8.0 (インターネットへアクセスできること)
– Python 3.6
– Zabbix 5.0

## 実現したこと
– Python を使って RSS を取得する
– 前回からのアップデート分を取得し、Zabbix のアイテムへ格納する

## ここではお話しないこと
– Python の初期設定方法
– Zabbix のインストール方法
– Zabbix の一般的な機能説明

## Pythonで実現したこと
 Python では、RSS をインターネット経由で取得し、タイトル、更新日を取得し、1行に書き出すという処

LDH所属アーティストの転移学習による分類

#1 導入
LDHファン歴10年、Aidemy研修生のSchwimmerです。EXILEをはじめとするLDH事務所に所属するアーティストは、10年前と比較して、メディアへの露出がとても多くなったと思います。しかし、私の身の回りでも「みんな同じに見える、、」とか「誰がどのグループに所属しているかわからない~」といったことを耳にします。
そこで、今回はLDHを代表するグループ、EXILE、EXILE THE SECOND、三代目JSOUL BROTHERS、GENERATIONSに所属する総勢24名をCNNおよび転移学習によって顔分類し、どこのグループに所属するかも併せて出力したいと思います。

ここで、LDHによく精通されてない方に、グループ構成を紹介したいと思います。
**EXILE**(15)
ATSUSHI, TAKAHIRO, AKIRA, SHOKICHI, NESMITH, TETSUYA, 黒木啓司, 橘ケンチ, NAOTO, 小林直己, 岩田剛典, 白濱亜嵐, 関口メンディー, 佐藤大樹, 世界

**EXILE THE SECOND**(6)
AKIRA, SHOKIC

AtCoder Beginner Contest 176 B問題「Multiple of 9」解説(Python3,C++,Java)

Ruteです。
この記事は先ほどのA問題の解説の続きになります!

##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|この記事です!!|[ABC176 C](https://qiita.com/rute_not_route/items/5f9c1f899cc4b10c23ce)|

それでは、B問題の解説を行います。

#問題概要
$N$が$9$の倍数であるかを判定して下さい。

##制約
・$0 \leq N \leq 10^{200000}$
・$N$は整数

今回は、Python3とC++,Javaで解法が異なりますのでご了承下さい。

#解説
##解法1(Python3の場合)
*後で説明する解法2でも解けます。
Python3の場合は、`int`型で表せる整数に限度がないので、以下のような条件分岐を書くことでACすることが出来ます!
「ゼロから作るDeep Learning」自習メモ(その6の3)

「ゼロから作るDeep Learning」(斎藤 康毅 著 オライリー・ジャパン刊)を読んでいる時に、参照したサイト等をメモしていきます。 [その6の2](https://qiita.com/slow_learner/items/95603dcbe8784036fadb)← → [その7](https://qiita.com/slow_learner/items/efbe24999562c3630c93)

いまだに2層のニューラルネットであれこれやってます。

#1桁の数字を2つ1組にして、その和が9未満か9以上かを、2層ニューラルネットに判定させます

こんなのは、計算させたほうが早そうですが、

>P86
ニューラルネットワークの利点は、すべての問題を同じ流れで解くことができる点にあります。たとえば、解くべき問題が「5」を認識する問題なのか、「犬」を認識する問題なのか、それとも、「人の顔」を認識する問題なのかといった詳細とは関係なしに、ニューラルネットワークは与えられたデータをただひたすら学習し、与えられた問題のパターンを発見しようと試みます。

ということなので、あえてやってみ

nteractのインストール

# nteractとは?
– Netflixなどで利用されてるjupyter環境
– デスクトップ版と通常のjupyterのようなweb版がある
– ビジュアライズ機能に特化してる
– csv取り込んでDataFrameにするだけで色々なグラフを描画してくれる
– jupyter環境なのでpythonを使える

# web版のインストール
“`
pip install nteract_on_jupyter
“`
anaconda環境があればこれで基本は入るはず

# 起動
“`
jupyter nteract
“`
consoleでこれを叩けば起動する

# 起動画面
![スクリーンショット 2020-08-27 16.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315596/934a318b-5d8e-574c-8995-c147c37f4c05.png)

こんな感じのがブラウザに立ち上がる
pythonのマークをクリックするとファイルが作成される

#
“`python:

AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて

##環境
Python3.7
プロキシ統合あり

##queryStringParametersを使う
API GatewayからLambdaに渡されたペイロードからパラメータを取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’)

return {
‘statusCode’: 200,
‘body’: json.dumps(response)
}
“`

結果

“`json
{
“id”: “1”
“value”: “foo”
}
“`

パラメータ名で値を取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’).get(‘value’)

return {
‘statusCode’: 200,

個人メモ] pipenvで環境構築 2020年

pipenvのドキュメントから毎回見つけるのが結構手間なのでメモ.

“`shell

# プロジェクト直下にvenvを作る
export PIPENV_VENV_IN_PROJECT=1

# 環境を作成
pipenv install –python 3.6

# Pipfileから環境構築
pipenv install

# Pipfile.lockから環境構築
pipenv sync

# requirements.txtからパッケージをインストール
$ pipenv install -r path/to/requirements.txt

# Pipfile.lock を作成
$ pipenv lock

# requirements.txtを作る
$ pipenv lock -r

# requirements.txt devを作る
$ pipenv lock -r –dev

“`

ドキュメント
– [Pipenv: 人間のためのPython開発ワークフロー — pipenv 2018.11.27.dev0 ドキュメント](https://pipenv-

WSL 2 + Python + VSCode で環境を整える [ 機械音痴 ( 自称 ) 後輩の挑戦!! ]

しろいのです。
記事執筆時現在、フリーター。
かつてはどこかの会社でインフラエンジニアの端くれをしていました。

バイト先の後輩にプログラミングを教えることになってしまったため、
開発環境を整え競技プログラミングに挑戦するためのチュートリアルを書きます。

今回は、**環境構築編**です。

Windows 10 上で不自由なく、Linux と Python を使った開発ができる環境を構築します。

正直、機械音痴を自認する方には超ハードコアな内容かと存じますが、気持ちを強く持っていきましょう。

## 経緯、そしてなぜ競技プログラミングなのか?
**あんまり大事じゃないので読み飛ばしてもOK**

* 後輩氏、大学の教職課程で情報教育論を受けた際、プログラミング学習の大切さを悟る
* だが、特に作りたいアプリのアイデアはなく、とりあえずアプリが動く仕組みを学びたい
* ~~筆者にパッケージとして成立したアプリを制作するスキルがないため、趣味で少々嗜む競プロでお茶を濁したい~~
* ~~筆者が AtCoder 茶色だけに!ガハハ~~

## 誰が為の記事か
* ( メイン )