Python関連のことを調べてみた2021年08月14日

Python関連のことを調べてみた2021年08月14日

ひらがなの文字を小さい文字、濁音、半濁音に変換する

## なぜ作ったか
フリック入力の簡易的なプログラムを作っているときに作りました。
書くのが面倒なのでめんどくさがりな方は是非使ってください。

## ひらがなを大きい文字、小さい文字へ相互に変換する
ひらがなを与えると大きな文字、小さな文字に変換します。
アルファベットを与えると大文字小文字に相互変換する機能もついています。

“`python
def komoji2oomoji(moji):
if moji in “ぁぃぅぇぉっゃゅょ”:
henkan = str.maketrans(“ぁぃぅぇぉっゃゅょ”, “あいうえおつやゆよ”)
return moji.translate(henkan)
elif moji in “あいうえおつやゆよ”:
henkan = str.maketrans(“あいうえおつやゆよ”, “ぁぃぅぇぉっゃゅょ”)
return moji.translate(henkan)
elif moji in “ァィゥェォッャュョ”:
henkan = str.

元記事を表示

-1を返すと-2を返す?

https://youtu.be/AmHE0kZhLIQ?t=2566

Pythonには`hash()`という組み込み関数がありますが、上記動画によるとどうやら **CPython** においては戻り値が`__hash__()`の戻り値とは異なる事があるらしいです。試しに以下のcodeを実行してみると

“`python
# 環境 CPython 3.8.10
class T:
def __hash__(self):
return -1

obj = T()
print(hash(obj)) # => -2
“`

確かに`-2`が出力されました。こうなるのはCPythonが内部で`-1`を特別な値として使っていてhash値として利用できず`-2`へすり替えるかららしいです。`__hash__`はあくまでinterpreterが内部で必要とするhash値を求めるのにのみ使われるべきであって、決してアプリケーション側が使う物ではないとのこと。というわけで自前で算出したhash値を確実に使いたいなら例えば以下のように別に関数を用意するなどの対策が要るのかもし

元記事を表示

Pythonを使って自由度調整済み決定係数の大きい説明変数の組み合わせを探索する①(全探索法)

#作業環境
Jupyter Notebook(6.1.4)を用いて作業を進めた。
各versionは`pandas`(1.1.3), `scikit-learn`(0.23.2), `statsmodels`(0.12.0)である。

#やりたいこと
最小二乗法で最適化された線形回帰モデルについて学習し、そのモデルを評価する指標として決定係数や自由度調整済み決定係数を学んだ。学習時には手作業で係数を追加したり削除したりしながら決定係数を比較していたが、これを自動探索するプログラムを練習として組んでみたいと考えた。
つまりやりたいことは、データ全体を渡したら最も決定係数が高くなる説明変数の組み合わせとその決定係数を返してくれるプログラムを考えて作ってみたい。
なお、**その説明変数が説明変数として適切かどうかは特に考慮せず、単純に決定係数を比較して説明変数を選択するのが今回の目的である。**

今回はまず**全探索**の方法を考える。これはすべての組み合わせを比べて決定係数が最大のものを選ぶので、本当に最も係数が大きいものを選ぶことができる。しかし、単純に$2^{説明変数の個数}$通りの

元記事を表示

にゃんこスイーパー

Python+Cursesで、にゃんこスイーパーを書いてみました。
Ubuntuのターミナルで動きます。
ファイルに、chmod +x nyankosweeper.pyとして、実行権を付けて動かして下さい。

$./nyankosweeper.py [number of cats]として、動かします。
[number of cats]は、省略できます。省略すると、機雷の数は61個となります。

スペースキーで、開き、’z’キーで、マークを付けます。カーソルは矢印キーで動かします。
’q’キーで抜け出せられます。

pyinstallerで、コンパイルできます。コンパイルしなくとも、そもそも速度はあんまり問題ないですが。

“`nyankosweeper.py
#!/usr/bin/python3

import curses
import random
import locale
import select
import sys

