Python3関連のことを調べてみた2022年04月21日

Python3関連のことを調べてみた2022年04月21日

チームでの開発環境を整える

# 始めに

複数人数でPythonを用いた小規模開発をすることになりました。
今まではデータ集計/分析のために一人でPythonを用いていただけなので、Python/ライブラリバージョン、書き方の統一について意識していませんでした。
ということで、上記事項について調べて実行してみました。

# PC環境

– OS : Windows 10 Home 64bit
– WSL2 : Ubuntu 20.04
– IDE : VSCode

**VSCode**を用いて**WSL2上のUbuntu 20.04**で**Python3**を使った開発を行うことを目指します。

# Pythonバージョン

[pyenv](https://github.com/pyenv/pyenv)であらゆるPythonバージョンへ切り替えられるように設定します。

## pyenv導入

まず初めに[正常なビルド環境の為の推奨コマンド](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)を実行
“`bash
sud

元記事を表示

データ型の覚えやすい暗記法を思いついた

# 背景
プログラミング初学者からPythonの場合strが「文字列」でintが「数字(整数)」だと全く覚えられず混乱するから良い覚え方はないかと打診を受け、「なるほど、、、」と思い考案。

# 覚え方
## str(String)
**st**o**r**yは**文字**で書く。
## int(Int)
**int**elliは**数字**で語る。
## bool(boolean)
正解(true)かな?いいえ、不正解(false)です!ブーー(**boo**l)

## 所感
もはやギャグですが、「いい国作ろう鎌倉幕府」みたいなノリで初学者には理解してもらえるようです。
需要があれば随時更新していきます。

元記事を表示

n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める

## [初投稿]
自分の勉強したことを振り返ることがメインの目的です。拙い文章かもしれませんが、よろしくお願いします!
## 概要
n個のサイコロを振った時の和の確率分布を、pythonを使った統計的確率で求める。

## はじめに
確率分布とは、ある操作において起こりうる事象のそれぞれの確率の分布を表現したもので、一般には散布図やヒストグラム形式で表されます。

今回はn個ののサイコロを振るという操作を十分大きな試行回数行うことで、確率を求めていきます。
これは統計的確率、もっとわかりやすくいうと、経験に基づいた確率ですね。
試行回数が多ければ多いほどより正確な確率が求められます。

## 実装コード
実装は、https://note.com/omori55/n/n639148bab42b
を参考(ほぼパクリ)させていただきましたが、使ったライブラリや関数の中身について自分なりに噛み砕いたことを書きます。

“`python:qiita.py
import random
import matplotlib.pyplot as plt
n = int(input(“幾つのサイコロを振

元記事を表示

【Python】令和4年度春期応用情報技術者試験 プログラミング問題

## 問題
IPA公式HPの以下を参照。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2022r04.html

## 深さ優先探索での解法(前半部)

### コード
“`python:ans.py
import pprint

MAX_BOARD = 81

board = [2,0,1,0,9,0,7,0,0,
0,4,0,2,0,0,3,0,0,
5,0,0,0,0,8,0,2,9,
0,9,0,6,7,0,2,0,0,
6,0,0,3,0,5,0,0,4,
0,0,7,0,4,9,0,1,0,
7,6,0,9,0,0,0,0,3,
0,0,9,0,0,6,0,4,0,
0,0,4,0,1,0,6,0,0]

def solve(x):
if x > MAX_BOARD-1:
print_board()
return

元記事を表示

pythonでCの関数だけではなく、構造体も参照する方法

pythonから、C言語(シェアードライブラリ)の関数を呼び出す例はありますが、同じようにデータを取り出すやり方です。
C言語のdata構造体をアドレスで参照している場合、pythonでは、下記の様にする必要がありました。

C言語側のdata構造体を指すdata_table_ptrからpython側でdataインスタンスを生成します。

“`c:C言語
struct data_table {
int attr;
char *data;
};
const struct data_table data = {
.attr = 100,
.data = “文字列”,
};
const struct data_table *data_table_ptr = &data; ・・・C①
:
void functionA(const struct data_table *ptr) ・・・C③
{
attr = ptr->attr; ・・・C②
:
}
:
functionA(data_table_ptr);
:
“`

`

元記事を表示

クッソ初心者がエラー起こしまくった備忘録

Python初学者が関数のところでSyntaxErrorを起こしまくったので原因と解決法を備忘録として残す。

“`
>>>|def f(x):
…| return x+1
…|f(2)
|   
|SyntaxError: invalid syntax
“`
IDLE shellの左端も表記しているので、[>>>]や[…]を意図的に含んでいる。

defで関数を定義した後、直後でf(2)のように関数を呼びだそうとしたら、
上記のようにSyntaxErrorと表記された。

そこでreturnとf(2)を一行開けた状態にしたところ

“`
>>>|def f(x):
…| return x+1
…|
>>>|f(2)
|3
“`
このように出力された。

前者ではまだf(x)が定義される前にf(2)を呼び出していたということだろうか?

IDLE shellの左側にある[>>>]と[…]の違いがあるが、
[…]の中にある場合は一連の流れだからまだ定義し終わっていないということなのだろうか?

元記事を表示

pygribでGPVデータを処理してPyGMTで描画

この記事では、気象庁の配信するGPVデータの処理を行い、PyGMTで可視化する方法を紹介します。

# はじめに
GPVデータ(Grid Point Value Data)とは、世界中の地表面などを等間隔に区切った領域ごとに、気温や気圧など多数の気象要素を収録したデータのことです。日本語にすると格子点値なのでそのままですね。
PyGMTとは、地球科学の研究者がよく用いるGMT(Generic Mapping Tool)をPythonで扱えるようにしたものです。データを地図にする機能に優れています。

GPVデータの形式は、世界気象機関(WMO)が定めた二進形式格子点資料気象通報式(第2版)形式、いわゆるgrib2形式がよく用いられます。中身はテキストデータではなくバイナリデータなので、いきなりPyGMTで描画は出来ません。ところでPythonの世界には、grib2形式を簡単に読み込んでくれる`pygrib`というライブラリがあります。今回は、これを使って扱いやすい形式に変えてからPyGMTで描画します。

# 環境の準備
## 仮想環境の有効化
この記事の内容はAnacondaの仮想環

元記事を表示

【Python】二次元リストからcsvファイル作成・追記

## 環境
+ Microsoft Windows 10.0.22000.613(21H2)
+ Windows PowerShell 5.1.22000.613
+ conda 4.12.0
+ Python 3.8.12.final.0
+ csv 1.0

## コード
“`py:py
import csv

CSV_PATH = “パス”
li = [[“A”, “B”], [“C”, “D”, “E”]]

with open(CSV_PATH, mode=”a”, encoding=”utf-8″) as f:
writer = csv.writer(f)
writer.writerows(li)
“`

“`:csv
A,B
C,D,E
“`

### csvモジュールについて
`writerow(list)`:一行用
`writerows(list)`:複数行用

https://www.delftstack.com/ja/howto/python/write-list-to-csv-python/

https://techacademy.jp

元記事を表示

Python3: 文字列がカタカナかを判定する

Ubuntu でのライブラリーのインストール

“`bash
sudo pip3 install regex
“`

“`py:katakana_hantei.py
#! /usr/bin/python
#
# katakana_hantei.py
#
# Apr/19/2022
# ——————————————————————
import sys
import regex
# ——————————————————————
def katakana_hantei_proc(word_in):
rvalue = False
changed = regex.findall(“\p{Katakana}+”, word_in)
if 0 < len(changed): if word_in == changed[0]: rvalue = True # return rvalue # #

元記事を表示

SQLAlchemy で MariaDB のデータを削除 (Delete)

“`py:maria_delete.py
#! /usr/bin/python
#
# maria_delete.py
# Apr/19/2022
#
# —————————————————————-
import sys
from time import localtime,strftime
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (

元記事を表示

SQLAlchemy で MariaDB のデータを更新 (Update)

“`py:maria_update.py
#! /usr/bin/python
#
# maria_update.py
# Apr/19/2022
#
# —————————————————————-
import sys
from time import localtime,strftime
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (

元記事を表示

SQLAlchemy で MariaDB のデータを読む (Read)

“`py:maria_read.py
#! /usr/bin/python
#
# maria_read.py
# Apr/19/2022
#
# —————————————————————-
import sys
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (“*** 開始 ***\n”)
#
host=’localhost’
data_

元記事を表示

SQLAlchemy で MariaDB のデータを作成 (Create)

“`py:maria_create.py
#! /usr/bin/python
#
# maria_create.py
#
# Apr/19/2022
#
# ——————————————————–
import sys
import string
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# ——————————————————–
def dict_append_proc(dict_aa,key,name,population,date_

元記事を表示

nondominated sortを高速に計算する

## はじめに
表題の通り,高速なnondominated sortの計算に必要な関数を作りました.
nondominated sortとは主に多目的最適化においてサンプルの優劣をつけるために利用されるSort方法です.

## 追記 (2022年4月21日)
Githubに[コードを公開](https://github.com/nabenabe0928/fast_pareto)し,`pip install`で利用できるようにしました.

“`shell
pip install fast-pareto
“`

以下の方法でimport可能です.
“`python
from fast_pareto import is_pareto_front, nondominated_rank
“`

## 実装
以下の `nondominated_rank` 関数では入力 `costs (shape := (n_points, n_costs))` に対して,`ranks (shape := (n_points, ))` を返します.

“`python
import numpy as n

元記事を表示

AtCoder Beginner Contest 248

# この記事の目的
最近少し競技プログラミングから離れており、エンジニアとしてこれからどのようになっていけば良いかとちょっと悩んでいる時期でもありましたが、心機一転取り合えず技術力向上/何か行動を起こさなければということで`Atcoder`の問題を解くことを再開しようと思います。

とりあえず、練習をたくさん積んでC・D問題を解けるようになりたいと思います。

# [A問題](https://atcoder.jp/contests/abc248/tasks/abc248_a)
この問題は[0-9]の10種類あるうち、1種類だけ出てこない数字があるのでそれを見つけてくださいという内容です。
案としては、
1. 入力を昇順にソートして0から確認していく(ソートで時間かかるけど全探索は済む)
1. [0-9]のリストを作成して入力の先頭から確認していく(ソート処理は必要ないけど全探索しなければいけない)
1. 入力の数字全部足して45-入力の合計をする

考えつくのはこれくらいでした。
3つ目の考え方をコードにすると以下の感じです。他の案より簡潔で良いかもしれません

“`python
n

元記事を表示

Pandasインストールの備忘録

https://www.youtube.com/watch?v=XfoYeWCzjac
こちらの動画を見ながら実際にpandasを使うためにjupyterlabを使用
拡張機能
$ jupyter labextension install @lckr/jupyterlab_variableinspectorを実行したところ
node.jsがインストールされていないためエラー発生。

ならばと
$conda install nodejs.
を実行。
しかし下記のエラーが発生。

PackagesNotFoundError: The following packages are not available from current channels:

調べるとインストールしようとしているチャンネルには該当ライブラリが無いことが原因のよう
参考:https://hitokageblog.com/condalisterror/
なので、https://anaconda.org/conda-forge/nodejs
上記のページから
$conda install -c conda-forge

元記事を表示

Pythonで独立した実行に対して重複しないようにJobを与えたときのメモ

## はじめに

まずは問題設定を記述します.
1. $N$ 個の独立した実行があり,それぞれの実行に対して,Uniqueな config を渡し,それに基づいた実行を独立に処理する
2. SQL alchemyを利用したデータベースに対して,configを渡す毎に対応する行の `run flag` を `True` にする
3. ただし,SQL alchemyに対する `SELECT` クエリと `UPDATE` クエリの間に他の実行が `SELECT` クエリを実行してしまうと2つの実行に対して同一の config が渡されてしまうためこれを何とか避けたい.

より具体的に言うと,以下のデータベースにある `table for config` にある全ての config に対して,ただ一回のみ実行を行う.
その結果を `table for record` に格納する.
また,ある config による実行が行われたかどうかは `table for run status` により管理する.
問題となるのは `table for run status` 確認作業と更新作業の間(つまり,

元記事を表示

CloudWatchLogsで取得したログを加工してEFSに格納するLambda作ってみた

# はじめに
日次でCloudWatchLogsからログを取得し、加工してEFSに格納する独自スクリプトを動かしてた。
だが以下の点でイケてないスクリプトでたちまち処理が失敗していた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187693/0257c3e3-e6d1-c1f0-f021-c173d2ddf097.png)
図1:既存構成

:::note alert
こんな感じ
・サービス利用増により、ログ量が莫大し処理が追いつかずにMaintenanceWindowsの**上限値5時間**をオーバしてしまう
・古き良き(?)シェル芸でログを加工しておりコードは煩雑化・処理は非効率で処理が行われてる
:::

## 実装方式

上記を解決するにはスクリプトを改修したり、そもそものサーバスペックを上げたりするといった流れになるがログ量は増える一方であったり、この処理のためにスペック上げるのは~~贅沢・贅肉すぎるし~~もったいないという形で以下で実装してみた

![image

元記事を表示

SuperCollider + FoxDot のセットアップ(ubuttu20.04)

# はじめに

今日は音関係のことで、SuperCollider をインストールしたのでメモ。
自分は何をしたいのかわからないが、とりあえず、

– 演奏を録音したい
– 自作自演のピアノ演奏しながら、ドラムとか流したい

というのでまぁ、いじってみるか、ということに。かなり飛躍があるかな。

# インストールした

半日かかりでしたが、できたのでメモ。環境は Linux Ubuntu20.04 (古いVAIO)です。

– SupperCollider
– FoxDot

### FotDot

これはpip でなんの問題もなくインストールされました。

https://foxdot.org/installation/

あとで tkinker がないと言われたので、これも入れました。

“`
$ sudo apt install python3-tk
“`

### SuperCollider

ソースを持ってきて、cmake でbuildするも、いろいろ足りなくて怒られたので、いろいろインストールしたら最終的に動きました。

https://supercollider.git

元記事を表示

【AtCoder解説】PythonでABC248のA,B,C,D,E,F問題を制する!

**ABC248**の**A,B,C,D,E,F問題**を、**Python3**でなるべく丁寧に解説していきます。

ただ解けるだけの方法ではなく、次の3つのポイントを満たす解法を解説することを目指しています。

– シンプル:余計なことを考えずに済む
– 実装が楽:ミスやバグが減ってうれしい
– 時間がかからない:パフォが上がって、後の問題に残せる時間が増える

ご質問・ご指摘は**コメント**か**ツイッター**、**マシュマロ**、Discordサーバーまでお気軽にどうぞ!

**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**
**Discordサーバー(質問や記事の感想・リクエストなどどうぞ!) : https://discord.gg/jZ8pkPRRMT**
よかったら**LGTM

元記事を表示

OTHERカテゴリの最新記事