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

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

OpenCVで日本語フォントを描写する を関数化する

# はじめに
[前回](https://qiita.com/mo256man/items/f104b1d03821d64b403d)の続きです。

OpenCVでテキストを描写する関数 `cv2.putText()` は日本語を使えない。PILならば可能なのでその部分だけPILを使うという手法がウェブ上で多数見られるが、とりあえずやってみたという内容ばかりで `cv2.putText()` の代替となるような独自関数を公開しているところはなかった。
そこで自分で作ってみた。私の検索スキルが低いだけで定番となっている方法があるのでしたらごめんなさい。

バージョン:
 OpenCV 4.1.2.30
 Pillow 7.0

# 復習

### OpenCVで文字を描く cv2.putText(img, text, org, fontFace, fontScale, color, thickness)
– *img* 画像。言うまでもなく、OpenCVの画像。
– *text* テキスト。**日本語不可**。改行コードで改行させることはできない。
– *org* テキストの**左

元記事を表示

計算ドリルプリントを作る

# はじめに
小学校低学年向けの自習用プリントを作るために、計算ドリル生成プログラムを作りました。pythonでランダムに数式を作って、A4用紙サイズでpdf化します。作成したファイルを自宅かコンビニなどで印刷して、子供が自習してくれれば目的達成です。

### 環境
+ Ubuntu 18.04[Windows10上でWSL(Windows Subsystem for Linux)使用]
+ python3.6

## ReportLabのインストール

生成した計算式を印刷するために、pdf化用のライブラリ・ReportLabを使用します。

“`
$ sudo pip3 install ReportLab
“`
ReportLabに関する詳細なドキュメントは下記です。
https://www.reportlab.com/docs/reportlab-userguide.pdf

## 出力イメージ
今回は2桁の足し算、引き算、掛け算をプリントに出力します。
![image002.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

教師なし学習でMNISTの正解率を97%以上出す簡単な手法(転移学習なし)

就職活動ネタとして記事を初投稿。

精度が高いと言われている教師無し学習、IIC(Invariant Information Clustering)の論文を読み解き実装してみました。
IICとは、相互情報量を最大化することでクラスタリングを行う手法のことです。
IICの論文は[こちら](https://arxiv.org/pdf/1807.06653.pdf#page9)
>Invariant Information Clustering for Unsupervised Image Classification and Segmentation
>Xu Ji, João F. Henriques, Andrea Vedaldi

使ったフレームワークはTensorFlow2.0。対象データはお馴染みのMNIST。

# 相互情報量について
相互情報量の解釈は複数ありますが、今回の機械学習を説明しやすいシンプルな方法を選びます。

確率分布Xに対する情報エントロピーH(X)は以下で定義される。

“`math
H(X) = -\sum_{i}x_{i} \ln x_{i}
“`

元記事を表示

PyTorchことはじめ

# PyTorch

[PyTorch](https://pytorch.org/)

# PyTorchのインストール

## pyenv + anaconda3-5.3.1 on CentOS Linux release 7.7.1908 (Core)

いつも、Linuxにはpyenvを導入し、anaconda3-5.3.1を入れて使っている。本家のページを見ると、`conda`コマンドを使っても入れられるらしく、例えば

“`bash
conda install pytorch torchvision cpuonly -c pytorch
“`
でPyTorchが入る。
但し、この手続きでPyTorchを入れると、少なくとも私の環境(CentOS Linux release 7.7.1908 (Core))では、anaconda内のipython, jupyterの環境を壊してしまう。本末転倒である。したがって、他の道を探った。

## pyenv + 3.8.2 on CentOS Linux release 7.7.19

元記事を表示

Atcoder ABC164 A-CをPythonで

D問題を完全に理解してから書こうと思ってましたが、時間かかりそうなのでわかり次第追記します。

#A. Sheep and Wolves
2つの値を比べる。

“`ABC164a.py
s,w=map(int,input().split())

if w>=s:
print(“unsafe”)
else:
print(“safe”)
“`

#B. Battle
Modとか取るのかなとも思いましたが、先攻後攻等を考えるのが手間なので素直に実装

“`ABC164b.py
a,b,c,d=map(int,input().split())

while True:
c-=b
if c<=0: print("Yes") exit() a-=d if a<=0: print("No") exit() ``` #C. Gacha 配列中のユニークな個数を数えるだけ。 ```ABC164c.py n=int(input()) s=[input() for _ in range

元記事を表示

世界一 被引用回数が多い特許

#はじめに
 連休もはじまったし要不急な分析でもしたいと思い、被引用回数世界一位の特許文献はどれだろうかと思い調べて見た。

#BigQueryでのSQL
オンライン学習で、始めてSQLはしーくえると発音するのを知りました。。

難しかったのは、総引用回数&重複排除(同じ出願の拒絶理由等に何回も使われるのを排除)した引用回数パターンの作りかたと、BigQueryには引用情報しか入っていないので、被引用情報を生成する部分(逆方向)。
少し複雑になってしまったけど、下記のような感じ。

母集団用のSQL

“`sql
WITH bibtable as (
SELECT
pub.application_number AS appnum,
pub.publication_number AS pubnum,
pub.filing_date as appday,
STRING_AGG(DISTINCT(applicants.name)) AS applicants ,
SUBSTR(ST

元記事を表示

リストや辞書やタプルを外部ファイルに保存 python

#リストや辞書やタプルを外部ファイルに保存 python

Memo

こちらの記事等を参考にした。

【Python入門】pickleでオブジェクトを保存する方法を解説!

リストもディクショナリも同様に扱えるみたいで便利。

元記事を表示

ナイキスト周波数を超えたら周波数空間ではどうなるかアニメーションで見る

# はじめに
 サンプリング定理(標本化定理)というものがあります。1波長に2回サンプリングすれば、元の信号を完全に復元できるというものです。このサンプリングする間隔をサンプリングレートと呼び、その周波数の半分の値をナイキスト周波数と呼びます。計測対象の信号がナイキスト周波数を超えるとエイリアシングが起こります。
 このようなことを知識として知っていても、ナイキスト周波数を超えると周波数空間ではどのように見えるのかアニメーションで見たことがないなと思ったので作りました。

# 参考
サンプリング定理を思い返すのに読みました。
[小野測器:FFTアナライザについて(page4)](https://www.onosokki.co.jp/HP-WK/c_support/newreport/analyzer/FFT2/fft_4.htm)

# プログラム

“`python
import numpy as np
import matplotlib.pyplot as plt

N = 512 #FFTのサンプル点数
fs = 2000.0 #サンプリングレート
t = np.linspac

元記事を表示

【Deep learning】乃木坂顔検出 ~初心者の方に向けて~

# はじめに
こんにちは。以前から画像認識に興味があり,漠然とした知識はあったのですがまだコードを書いたことはありませんでした。今回は初心者の方に向けての記事を書きたいと思います。よろしくお願いします。

# 手順
1. 画像のスクレイピング
2. 同じ画像を削除
3. 画像の名前を連番にする
4. 顔の部分のみ切り取る
5. 教師データとテストデータを分ける
6. 教師データを水増しする
7. Google Colaboratoryを用いて学習を行う

## 1.画像のスクレイピング
 まずメンバー画像を集めます。Bingやヤフーなどの画像検索サービスがありますが,この記事ではGoogle画像検索の結果をスクレイピングすることで画像を集めます。
 [こちら](https://github.com/hardikvasa/google-images-download)からオリジナルのコードを手に入れることができます。ただしオリジナルのコードではダウンロードができません(2020年4月現在)。この問題に関してはPull requestsとしてパッチが出ていますので今回は[そちらのコード](

元記事を表示

ASEとGPAWでDFT計算を行う

ASEとGPAWを用いてDFT計算を行ってみます.簡単な例として水素分子の原子化エネルギーを求めましょう.

– ASEは原子シミュレーション用のPythonモジュールです.[多くの機能](https://wiki.fysik.dtu.dk/ase/tutorials/tutorials.html)が実装されています.[Calculatorクラス](https://wiki.fysik.dtu.dk/ase/ase/calculators/calculators.html?highlight=calculator#module-ase.calculators)をインターフェースとして各種コードを呼び出すことができます.
– GPAWはPAW法とASEに基づいたDFT計算コードです.C言語とPythonにより記述されています.[広く使用されて](https://wiki.fysik.dtu.dk/gpaw/documentation/literature.html#citations-of-the-gpaw-method-papers)います.

以下の例はJupyter Labを用いて

元記事を表示

【Python】ROSのプログラムをPythonのclassを使ったらとても便利だった

# はじめに
最近少しずつROSを触り始めていて、Pythonでノードを実装するときに**1つのノード内でpublisherとsubscriberを実装する**にあたって困ったポイントがあったので紹介します。Pythonのクラスを使うことできれいにすることができました。
自分でパッケージが作れる程度のROSの知識と少しのオブジェクト指向の知識がある前提です。

実装例は[こちら](https://qiita.com/drafts/d15d52856188120647f4/edit#publish-%E3%81%A8-subscribe%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB1%E3%81%A4%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%89%E3%81%A7%E3%82%84%E3%82%8B)

# やりたかったこと
このトピックのデータをsubscribeして、処理をして、あのトピックにpublishしたいな

ということがあると思います。調べ方が悪かったのか**1つのノードで同時にsubscriberとpublisherを使

元記事を表示

言語処理100本ノック 第4章: 形態素解析 31. 動詞

# 31. 動詞
## 問題
> 動詞の表層形をすべて抽出せよ.
https://nlp100.github.io/ja/ch04.html

下記のInputデータからどうすりゃ良いのかイマイチよくわからんかったけど、既に解いた方の回答を参考にしたら、なるほどと。
リストの中のリストのデータを取るためにforループの中でもう一回forループすれば良いのか。
勉強になった。

“` python
# inputデータ
[[{‘surface’: ‘一’, ‘base’: ‘一’, ‘pos’: ‘名詞’, ‘pos1’: ‘数詞’}],
[{‘surface’: ‘吾輩’, ‘base’: ‘吾輩’, ‘pos’: ‘名詞’, ‘pos1’: ‘普通名詞’},
{‘surface’: ‘は’, ‘base’: ‘は’, ‘pos’: ‘助詞’, ‘pos1’: ‘副助詞’},
{‘surface’: ‘猫’, ‘base’: ‘猫’, ‘pos’: ‘名詞’, ‘pos1’: ‘普通名詞’},
{‘surface’: ‘である’, ‘base’: ‘だ’, ‘pos’:

元記事を表示

非線形連立方程式ってPythonで簡単に解けるんですね

数値計算をやっていると、非線形連立方程式を解く機会ってまぁまぁありますよね。もう何年も前ですが大学院生で研究をやっていた頃は、Fortranでコトコト実装していました。最近Pythonでプログラムを書く機会が増えてきて、再び非線形連立方程式を解く場面に遭遇しました。非線形連立方程式の解法として有名なものと言えばNewton法ですが、ゼロから実装するの面倒なのでいいライブラリがないか探しました。

# 「Scipy.optimize.root」で解けちゃう
半端じゃなく簡単でした。今回は例題として以下のような非線形連立方程式を解きたいと思います。

$$
\begin{align}
x^{2}+y^{2}-1=0 \\\
x=0
\end{align}
$$

ソースコードは以下の通りです。あとで簡単な説明をします。

“`python
import numpy as np
from scipy import optimize

# 解きたい関数をリストで戻す
def func(x):
return [x[0]**2 + x[1]**2 -1.0,

元記事を表示

numpyメモリ使い回しチートシート

# はじめに
大規模行列を扱う人にとっては行列の malloc/realloc は死活問題。メモリを使いまわしたい邪悪な人たちはこの短いチートシートに目を通しておこう。

## 配列のコピー
配列の中身を別の配列にコピーしたいときは`numpy.copyto`を使う。`numpy.copy`は新しい配列を生成してしまうので注意。

“`python
import numpy as np

m, n = 2000, 1000
A = np.ones((m, n))
B = np.zeros(A.shape)

# 新しい配列を生成しないコピー
np.copyto(B, A)
“`

## 数学的操作
数学的操作も引数に`out`を取れるものは格納先を指定できる。取れない場合も「実は配列自体はいじってない」みたいなことがある。

### 四則演算/その他
[Mathematical functions](https://numpy.org/doc/stable/reference/routines.math.html)で`out`のパラメータが指定できる演算はメモリを使いまわせる。br

元記事を表示

「破壊的メソッド」はRuby用語なのか?

昨日、「[データサイエンティストが知るべき破壊的メソッドのすべて](https://qiita.com/ninomiyt/items/2e3fb2569427312f28cc)」という記事を書いたのですが、友人から次のような意見を貰いました。

> 微妙に気になったけど、「破壊的メソッド」「非破壊的メソッド」ってプログラミング全般でなくRuby用語で、かつ、「レシーバを変更するメソッド」っていう意味じゃない?
> もしあえて名前で呼ぶなら、inplace methodが正しそう。(日本語は見つからない)
> https://discuss.pytorch.org/t/what-is-in-place-operation/16244
> https://ja.wikipedia.org/wiki/In-placeアルゴリズム

更に、例えばpandasでも[inplaceという引数名が使われている](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html)ので、データサ

元記事を表示

iOSウィジェットにCO2濃度を表示する 【Raspberry Pi × CO2-mini × co2meter】

WFH、捗ってますでしょうか。

我が家の場合、机やモニターなど家で仕事をするのに十分な設備は元々整っていたのですが、たったひとつだけオフィスにはあって自宅にないものがありました。

CO2モニターです。

## 成果物
パッと目につくところに表示させたかったので、iOSのウィジェットに置くことにしました。
最終的にこんな感じでCO2濃度、ついでに室温が見えるようになりました。

### iPhone

### iPad
スクリーンショット 2020-04-26 22.34.59.png【Python】正規表現を利用していつ・どこで・だれが・何をしたゲーム

#目的
###・正規表現を学んだのでとりあえず楽しく使ってみる

#環境
– Visual Studio Code
– Python

#手順
#####すべてひとつのファイル(practice.py)に書きました。

###①正規表現のための標準ライブラリであるreモジュールをインポート

“`python:practice.py
import re
“`

###②質問を用意

“`python:practice.py
question = “いつ?どこで?だれが?何をした?”
“`

###③関数four_ws_gameを定義

“`python:practice.py
def four_ws_game(sentence):
words = re.findall(“.*??”, sentence)
i = 0
while i < len(words): answer = input(f"{words[i]}:").strip() if answer == "": print("真面目にやって

元記事を表示

[Python] 自分用のLINE botを作る

**注意**
この記事は**自分だけに向けた**LINE botをPythonで作る過程の紹介です.
この用途に限定すれば,LINE botの作成はとても簡単になります.
(使用例:時間のかかるスクリプトの終了をLINE経由で通知)

## Python APIのインストール

“`shell
pip install line-bot-sdk
“`

## LINE Developers (Messaging API) への登録,必要事項の取得

ここで必要な情報は,

– Channel access token: Messaging API settingsから
– 送り先のuser ID: **送り先にしたいアカウント (自分) で登録**すると,Basic settings > Your user ID (下の方) で送り先のIDを確認可能.
– スマホのプロフィールから見るID (友達検索などで使うやつ) とは異なる

他のユーザーに向けても送信したい場合は,
– Channel secretをLINE Developersから取得
– フォローやメッセージ受信と

元記事を表示

pip installでproxyにインストールが阻まれる

機械学習を触ってみようということで、環境のセットアップしています。
目標とする構成は、以下の通り。

* OS:Windows 10
* Python:3.7.3
* Anaconda:4.6.11
* Jupyter Notebook:5.7.8
* TensorFlow:1.13.1
* Keras:2.2.4

Anacondaをインストールし、いざAnaconda Powershell Promptからインストールを実行したところ、tensorflowのインストールを実行したところ、Time outになってしまいました。

“`
(base) PS C:\Windows\system32> pip install tensorflow==1.13.1
Collecting tensorflow==1.13.1
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘ConnectTimeoutError(

元記事を表示

Pythonで毎日AtCoder #52

### はじめに
[前回](https://qiita.com/taxfree_python/items/c65c2e42f3d945c36235)
今日は、AGC-Aを3問解きます。

### #52
[AGC040-A](https://atcoder.jp/contests/agc040/tasks/agc040_a)

**考えたこと**
考え方は分かったのですが、実装ができませんでした。$a$を$[0]*(n+1)$のlistとします。私が実装でこけてたのは、’<'と'>‘の両方をいっしょに処理しようとしていたからです。Nも$5 * 10^5$程度なので、$O(2N)(計算量は係数は無視)$くらいは通ります。まずは、’<'から処理します。$s[i]=='<'$なら$a[i+1]$は$a[i]+1$になります。 次に'>‘について処理しますが、すこし工夫が必要です。’>’は不等号の関係より、後ろから計算しないといけません。ですので、range(n)にreversedをかけます。$s[i]==’>’$なら$a[i]=max(a[i+1]+1,a[i])$を取ります。最後に$sum

元記事を表示

OTHERカテゴリの最新記事