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

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

見てわかる!最適化手法の比較 (2020)

#対象者
最適化手法ごとの比較を見てみたい人へ。
[ここ](https://qiita.com/kuroitu/items/36a58b37690d570dc618)で紹介している手法をいろいろな探索空間で比較してみます。
他にいい探索平面をお持ちの方や、試してみて欲しい探索空間がある方は情報をお待ちしています。

#目次
– [x^2-y^2](#x2-y2)
– [tanh(x)^2+tanh(y)^2](#tanhx2tanhy2)
– [-sin(x)/x-sin(y)/y+(x^2+y^2)/7](#-sinxx-sinyyx2y27)

#x^2-y^2
とりあえず

“`math
f(x, y) = x^2 – y^2
“`

で、原点周辺を探索させみます。
初期位置は$(x_0, y_0) = (-1.5, -10^{-4})$としています。$y$座標が0でないのは学習則において傾きが完全に$0$になることを想定していない物が含まれているためです。
まあ普通は勾配が完全に$0$なることはないと言っていいので問題ないですね。

元記事を表示

Pythonによる軸対称応力解析プログラム(四角形要素)[改訂版]

## はじめに
微小変形弾性理論に基づく、Pythonによる軸対称応力解析プログラムを紹介します。
プログラムの特徴は以下の通りです。

+ 軸対称要素として1節点2自由度の四角形アイソパラメトリック要素を用いています。1要素の回転方向角は1ラジアンとしています。
+ 当初は「回転軸を水平右向きを正、半径方向軸を鉛直上向きを正」として、四角形要素を用いた2次元応力解析プログラム([https://qiita.com/damyarou/items/320bad2052bb5fccd75f](https://qiita.com/damyarou/items/320bad2052bb5fccd75f))を書き換えて使っていましたが、「回転軸を鉛直上向きを正、半径方向軸を水平右向きを正」とした場合、変位及び応力が逆向きに求まってしまうため、鉛直軸の向きにより計算を補正するしくみを導入しました。
+ ある程度大規模な解析ができるよう、連立方程式は疎行列処理を行って解いています。

## 要素剛性方程式
### 変位を求めるための方程式

“`math
\begin{equation}
[\b

元記事を表示

Python超初心者の超初心者のためのPython #len関数

環境
windows7 (Mac Book Pro 16inch欲しい)
Visual Studio Code
chrome
python ver3.8.3

この記事はプログラミング初心者かつPython初心者に向けて記述します。

##len関数

len関数とは何でしょう?PCだと文字が見づらいかもしれません。
lエル、eイー、nエヌでlenです。
この関数は引数(ひきすう)に書いた文字列の長さや要素の数を教えてくれます。

「それが何?」と思いますが、様々なコードを書いていると時折見る関数です。
たぶんプログラミングでこの文字列の長さや要素の数が必要なんでしょうね。
ではどう書くのでしょうか?[Python超初心者の超初心者のためのPython #関数2](https://qiita.com/Macchino5/items/95750957b6ce266add50)でも記したようにlen関数も
戻り地を返さない組み込み関数です。書き方は至ってシンプル。

“`python:len.py
len(‘文字列’)
“`
です。

例えば

“`python:len.py
pri

元記事を表示

新型コロナウイルスの感染抑制の鍵は感受性の過分散ではないかという説

# はじめに
 新型コロナウイルス感染症(COVID-19)の感染拡大の予測や分析において、SEIRモデルあるいはSIRモデルが良く使われますが、最近スケールフリーネットワークに基づく[G.M. Szaboによる論文](https://arxiv.org/pdf/2004.00067.pdf)や[Y. Ohsawaによる論文](https://arxiv.org/ftp/arxiv/papers/2004/2004.09372.pdf)が発表されて、注目されています。
 スケールフリーネットワークとは、簡単に言えば、下図のように「一部の頂点が他のたくさんの頂点と辺で繋がっており、大きな次数を持っている一方で、その他の大部分はわずかな頂点としか繋がっておらず、次数は小さいという性質」([複雑ネットワーク](https://ja.wikipedia.org/wiki/%E8%A4%87%E9%9B%91%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF))を持つネットワーク構造ですが、この性質がクラスター班の調査で見出されている**

元記事を表示

Pythonでアルゴリズム(素数判定)

#はじめに
Atcoder Biginner Contest170にて、エラトステネスの篩の考え方を応用させるというのを見て、エラトステネスの篩すらまともに理解できてないままではいかんと思い執筆を決意しました。
実用性というよりは原理の理解のための記事なのでコンテスト中などにたどり着いた方は[こちら](https://ikatakos.com/pot/programming_algorithm/number_theory/prime_judge)
がおすすめです。(いつも参考にさせていただいているいかたこのたこつぼさんのHPです)
#素数判定
##試し割り法
 まずは、試し割り法と呼ばれる手法を用います。2よりも大きい数で順に割っていき、割り切れたらその数を約数に持つということなので素数ではありません。
 しかし、$N$まで全ての数で割っていく必要はありません。$N$が約数$d$を持つとすると、$N/d$も$N$の約数であり、どちらか小さい方で割れば十分です。小さい方が最大となるのは、これら2つが等しくなるときなので、(小さい方が大きい方を抜かすとそれはもう調べ終わっている) $\sq

元記事を表示

pythonで各処理の処理時間や呼び出し数の確認 (cProfile)

# はじめに
データ解析をする際に,自作のコードが遅いことが多々ある.
場当たり的にtime関数を利用して時間計測をするという方法もあるが,今回はProfilingを利用したいと思う.

# 簡単な使い方

1. 実行時にcProfileコマンドを付与

“`terminal
python -m cProfile -o プロファイルを書き込みたいファイル名.prof 処理時間を計測したいファイル名.py
“`

2. profファイル内を見るためのコードを作成

“`py
import pstats

if __name__ == “__main__”:
sts = pstats.Stats(“hoge.prof”)
sts.strip_dirs().sort_stats(“cumtime”).print_stats(30)
“`

3. 上記のpyファイルを実行

“`terminal
Mon Jun 15 02:22:15 2020 hoge.prof

415990 function calls (415842 primitiv

元記事を表示

AtCoder Beginner Contest に挑戦してみたら散々な成績だったので振り返る

定期開催されている ABC こと AtCoder Beginner Contest に参加してみたら、純粋な実力不足以外にも本質じゃないところで躓いたりして大変もったいないことをしてしまったので、次回の学びをより深めるためにできそうなことをメモっておきます。

参加したのは “ABC 170” です https://atcoder.jp/contests/abc170

# 入力はコマンドライン引数じゃなくて「標準入力」

はい。

A問題、 `sys.args` から入力を取り込むコードを書いていました。当然コケるのですが、思い込みのチカラで20分溶かしました。一番意義のない時間だった。

入力値は `input` で取り込みます。

“`python
# 間違い
import sys

args = sys.argv

# do something …
“`

“`python
# 正解. 以下は入力が2つの整数値の場合
x, y = [ int(i) for i input().split() ]

# do something …
“`

# WA(Wrong

元記事を表示

blueqatでXYミキサーを用いた制約付きQAOA

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

# はじめに

若干いまさら感はありますが、[XY mixer](https://qiita.com/YuichiroMinato/items/46839cdaabbb452f2fa1)を使ったQAOAアルゴリズムを一度動かしてみようと思いました。

XY mixerの利点について簡単に確認すると、

ある最適化問題において例えば$\sum_i^N x_i = 1$といったような制約条件があった場合
通常であればコスト関数(ハミルトニアン)に制約項を追加する代わりに
ansatzとしてXY mixerを導入することで
時間発展における探索空間自体を制約を満たす領域内に制限することができる。

と言えます。

今回は[こちら](https://arx

元記事を表示

groupby関数を使ってデータフレームを分割して処理する方法

#本記事について
Pythonのpandasを使ったデータ分析において、groupby関数はグループごとに演算してくれる便利な関数です。
私がよく利用するのは、
df.groupby(df[‘col1’])[‘col2’]**.mean()** や **.describe()** 
といったオーソドックスな関数ですが、
「分割されたデータフレームごとに処理したい」ことがあり、
**for**文と**get_group**を組み合わせると、都合よく処理できることが分かりましたので紹介します。
#データの準備
“`python:groupby_get_group.py
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

iris_dataset = load_iris()
df_iris=pd.DataFrame(iris_dataset.data,columns=iris_dataset.feature_names)

元記事を表示

Matplotlibで2軸プロット

[一覧表に戻る](https://qiita.com/h398qy988q5/items/4af78a3afe73b6f38419)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278468/a6699f30-a614-1729-0312-7000bc4dea7e.png)

“`python
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams[‘font.size’]=15

np.random.seed(1)
plt.figure(figsize=(12,3.5))

ax0 = plt.subplot(121)
ax1 = ax0.twinx()
ax2 = plt.subplot(122)
ax3 = ax2.twinx()

ax1.get_shared_y_axes().join(ax1, ax3)

ax0.plot(np.random.rand(1) *

元記事を表示

循環import問題で見える、__name__ == “__main__”の必要性

循環import問題というものがあります。
例えば、

“`hoge.py
# coding: utf-8

import piyo

class Base:
pass

class Hoge(Base):
pass

“`

と、

“`piyo.py
# coding: utf-8

import hoge

class Piyo(hoge.Base):
pass

“`

という2つのPythonスクリプトがあったとして、「`python3 hoge.py`」と実行するとエラーは起きないのですが、「`python3 piyo.py`」と実行すると、

“`
Traceback (most recent call last):
File “piyo.py”, line 3, in
import hoge
File “hoge.py”, line 3, in
import piyo
File “piyo.py”, line 5, in
class Piyo(hoge.Base):

元記事を表示

AtCoder Beginner Contest 170 参戦記

# AtCoder Beginner Contest 170 参戦記

## [ABC170A – Five Variables](https://atcoder.jp/contests/abc170/tasks/abc170_a)

2分で突破. 書くだけ. 最初から xi が0の場合はどうすれば良いんだと思ったが、xi = i だった、あはは.

“`python
x = list(map(int, input().split()))

for i in range(5):
if x[i] == 0:
print(i + 1)
break
“`

## [ABC170B – Crane and Turtle](https://atcoder.jp/contests/abc170/tasks/abc170_b)

2分半で突破. 書くだけ. O(1) で書けない辺りが弱い.

“`python
X, Y = map(int, input().split())

for i in range(X

元記事を表示

google image download実行時におけるUnicodeDecodeErrorの対処方法

##0. はじめに
Tensorflow等で画像認識させるために学習用の画像を収集するには、google image downloadが非常に便利です。

pipで取得できるgoogle image downloadでは現時点(2020/06)時点では正常に画像収集ができないため、修正版のgoogle image downloadを取得しました。
しかし、取得したpythonファイルを実行したところ、UnicodeDecodeErrorが出たため、その対処方法を備忘録として残します。

ちなみに本内容で触れませんが、google imade downloadで101枚以上の画像を収集する際は別途chromedriverが必要です。

##1. 環境
macOS Catalina 10.15.3
Python 3.5.3
pip 20.1.1

##2. pipでインストール
pipでgoogle image downloadをインストールできます。

“`
pip install google_images_download
“`

しかし、現時点(2020/06)で実行しても、

元記事を表示

Pythonのmain()ーif文つけるのなぜ?

#Pythonの__name__ってなにっ?
`if __name__ == “__main__”:`っていう
Pythonのソースコードによく登場する1行は
「おまじない」とかで片付けられますが
なんの役に立っているのでしょう。

例えば、`helloWorld.py`というファイルを作成したとします。

“`Python:helloWorld.py
def main():
print(“Hello Python!”)
# メイン
main()
“`
先ほどの
`if __name__ == “__main__”`の記述はありませんが

“`
$ python helloWorld.py
Hello Python!
“`
という実行結果は得られます。
ただしこの構成の場合、`import`した場合でも

“`
>>> import helloWorld # この時点で「Hello Python!」が表示されてしまう
Hello Python!
“`
ということで、単にPythonファイルをインポートして、main関数を再利用しようとしただけなのに実行まで勝手にされ

元記事を表示

Django REST Framework + Clean Architecture 設計考察

# Django REST Framework + clean architecture 設計考察

## はじめに

昨今の AI の盛隆によって、新規システム開発に Python で構築することを選択することも増えてきたのではないでしょうか。
新規 Web サービスを Python で作るとなると、フロントエンドは React や Vue.js といったフレームワーク、バックエンドは Django か Flask で REST API を提供するような形が主な選択肢になると思います。
シンプルな構成であれば Django REST Framework は簡単にかつシンプルに API サーバを作れますが、少し複雑になるときちんとアーキテクチャを考えないとすぐにカオスになります。
~~私の入った案件では、これがもうカオスでカオスで。。。~~
ざっと調べた限り、Django REST Framework + Clean Architecture の組み合わせで記事もないため、私自身の勉強、考えの纏めも兼ねて本記事で検討します。
~~というか辛いのでここで纏めた内容で導入したい。~~

元記事を表示

よく使うファイル・フォルダダイアログをクラス化

## ファイル・フォルダダイアログをクラス化

仕事中にファイルダイアログ画面をつくることが多くなりました。
以下の要素を毎回つくります。

* 画面タイトル
* 画面サイズ
* エントリーラベル
* エントリー画面
* ダイアログ表示ボタン
* 実行ボタン

自分の備忘録と再利用化しやすいようにクラス化しました。
以下ソースコードです。クラスの継承(自分の備忘録用)も含まれています。

“`
import os
import csv
import tkinter as tk
from tkinter import filedialog

class Dialog_menu_screen(object):

def __init__(self,screen_title,screen_size,path_label,dialog_btn,start_btn):
self.screen_title = screen_title
self.screen_size = screen_size
self.path_label = path_label
self.dial

元記事を表示

PythonでChemSpiderを利用する方法

# はじめに

[ChemSpider](https://www.chemspider.com/)は、代表的な化合物のデータベースです。
ここでは、PythonでChemSpiderのデータを利用する方法について解説します。

# Web API利用申請

まず、Web APIの利用申請が必要です。
[Developers Portal](https://developer.rsc.org/)から申請を行います。
ここでAPIキーが発行されるので、これを利用してChemSpiderのデータを取得します。

# ChemSpiderクラスのインスタンス作成

PythonでChemSpiderを利用するには、`chemspipy`を使います。
上で取得したAPIキーを利用して、`ChemSpider`クラスのインスタンスを作成します。

“`python
from chemspipy import ChemSpider

cs = ChemSpider(発行されたAPIキー)
“`

# 化合物の検索

“`python
search_results = cs.search(

元記事を表示

国家公務員行政職からAIエンジニアに転職するまで②週目 2020.6.13~

※エンジニアに転職するまでの学習経過等を日記感覚で書いていきます。
 プログラミングに関係ない読書の記録もありますがご了承ください。

6.13(土)
7:05~ スタバ (トイレにウォシュレットがないことに今更気づき戦慄)
・Udemy キカガク流【初級】 まずこの講座で基礎的な用語や、単回帰とは何かという説明を図を示してもらいながら理解した方が絶対いいと感じた。
・0メモ(0秒思考という本参照)4枚
昼から車で実家に帰省。夜は元上司と飲み会。日本酒飲みすぎて吐いた。

6.14(日)
二日酔いで朝はまともに動けず・・
昼に体調がやや回復し、夜に戻ってきた(高速料金が休日割引適用外のため、下道。片道4時間半・・・)
21:30~ 家。Qiita投稿。 タイピング練習。

元記事を表示

LambdaLayersをLambdaで作る

# はじめに

普段私が`Lambda`を利用する際は、`chalice`を利用して`Lambda`関数の作成とデプロイをしています。

`chalice`は便利なのですが、デプロイ時に毎回`pip install`して必要な`package`を集めているみたいです。
そのため、`pandas`などの重めの`package`を利用している場合は、デプロイに時間がかかります。

そこで、あらかじめ利用する`package`を登録しておく`Lambda`のサービスの`LambdaLayers`を活用します。

## 前提

`LambdaLayers`を作成する際の前提条件などです。

1. `LambdaLayers`は`packages`を`zip`で固めたファイルを利用して、あらかじめ`Lambda`が利用できる状態にすること[参考](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)
1. `package`の配置などフォルダ構成も決まっている
1. `pandas`などの一部

元記事を表示

ドキュメント生成の前処理でテキストを任意変換するSphinx拡張

# 前提
最近、Sphinxで文書作成しています。

+ restructuredTextより、markdownでゴリゴリ書きたい
+ 公式ドキュメントによるとcommonMark使えばいけるが、Table使えない
+ 「いいライブラリあるやんけ!」← [MarkdownとreStructuredTextを単一ファイルに混ぜ書きできるM2Rの紹介(Sphinx拡張対応)](http://h-miyako.hatenablog.com/entry/2017/08/11/133620)

ということで一旦解決したのだが、PlantUMLを使う際にVSCode上でプレビューできないのがストレスになってきた。

# やりたいこと

make htmlする時に、

“`
“`plantuml
“`

の囲みを

“`
.. uml::
“`

に自動変換したい。

# 方針

[公式ドキュメント](https://www.sphinx-doc.org/en/master/extdev/appapi.html)内に、イベント実装方法あり。

– 「[Sphinx.connect(even

元記事を表示

OTHERカテゴリの最新記事