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

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

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 retry

df = 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.勾配が計算しやすい:シグモイド関数の微分は簡単で、勾配降下法などの最適化アルゴリズムにおいて重要。
### まとめ
シグモイド関数の出力は確率的な意味を持ち勾

元記事を表示

ちゃちゃっとcosmosDBにアイテム追加する

# はじめに
同僚に「もうちょっと工夫がほしい」と言われてかっとなって作った。
かっとなって作ったけどGeminiの世話になったのは内緒だ
10分でできた。AI様様!

# 仕上がりはこちら

“`
import argparse
import csv
import json
from azure.cosmos import CosmosClient

# パラメータの取得
parser = argparse.ArgumentParser(description=”Cosmos DB にアイテムを追加するスクリプト”)
parser.add_argument(“-u”, “–url”, type=str, help=”Cosmos DB アカウントURL”)
parser.add_argument(“-k”, “–key”, type=str, help=”Cosmos DB アカウントキー”)
parser.add_argument(“-i”, “–input”, type=str, help=”CSV ファイルパス”)
args = parser.parse_args()

元記事を表示

Pythonを使って計算機を生成した

### この記事において、Pythonを使って四則演算ができる計算機をどのように生成するかを紹介したい。
![Screenshot 2024-06-10 at 18.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/a099fd1b-1b83-a4da-25e7-7e8d434a6d51.png)

## 四則演算をdef関数を使って、まず定義する。

### 足し算をするためのプログラムコード
“`py
def add (n1, n2):
return n1 + n2
“`
### 引き算をするためのプログラムコード
“`py
def subtract (n1, n2):
return n1 – n2
“`
### 掛け算をするためのプログラムコード
“`py
def multiply (n1, n2):
return n1 * n2
“`
### 割り算をするためのプログラムコード
“`py
def divide (n1, n2):
return

元記事を表示

複数のGPUでOptunaを走らせる

せっかく複数のGPUがあるんだから、シングルGPUで動く深層学習のハイパラチューニングを並列にできないか試してみた。

# ダメな例

以下、ChatGPTに生成させたコードを若干手直ししたもの。これでも小さなモデルだと動いてしまうが、複数のtrialが同じGPUに乗ってしまう可能性があるため、GPUのマシンがバグったり“`CUDA out of memory“`のエラーが出ることがある。

“`python
“””
ChatGPTに吐かせたコード、ダメな例
“””

import optuna
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import multiprocessing

class SimpleNet(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(Sim

元記事を表示

Password Generator

## この記事では、Pythonを使って、安全なパスワードを作成するためのコードを紹介したい。

まず、random関数をimportする。
![Screenshot 2024-06-09 at 18.10.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/a23a36ef-e76e-0324-2c10-5a02f1561d6c.png)

一般的にパスワードは、記号、数字、英文字を含めたら安全だと言える。このプログラムコードにおいて、ユーザに、合計何文字のパスワードを生成した欲しいか、記号は何文字含めて欲しいか、さらには数字を何文字含めて欲しいかを聞いてからパスワードを生成する。

![Screenshot 2024-06-09 at 18.10.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/d70128fc-13a8-60c0-56fd-4615025bb720.png)
以上

元記事を表示

Fizz Buzz 問題に挑戦してみる

### FizzBuzz問題とは

“FizzBuzz”とは英語圏の有名な言葉遊びです。ルールは1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を言うというものです。簡単なプログラミングの練習として、3の倍数のときは「”fizz”」、5の倍数のときは「”buzz”」、共通の倍数(のときは「”fizzbuzz”」、その他は「数値」を戻すという単純な処理を実装します。

そこで今回は、範囲を1から100だけに限定して、どの数字がFizz, Buzz,FizzBuzzになるかを検証してみた。

以下の写真が、書いたプログラムコードだ。

![Screenshot 2024-06-09 at 17.54.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/3772d352-2e9d-e236-1ec3-a5c763fb0c82.png)

この3つの添付した写真が、1から100の数字に対

元記事を表示

じゃんけん(Rock Paper Scissors)

### パソコンとのじゃんけんをPythonを使って書くのが、この記事の目的だ。

まず、random関数をimportする。じゃんけんらしくするために、
以下の画像のように、グー、チョキ、パーの画像も取り入れた。

![Screenshot 2024-06-09 at 17.41.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/66699962-55ff-dc8a-274f-f990e10298b5.png)

次に、以下の写真のように、0をRock (グー)、1をPaper(パー)、2をScissor(チョキ)に置き換え、ユーザーに出す手を選ばせる。
![Screenshot 2024-06-09 at 17.45.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/5d626e16-bb04-fd68-cfb8-8631ce9dbba9.png)

そして、今回私は1、つまりパー

元記事を表示

Tip Calculator(チップの計算機)

### 日本では、チップの制度はないが、海外へ旅行したときは、レストランのウェイターへのお礼として、食事代にチップを追加して支払うのが慣例だ。本記事の目的は、チップを割り勘した際にいくらずつ支払うべきかを計算するコードをPythonを使って書いた。

### print (“Welcome to the tip calculator!”)
これは、チップ計算機へようこそという意味だ。

![Screenshot 2024-06-09 at 17.24.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/d99cb5a7-edc6-9344-1d9e-0ff5af80366c.png)

以上の画像のコードをPythonで書いた場合、これに辿り着く。
![Screenshot 2024-06-09 at 17.34.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/2e19dc6a-51a

元記事を表示

Band Name Generator

## この記事の目的は、生まれた都市とペットの名前を入れることによって、バンドの名前を作成するやり方をPythonで書き上げた。

1. print(“Welcome to the band name generator”)
2. city = input(“which city did you grow up in?\n”)
3. pet = input (“what is your name of your pet?\n”)
4. print (“Your band name would be ” + city + ” ” + pet)

例えば、which city did you grow up in?にnishinomiya
what is the name of your pet?にfredrick
と入力すると、Your bandname would be nishinomiya fredrickと出力される。
それが、この添付の画像に出力されている。

![Screenshot 2024-06-09 at 17.07.54.pn

元記事を表示

Pythonのライブラリを作成してPyPIに公開する方法:stringutils-happyの紹介

# はじめに
Pythonのライブラリを作成し、PyPIに公開することは、自分のコードを他の開発者と共有し、再利用性を高めるための素晴らしい方法です。
本記事では、私が作成した文字列操作ライブラリ「`stringutils-happy`」を例に、Pythonのライブラリをゼロから作成し、PyPIに公開する手順を解説します。

:::note alert
同じライブラリ名は権限がないとPyPIにアップできないので自分の決めたフォルダ名で作成するようにして下さい!
:::

# ライブラリの概要
`stringutils-happy`は、文字列操作に関するいくつかの便利な関数を提供するシンプルなライブラリです。このライブラリには以下の機能が含まれています:
– 文字列を逆にする関数
– 文字列の大文字小文字を反転する関数
– 文字列の単語をカウントする関数

# 環境の準備
まず、Pythonの仮想環境を作成します。仮想環境は、プロジェクトごとに異なるパッケージを管理するために使用します。

:::note warn
ここのフォルダは適宜置き換えて下さい。
:::

“`bash
$ m

