Python3関連のことを調べてみた2023年02月01日

Python3関連のことを調べてみた2023年02月01日

【Python】サイコロクラスはどのように実装するのが最適か

読者のあなたならどのような実装を行うかイメージしながら読んでみてほしい。

**条件**
『サイコロを回すクラス』から利用されることを念頭に置く。
このサイコロクラスは、サイコロを渡されると、ランダムに値を選択する処理になっている。

**題**
サイコロクラスはどのように実装を拡張するのが良いか
6面,8面サイコロ…というように作成していくとする。

“`python:サイコロを回すクラスの実装例(サイコロクラスは仕様のみ定義)
import random
import abc

class Dice(abc.ABC):
“””
サイコロの仕様
“””

__slots__ = () # インスタンスの属性追加を不可にする。

@property
@abc.abstractmethod
def numbers(self) -> set:

class DiceRoller:
“””
サイコロを回す役割
ランダムに出目を選択する。
“””
def __i

元記事を表示

python3 sqlite3のデータベースに制約付きの列を追加するためにINSERT文で全データを引っ越す

# やりたいこと
いまあるデータベースに制約付きの新しい列を追加したくなったのだが、なかなか良い方法が見つからなかった。ALTER TABLEを用いれば、一応列の追加はできる。
“`
ALTER TABLE [テーブル名] ADD COLUMN [列名] [データ型];
“`
しかし、どうやら外部キー制約などはつけれないようである。いろいろ調べた結果、まっさらな新データベースを作ってそこに旧データベースのデータをINSERTすればいいんじゃね?ということで、今あるデータベースの情報をもとにINSERT文を構成して、旧データベースのデータを新データベースに引っ越す。

# テストデータベースの作成
とりあえずテスト用のデータベースを作成。parent_id列が追加したい制約付きの列である。
“` python
import sqlite3

