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

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

TkinterでGUIアプリケーション開発

## GUIとは
GUIはGraphical User Interface の略で今多くの人が使っているPCやスマホのアプリ/ソフトのことをいいます。
これに対立する概念としてCUI(Character User Interface)があり、コマンドプロンプトやpowershell(windows)、Mac/Linuxのterminal上で動くアプリケーションがこれにあたります

## PythonでGUI
pythonにもGUIアプリケーションを作るためのライブラリがあります。今回はTkinterをとりあげます。
Tkinterはそれなりに古く、資料が豊富にありそもそもpythonを入れると一緒に入っているのでわざわざインストールする必要がないので手軽に始めやすいという利点があります(日本語を使うのはあまり向いてないっぽいけど)。

## Tkinter
Tkinterとは端的に言うとTcl/Tkのpython用ラッパーです。
これでは「は?」と言う感じなので詳細にみていくと、Tclとは80年代に使われていたスクリプト言語で、TkとはそのGUItoolki

元記事を表示

aws cliをインストールする際、botocoreとs3transferのせいで失敗する人へ

aws cliをインストールする際、botocoreとs3transferのせいで失敗する人へ

 

aws cliのインストール途中のエラー

aws cliをインストールしたら以下のようなログが出た。

bombanira@KyosukesMBP964:~/tmp$ pip3 install awscli --upgrade --user

