Python3関連のことを調べてみた

Python3関連のことを調べてみた

友達のじゃんけんの勝敗判定のコードを効率化&わかりやすくしてみた

## 自己紹介

Python大好きwhile-true-ifです。

## 対象者

– Python好きな人
– Python初心者
– Pythonでじゃんけんのコンソールアプリを作りたい人

## じゃんけんとは

**グーとチョキとパーがあります。**

下の表は左側のグー・チョキ・パーが自分の出した手で、上側のグー・チョキ・パーが相手の出した手です。

グー チョキ パー
グー ×
チョキ ×

オシロスコープ上で動くゲームを作る方法

# 概要
オシロスコープを使って画像や動画を描いてみたい!
と思った方に向け、この記事を書いていきます。
最終的には以下の画像のように、絵をオシロスコープ上に描くことができます。

![RigolDS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756939/10efc3b0-a319-bd16-36f9-6e2a8af61a68.png)

# 方法
## 1 用意するもの
– オシロスコープ
– Pythonの開発環境
– National Instruments (NI USB-6212)
– コントローラ(JC-U3613M)

### 開発環境
– Python3.8.6
– ライブラリ
– nidaqmx
– numpy
– matplotlib
– pygame
– time
– Image
– 使用したソフト
– VScode editor

“`
import numpy as np
import matplotlib.p

Raspberry Piでスマートロック作ってみた

# はじめに
大学の授業の最終課題でRaspberry Pi3 modelAを使ったスマートロックを作ったのでまとめていきます。作った理由としては鞄からいちいち鍵を出すのが面倒というのと、家族友人が泊まりに来た際に鍵を共有したかったからです。
初学者のため拙い説明が多くなるかと思いますがご了承ください。
# 使ったもの
1. ハード
– Raspberry Pi3 modelA
– サーボモータ(SG92R)
– タミヤ ユニバーサルアームセット
– 結束バンド
– その他テープ等
1. ソフト
– Python3
– Bolt for Python
– iOS Shortcut
1. 外部サービス
– Slack
# Slack APIの設定
今回はSlackに入力された文章をトリガーにラズパイが鍵を操作するようにしています。そのため、まずはラズパイでSlackを監視できるようにSlackアプリを作ります。
[Bolt for Pythonの入門ガイド](https://slack.dev/bolt-python

【Python×Twitter】TwikitでらくらくSNS運用

TwitterをPythonで運用したい人向けの記事です。
Python初心者の方でもコードをコピペして実行できるような記事を心がけます。

:::note
この記事では、Python3.12.2での動作確認のみ行なっています。
Twikitのアップデートで動作しなくなる場合もありますのでご注意ください。
:::

# Twikitの導入
まず、今回メインで使用するTwikitについて説明します。
Twikitは、TwitterのAPIを簡単に操作できるようにするライブラリです。
Pythonで有名なtweepyと違うのは、APIキーなどの発行が不要なことです。
tweepyだと開発者ポータルから申請する必要がありますが、
twikitなら必要なのはユーザー名とパスワードだけです。

https://github.com/d60/twikit

twikitはpipを使ってインストールできます。
“`:Terminal
pip install twikit
“`

# Twikitの使い方
簡単な英語とPythonの文法が理解できればすぐに使えます。

## ログイン
Twik

色々な言語の Dictionary のキーの型の扱いについて調べてみた

Dictionary や object のキーに複数の型を指定した場合、どういった扱いになるのかが非常に気になったので、自分の知っている範囲の言語で試してみました!

# Python の場合

“`python:Python
a = {}
a[1] = “int”
a[1.0] = “float”
a[“1.0”] = “str”
# => {1: ‘float’, ‘1.0’: ‘str’}
“`

int と float は同一視されるようです。Python では `1 == 1.0` が成立するので、これは合理的な気もしますね。使う側は非常に安心できます。他にも、True, False, Fraction, Decimal なども同一視されるようです。

> Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).

https://docs.python.org/3.5/lib

ABC346 with Python(A~F)

今回は、初めてのQiita記事投稿がてら、ABC346のA-F問題までの解説をPythonで書いてみました。誰かのお役に立てれば幸いです。。。

# A – Adjacent Product
## 問題
$N$ 個の整数 $A=(A_1,A_2,\cdots,A_N)$が与えられます。
また、$B_i = A_i \times A_{i+1} (1 \leq i \leq N-1)$ と定めます。
$B_1,B_2,\cdots,B_{N-1}$ をこの順に空白区切りで出力してください。

https://atcoder.jp/contests/abc346/tasks/abc346_a

## 考察
隣り合っている要素同士の積を計算してリストに代入、それを答えとして表示する。

## コード
“`python:A.py
N = int(input())
A = list(map(int, input().split())
B = []
for i in range(N – 1):
B.append(A[i] * A[i + 1])
print(*B)
“`
#

文章生成アプリ(PYTHON&DJANGO)

生成APIが流行しているので、PYTHONとDjango環境でアプリを作成してみた。
まだ初回なのでプロンプトを送ったら、プロンプトが戻ってくるだけのシンプルなものを。基礎中の基礎だが、最初は生成APIというより、むしろフレームワークのDjangoの特徴を把握する方に苦労した。

苦労の結果だけあって、Djangoは生成APIのアプリ作成にめちゃくちゃ相性がいいことがわかる。
DjangoでWEBサイトを構築するのはLaravelよりずっと工数がかかるだろう、しかしLaravelで生成APIアプリを量産するよりもはるかに楽にアプリが作成できる。プロジェクトの考え方が違う。DjangoはシンプルなWEBアプリを量産しやすいフレームワークという印象をもった。

なんせアプリ作成コマンドでアプリ構造ができ、プロジェクトフォルダに登録するだけでいいのだ。あとはPYTHONファイルに生成APIアプリを呼び出せばいいだけ。あまりに簡単なのでゼルダの伝説で武器をクラフトしている、アトリエシリーズで錬金しているような感覚。あのAPIとあのAPIを組み合わせたら、こんなことできんじゃん!!っていう。い

『モデルベース深層学習と深層展開』読み会レポート#0

# 概要
– オンラインで開催している[『モデルベース深層学習と深層展開』読み会](https://majime-ni-study.connpass.com/event/)で得られた知見や気づきをメモしていく
– ついでに、中身の理解がてらJuliaサンプルコードをPythonに書き直したコードを晒していく
– 自動微分ライブラリにはJAXを使用する

# 第0回
## 大まかな内容
– モデルベース深層学習と深層展開の概説
– 上記がどんな事に応用可能か
– 微分可能プログラミングとしての実現方法について
## 議論になったこと
### 1.1.1節 あたり
– モデル駆動アプローチの実例
– 制御だと運動の法則等からモデリングする
– 通信だと、電波や媒質(空気など)を支配する法則からモデリング
– アンテナなど部品は物理系の法則
– 通信だと周波数領域のパラメタの同定に学習要素があるかも
– 図1.1を眺めながら
– 真ん中の図はNNの重みも学習可能パラメータでは?
– おそらくそう。NN以外の計算に埋め込んだパラメ

誕生日のパラドックスをpythonを使って検証してみた

# 概要

**誕生日のパラドックス**とは、「同じ誕生日の人がいる確率が50%を超えるのは、何人集まれば良いか?」という問題において、結果が直感と反しているというパラドックスです。

確率を計算すると以下の結果になります。

– 40人の場合は、`約89.12%`
– 23人の場合は、`約50.73%`

個人的にも納得できないので、Pythonを使って検証をしていきたいと思います。

# 計算式

同じクラス内に1組以上の誕生日が一致する確率は以下の式から導き出せます。(nは1クラスの人数)

“`math
p(n) = 1 – \frac{365!}{365^n(365-n)!}
“`

# コーディング

## 関数①:計算式を基にコーディング

まずは、計算式を基にプログラムを書いてみました。

“`python
def birthday_paradox_prob_calc(n: int) -> float:
”’
誕生日のパラドックスの計算を行う
Args:
n (int): 人数
Returns:
f

【Python】エラー「IndexError: list index out of range」を出ないようにするorエラー捕捉するコード

# 概要
`IndexError: list index out of range`エラーに遭遇し、このエラーを出ないようにするor捕捉してあげることでエラーをキャッチできるコードを3つ作成したので紹介します。

# `list index out of range`とは
以下のコードを実行すると、リストの最初の要素の`fruit_name`を取得できます。

“`py
def get_first_data_of_list(data, key, sub_key):
value = ”
if key in data:
if sub_key in data[key][0]:
value = data[key][0][sub_key]
return value

information = {
“fruit”:
[
{“fruit_name” : “apple”,
“fruit_price” : “200” },
{“fruit_name” : “banana

Python の dict のキー 1.0 と 1 は同一視される(そして True も!)

Python のキーで、int と float、つまり整数と浮動小数点は同一視されるようでした。たとえば 1.0 と 1 は同一視されるようです。仕組みは、謎です。

# コード

“`python
a = {}
a[1] = 100
a[1.0] = 200
print(a) # => {1: 200}
“`

キーは最初に指定した値が採用されるようです。

“`python
b = {}
b[1.0] = 300
b[1] = 400
print(b) # => {1.0: 400}
“`

`__hash__` の値を見てみましょう。

“`python
(123).__hash__() # => 123
(123.0).__hash__() # => 123
(123.456).__hash__() # => 1051464412201451643
“`

なるほど! 驚きですね!

Python 3.5 のドキュメントに書いてありました。

> Numeric values that compare equal have the same hash value (

LIMEによる機械学習モデルの局所説明

# はじめに
こんにちは、@sasshi_iです。

本日はXAIの手法の1つであるLIME(Local Interpretable Model-agnostic Explanations)について説明したいと思います。

LIMEは**局所説明**の手法です。

LIMEはある入力に対して機械学習モデルの出力に寄与した特徴量を算出します。
局所説明って何?という方はこちらの記事をご覧ください。

https://qiita.com/sasshi_i/items/400b7672d8b80bfc3a28

それでは、LIMEがどのように機械学習モデルを説明するのかを説明していきます。

# LIMEとは?
LIMEは、**複雑な機械学習モデルを説明するための解釈可能な機械学習モデルを作ります**。

LIMEがどのように機械学習モデルを説明しているかみていきましょう。

## どのようにして解釈可能な機械学習モデルを得るのか
LIMEは、複雑な識別境界や内部ロジックを持つ機械学習モデルであっても、説明対象の近傍に限れば、単純な(解釈可能な)機械学習モデルで近似できると仮定しています。

PythonでExcelグラフを出力したのに最後のデータが反映されない問題を解決しました

## PythonのExcelグラフはめちゃめちゃ癖が強かったというお話
私は毎年読書の記録をスプレッドシートでつけています。

年末には集計して読了数、購入媒体、ジャンルなどをグラフ出力しているのですが、Pythonでグラフのひな形を書いておいて出力したら楽かな?と思い立ち、PythonのExcelグラフ出力を試みてみました。

とりあえずラフにデータを書き込んで出力させてみたのですが、どういうわけか3つ項目があるうちの2項目までしかグラフに反映されず詰まってしまいました。

#### テスト用にラフに作ったExcelの元データ(2024read.xlsx)
![xl01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984316/528c0b35-1e51-b07f-64df-d8b59e3ac6d6.jpeg)

#### パイチャートを出力させるために書いたコード
※openpyxlライブラリをインストールする必要があります

“`python
import openpyxl
from op

ABC346、D問題の解説

## 0. はじめに
前処理による解法です。やってることは[公式解説](https://atcoder.jp/contests/abc346/editorial/9639)と同じですが、公式解説より理解が容易だと思います。

## 1. 問題とACコード
https://atcoder.jp/contests/abc346/tasks/abc346_d

https://atcoder.jp/contests/abc346/submissions/51620912

## 2. 解法概要
1. 与えられた文字列Sを、0と1が交互に出現する文字列と1と0が交互に出現する文字列、文字列「0101…」と「1010…」に変更することを考え、そのための累積コストを計算します。
1. 「0101…」と「1010…」の文字列を各位置でつなぎかえると、問題文で求められている**良い文字列**ができます。(例、5文字の文字列の4文字目以降をつなぎかえる)
* 01001
* 10110
1. 文字列「0101…」と「1010…」を作成するための累積コストを前処理と

連想配列(query)、ソートと検索(通常・query)

https://paiza.jp/works/mondai/query_primer/query_primer__map_normal

何も見ずに解いたもの。
もっともクラスを使えばもっとスマートにかけるのかもしれないですが。
一応辞書という意味ではこんな感じになるのかなと。

“`py

N,K = map(int,input().split())
A = dict(input().split() for _ in range(N))
for _ in range(K):
command = input().split()
if command[0] == ‘call’:
print(A[command[1]])
elif command[0] == ‘leave’:
del A[command[1]]
elif command[0] == ‘join’:
A[command[1]] = command[2]
“`

https://paiza.jp/works/mondai/query_prime

pythonのfor文(match文)python3.10~

phpなどでは、子の変数にはこの数字しかない!答えが一つしかないときはif文よりswich文。

swich文がpythonでは実装されていなかったが、python3.10よりmatch文として実装。

“`py
face = [‘目’,’口’,’鼻’,’喉’,’耳’,’手’]
for f in face:
match f:
case’目’:
print(‘eyes’)
case’口’:
print(‘mouth’)
case’鼻’:
print(‘nose’)
case’喉’:
print(‘throat’)
case’耳’:
print(‘ear’)
case n:
print(n + ‘は存在しない’)
#出力結果
eyes
mouth
nose
throat
ear
手は存

[Python3]csvファイルからjsonファイルを作成する方法

## 要 旨
python3においてcsvファイルからjsonファイルを作成する方法について記述します。
## 実施要領
data.csvファイルからdata.jsonファイルを作成するpython3コードの一例は、以下の通り。
“`python3:csv2json.py
#! /usr/bin/env python3
# coding: utf-8
import pandas as pd

#入力するのcsvファイルの読み込み
inputFileName = “data.csv”
df = pd.read_csv(inputFileName, encoding=”utf-8″)

#JSONのレコード形式にて出力・保存
outputFileName = “data.json”
df.to_json(outputFileName, orient=”records”)
“`
## 結 言
今回は、python3においてcsvファイルからjsonファイルを作成する方法について記述しました。

【Python】issubsetの使い方と注意点。サンプルコードで解説

# 概要
Pythonの`issubset`(イズサブセット)を使ってみたので、紹介。

`issubset`とは、あるセットが他のセットの部分集合(すべての要素が他のセットに含まれている)であるかどうかをチェックするためのメソッド。

実際にコードを見てみるとわかりやすいです。

# サンプルコード解説

“`py
# セットの定義
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}

# set1がset2の部分集合であるかチェック
is_subset = set1.issubset(set2)

print(is_subset) # Trueを出力
“`

上記の場合、`set1`が`set2`の部分集合であるかをチェックしています。
`set1`の全ての要素が`set2`に含まれているため、`True`ですね。

### リストに対して使用する場合は`set()`を使う

“`py
# リストの定義
fruits_in_fridge = [‘apple’, ‘banana’, ‘lemon’, ‘mango’, ‘grape’]
fruits

Redis・Pythonで検証用データを作る(セット型で大量の要素を登録する)

## はじめに

Redisの検証を行う際に、検証用のデータを作成する必要が生じまして、その方法を考えました。

文字型やリスト型などで、キーと値だけ定義できればよいならredis-benchmarkが使えるのですが、redis-benchmarkでは以下のようなことはできないようでした。

* セット型で1つのキーに複数の要素を持たせる
* キーに有効期限を設定する

他にも、ソート済みセット型やHyperLogLog型などを登録してみたいと思いましたが、いずれもredis-benchmarkではできないようでした。そもそも、redis-benchmarkはRedisのベンチマークツールです。

今回はSet型で1つのキーに複数の要素を持たせるようにしたかったので、Pythonのクライアントライブラリredis-pyを使ってみました。

1つのSet型に1000万・2000万という要素を持たせると、キーの削除には数秒かかり、その間はブロックが発生します。このブロックをわざと発生させるための方法を考えていて、Set型に1000万単位で要素を登録することを思いついて、その処理にクライアン

pythonのコメントアウト

## コメントアウト
“`py
#一行だけ

“””
複数行
複数行
複数行
“””
“`