元記事を表示

Python での getter/setter の書き方 3 選

## まえがき

私が資格取得もかねて Python の基礎知識を見直していたところ、Python の getter/setter にはいろいろ書き方があることを知りました。業務で 1 年半 Python を書いてきて「もう使いこなしているぞ」という段階においてです。

プログラミング経験者で他の言語を習得しようとするときには、概念だけを知っている状態でとりあえず実装してみようとなる人もいますが、このときに、習得しようとしている言語にもっと便利な書き方があることに気付かず、すでに知っている言語と同じような書き方で終わってしまうことがあります。

備忘録を兼ねつつ、Python を学習中の方にも、すでに習得しているという方にも知っていてほしいと思ったので、今回の記事を書くことにします。

## 前提

この記事では、getter/setter の概念は習得済みであるとします。
deleter については省略します。
また、getter/setter の是非論については扱いません。

## Python での getter/setter の書き方

:::note info
今回、

元記事を表示

functional graph問題をPythonで解く

# functional graphとは

AtCoderのABCで以下のようなfunctional graphと呼ばれるグラフ構造の問題が出ることがある。

– [D-Teleporter](https://atcoder.jp/contests/abc167/tasks/abc167_d)
– [E-Reachability in Functional Graph](https://atcoder.jp/contests/abc357/tasks/abc357_e)

functional graph とは、各ノードから出ているエッジが1本のみである有効グラフのことで、ノード$u$からエッジを通して辿り着くノードを$f(u)$のように関数的に表せることからfunctional graphとよばれている。

このfunctional graphには、以下のような性質がある。

$Gの連結成分がK個あってC_1,​C_2,…,C_K
とする。このとき、各連結成分には閉路が1つだけ存在する$

(引用:[E – Takahashi’s Anguish 解説 ](https://atcod

元記事を表示

Kaggleチュートリアル① Kaggle登録~タイタニックコンペのサンプルデータ提出

## 概要
Kaggleのアカウントを作成して、サンプルデータを提出するまでの手順です。

## ゴール
タイタニックコンペのサンプルデータを提出するまでを行います。

## Kaggleとは

Kaggle(カグル)とは、データサイエンスや機械学習のコンペティションを提供するプラットフォームです。

用意された課題・データセットを基にモデルを構築し、予測精度を競い合うことで、他のデータサイエンティストの手法を学びながら、実践的な経験を積むことができます。

## タイタニック生存者予測とは

タイタニック生存者予測とは、Kaggle入門として有名なコンペで、タイタニック号の乗客データを用いて、乗客が生存したかどうかを予測するコンペです。

※本記事は予測モデル構築は行わず、用意されているテストデータの提出までを行います。

## 手順
以下より、Kaggleのアカウントを作成し、入門コンペとして最もメジャーである「タイタニックの生存者予測」のサンプルデータ提出までを行っていきます。

### 1. Kaggleのアカウント作成

– [Kaggleのウェブサイト](https:

元記事を表示

ROS2講座22 rostopicのログをrosbagに保存する

# 環境

この記事は以下の環境で動いています。

| 項目 | 値 |
|:–|:–|
| CPU | Core i5-8250U |
| Ubuntu | 22.04 |
| ROS2 | Humble |

# 概要
simやロボット実機を動かしているときに、rostopicの動きを確認したくなることは多々あります。
ros2の標準ツールでもログはとれるのですが、「取得間隔の間引き」が出来ないためにpythonノードを書いてみます。

## rosbag
rosbagはROSで使われるrostopicのログの形式です。

# ソースコード

## pythonノード

“`python:logger.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import uuid
import datetime
import os

# ROS2
import rclpy
from rclpy.node import Node
from rclpy.executors import MultiThreaded

元記事を表示

OTHERカテゴリの最新記事