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

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

PythonとSeleniumを使用した自動ダウンロードの実装方法

# PythonとSeleniumを使用した自動ダウンロードの実装方法

この記事では、PythonとSeleniumを活用して、特定のウェブサイト(例としてGigaFile便を使用)からファイルを自動でダウンロードする方法を詳しく解説します。特に、ダウンロードプロセスが完了するまでプログラムが終了しないようにする方法に焦点を当てます。

## はじめに

ファイルの自動ダウンロードは、定期的なバックアップ作業やデータ収集など、多くの業務自動化タスクで役立ちます。PythonのSeleniumライブラリを使用すると、ブラウザ操作を自動化し、このようなプロセスを簡単に実装できます。

## 環境設定

このスクリプトを実行する前に、以下の環境が整っている必要があります。

– Python 3.x
– Seleniumライブラリ
– ChromeDriver(Google Chromeと互換性のあるバージョン)

## スクリプトの解説

以下に、主要なステップごとにスクリプトを解説します。

### 1. 必要なライブラリのインポート

“`python
import sys
im

元記事を表示

【Python】さくらインターネットの共有サーバーでFlaskを使ったWEBアプリケーションデプロイ

クライアントの指示でさくらインターネットの共有サーバー上でFlaskで作成したWEBサイトをデプロイする必要があって、かなり手こずったので備忘録も兼ねてやり方を解説します。

# 前提条件

– さくらのレンタルサーバー スタンダードプラン 以上を契約している
– ローカル環境でエラーなく実行できるFlask構築のWEBアプリがある状態

# デプロイの流れ

1. さくらサーバーにpip & flaskをインストールする
2. FTPソフトでwwwディレクトリにWebアプリケーションをアップロード
3. index.cgi & .htaccessの作成
4. デプロイの確認

## さくらサーバーにpip & flaskをインストールする

まず、sshでレンタルサーバーに接続する。ssh接続は、sshクライアントを使うか、もしくは windows備え付けの コマンドプロンプト(以下cmdと省略)で行います。

cmdで以下のコマンドを入力。

“`bash
ssh ユーザー名@サーバードメイン名
“`

ユーザー名とサーバードメインはさくらサーバーコントロールパネルから確認でき

元記事を表示

pythonでリストを生成するときにlist()と[]どっちを使うか?

# はじめに
pythonでリストを生成するときの書き方としては以下の2つがあると思います。
“`python
# []で生成
list_1 = []

# list()で生成
list_2 = list()
“`
個人的には、前者の方がわかりやすいので`[]`を使っていたのですが、
同じチーム内に`list()`で書く人もいて、コードレビューのときに「結局どっちがいいんだっけ?」の議論になったので両者の違いをまとめようと思います。

# 結論
以下の観点から`[]`を使うルールにしました。

## 読みやすさ
– `[]`は他の多くのプログラミング言語(例えば JavaScript、C++、Java など)でも配列やリストを表すのに使われており、一般的に慣れ親しんだ表現であること。
– Pythonの教育/学習資料でも、空のリストを生成する標準的な方法として`[]`が紹介されている印象。
– シンプルに`[]`の方が簡潔

一方で、`list()`はpython特有の記法であり、pythonに精通していない人は一瞬「?」となる。

## パフォーマンス
– `[]` は

元記事を表示

動的型付言語(Python)と静的型付言語 (Java)の簡単な比較

動的型付言語と静的型付言語の違いを、Pythonを動的型付言語の例に、Javaを静的型付言語の例にしてコードで比較。

## 動的型付言語 (Python)

“`python
# 変数の宣言時に型を指定する必要がない
x = 10
print(type(x)) #

x = “Hello”
print(type(x)) #

# 関数の引数や戻り値に型を指定する必要がない
def add(a, b):
return a + b