xsize = 40
ysize = 23
vvram = [[0 for i in range(ysize)] for j in range(xsiz

元記事を表示

AWS StepfunctionsでCloudFormationスタックをシリアルに実行する

## はじめに

AWS StepfunctionsとLambdaでCloudFormationスタックをシリアルに実行するステートマシンを作成しました。(実行したスタックが完了するまで次のスタックは実行しません)
これは[以前作成したスクリプト](https://qiita.com/suo-takefumi/items/2bbcc3fd9af02acbeb26)をサーバレスで実行できるように改善したものになります。

## ソース

作成したソースはgithubに格納しました。

https://github.com/zgw426/AWS-StepFunctions_CreateStacks

## Stepfunctions ステートマシン

作成したステートマシンと各フローの処理概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/e8e3c747-8b8b-bf9b-9bb7-044fbc4410fc.png)

余談
Stepfunctionsっ

元記事を表示

Pythonで配列の要素を一括置換する

# はじめに

配列に含まれている特定の文字列を一括置換する方法の一つとして残しておきます。
多次元配列を扱っている場合においても、内包表記などを用いれば簡単に置換できるかなと思います。
今回は拡張子を一括で変更する場合を考えてみます。

**追記:**
@shiracamus さんよりnumpyの`char.replace`メソッドを教えていただきました。ありがとうございました。
今回は、コメントに記載していただいた[コード](https://qiita.com/takatea/items/45ed1ed6b1eb65e6576e#comment-b0d86f12aa1500aa1ed4)をそのまま引用させていただきます。

また、ファイル名にカンマが含まれていた場合に誤動作を起こしてしまうというご指摘もいただきました。numpyをもし使わない場合は、コメントにて記載してくださっている[内包表記のみを使った方法](https://qiita.com/takatea/items/45ed1ed6b1eb65e6576e#comment-fddd5f90b58bda3b4529)を使うの

元記事を表示

SVC karnelについて

# はじめに
SVMのスクラッチを実装するなかで、カーネルの違いについてしらべた。

# データセット

“`python
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=100, noise=0.15)
“`

# linear(線形カーネル)

“`python
poly_svm = Pipeline([
(‘scaler’, StandardScaler()),
(‘svm_clf’, SVC(kernel=’linear’))
])
“`
![Imgur](https://i.imgur.com/E1omcvAl.jpg)

# poly(多項式回帰)

線形カーネルとは異なり、特徴量を自分で加えなくともSVCの内部で加えてくれる。
また、カーネルトリックを使用しているため(内積の計算を楽にすること)直接特徴量を加えるより計算速度が断然早くなる。

“`python
poly_karnel_svm = Pipeline([
(‘sclear’

元記事を表示

yukicoder contest 309 参戦記

# yukicoder contest 309 参戦記

## [A 1642 Registration](https://yukicoder.me/problems/no/1642)

自分が使っている言語の書式指定子を知っているかだけですね.

“`python
N = int(input())

print(‘%03d’ % N)
“`

## [B 1643 Not Substring](https://yukicoder.me/problems/no/1643)

文字列を辞書順に並べると、’a’, ‘aa’, ‘aaa’, ‘aaaa’, … となる. 後は ‘a’ を幾つ並べるとSの部分列では無くなるかを考えれば ‘a’ の個数を数えて、それより1つ長くすればいいと分かるはず.

“`python
S = input()

print(‘a’ * (S.count(‘a’) + 1))
“`

## [C 1644 Eight Digits](https://yukicoder.me/problems/no/1644)

8! ≒ 4.0×104

元記事を表示

CNNを用いた画像分類

##はじめに
私はエンジニア転職を目指して勉強中の数学担当塾講師です
学習の一環として本記事を投稿します
今回は初心者の方の参考になればと
自分が間違えたところも記述しています
至らぬ点も多いですが最後までお付き合いください
(コードは完成したものを載せています)

####Aidemyで学習したこと
・Python入門
・Numpy基礎
・Pandas基礎
・Matplotlib基礎
・データクレンジング
・機械学習概論
・教師あり学習(分類・回帰)
・教師なし学習
・スクレイピング
・ディープラーニング基礎
・CNNを用いた画像認識
・男女識別
・Flask入門の為のHTML&CSS
・Flask入門
・文字認識アプリの作成
・コマンドライン入門
・Git入門
・Herokuへのデプロイ方法
・自然言語処理基礎
・ネガポジ分析
・確率論情報理論
・画像認識アプリの作成

スキルがまだまだ足りない初心者なのでカリキュラム外もいくつか学習しました
これからも時間を見つけて取り組みたいと思います
高校数学と関連しているところは理解しやすくて楽しいと感じました
教える側として質問する人と

元記事を表示

Alembicでバージョンがおかしくなってしまったときの対処法

## はじめに

チーム開発時、マージのタイミングなどでalmbicのバージョンがおかしくなってしまうことがあります。
その対処法を備忘録として残しておきます。

例として、migrationスクリプトの実行順は、以下のようになっているとします。
実際の環境では、`alembic history`を実行するとスクリプトの実行順が確認できます。

“`text:migrationのバージョン
8wp6ak79my83 # 最初のスクリプト
9j9u6f5ipni7
m9xydtn3xynj
ipmk4tzf57xy
5j4gmsz2te8w
m54f6fc82n62
hku9seazdc7k # head
“`

## 現在のバージョンを調べる

`alembic current` を実行すると、現在のalembicのバージョンがわかります。
以下の例だと、”m9xydtn3xynj” まで実行されていることがわかります。なので、この状態で`alembic upgrade head` とすると、”m9xydtn3xynj”の次に実行されるスクリプトから順に実行されていくことにな

元記事を表示

PythonでScryfallからMagic: the Gatheringのカードの情報をゲットした話

#PyhtonでScryfallの情報を取得するには、Scrythonを使ってください。

**Scrython: https://github.com/NandaScott/Scrython**

**完**

#以下、おまけ

前回の記事では、Scrythonが使えない代わりに、requestsとbs4でScryfallの情報を取得しました。
前回の記事: https://qiita.com/Takeshi_Sue/items/753efb7d0c4680c31df1

その後、Scryfallからもっと直接的に情報を取得する方法があることを知りました。

以下のおまけでは、その「Scryfallからもっと直接的に情報を取得する方法」について書いていきます。

今回の目標は、以下の二つです
•Scryfallから特定のカードを検索する。
•その特定のカードの裁定を取得する。

#Scryfallとは

Scryfallは、マジック:ザ・ギャザリングのカードを検索できるサイトです。
https://scryfall.com/

公式からも、Gathererというデータベースが提供され

元記事を表示

データサイエンス100本ノック(構造化データ加工編)をやってみた part7(P-063~P-068)

 この記事はデータサイエンスを勉強しながら、データサイエンス協会が提供する__データサイエンス100本ノック(構造化データ加工編)__を解く過程を自分用にまとめたものです。

 P-001~P-016 [part1](https://qiita.com/pyon/items/c208e585e0cdfabc58bd)
 P-017~P-022 [part2](https://qiita.com/pyon/items/73bf9e8fe75f807aeea8)
 P-023~P-031 [part3](https://qiita.com/pyon/items/948ca309c7985fa2e855)
 P-032~P-039 [part4](https://qiita.com/pyon/items/e7146bbb728979430814)
 P-040~P-051 [part5](https://qiita.com/pyon/items/dac17fb162c99769978b)
 P-052~P-062 [part6](https://qiita.com/pyon/items/5c

元記事を表示

Hacobune(β版)でjupyterLabを動かしてみる

# 概要
– Hacobuneのオープンβがスタートしたので、触ってみるメモです
https://www.sakura.ad.jp/information/announcements/2021/08/12/1968207782/

# ボリュームの作成

– 「プロジェクト」→「ボリューム」と進み、「新規作成」をクリックする
– ボリューム名を入力(今回はwork)
– サイズを入力(今回は5)

![volume_create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/a81a6948-c621-18c0-1e6d-abb1f55ca29b.png)

## ボリュームの確認
– 「プロジェクト」→「ボリューム」と進むと作成したボリュームが確認できる
![volume_admin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282233/16ace98a-bd41-5c70-f11c-3c0e5

元記事を表示

編集距離(レーベンシュタイン距離)と動的計画法について

## 文字列の編集距離
編集距離とは,以下の三種類の操作によって,一つの文字列を別の文字列に変形するのに必要な最小回数です.

* **挿入** :文字列に一つの文字列を挿入する.
* **削除** : 文字列から一つの文字を削除する.
* **置換** : 文字列の中の一文字を別な文字に置き換える.

例えば,文字列$s_1$=”abcd”を文字列$s_2$=”acef”に変形するためには,$s_1$のbを**削除**し,$s_1$のdをeへ**置換**,$s_1$の末尾に文字fを**挿入**すれば,編集距離3で$s_1$を$s_2$に変形することができます.

次に,動的計画法を用いて編集距離を求めます.
$dp[i][j] :=$ $S$の$i$文字目までの文字列を$T$ の$j$文字目までの文字列へ変換する編集距離
と定義します.すると,

“`math
dp[i][j] = min\{dp[i-1][j]+1,\; dp[i][j-1]+1,\;dp[i-1][j-1]+C\}\\
C=1 \quad (S_i \neq T_i )\\
C=0 \quad (S_i = T

元記事を表示

VScodeでpyファイルのデバッグがターミナルプロセス起動の失敗でできなかった件

VScodeでpythonのpyファイルが実行はできるものの
デバッグができない悩みを解消したメモです。

実行環境は
・windows
・VScode
・インタプリタはanacondaの仮想環境

VScodeは補完機能が素晴らしいですが、
込み入った設定になると難しいです・・・。

今回の悩みは、

デバッグをしようとすると
「ターミナル起動プロセスに失敗しました」
と出てきてデバッグができない

というものです。

あれこれ、VScodeでターミナルのエラーについてのヘルプを読みましたが、
なかなか解読できず・・・。

目につく、
C:Users>ユーザー>AppData>Roaming>Code>User>setting.json
に関しての設定は

“`setting.json
“terminal.integrated.shell.windows”: “C:\\Windows\\Sysnative\\cmd.exe”,

“`

でしたが、どうやらこれは問題ないようでした。

何カ月も経ち、きょう下のリンクを読んで
launch.jsonを変更したとこ

元記事を表示

【Kaggle】初心者による初心者のためのコンペ初参加ガイド

# はじめに
プログラミング&機械学習初心者が[Kaggle](https://www.kaggle.com/)のコンペに初参加した際に感じたことをまとめています。
**「kaggleで強くなるためにはkaggleに取り組むしかない」**と言いますが、具体的な取り組み方の参考となると嬉しいです。
最終的にはコピペだけではなく、自分でいろいろ書けるようになりたいです。そのためにコンペで実践できることについて考えてみました。
今回のコンペでは筆者自身が実践できなかった部分も多々ありますが、「こうしとけばよかったな」という観点で書いています。
メダルや順位にこだわるのも楽しいですが、まずはコンペを通して機械学習を使いこなせるようになりたいと思っています。

最近、筆者の周りでコンペの振り返りがたくさん投稿されました。
どれも学ぶことが多く、今回の記事を書くきっかけとなりました。
多様な視点からコンペ初参加について考えることが出来ると思います。

[Kaggleへ一歩踏み出せないあなたに]
(https://note.com/kou_256/n/n2840bc79145f)
[Kaggle E

元記事を表示

【Python演算処理】三次元配列を扱えるのはnumpyと…xarray?

どうやらSympyは**三次元配列**を扱えないらしい?
[【Python演算処理】微分の概念を高校数学段階からグレードアップ?](https://qiita.com/ochimusha01/items/bf5e5bcd824f0a920132)
[【Python演算処理】環論に立脚した全体像再構築②同値関係の再習](https://qiita.com/ochimusha01/items/0374f5579545f4981ec5)
気になって色々調べてみました。完全なメモ投稿…

#numpyの場合
numpyは標準で扱える様です。
[Python: 3次元配列のイメージ (numpy.array)]()
**確認用プログラム**

“`python
import numpy as np

X = np.array([[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[10, 11, 12]]])

# 最初の数字が三次元目の軸

元記事を表示

Pythonでディレクトリ配下のファイルを処理する(元ネタあり)

# はじめに

[Pythonでディレクトリ配下の全ファイルを1行ずつ処理する](http://takemikami.com/2021/06/25/Python-readlines-dir.html)というブログ記事で、できるだけネストせずにディレクトリ配下の全ファイルを処理するというお題を取り上げていました。コードをみるとコンテキストマネージャーとイテレータを組み合わせて、見事に2段のネストで実現されていました。これを見ながら「自分だったらどう書くかな」と思いトライしてみたのがこの記事です。

# 試してみたこと

## 実装方法その1

もし自分がこれをやろうとした時に最初に思いつくのがこんな実装です。`pathlib`使っているので見通しよく書けますね。

“`python
from pathlib import Path
for fpath in Path(“data”).iterdir():
if not fpath.is_file():
continue
with fpath.open() as fp:
for ln in

元記事を表示

slackbotのinvalid_authエラーについて

#概要
今回は、勤怠管理アプリをslackbotを用いて開発しました。いつも通り、作成したものをgithubに入れました。次の日にそのアプリを起動すると、invalid_auth というエラーが出て、起動出来なくなってしまいました。

#解決法
簡単に言ってしまうと、slackbot_settings.pyをgithubに上げてしまい、tokenが無効化されたようでした。(githubにあげた瞬間に来たメールがその警告だったっぽい)なので、tokenを再生成して保存すればokです!
https://api.slack.com/apps
ここから、「your apps」に飛んで、Botsのtokenを再生成、下の方に行って、保存を押す。あとはtokenをslackbot_settings.pyに入れてあげるだけです。
出先で焦ったので、なるべくそのような人が減りますように?

元記事を表示

AirtableのREST API使ってみた

Airtableとは、Web上で利用できるExcelシートのようなもの。
色々なことに利用できそうなので、pythonで簡単に触ってみました。

1. https://www.airtable.com/ にアクセスし、サインアップ
2. 登録を行い、サインイン
3. Add a Baseをクリックし、ExcelのBookのようなものを作成
4. 直感的に色々追加。

めちゃくちゃ簡単ですね。

その後「REST API」のページに遷移してみるとなんとびっくり。
自分が作成したBaseに対してのAPIの利用例が出てきました。
「あんたがcurl使うならこんな感じだよ〜」「あんたがJSで呼ぶならこんな感じだよ〜」って記載されてて、便利だなぁと思いました。

開発者に優しいUX…
pythonだったらもっと嬉しかったけど…

そんなこんなで、作成したソースコードが下記。

“`python
# -*- coding: utf-8 -*

import requests
import json

apiData = requests.get(‘https://api.airta

元記事を表示

OTHERカテゴリの最新記事