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

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

部分観測マルコフ決定過程と強化学習

この記事は自作した強化学習フレームワークであるSimpleDistributedRLの解説記事です。
概要は[こちら](https://qiita.com/pocokhc/items/a2f1ba993c79fdbd4b4d)です。

また、前提知識として必要なマルコフ決定過程については[こちら](https://qiita.com/pocokhc/items/953585fa60fa71651969#%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E6%B1%BA%E5%AE%9A%E9%81%8E%E7%A8%8B)をご覧ください。

# 部分観測マルコフ決定過程

マルコフ決定過程では全ての状態が観測できることが前提でした。
しかし、状態が一部分しか観測されない事は十分に考えられます。
これを仮定したモデルが部分観測マルコフ決定過程(partially observable Markov decision process; POMDP)です。

マルコフ決定過程の要素は以下でした。

“` math
\begin{align}
S = \{s_1,

元記事を表示

Nesterov加速勾配法

# Nesterovの加速勾配法とは

数値最適化における反復法はある関数$f:\mathbb{R}^m \rightarrow \mathbb{R}^n$に対して、適当な探索方向$d_k$を定義して

“`math
x_k \rightarrow x_k + d_k
“`

と更新する方法です。ただし、$d_k$は降下方向でなければならないので、

“`math
\lim_{ c \rightarrow 0 } \frac{ f(x_k+cd_k) – f(x_k) }{c} = \nabla f^T(x_k) \cdot d_k < 0 ``` を満たす必要があります。一番簡単なのは$d_k = -\nabla f(x_k)$とする最急降下法です。 しかし、このままでは収束性があまりよくありません。そこでこの収束性をよくする手法の1つがNesterovの加速勾配法です。更新の手順は次のようになります。 ```math x_0 = y_0 \\ x_{k+1} = y_k - \alpha_kf(y_k)\\ y_{k+1} = x_{k+1} + \beta_k (x_{

元記事を表示

Ethereumのcontract addressを計算する

`pysha3`パッケージが必要。間違って`sha3`パッケージをインストールしてしまうと衝突が起きるので注意。

“`
pip install pysha3
“`

# addressとnonceによる方法

addressとnonceから計算する方法。特に何もせずcontractをデプロイした場合はこの方法でaddressが計算される。

“`python
import rlp, sha3

def normalize_address(x, allow_blank=False):
if allow_blank and x == ”:
return ”
if len(x) in (42, 50) and x[:2] == ‘0x’:
x = x[2:]
if len(x) in (40, 48):
x = bytes.fromhex(x)
if len(x) == 24:
assert len(x) == 24 and sha3(x[:20])[:4] == x[-4:]

元記事を表示

ポンコツエンジニアがAIの力に頼って業務効率化? OpenAIのGPT3で、高度な文書要約に挑戦してみる。VS Code + Python

# OpenAIのGPT3で、高度な文書要約に挑戦してみる。VS Code + Python + OpenAI

業務で裁判所の判例判決を読む機会が増えてきたのですが
ど素人の自分には全く書いてあることの意味が理解できません。

あっ、そうだ。 AIに頼ろう。 Aiに頼っちゃおう。
そんなわけでOpen AIのGPT3を使って、高度な文書要約に挑戦してみようと思います。

## 環境構築

PCが新しくなってしまい環境がないので、環境構築から
VS CodeにPythonプラグインを入れます。

### VSCode側の準備

#### VSCodeにPython環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/91924b5e-936f-5b15-b985-7640b0e39d5a.png)

#### OpenAIのインストール

 “`
pip install openai
 “`

![image.png](https://qiita-imag

元記事を表示

論文に書かなかった苦労した点を供養する。

最近、筆頭著者として[論文]()がpublishされた。論文で開発したソフトウェアの概要や、なんのためにそのソフトウェアを作ったのかとかは、論文に書いてあるので、読んでもらったほうが早いと思う。ということで、ここでは論文の内容にはあまり触れずに、実装する上ですごく苦労したのだけども誰も気づいてくれないであろう部分についてQiitaで供養したい。

## 論文の概要
一応、論文について触れておくと、「DNA配列の設計プロセスを記述するためのソフトウェア(QUEEN)を開発しまたよ」という内容である。
基本的にDNA配列の設計はGUIのソフトウェアで行われることが多いのだけど、個人的に100個とか200個とかプラスミド配列(DNA配列)を設計するタスクが発生してしまい、手作業では無理だーということで作り始めてしまったのがきっかけである。最初は、ちょちょいのちょいで実装して、あわよくば論文にもと思っていたわけだが、、、
ということで以下、論文に書かなかったが実装で苦労した点を供養していく。

## その1: 処理と変数名を記録する
この論文では、解析(実験)の再現性を一つのテーマとしている。

元記事を表示

seach_tweetsでtweetを取得

# 1. はじめに
目的:twitter APIでツイートを取得する
pythonのtweepyというライブラリを使う.
`pip install tweepy`
twitterのAPI(V2)は登録済みで話を進める.

# 2. 検索クエリ
“`python
searchkey = ‘”スマホ” iphone apple -filter:retweets’
tweets = tweepy.Cursor(api.search_tweets,q=searchkey,lang=’ja’).items(2000)
“`

`q`:検索したいワードを入れる.
上記の例だと、**スマホ AND iphone AND apple AND リツーイトではない**
`lang`:検索に対象の言語(ja:日本語、en:英語)
`items()` : 取得ツイート数

### qについてもう少し詳しく書く
構文|内容|
:-:|-|
`’iphone’`|iphone,IPHONE,アイフォンなど様々な変換されたワードで検索
`’スマホ iphone’`|単語と単語の間が空白だとAND検索
`’ス

元記事を表示

夏競馬は荒れるのか?データから見る競馬その1

熱く、暑かった日本ダービーも終わり、2歳新馬戦が始まり、夏競馬へと突入していきます。さて、私は競馬を始めてあまり長くありませんが、以前このようなことを聞きました。

「夏競馬は荒れる」

そういえば去年の夏競馬、ふと平場の払い戻し見たら6桁であったことが多かった気がする。というわけで今年も夏競馬が始まるその前に、本当に夏競馬は荒れるのかを検証してみました。

## 解析の準備
まずデータは、一般的にはスクレイピングで取ってくるパターンが多いですが、私はJRA-VAN会員なので、「TARGET frontier JV」という有料ソフトを使ってcsv出力を行いました。ありがたや~
ちなみに1か月無料体験があるので気になる方はお試しあれ↓

https://jra-van.jp/target/index.html

出力したデータは2010年から2021年で、以下の項目となります。

|項目|補足|
|—|—|
|年|10~21年|
|月||
|日||
|開催場||
|レース番号||
|レース種別|レースの略称(OP,G1など)|
|レース名|未勝利や新馬戦の場合、レース種別のみで

元記事を表示

初心者のころ苦手だった内包表記・lambda関数・関数引数を使ってProjectEuler35を解けたのが気持ちよかった件

内包表記はリスト操作時にだいぶお世話になっております。
関数引数は使おうと思うときは大体複雑なことをしようとしてる気がする。あんまりいいイメージが無い。
自分の実力だと策士策に溺れるを体現してしまいそう。
lambdaは少しだけ使ったことはあるけれど、良い奴なのかよく分かりません。

“`python
# Circular primes
# Problem 35
# The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.
# There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.
# How many circular primes are there below one million?

#エラトステネスの篩
def get_prime_list(max_numb

元記事を表示

初心者が「ネップリ共有サイト」をつくった話(兼メモ)

## TL;DR
下のサイトをつくった。
https://nepris.herokuapp.com/

Githubリポジトリはこちら。
https://github.com/glyzinieh/nepris

備忘録を兼ねて、開発の経緯をご紹介します。

## はじめに
当方初心者のため、至らぬ点があればアドバイスをよろしくお願いいたします。お気軽にコメントください。
それでははじめにネップリ共有サイト **NePriS** のご紹介をさせていただきます。

### そもそも「ネップリ」って?
「ネップリ」とは、セブンイレブン・ファミリーマート・ローソンなどのコンビニエンスストアで提供されている「 **ネットプリント** 」のことを指します。ネットプリントでは、自分で作成・撮影した画像作品を各サービスのアプリやサイトに登録することで予約番号が発行され、それをコンビニにあるマルチコピー機に入力することで、登録した画像をプリントアウトすることができます。

ネットプリントの予約番号を共有することで、様々な作品をプリントアウトすることができるわけです。
この予約番号の共有には、一般的にTw

元記事を表示

Pythonのジェネレータを使って競プロを遊ぶ

# この記事は何
Pythonで競プロを遊ぶときにジェネレータをたまに使っているのですが、使用感が良いので紹介してみようという記事です。個人的に感じたメリットとしては、
* メイン部分の実装が簡潔になる
* Python特有の機能を使えている気分になれてうれしい(?)

などがあります。
Pythonでの競プロ実装する際の一方針を紹介するものであり、計算速度が改善したりするわけではないです。

動作はPython3.8.6で確認しています。
不備や不正確な点などがありましたら、ご指摘いただけるとうれしいです。

# ジェネレータとは?
pythonのジェネレータに関してざっくり説明します。
詳しい説明は[Documentation](https://docs.python.org/ja/3/howto/functional.html#generators
)や他の方の記事を参照いただければと思います。

関数の`return`を`yield`に置き換えるとジェネレータになります。
関数は値を`return`した時点で処理を終了します。一方、ジェネレータでは値を`yield`した時点の

元記事を表示

深層学習で区間推定(分布推定)

# はじめに
数値を予測するとき予測区間の推定をしたいというときはよくあると思う。
NGBoostとか使うとできるあれ。
今回は時系列データの予測をするときに深層学習で予測区間の推定したいなと思って調べたことを記録に残したい。

# 予測区間推定
予測区間推定をすると予測値とその取り得るばらつきはどの程度なのかを知ることができる。やっていることは基本的に確率分布の推定。
例えばNGBoostだと、モデルが推論するものとして正規分布を仮定した確率分布を設定する。
NGBoostアルゴリズムで学習させると、2種の推論結果を出すモデルが出来上がる。
この2つの出力がそれぞれ推論された正規分布の平均$μ$と標準偏差$σ$であり、点推定としては$μ$を予測値として使用し、予測区間としては$±Nσ$$(N>0)$を区間として設定するといった活用方法がある。
深層学習でも損失関数を確率分布の推論用の関数を適用すればNGBoostのような予測区間の推定ができる。例えばaotamasakiさんの記事「[RNNを用いた正規分布の回帰 keras実装](https://aotamasaki.hatenabl

元記事を表示

Effective Python 第2版 を自分なりにまとめてみる part3

# はじめに
こちらの書籍のまとめになります

[Effective Python 第2版 ――Pythonプログラムを改良する90項目](https://www.oreilly.co.jp/books/9784873119175/) (Brett Slatkin 著、黒川 利明 訳、石本 敦夫 技術監修)

– 全てのパートをまとめているわけではありません
– 個人的に難しくて理解できていなかったり腑に落ちていない箇所は省いています
– もしくは新たな気づきは特にないなと感じたところも省略しています
– コードに関しては書籍のものを丸々掲載するでなく、改変しています(その過程も個人的に有意義な時間でした)
– そのような理由からこのブログでは多くの部分を削ってしまっています。オリジナルの書籍はかなり勉強になるなと思いました。興味ある人は是非読んでください。
– このページでは本書の6〜7章序盤をまとめています。他の章はこちらを参照ください

– [1〜3章](https://qiita.com/Takayoshi_Makabe/items/d49713937b1b482458

元記事を表示

PythonによるRNA-Seq (バルク) データ解析 ~階層的クラスタリングとヒートマップの作成~

本稿では、Pythonを用いRNA-Seq (シングルセルではなくバルク) データから、サンプルの遺伝子発現様態の特徴を可視化するための階層的クラスタリングの実行、およびヒートマップにより可視化する方法を解説する。

# 階層的クラスタリング
参考: https://bcblog.sios.jp/what-is-clustering-merit-demerit/ (2022年6月14日アクセス)
クラスタリングとは、ある集合を何らかの規則によって分類することである。言い換えると、RNA-Seqデータの場合では「サンプル間の (遺伝子間の) 遺伝子発現パターンが似ているか否か」という類似性に基づいてグループ分けする作業である。

# 使用データ
本稿では、先行研究の公開データを用いてデモ解析を行う。
生後1ヶ月、2ヶ月、4ヶ月齢の雌雄両方のマウス由来の海馬を用いたRNA-Seq解析データを利用する (Bundy et al. BMC Genet. 2017, #GSE83931)。こちらの公開データのXlsxファイル(GSE83931_Counts_and_FPKM.xlsx)の中の

元記事を表示

sqlite3でPython変数を正しくバインドする方法

:::note warn
記事の内容はあくまで個人の考えに基づくものであり、組織を代表するものではありません。
:::

sqlite3を使って開発をする中で、よろしくない方法でPython変数をバインドしていた。
社内のコードレビューでご指摘いただき、事前に気づくことができた。
備忘も兼ねてまとめておく。

# アンチパターン

もともと下記のような方法でPython変数をバインドしていた。
“`python
import sqlite3

name = “test user”
age = 20

con = sqlite3.connect(‘example.db’)
cur = con.cursor()
cur.execute(“create table user(id integer primary key autoincrement, name text, age integer);”)
cur.execute(“insert into user(name, age) values(‘{}’, {});”.format(name, age))
con.commit()
co

元記事を表示

天文データ解析入門 その23 (GAIA DR3 の扱い方)

本記事では、[GAIAのDR3](https://www.cosmos.esa.int/web/gaia/dr3) の、python を用いた基本的な扱い方について記述します。

今回は、比較の例としてHerschelのアーカイブデータも用います。データは
http://herschel.esac.esa.int/Science_Archive.shtml
から
Taurus
と検索して、一番上に出てくる level3 のfits
hspireplw_30pxmp_0436_p2515_1476896810029.fits
を使用します。

まずは必要なものを import します。
“`python
from astropy.io import fits
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import aplpy
from astropy import units as u
from astropy.wcs import WCS
from astropy.coord

元記事を表示

DjangoをDockerでHerokuにデプロイする

# 序

python+conda以外の全ての知識がなかったのでかなり苦労してdjango+docker+heroku環境を整えた。

今回は化合物のSMILESを入力として受け取り、その化合物を表示するところまで行きます。

#### 参考にしたサイト様
[Docker上でAnacondaを使って入れたDjangoをHerokuで動かす](https://qiita.com/sakiyamaK/items/de6344234b51545f196c)
[HerokuにConda環境で開発したアプリをデプロイする方法](https://qiita.com/kimisyo/items/b7fbdd9afe82b872a18b)
[Django 入門](https://python.keicode.com/django/creating-django-app.php)

#### 環境
Window 11
anaconda
VScode

# 1. Dockerでコンテナを作成する。

[Docker上でAnacondaを使って入れたDjangoをHerokuで動かす](https://q

元記事を表示

データ基盤構築(毎日決まった時間にスクレイピングしデータを収集する)

# はじめに
この記事は、自己学習で行ったデータ基盤構築についての備忘録となります。GCPの公式ドキュメントを参考に作業を行いました。もし、似たようなことをやりたい場合は公式ドキュメントの方を参考にすることをお勧めします。
(参考URL)https://cloud.google.com/scheduler/docs/tut-pub-sub?hl=ja

また、この記事の内容はGCPの無料枠では収まらない(と思う)のでご注意をお願いします。

記事の中にクローリング、スクレイピングをするコードがありますが、実際に行う場合は自己責任でお願いいたします。
なお、プロジェクトはすでに作成してあるものとします。

※内容は2022年5月時点のものです。
# 1. 作成した分析基盤について
以下のようなデータ基盤を作成しました。
![Untitled-2022-05-24-0005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2517778/7dd1f223-5a76-994b-557a-a92baaf4f1aa

元記事を表示

Python勉強③ 最大公約数と最小公倍数 2022/06/16

さて今日は最大公約数の問題でユークリッドの互助法にぶち当たりました。

ユークリッドの互助法とは…

2つの自然数 𝑎, 𝑏 について,𝑎 を 𝑏 で割ったときの商を 𝑞,余りを 𝑟 とすると
「𝑎 と 𝑏 の最大公約数」は,「𝑏 と 𝑟 の最大公約数」に等しい。

具体例で表すと

120 ÷ 50 = 2 … 20
50 ÷ 20 = 2 … 10
20 ÷ 10 = 2 … 0
(10 ÷ 0 = 10を返す)

この場合10が最大公約数となります。

~~~
def gcd(x, y):
if y == 0: #上記の数式だと10÷0=の場合、10を返す。つまり余りが0で計算が終わりの場合
return x
else: #あまりの数でわる式を返す
return gcd(y,x%y)

print(gcd(12, 18))
~~~

次に最大公倍数。これは最大公約数がわかっていたら簡単なんですね。

aとbの最小公倍数は

最小公倍数 = a÷ 最大公約数 × b

という公式があるようで。何か見覚えがあるよ

元記事を表示

【Python】最初、混同してしまう「assert, except, raise」文について

# assert

**デバックを作業を容易に行うため** に使用されます

条件式が`False`の場合には`AssertionError`を発生させて停止。
`True`の場合はそのまま処理が続きます

“`sample.py
assert “条件式をここに書く”, “Falseの場合のメッセージ”
“`

“`sample.py
# 例)
# 1. AssertionErrorは発生せずに、処理は続く
assert “apple” == “apple”, “りんごでは無いです”

# 2
assert “apple” == “orange”, “りんごでは無いです”
# => AssertionError : りんごでは無いです
“`

### では、if文と、assert文の違いは?

同じ様に条件分岐をするif分との違いは何なのか

“`sample.py
if “apple” == “apple”:
is_same_fruit = True
else:
is_same_fruit = False
“`

if文は`True`でも`False`でも

元記事を表示

ホテリングT2法による異常検知

# 内容

標準正規分布とカイ二乗分布の関係を用いて、ホテリングT2法という簡単な異常検知モデルを作成することができます。

確率変数$X$が標準正規分布$N(0,1)$に従う時、$X^2$は自由度1のカイ二乗分布$\chi^2_1$に従う為、この分布をベースに「異常である」の閾値$a$を設定し、新たに観測した値から導かれる異常度$a(x’)$が閾値$a$を超えるなら「異常」とする方法です。

065c9039-84d6-47f7-8bbd-3389bb5160ae.png名

実際に標準正規分布から取得した1000の標本を2乗して、プロットしてみます。

“`python
from scipy.stats import norm chi2
import matplotlib.pyplot as plt
impo

元記事を表示

OTHERカテゴリの最新記事