Collecting awscli
Using cached awscli-1.18.31-py2.py3-none-any.whl (3.0 MB)
Requirement already satisfied, skipping upgrade: PyYAML<5.4,>=3.10; python_version != "3.4" in /Applications/anaconda3/lib/python3.7/site-packages (from

多倍長演算の活用①

# 多倍長演算の活用
Python の多倍長演算を活用して、処理の簡潔化・高速化を行う方法について書きます。

本記事では、整数の各bitをフラグとみてbit演算する処理について、次の記事では整数を要素とする配列の処理について書きます。
後半、一部ネタバレを含むのでご注意ください。

## ナップサック問題

例えば、次のような問題を考えます。

> $N$ 個の荷物があり、 $i$ 番目の荷物の重さは $w_i$ です。これらから重さの合計が $W$ 以下となるようにいくつかの荷物を選ぶとき、重さの最大値を求めよ。

この問題を解くには、順番に荷物を見て、その時点でどの重さにできるかのリストを更新できれば良いです。

### 配列を用いる方法

配列でこれを表す場合、大きさ $W+1$ の配列 $X = [x_0,\ \dots,\ x_{W}]$ を用意して、荷物を前から順に見て、その時点で荷物で重さ $i$ にできるのであれば $X_i = 1$ 、そうでなければ $X_i = 0$ とすることで $O(W * N)$ 回の処理でできます。配列は使いまわせば $1$ 次元で大

pythonでLDAPにデータの移動変更削除をする(WriterとReader編)

# はじめに
[前回](https://qiita.com/mink0212/items/e60deb342d48d6cb9cda)と[前々回](https://qiita.com/mink0212/items/03c653dad49d05811a2e)はLDAPの追加と取得を行いました。今回は、削除やデータ移動、名前の変更など他の機能をまとめます。

# 名前の変更
## コネクションのみ使用した名前の変更
cnのみ変更したい場合はConnectionの```modify_dn()```を使用して変更できます。変更前のdnと変更後のcnを指定することでcnのみ変更することができます。以下の例は前々回でまとめたのでConnectionの接続は端折っています。

``` main.py

# 更新前に表示する
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
p

Edit ini 作った話

# Edit ini

これは,作者(私)が Python でプログラミングしているとき, ConfigParser を使った ".ini"ファイル の読み取りや書き込みが
**いろいろと めんどくせぇーー**
と思ったので,作りました!

"Edit ini" と "ConfigParser" は部分的に(?)互換性を持っていて,同じ ".ini"ファイル の書き込み,読み取り,削除ができます.

その他,このプログラムに関しての情報は[こちら](http://penguin0093.html.xdomain.jp/page/project/python/editini.html)に掲載します.

##使い方

基本的には下のような構造になっています.

```text:config.ini
[section]
option = value
```
※iniファイルの形式は上とします

```Python:test.py
iniio.iopen("File name","Open mode","section","option","value")
```

引数1 : ファイル名

PyTorchチュートリアル【PyTorch勉強記録Day1】

本日から大体2週間ほどPyTorch(Pythonの深層学習フレームワーク)の勉強記録を載せていきたいと思います.元々はTensorflow+Kerasで代理モデル構築をしていたのですが,PyTorchも中々良いという情報を得たので勉強してみました.

# 0. 本日の内容
PyTorchチュートリアルより,CIFAR10の多クラス分類を行うニューラルネットワークを構築します.
データの読み込みから実際のモデル構築までをかいつまんで説明したものとなります.

# 1. PyTorchダウンロード
[こちらの公式サイト](https://pytorch.org/)からダウンロードできます.
中段の"QUICK START LOCALLY"から自分の環境をポチポチ選ぶと,ダウンロード用のコマンドを自動的に生成してくれます.また,過去のバージョンもこちらからダウンロード可能.
自分の環境はCUDA10.0だったので,それに対応する以下のバージョンをダウンロードしました.

```
# CUDA 10.0
conda install pytorch==1.2.0 torchvision==0.

オブジェクト指向入門-オブジェクトに子を産ませる。

Pythonによる進化シュミレーションのパーツを作りながら、メモとして記事を書いています。
前回の記事は[こちら](https://qiita.com/rain67/items/4c1f0fbcdf6abca23001)(オブジェクト指向入門-オブジェクトの内部状態を変更しよう)

今回は仮想個体に子を産ませるメソッド(reproduction)の下書きを作りました。
reproductionメソッドにはcopyモジュールのdeepcopyを用いています.

```python:reproduction.py
#reproduction の実装
import copy #reproductionでdeepcopyを使います。

class SampleIndividual:
def __init__(self,x,y,z):
self.state_x = x
self.state_y = y
self.state_z = z

def mutation(sel

gremlinpythonの使い方覚書

# 記事の内容
GraphDBであるGremlinをPythonで使ってみました。
使い方をメモします

# ライブラリの準備
GremlinをPythonで扱うためのライブラリをインストールします

~~~
pip install gremlinpython
~~~

# 実装
## ライブラリのインポート

~~~ .py
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
~~~

## コネクションの作成
~~~ .py
graph = Graph()

# Gremlinのコネクション作成
g = g

Python&機械学習 勉強メモ

#はじめに
昨今流行りのPythonと機械学習に興味を持ち、勉強開始。
備忘録としてここに記す。

#参考教材
Udemy みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
https://www.udemy.com/course/learning-ai/

#インストールしたもの
- Pycharm
- Python統合開発環境
- Cとは違って、Pythonはインデントでブロックが解釈されるため、自動整形機能を持ったエディタは必須と思った
- Anaconda3
- 様々なライブラリと共にPythonをインストールできるパッケージ
- インストールはしたけど、コマンドプロンプトから"python"とか打っても起動できない。Anaconda3が具体的に何者かのか、よくわかっていない。

#つまづいたところ
numpyのインストールでつまづいた。Pycharmでボタンをポチポチ押せばインストールできるはずなのに、SSLがどーのこーのと言われた。
![cap.jpg](https://qiita-image-store.s3.ap-north

PCR検査の1日あたり実施可能件数(都道府県別)の表を作成

Web で閲覧できる次の表を作成します。
>[PCR検査の1日あたり実施可能件数(都道府県別)](https://ekzemplaro.org/corona/capacity_pref/)
![pcr_inspect_prefecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/7b626796-e130-d13b-f61e-45d6bf5d4355.png)

データのソースは厚労省です。
>[3月7日時点](https://www.mhlw.go.jp/content/000606477.pdf)
>[3月24日時点](https://www.mhlw.go.jp/content/10900000/000614570.pdf)

PDF の処理に必要なライブラリーのインストール (Ubuntu 19.10)

>```bash
sudo apt install pdftk-java
```

PDF を JSON へ変換

```bash
pdftk 000606477.pdf

オブジェクト指向入門-オブジェクトの内部状態を変更しよう

進化シュミレーションでオブジェクト指向を使おうと思ったのでメモ書き。
インスタンス変数のメソッドによる変更について

```python3:sample.py
class SampleClass:
def __init__(self):
self.internal_state = True #内部状態(internal_state)をTrueに設定

def off_internal_state(self): #内部状態をFalseにするメソッド
self.internal_state = False

def on_internal_state(self): #内部状態をTrueにするメソッド
self.internal_state = True

def change_internal_state(self): #内部状態を変更するメソッド
if self.internal_state: #trueであればFalseに、FalseであればTr

AtCoder Beginners Contest 過去問チャレンジ7

# AtCoder Beginners Contest 過去問チャレンジ7

## [ABC046D - AtCoDeerくんと変なじゃんけん](https://atcoder.jp/contests/abc046/tasks/arc062_b)

TopCoDeerくん と全く同じ手を出せば得点は0点になるので、最大得点は0点以上となる. とりあえず TopCoDeerくん と全く同じ手を出すことにして、パーを出した回数と、グーを出した回数を数えて、条件を満たす数だけ、一番最後に出したグーからパーに変えていけば最高得点になる.

```python
s = input()

print(max((s.count('g') * 2 - len(s)) // 2, 0))
```

## [ABC097D - Equals](https://atcoder.jp/contests/abc097/tasks/arc097_b)

1と2がスワップできて、2と3がスワップできれば、1と3もスワップできる. つまり同じユニオンならスワップ可能. Union Find 木だ. 同じユニオン内なら

TensorFlow(GPU版) Installとお試しRNN 備忘録

#概要
GPU対応TensorFlow(以下TF)のインストール手順を備忘録として残す。
- 実施期間: 2020年2月
- 環境:Ubuntu18.04LTS
- Python2.7, 3.6.9インストール済み
- GPU: GeForce GTX 1070

##背景
4年ほど昔、Ubuntuの使い方も見様見真似だったころに挑戦したのだが、うまくいかず諦めた経験があり今回再挑戦してみた。
今はGoogle ColaboratoryのVM環境で、CUDA環境整備に悩まされることなくTF+Kerasを使った深層学習モデルで遊んでいる。使い勝手はほぼJupyter notebookと同じ。

![notebook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205257/9b2792a5-fcb5-ec8e-2a56-2cb3376ca4a0.png)
[Colaboratoryのnotebook]

ことモデリングについていえば自前PCのGPUを必ずしも使用する必要はない。
ただ、折角手元のデスクト

PySimpleGUIとmultithreadを使った例

##はじめに
PySimpleGUIが使いやすいので、以前使っていたLabVIEWのデザインパターンの一つの「キューメッセージハンドラデザインパターン」を実現できないか取り組んだ結果です。

LabVIEWキューメッセージハンドラの説明
[アプリケーションデザインパターン:生産者/消費者](http://www.ni.com/tutorial/3023/ja/)
[【LabVIEW スキルアップ】デザインパターン”QMH”とは?](https://forums.ni.com/t5/LabVIEW-Caf%C3%A9/LabVIEW-%E3%82%B9%E3%82%AD%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97-%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-QMH-%E3%81%A8%E3%81%AF/gpm-p/3985209?profile.language=ja)

LabVIEWについては[Wiki](https://ja.wikipedia.org/

AtCoder Beginners Contest 過去問チャレンジ6

# AtCoder Beginners Contest 過去問チャレンジ6

## [ABC090D - Remainder Reminder](https://atcoder.jp/contests/abc090/tasks/arc091_b)

a を b で割った余りが K 以上ということは、b は K + 1 以上なのが確定. b で割った余りは 0..b-1 で、この1周期に出現する K 以上の個数は b - K となる. a は N 以下なので、周期数は N / b となる. 後は周期の余りについて考える必要があるが、ところで N は1から始まるので、周期は 1, 2, ..., b - 1, 0 の順となる. つまり N % b が n の場合、1, 2, ..., n となり、K = 0 と K = 1 の個数が同じとなることに注意.

```python
N, K = map(int, input().split())

result = 0
for b in range(K + 1, N + 1):
result += (N // b) * (b - K)

venvによるPython仮想環境作成

# venvによるPython仮想環境作成
## venvとは
pythonの仮想環境作成ツール。
ソフトウェア開発を行う上で、使用するライブラリの依存関係を環境ごとに独立させておきたい。
venvを使うことでプロジェクトごとに仮想環境を作成でき、各仮想環境は独立したPythonバイナリとPythonパッケージを保持する。

## 使い方

### 仮想環境の作成
```
python -m venv [venvname]
```
※venvはpython3の標準機能なので、個別インストールは不要

### 仮想環境の有効化
```
//Linux
source [venvname]/bin/activate
//windows
[venvname]/Scripts/activate
```
有効化を行うことで、このディレクトリでのPython実行には仮想環境が使用される。
具体的には、インストールしたpipパッケージはこの仮想環境でのみ有効になり、
スクリプトの実行にはこの仮想環境のPythonインタプリタが使用される。

### パッケージの確認
```
pip list
``

AtCoder Grand Contest 過去問チャレンジ1

# AtCoder Grand Contest 過去問チャレンジ1

## [AGC003B - Simplified mahjong](https://atcoder.jp/contests/agc003/tasks/agc003_b)

同じカードで最大限ペアを作って、余ったら繰り越して、繰越分を優先して使ってることにする(つまり余った場合は今のカードの方を繰り越す)で OK なのだが、0枚のカードに繰越が来た場合、優先して使うカードがないので、そこで繰越分を捨てなければいけない. そこだけ気にすれば OK.

```python
N = int(input())

result = 0
remainder = 0
for _ in range(N):
A = int(input())
result += (A + remainder) // 2
if A == 0:
remainder = 0
else:
remainder = (A + remainder) % 2
print(result)
```

## [A

yukicoder contest 241 参戦記

# yukicoder contest 241 参戦記

# A 1009 面積の求め方

8分半で突破. ヒント通り区分求積法でスパッと解いてみた. 区間をどれくらいの数で割ればいいのかに悩んだが、適当にえいやで4096でやったら一発目で良さげな精度が出たので、提出してみたら無事 AC.

```python
a, b = map(int, input().split())

x = a
result = 0
t = 1 / 4096
while x < b: result += abs((x - a) * (x - b) * t) x += t print(result) ``` # B 1010 折って重ねて 41分で突破. 整数で処理するコードを書いて、なんで AC しないんだと延々と悩んでいた. アホすぎる. 縦と横で短い方を限界まで折ってから、長い方を限界まで折ればいい. ```python x, y, h = map(int, input().split()) if x < y: x, y = y, x x *= 1000 y *= 10

UbuntuのPythonでSplunkの実行結果を受け取る

今回はUbuntu18.04のPython3.6.9から、Splunkのクエリを実行して結果をJSONで受け取るプログラムを作ります。

#原理

SplunkにはGUIだけでなく、外部からのクエリを受け取り実行する機能があるので、この機能を利用します。この機能の利用方法は簡単で、下のURLにユーザ名、パスワード、クエリ(SPL)、出力形式を入れてPOSTするだけです。

```
https://localhost:8089/services/search/jobs/export
```

#プログラムの作成

下のようなプログラムをPython3で作成しました。

```python:splunkpost.py
import requests
import urllib

requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
postdata = urllib.parse.urlencode({"search":"search ho

AtCoder Beginner Contest 160 参戦記

# AtCoder Beginner Contest 160 参戦記

## [ABC160A - Coffee](https://atcoder.jp/contests/abc160/tasks/abc160_a)

1分半で突破. 書くだけ.

```python
S = input()

if S[2] == S[3] and S[4] == S[5]:
print('Yes')
else:
print('No')
```

## [ABC160B - Golden Coins](https://atcoder.jp/contests/abc160/tasks/abc160_b)

2分半で突破. 500円のほうがコスパがいいので、500円を可能なだけ、余りを5円で.

```python
X = int(input())

result = (X // 500) * 1000
X -= (X // 500) * 500
result += (X // 5) * 5
print(result)
```

## [ABC160C - Traveling Salesm