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

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

解析雨量(GRIB2形式)をNumpy配列として読み込む

## 概要

解析雨量(2006年~)のbinファイルに含まれる降水量をNumpyのndarray(南北3360x東西2560)として読み込みます。

気象庁の提供する1kmメッシュ解析雨量はGRIB2形式をとっていますが、独自の拡張を含むためPythonのGDALやpygribでは扱うことができません(2020年3月現在)。wgrib2を使用してバイナリダンプしたりNetCDFへ変換して読む方法もありますが、数値のみを取り出すなら直接読めたほうが便利です。

## 解析雨量GRIB2ファイルの構成

バイナリデータの仕様は気象庁の[配信資料に関する技術情報(気象編)第238号](http://www.data.jma.go.jp/add/suishin/jyouhou/pdf/238.pdf)に記載されています。データは全8節からなり、降水量を表すレベル値がランレングス圧縮で西から東向きに2560要素ずつ北から格納されています

降水量だけを読むには第5節からレベル値と”データ代表値”(1km格子を代表する降水量の10倍値)を対応させるルックアップテーブルを読み込み、第7節の符号なし

元記事を表示

多倍長演算の活用②

# 多倍長演算の活用②
Python の多倍長演算を活用する方法の第 $2$ 弾です。 前回の記事 では、多倍長整数の各bitをフラグと見て処理する方法を説明しました。この記事では、いよいよ整数を要素に持つ配列の演算を扱います。 ここからが本番です。 最後まで読んで頂けると嬉しいです。

後半では形式的べき級数との関係についても紹介します。

## 整数と配列の対応
多倍長整数を $k$ bitごとに区切って、それぞれが $k$ bit の非負整数を表していると見ることを考えます。なお文字 $k$ は、コード中も含めこの記事を通して常にこの意味で使います。

具体的には、 $0$ 以上 $2^k$ 未満の要素からなる配列 $A = [a_0,\ \ldots,\ a_{N-1}]$ について、対応する整数を
$${\rm number}(A) = \s

元記事を表示

ファイルを送るとパスワード付きzipを返してくれるDiscordBot

# はじめに
パスワード付きのzipファイルを扱う際、個人だと7-Zip、Lhaplus、zipコマンドなど使う方法があるが、正直面倒くさい。
そこで、pythonでzipを扱うpyminizipモジュールがあったので、discordにファイルを投げるとパスワード付きのzipを返してくれるbotを作りました。

# 目次
実行環境

bot作成

コード

使い方

課題

# 実行環境
Raspbian GNU/Linux 9

python 3.5.3

discord.py 1.2.5

requests 2.23.0

pyminizip 0.2.4

# bot作成
こちらに詳細が載った記事があります。

[Discord Botアカウント初期設定ガイド for Developer](https://qiita.com/1ntegrale9/items/cb285053f2fa5d0cccdf)

[Pythonで実用Discord Bot(discordpy解説)](https://qiita.com/1ntegrale9/items/9d570ef8175cf178468

元記事を表示

HDFで取り扱うDataTypeについての備忘録

###はじめに
HDFではDataを格納する際、numpyのdatatypeを指定する必要があります。numpyのデータ型とHDFのデータ型について以下の記事を参考に備忘録として記載します。

###Numpyでのdatatypeについて
[NumPyのデータ型dtype一覧とastypeによる変換(キャスト)](https://note.nkmk.me/python-numpy-dtype-astype/)に詳しい解説が書かれていますので、その中から今回用いる部分について引用します。一部加筆しています。
numpyでdtypeの書き方はいくつかあります。
> 各種メソッドの引数でデータ型`dtype`を指定するとき、例えば`int64`型の場合は、
> (1) データ型:`np.int64` 
> (2) 文字列型:`’int64’`
> (3)型コード型:`’i8’`
> データ型名の末尾の数字は`bit`で表し、型コード末尾の数字は`byte`で表す。同じ型でも値が違うので注意。(8bit=1byte)
>
> “`python
> import numpy as np
>

元記事を表示

PWMで輝度制御(キーボード入力でコントロール)

PWM制御でLEDの輝度を変化させるプログラムを作成しました。

“`python
#本プログラムはラズパイのターミナル上で実行してください。
#統合開発環境だとエラーになります。
import pigpio
import time
import readchar

gpio_pin0 = 18 #GPIO18でPWMを動かす
x=0 #LEDの初期輝度

pi = pigpio.pi()
pi.set_mode(gpio_pin0, pigpio.OUTPUT)

while 1:
#100Hz,x*100000のところがDuty比です。これでx%になります。
pi.hardware_PWM(gpio_pin0, 100, x*100000)

#キーボードから入力を読み取ります。
kb = readchar.readchar()
print(kb)

#uが入力されたら輝度を一段階上げます。
if kb == ‘u’:
x=x+1
print(“brightness=”+st

元記事を表示

ラズパイでLチカプログラム

初投稿です。
ラズパイでLチカプログラムを作成したので、投稿してみます。
使用しているのはmodel3Bです。

※この手の記事は探せばいくらでも出てきますので、本記事は自分自身の備忘録の意味合いが強いです。

“`python
import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False) #GPIO使用時に表示されるエラーを消すための記述
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT) #GPIO2を出力端子に設定

try: #try~exceptでひとかたまり
while True:
GPIO.output(2, GPIO.HIGH)
time.sleep(1) #1秒休止

GPIO.output(2, GPIO.LOW)
time.sleep(1) #1秒休止

except KeyboardInterrupt: #キーボード入力により処理を抜ける
pass #passをつけることで

元記事を表示

jpgをpngに変換しても透明度がいじれなかったからなんとかした

#はじめに
pythonでjpgをpngに変換しても透明度がいじれなかったので,力業で解決した話

#環境
– Windows 10
– VSCode
– Python 3.7.3

#単純に変換してみる
「python convert jpg to png」とかでググると[Pillow](https://pillow.readthedocs.io/en/stable/index.html)が出てくると思います.

公式を見ながら下記のようにインストール

`pip install Pillow`

[ここ](https://datatofish.com/jpeg-to-png-python/)を参考にサンプルを書くと

“`python:jpgToPNG.py
from PIL import Image

#絶対パスも可
img = Image.open(‘input.jpg’)
img.save(‘output.png’)
“`

これで一応PNGができるが,透明度をいじるソースを書くとエラーをはく
ちなみに,ペイントを使って変換した画像はきちんと透明度をいじれる

#問題点

元記事を表示

PythonでMongoDBのODMを使用しよう

# 前書
この記事は[PythonでMongoDBを入門しよう](https://qiita.com/Syoitu/items/db192385a4b2e4884ed5)という記事の続編になりますが、
前回の記事を読んでいなくても内容がわかる構成にしています。
もしMongoDBに興味があれば、最後まで付き合っていただけると幸いです。

# 環境構築

### MongoDB
この記事ではDockerを使用して環境構築行います。
ローカル内で直接MongoDBを入れたい方は前回の記事を参考にしてください。:point_up_tone1:

“`yml:docker-compose.yml
version: ‘3.1’

services:

mongo:
image: mongo
restart: always
ports:
– 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD:

元記事を表示

PythonによるWeb APIをEXE化する

## はじめに
ときどき以下のすべてを満たしたいというご要望をいただくことがあります。

* Pythonで作ったAIをWindowsアプリに組み込みたい
* AIのインターフェースはWeb APIにしたい
* リモートサーバと通信したくない
* Pythonやその他のツール等はインストールしたくない

色々やり方はあると思いますが、

1. AIの機能をPythonのWebフレームワークでAPI化し、
1. そのPythonファイルをEXEファイルに変換してアプリ本体に同梱し、
1. アプリ本体からEXEを実行すればこれを実現できます。

今回は以下を使います。

* OS:Windows 10
* Python:3.7.7 (インストール済みを前提)
* Webフレームワーク:Flask
* EXE化:PyInstaller

(ちなみにFastAPI × uvicornだと、2020/3/30時点では問題がありました。 [https://github.com/pyinstaller/pyinstaller/pull/4664](https://github.com/pyinsta

元記事を表示

Django 新規ページ作成の流れ

今回の記事では、Django開発において、新規ページを作成する際のスムーズな流れを書きます。

### 新規ページ作成フロー

1. views.py に一旦TemplateViewで view の class を作成する(template_nameのみのシンプルなもの)
2. urls.pyに作成した view を読み込んで、ルーティングを実装する
3. viewの template_name に記述したパスにhtmlファイルを作成する
4. view に get_context_data を追加して、あらかじめ必要なデータを投げておく
5. htmlファイルにテンプレートを作成して、あらかじめ投げたデータなどを受け取って、フロントエンドを作成していく。
6. formやリクエストなどの処理やjs処理などを実装する
7. views.py に戻り、viewを更新する。-> 必要に応じて、UpdateViewやListView,CreateView, DetailViewなど
8. 必要に応じて、urls.pyを編集する
9. viewにpostに対する処理などを記述する
10. po

元記事を表示

栃木県の新型コロナウイルス感染症患者の発生状況の表を作成

Web で閲覧できる次の表を作成します。
>[栃木県の新型コロナウイルス感染症患者の発生状況](https://ekzemplaro.org/corona/tochigi_patient/)
![tochigi_corona.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/07f35e60-df9e-084b-1cfb-4a5e7e447372.png)

データのソースは栃木県です。
>[栃木県内 新型コロナウイルス感染症 発生状況](http://www.pref.tochigi.lg.jp/e04/welfare/hoken-eisei/kansen/r1houdoukansentantou/documents/20200329corona12reime.pdf)

PDF を JSON へ変換

“`bash
pdftk 20200329corona12reime.pdf cat 1 output out01.pdf
pdftotext -layout out01.pdf
#
./

元記事を表示

Google Cloud APIを使ってお手軽に感情分析入門

##この記事を読むと
・順番通り進めていくと、GoogleCloudAPI NaturalLanguageの「エンティティ分析」「感情分析」「公文・品詞解析」が実行できます。

・GoogleCloudAPI NaturalLanguage公式チュートリアルへの抵抗感が減ります

##この記事を書いた理由

「Google Cloud APIを使って感情分析したい」と思い立ったものの、APIを使うだけなので簡単そうに見えて意外と詰まりました。GoogleCloudPlatform公式日本語ドキュメントで、詳細な入門やチュートリアルが用意されているものの、独自の用語が多すぎて何を言っているのかさっぱりでした。
また、ストレスだったのが環境構築。後述しますが、別にローカルに環境構築をしなくてもブラウザから実行できるので、まずはそちらで試してみると良いかと思います。

さて、苦戦した折りに素晴らしい入門資料と出会いました。
本記事は基本的にこちらの資料の通りに書いています。実はこれもGoogle公式資料なんですよね。
(Google様・・・尊い・・・)
[Codelab/Next17-Tok

元記事を表示

[Python]漢字をひらがなに変換してくれる便利なライブラリ

pykakasiを使うことで漢字、ひらがな、カタカナの変換を簡単に行うことができます。

コマンドプロンプトで以下のコマンドを入力することでライブラリをインストールすることが可能になります。

“`
pip install pykakasi
“`

使用例

“`Python:test.py

from pykakasi import kakasi

kakasi = kakasi()
kakasi.setMode(‘J’, ‘H’) #漢字からひらがなに変換
kakasi.setMode(“K”, “H”) #カタカナからひらがなに変換
conv = kakasi.getConverter()

str = ‘東京タワー’

print(conv.do(str))

“`

実行結果

“`
python test.py
とうきょうたわー
“`

こんな感じで変換することができるので機会があればぜひ使ってみて下さい。

元記事を表示

Pythonでアルファベット文字列をN文字分ずらす

AtCoderの[ABC146 B問題](https://atcoder.jp/contests/abc146/tasks/abc146_b)で、Unicodeに慣れ親しむ機会がありました。

アルファベット文字列を「N文字分ずらす」とは「アルファベット順でN文字後ろのものに変換する」動作を表し、’Z’の次は’A’に戻るとします。上述のB問題でも同様の定義です。

# 組み込み関数“`ord()“`と“`chr()“`

Python3には組み込み関数“`ord()“`と“`chr()“`が実装されており、文字とそのUnicodeコードポイントを互いに変換して返してくれます。
参考:[Python3.8公式ドキュメント#ord]
(https://docs.python.org/ja/3/library/functions.html#ord)

“`python:sample
>>> ord(‘A’)
65
>>> ord(‘D’)
68

>>> chr(65)
‘A’
>>> chr(70)
‘F’
“`

分かったように「Unicodeコードポイント」とか言っ

元記事を表示

takes 0 positional arguments but 1 was given

# 原因
pythonはクラスメソッドの引数1つ目に必ず self を取らなければならない。というルールがある。

クラス外から任意のクラスメソッドを呼び出す場合は暗黙的に引数 self が渡される。
そのため、受け側で self を第1引数に取るように作っていない場合、こういうエラーになる。

“`
class Sample:
def test():
print(‘x’)

Sample().test()

>>実行結果
TypeError: create_dtl_list() takes 0 positional arguments but 1 was given
“`
呼び出し側は引数を渡していないのに、渡したことになっている。(暗黙的にselfを渡している。)

# 対処法
クラスメソッド定義時には必ず、self を第1引数に入れるようにする。

元記事を表示

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_

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 : ファイル名