print(add(1, 2)) # 3
print(add(“Hello”, “World”)) # HelloWorld
“`

## 静的型付言語 (Java)

“`java
public class Main {
public static void main(String[] args) {
// 変数の宣言時に型を指定する必要がある
int x = 10;
System.out.println(x); // 1

元記事を表示

MATLABの配列操作からの入門〔※ 特にPython経験者向け〕

# はじめに

私は今まで科学計算や機械学習などはPythonを使ってきましたが、今仕事の関係でMATLABを使う必要になったのです。

私がPythonを使い始める前からMATLABのことは知っていたが、実際に使ったことないのでほとんどゼロから勉強です。

汎用性が高いPythonと違ってMATLABは数値解析に特化する言語なので、配列操作はほとんど全てで、どんな場面でも使うので配列の動作を理解することはとても重要です。

配列の扱いに関しては意外と色々Pythonのnumpyと似ていてPythonに慣れている人にとって勉強しやすくてすぐ飲み込みできますが、それでもある程度の違いや注意点も多くて、それを意識しながら使うのも重要です。

この記事は主にPythonを使っていた人に向いているMATLABの入門となります。

Pythonを使ったことない人でも読めると思いますが、ここでは主に「Pythonで普通にやっていることはMATLABならどうやる?」という見方で、基本などは省くので、Python経験を持ったらわかりやすいつもりです。

また、MATLABコードを載せるのと同時に、相当

元記事を表示

Pythonで「条件に一致するファイルやディレクトリの一覧を取得する」の動作を確認してみた

# 概要

Pythonで「条件に一致するファイルやディレクトリの一覧を取得する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/python/file/index14.html

# 実装

以下のファイルを作成しました。
“`sample1.py
import glob

print(glob.glob(‘./test/*.txt’))
“`

“`sample2.py
import glob

print(glob.glob(‘./test/**/*.txt’, recursive=True))
“`

“`sample3.py
import glob

for name in glob.iglob(‘./test/**/*.txt’, recursive=True):
print(name)
“`

以下のコマンドを実行しました。
“`
$ mkdir back
$ mkdir img
$ touch book.png
$ touch book.txt
$ touch cup.png
$ touc

元記事を表示

空の区間はすべて等しいか

## 経緯

社内で勉強会を開いていて、こんな話をしました。

> $l \leq x \lt r$ のような片側の端点だけを含む区間を**半開区間**といい、$[l,r)$ のように表記します。
> 配列のスライス(連続する部分列)を表すときは、半開区間を使って「$l$ 番目から $r$ 番目まで($l$ 番目を**含み**、$r$ 番目を**含まない**)」とすると便利です。この方法のいいところは、 $l = r$ とすれば空の区間を表すことができ、それを要素と要素の間を表すのにも使えるという点です。たとえば $[0, 0)$ は最初の要素の直前、$[1, 1)$ は最初の要素と $2$ 番目の要素の間、$[N, N)$ は最後の要素の直後、といった具合です。[^1]

ここまで説明したところで、聴衆の数学ガチ勢からツッコミが入りました。「それはおかしい、まるで $[1, 1)$ と $[3, 3)$ が異なるものだと言っているように聞こえる。」

……なぬ?空の区間で要素と要素の間を表すと言ったからには、確かに $[1, 1)$ と $[3, 3)$ が異なるものだと言っ

元記事を表示

keras回帰

## Kerasを用いて回帰分析を行う
#### ライブラリ&データの読み込み
“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

df = pd.read_csv(“https://storage.googleapis.com/download.tensorflow.org/data/abalone_train.csv”,
names=[“Length”, “Diameter”, “Height”, “Whole weight”, “Shucked weight”,
“Viscera weight”, “Shell

元記事を表示

CBOWの仕組み

○単語をベクトルに直す
→単語の意味を詳しく表すために
○そのベクトルの平均を取る
→その単語すべてを含めるとどんな意味なのかを推測するため。つまり、文脈の意味を推察するため
○ベクトルの平均を取ったものと、予測される単語の内積をかける(予測される単語とは、20万くらいある単語のすべてのベクトル)
→ベクトルとベクトルの内積とは、それぞれのベクトルの「距離」を表すものである。(cosθに絶対値をかけている)
→つまり、内積を取ることで文脈と特定の単語の意味の「差」を知れる
○ここからsoftmax関数で確率に戻す
→活性化関数とは与えられた数値を分類しやすいようにできる関数のこと。
→中でもsoftmaxは出力した数値を確率に戻せる

元記事を表示

ARC150 B – Make Divisible

公式解説に載っていなかったので。多分邪道で、公式解説の方が普通に筋がいいと思います。

# 問題
https://atcoder.jp/contests/arc150/tasks/arc150_b

## 概要
* $T$件のテストケースについて、以下の問題を解け。
* 正整数$A,B$が与えられる
* 非負整数$X,Y$で、$B+Y$が$A+X$の倍数となるようなものについて、 $X+Y$の最小値を求めよ。

## 制約
* $1 \leq T \leq 100$,
* $1 \leq A, B \leq 10^9$.

## 解説
まずは $A \geq B$の場合について。これは簡単で、$B$が$A$に等しくなるように$Y=A-B$とし、$X=0$としたときが$X+Y$が最小になる。ほとんど自明だが、$X > 0$と仮定すると $A \geq B$より $A+X > B$. このとき、$Y$を最小にするには $A+X=B+Y$として1倍の倍数にするほかないが、この時$Y=A+X-B$となり明らかに当初の$X=0$としたときの$Y=A-B$よりも大きくなってしまう。

元記事を表示

Python3.12でmatplotlibを日本語対応する

# はじめに
Python3.12でMatplotolibを使っていると、3.11以前まで使えていた`japanize_matplotlib`が使えず、日本語が◻︎◻︎のように表示されてしまいます。
この記事では、Python3.12でMatplotlibを使用した際の日本語対応について説明します。

# 解決方法
“`python
import matplotlib_fontja
“`
`japanize_matplotlib`の代わりに`matplotlib_fontja`というライブラリを使えば解決しました。
# 導入方法
https://github.com/ciffelia/matplotlib-fontja?tab=readme-ov-file#matplotlib-fontja

開発者のgithubです。こちらをご覧ください。
# 参考
https://github.com/uehara1414/japanize-matplotlib

https://github.com/ciffelia/matplotlib-fontja?tab=readme-ov-file#

元記事を表示

GIS に欠かせない Shapefile を深堀ってみる

# 1. はじめに
地理情報システム (GIS) で、使用するデータとして「Shapefile 形式」でデータ提供されていることがあります。この記事では、この Shapefile が、どのような構造となっているのかについて、説明していきます。

## 1.1. トポロジ構造とは
Shapefile について説明していく前に、まずは GIS データ等でよく利用される「トポロジ構造」について説明しておこうと思います。

例えば、トポロジ構造を持つファイルとして、次のようなものがあります。

– **.gdb**: ESRIのファイルジオデータベースは、トポロジを含む複雑な空間データを格納することができます。
– **.topojson**: トポロジを保存するための拡張 GeoJSON 形式で、隣接する地物間の境界を共有することでファイルサイズを削減します。
– **.gml**: 地理マークアップ言語 (Geography Markup Language) は、地理的特徴とそのトポロジを表現するために使用されます。

これらのフォーマットは、地理的データのトポロジ関係(例えば、接続性、隣

元記事を表示

FastAPIの認証(HTTPBearer)を開発環境でのみバイパスする

こんにちは、[わいけい](https://twitter.com/yk_llm_gpt) です。

突然ですが、私は日々FastAPIを使った開発をしているのですが認証周りで時々面倒を感じることがあります。

それは、**せっかくFastAPIがOpenAPI形式の動的ドキュメント(Swagger UI)を自動生成してくれているのにも関わらず、ログインが必要なエンドポイントに関しては毎度認証トークンを取得しないと叩くことが出来ない**ということです。

セキュリティ上「まあ、それはそうだよね」という話ではあります。  
が、ローカルでコンテナ立てて開発しているときには地味に面倒なのもまた事実です。

長期的に開発を続ける想定であれば、開発チーム全体で何千回もローカル環境でのログイン&トークン取得を行うことになることが予想されます。
これは開発効率の観点からあまり好ましくなさそうだと私は思いました。

そこで今回は開発環境でのみ良い感じに認証をスキップする実装を行ってみました。


私のSNSアカウント等です。
今後もPython・LLM・Go・Web開発などのト

元記事を表示

PDFに透かしを追加するときに役立つスクリプト

PDF文書に透かしを追加する必要が生じた際、Pythonを活用してこの処理を簡単に実行する方法を紹介します。以下のスクリプトでは、指定されたテキストを透かしとしてPDFに追加します。

“`python
from reportlab.pdfgen import canvas
import PyPDF2

def create_watermark(input_pdf, watermark_text):
with open(input_pdf, “rb”) as input_file:
reader = PyPDF2.PdfReader(input_file)
first_page = reader.pages[0]
page_size = first_page.mediabox

c = canvas.Canvas(“watermark.pdf”, pagesize=(page_size[2], page_size[3]))
c.setFont(“Helvetica”, 10)
c.setFillColor

元記事を表示

長時間動画を短くするときに使ったスクリプト

動画を非常に高速に早送りする必要がある場合、Pythonと`moviepy`ライブラリを使用してこれを簡単に行う方法を紹介します。以下のスクリプトは、動画を400倍速で早送りし、フレームレートをカスタマイズして出力します。

“`python
from moviepy.editor import VideoFileClip
from moviepy.video.fx.speedx import speedx

def speed_up_video_with_custom_framerate(input_file_path, output_file_path, speed_factor=400, new_fps=5):
clip = VideoFileClip(input_file_path).without_audio()
new_clip = speedx(clip, factor=speed_factor)
new_clip.write_videofile(output_file_path, codec=’libx264′, audio=False, f

元記事を表示

VSCodeでPythonのBlackを使用する時に特定のファイルを除外するには”–force-exclude”を使え

[Black](https://black.readthedocs.io/en/stable/index.html)はPythonのコードフォーマットのコマンドラインツールです。

これにより常に同じフォーマットルールを適用できます。

VSCodeで使用する場合、[Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)プラグインを使用して、ファイル保存時に自動整形すると良いでしょう。

### VSCodeの設定例

“`json:setting.json
{
“[python]”: {
“editor.defaultFormatter”: “ms-python.black-formatter”,
“editor.formatOnSave”: true
},
“black-formatter.args”: [
“–skip-string-normalization”,

元記事を表示

pythonのunittestモジュールでテスト対象コード上のprint文を標準出力する

unittestを書いているときもprintデバッグしたいときありますよね。私はあります。
そんなときのプラクティス

“`class Case(unittest.TestCase):

def setUp(self):
# 標準出力退避
self.original_stdout = sys.stdout
# 標準出力をキャプチャするためのストリームをセットアップ
sys.stdout = StringIO()

def tearDown(self):
# 標準出力を元に戻す
output = sys.stdout.getvalue()
sys.stdout = self.original_stdout
# プリント
print(output)
“`

元記事を表示

Stable Cascade + Gradio を自作 PC で動かす

## 背景

Stable Diffusion を自作 PC で動かしていたりしたのですが、新しく発表のありました Stable Cascade も試してみました。公式ページのコードを参考にしながら私の自作 PC のスペックや前提に合わせて多少補正したコードを共有します。

https://ja.stability.ai/blog/stable-cascade

https://huggingface.co/stabilityai/stable-cascade

## 環境

自作 PC の環境です。関係しそうなパーツのみ記載します。

* CPU: インテル® Core™ i3-12100F
* メインメモリ: DDR4 64GB
* GPU: Zotac GeForce RTX 3060 (12GB VRAM)

:::note info
それにしても、1年と少し前に自作 PC を組み立てたときは、生成 AI 関連で使うとは全く考えていなかった(息子と私の PC ゲーム目的)のに、パーツ一式の相談に乗ってくれた秋葉原の某 PC ショップの方の選択(特に GPU の VRAM 12G

元記事を表示

楽しいカードゲームを作るまでの記録~その2~

## CUIからGUIに変更
### 【ゲームの仕様】
1.プレイヤーとエネミーの手札(1~12)をランダムに3つ生成する
2.プレイヤーは自分の手札を選択(画像をクリック)する
3.選択された手札とエネミーがランダムに選択する手札で勝負する
4.高い数字の手札を出した方に、(自分の数字ー相手の数字)をスコアとして加算する
5. 1は12に勝利し、その際のスコアは11とする
6.勝負を3回繰り返し、スコアの高い方がゲームの勝者となる
※手札に数字を記載してもよかったけど、記載しないとどのカードが強いのか探りながらプレイできるので、ゲーム性が向上すると思う。
### 【ゲーム画面のキャプチャ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763806/1509f1df-4ebf-cb2c-38e2-d7d50a8f57b3.png)
### 事前準備
実行ファイルと同階層にimgフォルダを作成して、使いたい画像を入れる
例) ./img/sample/1.png
カードの大きさは「12

元記事を表示

階層的クラスター分析の仕組みとシンプルな実装例

# はじめに
プロモーション活動を行う際などにクラスタリングをすることがありますが、その手法はたくさんあります。
例えば、k-meansや混合ガウス分布などもその1つです。

今回は階層的クラスター分析に焦点をあて、その計算方法をまとめます。

# 階層的クラスター分析の仕組み
階層的クラスター分析(hierarchical clustering)は、似た特徴を持つデータをグループにまとめていく手法です。

具体的に身長と体重のデータを使って、この分析の基本的な仕組みを簡単に説明してみましょう。
“`
例:4人の身長と体重のデータ
人1: 身長160cm, 体重60kg
人2: 身長170cm, 体重65kg
人3: 身長175cm, 体重80kg
人4: 身長180cm, 体重75kg
“`
手計算で階層的クラスター分析を実行するステップ
## ステップ1: 距離の計算
> まず、各個人間の「距離」を計算します。この例では、ユークリッド距離を用いますが、他にもマンハッタン距離など様々な距離の計算方法があります。

ユークリッド距離の公式は次のようになります
“`math

元記事を表示

OTHERカテゴリの最新記事