- 1. Openpyxl: Cell の結合 (汎用版)
- 2. Pythonでファイルが見つからない
- 3. Openpyxl: Cell の結合
- 4. うるう年の判別方法
- 5. SeleniumをAWS lambda python3.8以上で動かす[AWS SAM]
- 6. IndentationError: unindent does not match any outer indentation level というエラー文に出くわす
- 7. PygameとPygletを同時に動かす(&初めてのPyglet備忘録)
- 8. PostgreSQL: SQL のサンプル (スキーマの一覧)
- 9. 二部マッチング問題とは?
- 10. PythonでGuess the Number Game を生成してみた
- 11. BlackjackをPythonで生成してみた
- 12. クラスメソッドでcacheを使うときの注意点
- 13. PostgreSQL: SQL のサンプル
- 14. MatplotlibとNumpyでゲームキャラクターの絵を描いてみた
- 15. スクレイピングでのデータ収集を並列処理で高速化する!
- 16. セグメント木と遅延セグメント木について
- 17. 【python】配列の削除に関する考察
- 18. PythonでiCal形式のQRコードを自動生成
- 19. RSA暗号をPythonで作ってなんとなく理解する
- 20. ゼロから作るDeep Learning 学習メモ
Openpyxl: Cell の結合 (汎用版)
こちらのプログラムを汎用的に使えるように改造しました。
[Openpyxl: Cell の結合](https://qiita.com/ekzemplaro/items/9996dc355cc957c1dd61)## プログラム
“`py:merge_cells.py
#! /usr/bin/python
# —————————————————————
# merge_cells.py
#
# Jun/14/2024
# —————————————————————
import sys
import openpyxl
from openpyxl.styles import Alignment# —————————————————————
# [4-6]:
def column_analize(ws,column):
p
Pythonでファイルが見つからない
Pythonを初心者の頃、以下のようなコードでファイルが見つからず悩んだ。
“`file_not_found.py
with open(“test.txt”) as file:
print(file.read())
“`
VScode上でPythonファイルをディレクトリで開かずに、再生ボタンを押して実行していたことがこの問題の原因である。この場合、作業ディレクトリがPythonファイルの存在するディレクトリではない。Pythonファイルからみた相対パスで指定すると`FileNotFoundError: [Errno 2] No such file or directory: ‘test.txt’`と注意されてしまう。再生ボタンを押すだけで実行可能という利便性を持たせつつ、ファイルのパスを正しく指定する解決法を2つ示す。
## pythonファイルのパスから絶対パスをつくる
Pythonでは`__file__`からそのPythonファイル自体のパスが得られる。文字列の操作でもパスをつくることができるが、`os`や`pathlib`を使うと簡単にパスが作れる。`os`では
Openpyxl: Cell の結合
セルを結合するサンプルです。
結合前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/093db9a7-bfb5-8a61-9459-a77a9686545d.png)
結合後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/2354076b-ab4e-af97-3f92-121c64506fe3.png)
## プログラム
“`py:merge_cells_basic.py
#! /usr/bin/python
# —————————————————————
# merge_cells_basic.py
#
# Jun/14/2024
# ———————————————————
うるう年の判別方法
### この記事では、Pythonを使い、どの年が、うるう年になるかを判別したい。
### うるう年とは
うるう年は、1年が366日ある年です。そうでない年は、平年だ。
ここでは、うるう年を”Leap year”, 平年を”Standard year”として定義しておく。### うるう年のルール
1. 西暦年が、4で割り切れる年は、(原則)として閏年
2. 西暦年が、100で割り切れて400で割り切れない年は、平年
example: 2100年は、100で割り切れるが、400で割り切れないので、平年になる。
要するに、4年に1回ある夏のオリンピックは、うるう年に開催されています。### 西暦を受け取る
year = int(input(“year”))
西暦をinput関数で受け取り、int型に変換### うるう年かを判別
if year % 100 == 0 and year % 400 != 0:
print (“standard year”)elif year % 4 == 0:
print (“leap year”)else:
SeleniumをAWS lambda python3.8以上で動かす[AWS SAM]
# AWS LambdaでSelenium
webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。
ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。
とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。
私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
python3.8廃止は2024年10月14日、うん、すぐだね。:fearful:
というこ
IndentationError: unindent does not match any outer indentation level というエラー文に出くわす
# はじめに
FastAPIとstreamlitを使用して会議室予約アプリを作成していた際に困ったのでまとめます。
# 問題
“`
File “/Users/my_study/FastAPI/会議室予約システムAPI/app.py”, line 117
submit_button = st.form_submit_button(label=’リクエスト送信’)
^
IndentationError: unindent does not match any outer indentation level
“`
というエラーに出くわしました。
# 原因
調べるとインデントが誤った時に出るエラー文でした。自分のコードも単純にインデントが誤っていただけでした。
https://izanagi-portfolio-site.com/blog/articles/5tijnkzlq/#gsc.tab=0
# 解決
インデントを修正したらエラー解消されました。
PygameとPygletを同時に動かす(&初めてのPyglet備忘録)
pygletでキー入力やら表示やら出来るようになった後、アクションゲーム的なものを作成。最終的にpygameと組み合わせるまで。
……あと、pyglet使ってみて思ったけど、pygameよりもいいかも。
# 目次
– [動機](#いや何の意味があるねん)
– [初めてのpyglet](#初めてのpyglet)
– [とりあえず文字を表示して、四角形を動かす](#とりあえずpygletで文字を表示し四角形を動かす)
– [バッチを使う(Batch Rendering)](#バッチを使う)
– [コーヒーブレイク:OpenGL方式の描画](#コーヒーブレイクopengl方式の描画)
– [アクションゲーム的なものを作ってみる](#アクションゲーム的なものを作ってみる)
– [pygameと組み合わせる](#pygameと組み合わせる)
– [pygameのインストール](#とその前にpygameをインストールしなきゃ)
– [pygameの基礎](#pygameの基本)
– [pygletにpygameを合体](#が
PostgreSQL: SQL のサンプル (スキーマの一覧)
スキーマの一覧を表示する SQL
“`sql
SELECT schema_name FROM information_schema.schemata;
“`スキーマ名が sch で始まるものだけを選ぶ
“`sql
SELECT schema_name
FROM information_schema.schemata where schema_name LIKE ‘sch%’;
“`## Python 版
“`text:.env
user=’scott’
password=’****’
data_base=’*****’
“`“`py:select_schema.py
#! /usr/bin/python
#
# select_schema.py
#
# Jun/13/2024
#
# ——————————————————–
import sys
import os
import psycopg2
import psycopg2.extras
from dotenv impo
二部マッチング問題とは?
# 二部マッチング問題とは
二部マッチング問題とは、2つのカテゴリ含まれるノード間に辺がある場合に、最大何辺(何ペア)取れるかを考える問題である。
“`mermaid
graph TD
A1((A1)):::red –> B1((B1)):::blue
A1((A1)):::red –> B2((B2)):::blue
A2((A2)):::red –> B2((B2)):::blue
A2((A2)):::red –> B3((B3)):::blue
A3((A3)):::red –> B1((B1)):::blue
A3((A3)):::red –> B3((B3)):::blueclassDef red fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
classDef blue fill:#ccccff,stroke:#0000ff,stroke-width:2px;
“`このような問題は例えば
– 男女のペアマッチング問題
– グリッドの盤面
PythonでGuess the Number Game を生成してみた
### この記事の目的は、”Guess the Number Game”、プログラムがランダムに数字を選び、プレイヤーがランダムに数字を当てるゲームをどのようにPythonで生成するか紹介するのが主旨だ。
## まずは、初期設定をする。
![Screenshot 2024-06-12 at 14.43.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/c21edaa2-95e1-2d67-72ca-6998579fd5f6.png)まずは、randomモジュールからrandint関数を使い、
指定された範囲内のランダムな整数を生成することができる。
次に、artというモジュールから、clear関数をimportする。ランダムに数字を選ぶのは、ユーザーにとって至難の技であるため、
今回私は、レベルを5つ設けた。Supereasyレベル: ユーザーが50回数字を失敗するまで、ゲームオーバーにならない。
Easyレベル: ユーザーが20回数字を失敗するまで、ゲームオーバーになら
BlackjackをPythonで生成してみた
### この記事の目的は、Blackjackという手持ちのカードの数字の合計が、21を超えない範囲で21に近い方が勝ちというカードゲームをどのようにPythonを使って生成するかが主旨だ。
![Screenshot 2024-06-12 at 14.23.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/b7581bb2-c384-90e4-89ad-f966f364dccd.png)
この3行のコードをわかりやすく説明しよう。
まず、Pythonの組み込みモジュール”random”をインポート
“replit”のモジュールから”clear”関数をインポート
“art”というモジュールから”logo”という変数または関数をインポート### Deal Card関数
def deal_card():
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
card = random.choice(cards)
retu
クラスメソッドでcacheを使うときの注意点
# まえがき
クラスのメソッドをmemoizeしたいとき、安易にlru_cacheを使ってはいけない## 参考
https://qiita.com/fumitoh/items/f36dc494eec35a13f513## 引用元
# 実例
元のコードはこのような形
“`python
import timeclass C:
def __init__(self, y: int) -> None:
self.y = ydef compute(self, x: int) -> int:
print(‘computing…’)
time.sleep(.5)
return self.y * xdef __del__(self) -> None:
print(f’delete {self}’)
“``compute` が呼び出されるたびに計算が走り 0.5 秒かかる
“`p
PostgreSQL: SQL のサンプル
PostgreSQL で スキーマ sch015 内で ren015o003 というテーブル名を与えて、
ren015o003 と一番多くコラムが一致するテーブルと一致したコラムの数を表示するSQL## SQL
“`sql:search_table.sql
set search_path=sch015;
SELECT
t2.table_name, COUNT(*) AS matching_columns
FROM
(
SELECT column_name
FROM information_schema.columns
WHERE table_name = ‘ren015o003’
) t1
CROSS JOIN
information_schema.columns t2
WHERE t1.column_name = t2.column_name
GROUP BY t2.table_name
ORDER BY matching_columns DESC
LIMIT 10;
“`## 実行結果
“`text
$ psql -U sc
MatplotlibとNumpyでゲームキャラクターの絵を描いてみた
## はじめに
初めましての人もそうでない人もこんにちは!最近ブルーアーカイブ(以降:ブルアカ)のアニメ見ていてゲームへのモチベーションが上がっている一般人です!
いやーやっぱりストーリー本当にいいですね!
アニメ化するとゲームにはない動きやボイスがあったりしてとても感動しています!ネタバレ?になるかもしれませんが “ブルアカ 先生 似顔絵” とGoogle等で調べると、アニメの先生とゲームの先生の顔は違う顔をしています(笑)
突然ですが、思い返すと最近の私はReactやらTypeScriptばかりでPythonが疎かになっている気がしました!
そこで、リハビリという意味も込めてmatplotlibとnumpyを使ったPythonで、ゲームのブルアカ先生の似顔絵を作ってみたいと思います!
## 準備しよう!
今回はGoogleColaboratoryを使って描いてみたいと思います!
理由としてはめんどくさい環境構築をしなくても、すぐにコードを書けるからです!なのでGoogleアカウントがない方は作成してください!
## 作ってみよう!
Googleアカウントを作成
スクレイピングでのデータ収集を並列処理で高速化する!
# はじめに
スクレイピングを用いて、データ収集するコードを作成する機会があり
(これも別途記載できればと思います…)
そのデータ収集を、並列処理を用いて高速化することを試みました。
今回は、「スクレイピングでの認証に関する問題」と「並列処理について調べたこと」の2点をまとめていきます。
どちらの内容とも初学者ですので、誤植などあればアドバイスいただけますと幸いです。# スクレイピングでの認証に関する問題
データ収集についてですが、
[SSLエラーに対する対応まとめ](https://jun-systems.info/articles/python-ssl-error/) を参考に修正しました。認証エラーが発生したコード
“`python:get_data
import pandas as pd
import requests, ssl, urllib3
from retrying import retrydf = pd.read_excel(“ここは該当ファイル名を入れてみて”)
@retry(stop_max
セグメント木と遅延セグメント木について
セグメント木も遅延セグメント木も、ある一定の区間における演算結果が見たい時に有用なのは共通しているが、
– セグメント木は個々の値を更新したいとき
– 遅延セグメント木はある一定の区間においていっぺんに値を変更する点で異なる。実装例を交えながらより詳しく見ていく。
# セグメント木
セグメント木は、配列構造を二分探索木のような形状に変更することで、ある特定の値が更新されたときに特定の範囲を演算する回数を普通の配列よりも減らす役割を担っている。
例えば“`[1,2,3,4]“`という配列が与えられており、値を更新しながら与えられた範囲の最大値を得たい場合は
1. 初期化時に各区間の最大値をあらかじめ計算しておく
– (1,2)の最大値 -> 2
– (3,4)の最大値 -> 4
– 子ノードの計算結果より(2,4)の最大値 -> 4
2. 値が更新された場合
– 2番目の値が2から5に更新されたとする
– (1,5)の最大値 -> 5
– (3,4)の最大値は既に計算されているので(4,5) -> 5
3. 1番目から3番
【python】配列の削除に関する考察
# はじめに
配列の削除について考察してみた## 配列を分割して削除
“`python
n,m = map(int,input().split())
array1 = input().split()
array2 = array1.pop(m-1)
for i in array1:
print(i)“`
配列を2つに分割して元の削除の特定の要素を削除したかのようにする
削除した要素は別の配列に格納される。## 配列の要素を削除
“`python
values = input().split()
N = int(values[0])
M = int(values[1])A = [0] * N
values = input().split()
for i in range(N):
A[i] = int(values[i])del A[M – 1]
for a in A:
print(a)
“`特定の要素を削除している。
# まとめ
後者の方がメモリ量は低い
PythonでiCal形式のQRコードを自動生成
# はじめの前のおねがい
できれば「いいね♡」をお願いします。励みになります。# はじめに
このコードは**Python3**に対応したiCal形式のQRコードを自動生成するためのコードです。# このコードの目的
iCal形式そのものは、それほど複雑ではないので手入力で済ますことができたり、Excelを上手に使って、生成することは可能なのですが、Pythonを使えばカスタマイズの幅がより広がるために作りました。
また、本コードの目玉としてはQRコードをPNG形式でソースコードと同じフォルダ(ディレクトリ)に自動生成する点です。# 本コードを実行するとどうなるか
本コードを実行すると
1. コードの最初の変数を元にiCal形式テキストを生成
1. QRコードを作成
1. QRコードのPNG画像名を表示「YYYY-MM-DD_[summary変数で指定された文字]」
1. 生成結果を表示
1. 生成されたファイル名を表示# 注意点
1. 本コードでは変数の書き方に要件が存在します。要件から外れるとエラーが出ますが、エラー回避の処理ルーチンは特に作っていませんのでお気をつけく
RSA暗号をPythonで作ってなんとなく理解する
## 目的
RSA暗号の細かい理論などは全部すっ飛ばして、とりあえず何となくの動きだけ理解しようといった記事になります。## RSA暗号の原理
RSA暗号では二つの大きな素数$p, q$に加え$(p-1)(q-1)$と互いに素な正整数$e$を用いる。### 暗号化
まず初めに、暗号化を行うための鍵(公開鍵)を作成する。公開鍵は$n$と$e$の二つであり$n$は以下のように求められる。
“` math
n = pq
“`
次に、公開鍵$e$, $n$を用いて暗号化を行う。$n$より小さい正の整数$M$を送ることを考えると、暗号化された文$M’$は以下のように表される。
“` math
M’ ≡ M^e (mod n)
“`
つまり、$M^e$を$n$で割った余りが$M’$となる。これで、RSA暗号を用いて文章を暗号化することができた。
### 復号
次に復号を行っていく。まず初めに、復号を行うための鍵(秘密鍵)を作成する。秘密鍵は以下のように表される。
“` math
ed≡1 (mod (p-1)(q-1)) を満たす正の整数
“`
つまり、$(
ゼロから作るDeep Learning 学習メモ
# シグモイド関数
シグモイド関数は機械学習やニューラルネットワークに使用される。主な役割としては入力された値を0から1の間に変換すること。– シグモイド関数の式
$$
\text{sigmoid}(x) = \frac{1}{1 + e^{-x}}
$$“`python
def sigmoid(x):
return 1 / (1 + np.exp(-x))“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812927/cc5929af-ca1d-5577-a6eb-63076d657420.png)非線形であり幅広く使われている。
# シグモイド関数を使う理由
1.出力が確率的な意味を持つ:シグモイド関数は出力を0から1の範囲を取り、その値は確率として解釈することができる。分類問題に使える。
2.勾配が計算しやすい:シグモイド関数の微分は簡単で、勾配降下法などの最適化アルゴリズムにおいて重要。
### まとめ
シグモイド関数の出力は確率的な意味を持ち勾