bconn = sqlite3.connect(“test_before.db”)
bcursor = bconn.cursor()
bcursor.execute(“CREATE TABLE hoge(\

元記事を表示

Python3 キーボード入力があるまで待って、押されたキーを取得する。

Python3 で、キーボード入力があるまで待って、押されたキーを取得する。
簡単でかつよく使いそうな機能なのに、ネットを探してもなかなか見つからないので書いておきます。

何か画面出力をした後にキーボードが押されるのを待って、押されたらまた次の処理を始めたい場合とか、逐次的に、キーボード入力を見たいときってありますよね。
そういう時は、getkeyモジュールのgetkey関数を使いましょう。
しかし、あくまでこの関数は、Terminal入力を受け付けているときのみで、例えばpygameなどを使っていて、別のウィンドウがアクティブになっている時は使えません。

# インストール

“`
$ python3 -m pip install getkey
“`

# コード

“`kb.py
#!/usr/bin/python3
from getkey import getkey,keys

print(“Hit any key”)

key=getkey() # wait key until keyboard is hit and input with no echoes

if

元記事を表示

Pythonチートシート – Dict型の使い方一覧

## Pythonのディクショナリーについて¶
dict型のデータは、一意のキーと値のペアを使って管理される型です。
自然言語処理を行う際や、言語を翻訳したいときに役立ちます。

言語によってはディクショナリーはハッシュ・連想配列と呼ばれます。 dict型のデータ構造は、ハッシュ表という数値型のテーブルをキー・値と対応させるという 内部構造となっています。そのためdict型のデータはハッシュアブルな型を用いなければならりません。

Pythonではint, str, bytes, tuple, frozenset等がハッシュアブルな型となっていて、通常、dict型のキーはintかstr型とします。

### ディクショナリーの内容を参照する

“`python
d = {“apple”:”りんご”, “orange”:”みかん”, “melon”:”メロン”}

d[“apple”] = “アップル”
d[“strawberry”] = “いちご”

#setdefaultメソッドはキーが存在しない場合のみ値を設定するのに用いる
d.setdefault(“apple”,”Go

元記事を表示

Python + Tkinter – 学習時間を記録(ポモドーロ法)できるアプリ

## ポモドーロ法で学習時間を記録できるアプリ
Tkinter学習の一環でポモドーロ法で学習時間を記録できるアプリを制作しました。25分学習→5分休憩、という方法で効率よく仕事や学習を継続できるという学習法です。

![スクリーンショット 2023-01-31 093939.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/337578/7bd3e706-0130-93d9-dfa8-4259398e87a8.png)

### コード

“`python
import tkinter as tk
from tkinter import *
import math

# —————————- CONSTANTS ——————————- #

PINK = “#e2979c”
RED = “#e7305b”
GREEN = “#9bdeac”
YELLOW = “#f7f5dd”
FONT_NAME = “Courier”
WORK

元記事を表示

Python + Tkinter – マイル→キロメートルへ単位換算するアプリ

## マイル→キロメートルへ単位換算するアプリ

Tkinter学習の一環でマイル→キロメートルへ単位を換算するアプリを制作しました。

### コード

“`python
from tkinter import *
from tkinter import font

#ウィンドウのタイトル+サイズ
window = Tk()
window.title(“Mile to Kilometer”)
window.minsize(width=400, height=300)
window.config(padx=50, pady=20)

myfont = font.Font(family=’Helvetica’, size=16, weight=’bold’)
myfont_result = font.Font(family=’Helvetica’, size=24, weight=’bold’)
myfont_h1 = font.Font(family=’Helvetica’, size=28, weight=’bold’)

def miles_to_km():
miles

元記事を表示

【Python】T5でクソデカ変換を試みたけど難しかった

# 概要
[クソデカ羅生門](https://anond.hatelabo.jp/20200611125508)風の文章を生成したくなったので、T5(text-to-text transfer transformer)による変換を試しましたが、あまりうまく行きませんでした。
やったことのメモを残しておきます。

# 目的
普通の文章をクソデカ文(後述)に変換する変換器をつくることが目的です。

# 背景

[クソデカ羅生門](https://anond.hatelabo.jp/20200611125508)は『羅生門』(芥川龍之介)の語彙を過剰に強調することでおかしみを生じさせている文章です。このような表現が過剰に強調された文章を本記事ではクソデカ文と呼びます。

例えば原文「一人の下人が、羅生門の下で雨やみを待っていた。」はクソデカ文では「一人の下人が、`クソデカい`羅生門の`完全な真`下で雨やみを`気持ち悪いほどずっと`待`ちまく`っていた。」となります。

# 先行事例
[「クソデカ羅生門」的な文章を生成したかった(過去形)](https://qiita.com/gaqwest/

元記事を表示

Python for文まとめ

# 0 はじめに 

## この記事について

殆どのプログラミング言語にはfor文なるものが存在します。
for文には、その言語の熟練度と言っても過言ではない程、色々な使い方が存在するものです。

この記事ではPythonでのfor文の用法をまとめてみました。
私の知る限りの用法をまとめましたので、参考にして頂けますと幸いです。

Pythonを少しでもわかる方が対象です。

## for文とは

for文は次のような事ができます。
①ある操作を指定した回数繰り返す
②イテレータの要素を1つずつ見ていく

イテレータとは簡単に言えば「何かが集まったもの」です。
文字列や配列などがイテレータに該当します。

又、①も実は②に含まれると言うことができます。
発展的な話題なのでそれについては後述します。

# 1 基本

## 1-0 カウント変数

for文にはカウント変数というものが存在します。
カウント変数はfor文を回すごとに指定した通りに変化していきます。

`for (カウント変数) in (なんか)`という形が基本です。

## 1-1 for i in range(N)

元記事を表示

【EC2】Lambdaから時刻指定でEC2を自動起動・停止を時刻実現する

# EC2の自動起動・停止を実現したい!

https://qiita.com/YujiHamada3/items/3caccdaded527548432b

上記記事の改良版です。上記記事では自動起動・停止をhour単位でしか指定できず、一日に一度しか指定できませんでした。
それに加えて今回は
– 時刻まで指定できる(10分ごと)
– 複数時刻を指定できる
– 平日指定できる

の機能を追加しました。
今回はLambdaを何度も呼び出したくないので10分ごとにしましたが、Lambdaを毎分呼び出せば、分指定までできるようになります。

# EC2のタグの設定
![スクリーンショット 2023-01-30 16.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290902/8f66b619-198e-9555-a157-2849073dde15.png)

タグはこの様に設定します。
これだと
平日16時30分に起動して16時40分に停止する。
平日16時50分に起動して17時00分に停止する

元記事を表示

pip uninstall all

pipでインストールしたものを全て消す。確認も省略しているので要注意。

“`bash
pip freeze > freeze.txt; pip uninstall -y -r freeze.txt; rm freeze.txt
“`

元記事を表示

au のガラホ(KYF36)がほぼ壊れてiPhoneに機種変更したが、電話帳のインポートはそのままでは無理だった

# 機種変更した経緯
ガラホ(au KYF36)の充電が出来なくなり、ヤバイと思い急遽 au Shop でのプラン変更で ESIM して iPhone SE2 に機種変更した。

## 機種変更前にやっとくべきだった。。
ガラホの電話帳を移行する前に切り替えてしまったので au お預かりサービス等使用できずにスムーズに出来なかった。

## 元端末の電話帳エクスポート
色々な充電ケーブル挿したがすべて反応せずでしたが、ケーブル挿す場所に「フッ!!」って息を吹いたら充電できるようになった。
(ってかこれで充電できなかったら電池足りなくて終わってました。。。。。。

サポートツール(安心安全なんちゃら)を使用して電話帳データをSDカードにエクスポートしました。

## データフォーマット
vCard を想定していたのですが、 json でした。。。。
部分抜粋です。
(グループは無視してます)

“`sample.json
[
{
“accountName”: “Contacts”,
“accountType”: “jp.kyocera.localcontacts”,

元記事を表示

pygameにおける動画再生方法(既存のウィンドウを使用する場合)

# 目次

[1. はじめに](#1-はじめに)
[2. モジュールのダウンロード](#2-モジュールのダウンロード)
[3. サンプルプログラムの準備](#3-サンプルプログラムの準備)
[4. 動画再生コードの追加](#4-動画再生コードの追加)
[5. おわりに](#5-おわりに)

# 1. はじめに
pygameにおいて動画を再生する方法を記載します。
劇中ムービーのように新規ウィンドウを開かずに既存のウィンドウで動画を再生することを想定しています。
pygameにはpygame.movieというモジュールがあり、動画と音を同期して流せますが、Windows環境では動作しません。

[pygame.movie](http://westplain.sakuraweb.com/translate/pygame/Movie.cgi)

このモジュールを用いないで動画を再生するには動画と音を別々で再生する必要があります。
音と別々の再生になるため、pygameにおいて動画再生はあまり向いていませんが自分なりにコードができたので公開します。
修正点等あればご指摘いただきたいです。

#

元記事を表示

pythonでプロット用のデータを事前計算してバイナリでファイル出力しておく&読み込んでプロットする

# アイデア

プロット用のデータを毎回計算すると時間がかかりすぎるため、事前計算しておきたい。
そこで、バイナリファイルに書き出すようにしてみた。

– 複素数関数の、引数の実部と虚部をそれぞれ等差的に変化させたときの格子点に対しての、関数の値の実部と虚部をdouble型で格納。
– 複数の関数を組み合わせて追加計算したい場合を想定して、複数の関数を同じファイルに格納。

“`text:データ構造のメモ書き
ascii4 “PLOT”
uint2 format version info
uint2 number of functions
uint4 stepcount of x(real part) of numpy.linspace(,,*)
uint4 stepcount of y(imag part)
ascii128 description of func[0]
ascii128 description of func[1]
:
ascii128 description of func[n-1]
double start x of numpy.linspace(*

元記事を表示

[pandas]辞書<->pd.DataFrame変換をていねいに書いた@値の区切り文字処理

# 要約
区切り文字を抜いて全紐づけパターンを出力する処理を書いた!動いた!
とは言え、辞書型変換を雑スクラッチしてしまった感が強く残った。
その後にもっと良いやり方(諸説あり)を知ったので修正。

学びの備忘録として残す。
一応公開しています。
https://github.com/gmoriki/rm_delimiter

# 実装の背景
Scivalから提供されるExcelデータに区切り文字が使用されていることが多い。
例えば一つの論文に紐づく著者3名の固有IDが、以下のような形式の値で格納されている。

例:`”10000 | 20000 | 300000″`

この状態で固有IDと別の情報をマージすることは困難であり、部署内の利用者はうまいこと区切り文字を処理してきた。今後同じような事態(車輪の再生産)を避けるために、今回は区切り文字を排除した上でExcelデータに再出力する、比較的汎用的なプログラムをPythonで書こう、と思い至った。

### 読み込みテーブル
`key`,`target`という列名を含むExcelデータを用意する。
| key | target

元記事を表示

Transformerの基本

# はじめに
今回はTransformerで使用されている技術についてまとめておきます.
初めは自然言語処理に用いられていた構造ですが,画像分野でも大活躍中です.
なかなかとっかかりにくい分野ですが,単純なDeepLearning は一通り学べたという人は是非Transformerについて勉強しておきましょう:heart_exclamation:

今回はPowerPointの画像をペタペタ+αちょこっと説明という形式です.

# 1 Attention
下図のような?の画像があったときに人は背景を無視して?だけを注目できますが,CNNでは画像全体に同じ処理を繰り返すため,そういったことはできません.
![Attention1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120757/71d57718-91df-4ec3-7bb1-76c9d8a6f57f.png)

例えば,以下のような流れのモデルがあるとして,GAPでは背景も含めて画像全体の特徴を平均化します.
勿論大量のデータを使うことで,前

元記事を表示

RNNの基本

# はじめに
今回は時系列データを用いる際に使用する,Recurent Neural Network(RNN)についてまとめておきます.
最もシンプルなRNN,進化系のLSTM,LSTMを軽くしたGRUについて紹介します.

また,RNNへの入力形式についてもお話しできればと思います.
時系列データは画像等とは少し違ったデータ形式にして,入力しないといけません.
(はじめて実装するときに悩んだので,同じ悩みを抱える人の助けになればいいな:relieved:)

因みに,モデルの実装はPytorchだとnn.RNNと書くだけなので楽勝です.
(勿論中身を理解した方がいいですが)

# 目次
[1 RNN](#1-RNN)
[2 LSTM](#2-LSTM)
[3 GRU](#3-GRU)
[4 RNNへの入力形式](#4-RNNへの入力形式)

# 1 RNN
RNN(Recurent Neural Network)とは,時系列データを扱うDeep Neural Networkです.
RNNでは現在に対する過去の影響を考慮します.

時刻 (t) における状態を考えるとき,時刻 (t)

元記事を表示

CNNの基本

# はじめに
画像等を用いたDeepLearning で使われるConvolutional Neural Netwoek(=畳み込みNN=CNN)についてまとめておきます.

Linearでもいいので簡単なモデルを作ったことがある人なら実装部分は詰まらないと思います.ので,知識のお話をできればと思います.
また,Convolution層にのみ使えるGradCAMという便利な技術についても紹介します.

# 目次
[1 畳み込み](#1-畳み込み)
[2 プーリング](#2-プーリング)
[3 GradCAM](#3-GradCAM)

# 1 畳み込み
CNNのメイン処理です.
今回は2次元の画像に対して考えていきます.
畳み込み処理には”フィルタ”を使います.下図の赤の部分が処理される画像,青の部分がフィルタです.
![Conv1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120757/def5c821-0bc3-7606-1273-ce5b711c2a23.png)
まずはこのフィルタを左上3

元記事を表示

DeepLearning基礎技術まとめ

# はじめに
DeepLearning では様々なデータを扱います.テーブルデータ,画像,3D,時系列,etc. 何を使うにしても必要となる技術についてまとめておきます.(自分の為も兼ねて)

# 目次
[1 DNNの基本](##1-DNNの基本)
[1.1 DeepLearning って??](##1.1-DeepLearning-って??)
[1.2 全結合層](##1.2-全結合層)
[1.3 活性化関数](##1.3-活性化関数)
[1.4 Loss関数](##1.4-Loss関数)
[2 特徴分布](#2-特徴分布)
[3 Validation](#3-Validation)
[4 交差検証](#4-交差検証)
[5 アンサンブル学習](#5-アンサンブル学習)

# 1 DNNの基本
## 1.1 DeepLearning って??
例えば,よくある画像の分類について考えます.
?と?の画像分類をしたいとき,学習データを用意して,それをDeepLearning で学習します.すると,この写真に写ってるのは????といった問題を解けるようなものが出来上がります.

これはつ

元記事を表示

Scanline Seedfillによるペイント関数

Scanline Seedfillによるペイント関数です。
指定された背景色の部分を指定された色で塗りつぶします。
python3で書かれています。グラフィックスの部分はpygameを使っています。

“`scanline.py
#!/usr/bin/python3
from pygame.locals import *
import pygame
import sys
import os
import random
MAXX=399
MAXY=399
buff=[]
pygame.init() # Pygameを初期化
screen = pygame.display.set_mode((MAXX+1,MAXY+1)) # 画面を作成
pygame.display.set_caption(“paint(scanline seedfill)” ) # タイトルを作成

def point(p):
return(screen.get_at(p)[:3])

def scanline(lx,rx,y,bc):
global buff
while(lx<=r

元記事を表示

Ubuntu: Visual Studio Code の使い方

Ubuntu 22.10 で Visual Studio Code を使う方法です。

## インストール
deb ファイルをこちらからダウンロードします。
[Visual Studio Code on Linux](https://code.visualstudio.com/docs/setup/linux)

“`bash
sudo dpkg -i code_1.74.3-1673284829_amd64.deb
“`

インストールできたことを確認

“`text
$ which code
/usr/bin/code

$ code –version
1.74.3
97dec172d3256f8ca4bfb2143f3f76b503ca0534
x64
“`

## 起動

“`bash
code
“`

## サンプルプログラムの実行

“`py:sample.py
import sys
sys.stderr.write(“*** 開始 ***\n”)
print(sys.version)
print(“Hello World”)
print(“こんにちは”)

元記事を表示

OTHERカテゴリの最新記事