Python関連のことを調べてみた2022年02月19日

Python関連のことを調べてみた2022年02月19日

AOJ Lesson ALDS1 9_D “HeapSort”をpythonで解いてみた

AOJのLessonのHeapSortを解いた際の備忘録です。
「AOJにある解答例は難しすぎる、、ネットでもわかりやすい解説もない、、」
という状況だったので、素人である自分に合わせた可読性の高い(?)コードを残しておきます。

※ヒープソートを理解している前提で記事を書いています
## 問題

[AOJ Lesson アルゴリズムとデータ構造 Heap Sort](https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_9_D)

> N要素の数列Aが与えられます。最大ヒープを満たし、ヒープソートを行ったときに疑似コード25行目のmaxHeapifyにおけるスワップ回数の総数が最大となるような数列Aの順列を1つ出力してください。
>

疑似コードは問題ページで確認していただけると幸いです。

## 方針

### max_heapifyメソッドがやっていることを改めて考察する

ヒープの再構築を行う際のメソッド。
ただし、この問題で注目しているmax_heapifyはソートの実行中のものであり、最大値を整列済みにした際に上に上がってしまった

元記事を表示

pandasで値を得る時の備忘録

pandasでcsvやtsvを読み込みして、
中の値を取り出そうとした時
数字っぽい文字列を扱う時にはまったので備忘録

# pandasでtsvを読み込む

“` .py
import pandas as pd
df = pd.read_csv(filepath_or_buffer=cvd.check_voice_path, encoding=”utf-8″, sep=”\t”)
“`
文字コードと区切り文字指定して読み込む
df(データフレーム)という形式で得られる

# pandasで、行をみつけて読みこむ場合
特定の列の項目と一致するものを探して
その行の要素にアクセスする

| text_id | text_jp | text_en |
|:-:|:-:|:-:|
| 1000 | こんにちわ | hello |

“` .py
def get_row(df, text_id):
if df.empty:
return None
if df[df[‘text_id’] == int(text_id)].empty:

元記事を表示

FastTextを使ってサクッと多クラス分類

# はじめに
FastTextはMeta社(旧Facebook)によって開発されたオープンソースの自然言語処理ライブラリです。[livedoorニュースコーパス](https://www.rondhuit.com/download.html#ldcc)の多クラス分類を行ったところ、非常にお手軽に実装でき、かなり良い精度が得られたので記事にしました。

開発環境はGoogle Colabを使用しました。この記事のコードを動作確認したGoogle Colabのノートブックは以下です。興味がある人は是非試してみて下さい。
[ニュース記事の分類.ipynb](https://colab.research.google.com/drive/1PEVelBDLqqiOXRECT596r42RqtTV8JZ4?usp=sharing)

# データの取得
– データセットは[livedoor ニュースコーパス](https://www.rondhuit.com/download.html#ldcc)を使用しました。[こちら](https://radiology-nlp.hatenablog.com/

元記事を表示

Python 機械学習 入門 vol.1 – データ分析精度に関する注意

# 機械学習入門
こんにちは!Kazuyaです。

クラウドベンダーのカスタマーサクセスにいながら、
広範囲の知識を得るために、
経験の浅い機械学習のコンテンツを学習中!

覚書をこのタイトルのシリーズでやっていこうと思います。

# データクレンジングにおける注意の学び

Pythonを使いながら機械学習をしていると、
データクレンジング、データビイングなどなどをする必要があり。

その中で、分析したいデータセット・データフレームに、
欠落値があった場合、その値を以下のいずれかで処理。

– 欠落値があるデータ行をDropnaで削除してしまう。
– replaceで欠落値を平均値や、より一般的な値で置き換えてしまう。
– そのまま処理する

このいずれにするのかというのによって、
得られる結果が変わってきます。

「そのまま処理する」となると、NAだらけになり統計が取れなくなる可能性がある反面、
代替の値を入れてしまったことによる不確実性を避けられる別の案を検討することができます。

平均値を使うと、それは欠損していないデータをもとに、平均を出しているため、
例えばデータの40%

元記事を表示

Pythonを使ってExcelの操作 PythonからExcelマクロを実行する

今回はPythonにpywin32ライブラリを入れてWindows上のPythonからExcelのマクロを実行させてみた。

**やったことは次の通り。**

###**(1) WindowsのPython環境にpywin32ライブラリをインストール**
###**(2) Excelマクロ有効ブック(xlsm)を用意する**
  今回は事前に簡単なマクロを記載したExcelマクロ有効ブック(xlsm)を用意した。
  マクロは次の通り。
   **①メッセージ付きのポップアップウインドウを開く**
   **②シートを追加してセルA1に文字を入力**

###**(3) Pythonで実行するExcel操作**
  **①Excelアプリケーションを起動する**
  **②Excelウインドウを表示する**
  **③マクロ有効ブックを開く**
  **④マクロを実行**
   **1.標準モジュールmodule1のtest1マクロを実行**
      (ポップアップウインドウ)
   **2.標準モジュールmodule2のtest2マクロを実行**
      (シートを追加してセ

元記事を表示

Google ColaboratoryでPython + OpenCVを試してみる

#はじめに
以前の記事でOpenCVの速さに驚愕し、手持ちのデバイスで試していたのですが、Google ColabotoryでOpenCVが出来る、しかもGPUアクセラレーションつきで、ということでやってみました。

以前の記事

https://qiita.com/tnar-f/items/719cc3b018a7f1c761b0

#環境構築
環境構築は@croquette0212さんの記事を参考にしました。

https://qiita.com/croquette0212/items/36cadce5bf0fb703ed19

このあと、ランタイムメニューのランタイムのタイプを変更からハードウェアアクセラレータをGPUに変更しておきます。

実験に必要なビットマップをカレントディレクトリにコピーします。
1920 x 1200グレースケール、約230万画素のビットマップファイルです。

自分のマシンからColaboratoryにファイルをコピーする方法は@5at00001040さんの記事を参考にしました。

https://qiita.com/5at00001040/items

元記事を表示

Pythonでよく使うスニペット集【自分用】

# はじめに

「あれってどうやって書くんだっけ?」を減らすために、よく使うコードを随時この記事にまとめておきたいと思います。皆様のお役に立ちましたら光栄です。

## 動作環境

Python 3.8.8

# スニペット集
## ファイルが存在するかを確認する
“`python
import os

if os.path.isfile(‘./hoge.txt’):
print(“The file is exist.”)
“`

## ファイルの削除いろいろ

“`py
# ごみ箱に送る
from send2trash import send2trash
send2trash(“./hoge.txt”)

# 完全に削除する
import os
os.remove(‘./huga.txt’)
“`

send2trashは標準ライブラリには存在しないため、自分で追加してやる必要があります。
`pip install send2trash`

## 多重ネストの進捗を表示させる
“`py:コンソール上で動かす場合
from tqdm import tqdm
from

元記事を表示

Mangumを用いたFastAPI製APIのSAM Local実行方法 メモ

* Fast APIで作成したAPIをSAM Localで実行する方法についてメモする。

# Mangum

* ASGI(Asynchronous Server Gateway Interface)アプリをAWS Lambdaで動作させるためのアダプター
* FastAPIなどで実装したASGIアプリを、Lambda + API Gateway構成でサーバレスにWebアプリケーションとして動かす事が可能
* FastAPI利用者であれば、Lambda特有の文法を覚えずLambda利用をスモールスタートできる

## 手順

### 1.サンプルSAMプロジェクトを作成

“`shell
sam init
“`

※ランタイムはPython3.8を選択

* “template.yml`

* Hello World Exampleを利用する。
* 特に内容は変更しない。

* `requirements.txt`

“`
requests
mangum
uvicorn
fastapi
“`

※Mangum,FastAPIを利用する

元記事を表示

Paizaレベルアップ問題集 条件分岐編

##始めに
本日は、Paizaレベルアップ問題集の条件分岐をやりました。

###曜日の判定
https://paiza.jp/works/mondai/conditions_branch/conditions_branch__mod_step4

>ある月の 1 日は日曜日、 2 日は月曜日…です。X日は何曜日でしょう。
答えとなる曜日Sを短縮した表記で出力してください。具体的に、日曜日の場合はSun、月曜日の場合はMon、火曜日の場合はTue、水曜日の場合はWed、木曜日の場合はThu、金曜日の場合はFri、土曜日の場合はSatを出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

初っ端からわからん。
とりあえず紙に、カレンダーっぽく書いてみて、1がSundayだとすると7,14,21と7で割れるのは土曜日。
1,8~と1余るのは日曜日。という形をif文で書いてみる。

####自作コード

“`title:python
x = int(input())

if x % 7 == 0:
print(‘Sat’)
elif x % 7 ==

元記事を表示

Jetson NanoでFollow meキャタピラを作成する

# はじめに
何かAIを使った動くモノを作りたい!
ということで、タミヤの[リモコンロボット製作セット(クローラータイプ) ](https://www.tamiya.com/japan/products/70170/index.html)と[Jetson Nano](https://www.nvidia.com/ja-jp/autonomous-machines/embedded-systems/jetson-nano/)を使用して、顔認識して自分の元へ動いてくる「Follow me キャタピラ」を作ります。
Githubリポジトリは[こちら](https://github.com/kanlkan/FollowMeTank)です。

# 環境
Jetson Nano上での開発です。

* OS : Linux Jetson-nano 4.9.140-tegra aarch64 GNU/Linux
* Python : 3.6.9
* OpenCV : 4.5.2

# 構成
## 必要なもの
細かい電気部品はすべて[秋月電子通商](https://akizukidenshi.com/c

元記事を表示

Pythonで親クラスを継承した子クラスの数とインスタンス数を数える

# 概要

タイトルがわかりづらくて恐縮なのですが、以下の2つの数え方についてこの記事では紹介します。

– 親クラスを継承した子クラスの数を数えたい
– 親クラスに属する(継承した子クラスの)インスタンスの数を数えたい

もう少し別のバリエーションだと、

– 親クラスを継承したすべての子クラスのクラスメソッドを呼びたい
– 親クラスに属するすべてのインスタンスに対して指示を出したい

ということも実現可能です。

サンプルコードはGitHubに公開しています。

https://github.com/dorapon2000/dorapon2000-blog/tree/main/count_subclasses_instances

# 検証環境

– Python 3.10.0

# 親クラスを継承した子クラスの数を数えたい

親クラスがを継承する子クラスが2つあるとして、その2という数字を求めます。

“`python
class Parent():
_subclasses_count = 0

def __init_subclass__(cls, **kw

元記事を表示

pythonを利用したdynamoDBからのレコード取得(1MB以上のレコード数)

# はじめに
DynamoDBから大量にレコードを取得することに困ったので、備忘録

# 一度に取得できるデータ量について

一度に取得できるデータ量は1MBまでと決まっているので、それを超える量のデータは1度では取得しきれずに、複数回データを取得することが必要である。

## 複数回データを取得する方法

前回までのレコード取得でどこまでを取得しているかを引数に渡す必要がある。
全レコード取得できていないときには、responseに「LastEvaluatedKey」というキーを持っている。
そのキーを引数に入れて再度DBにアクセスすることで、続きからデータを取得することができる。
全件取得するためには、LastEvaluatedKeyが帰ってこなくなるまで、無限ループさせてやれば良い。

“`python
import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource(‘dynamodb’)
table = dynamodb.Table(‘TABLE_NAME’)

respon

元記事を表示

pythonを利用したdynamoDBの操作(GSI)

# はじめに
最初に設定したプライマリーキーでは、レコードの検索がうまく行かなかったので、GSIを使ってみた

# 目次
– GSIについて
– GSI利用時のDB探索の書き方

# GSIについて
パーティションキーやソートキーをプライマリーキー以外の組み合わせで追加することができるもの。
よくある例を出すと、IDをプライマリーキーとしておくと、IDでのみしか検索ができないが、GSIでパーティションキー、ソートキーをID以外のキーに貼っておくことで、ID以外のキーで検索することが可能となる。

# GSI利用時のDB探索の書き方
## GSIの貼り方
マネジメントコンソールで目的のテーブルを選択し、インデックスタブを開く。
インデックスの作成をクリックし、目的のキーをパーティションキー、ソートキーに設定する。
※注意点とし、パーティションキー、ソートキーに設定できるのは、文字列、数値、バイナリの3種類の型のみである。ブーリアンとかはNG。

## GSIを利用するpython書き方
GSIでデータを引くときには、引数にIndexNameを追加するだけでOK。
テーブルにpkというキ

元記事を表示

Lambdaで(定期実行)スクレイピングの初期段階の構築をしてみた

# はじめに
AWS Labmdaで、Pythonでスクレイピングするアプリの基礎部分の構築をまとめた
CloudWatchで毎時実行する設定も組み込んだ
※LabmdamCloudWatchは永久無料で使用できるため、お気軽にご利用ください
  ↓詳細はこちら

https://aws.amazon.com/jp/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=tier%23always-free&awsf.Free%20Tier%20Categories=*all

# モジュールのインストール
下記をローカルで(Macの人はターミナルで)1行ずつコマンド実行してください

“`
mkdir packages
cd packages
pip install requests -t ./
pip install beautifulsoup4 -t ./
touch lambda_function.py

元記事を表示

pythonを利用したDynamoDBからのデータ取得(取得件数の制限)

# はじめに
dynamoDBから取得するレコード数の最大数を指定したかったので、調査した。

# レコード数制限のかけ方

queryなどの引数にLimitを追加するだけでOK。

“`python
import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource(‘dynamodb’)
table = dynamodb.Table(‘TABLE_NAME’)

# ここの引数にLimitを入れる
response = table.query(
        KeyConditionExpression = Key(‘pk’).eq(‘XXX’),
Limit = 3
)
“`

元記事を表示

venvで仮想環境を構築しようとしたけどactivateファイルができなかったときの対処法

本記事はvenvを使おうとしたときに

`bash: venv/bin/activate: No such file or directory`

というエラーが出た人向けの記事となっております。

### 環境

Linux – Ubuntu 20.04.3 LTS

## 結論

以下のコマンドを実行して、virtualenvで構築する。

“`shell
$ pip install –upgrade virtualenv # virtualenvのアップデート
$ virtualenv -p python3 venv # 環境名をvenvとして仮想環境構築
$ source venv/bin/activate # アクティベート
“`

## 遭遇したエラー

venvで仮想環境を構築しようと以下のコマンドを実行したところ

“`shell
$ python3 -m venv venv
$ source venv/bin/activate
“`

以下のエラーが出力されました。

“`shell
$ source venv/bi

元記事を表示

CTFのためにVirtualBoxにUbuntuをインストールするもドハマりする

#はじめに
CTFの勉強のためPythonを触りたくなり、それ専用の環境を作成することにした。
VirtualBoxにUbuntuをインストールしPythonを動かすところまでをやってみる。
ちなみに普段はPCを触らない超初心者の備忘録。

#環境
* Windows 10 Pro
* VirtualBox 6.1.14(はじめだけ。のちに6.1.32になる)
* Ubuntu 20.04.1 LTS※日本語REMIX版

#参考サイト
https://jp.minitool.com/partition-disk/how-to-install-ubuntu-on-virtualbox.html

https://qiita.com/ruriohead/items/396c834910810d65dfa5

#Ubuntuのダウンロード
VirtualBoxはもともと6.1.14インストールしていたのでUbuntuをダウンロードしてみる。
OSって大体ギガを超えるよね…
インターネット環境はWimaxのWifiしかないのでダウンロードできるか心配。

とりあえず[ここの](https:/

元記事を表示

plotlyの図の背景の色を変更する

# 背景
plotly expressでグラフを書くと以下のような図になる。(ほんとはインタラクティブな図です…)
現状、図の背景の色がデフォルトで青となっている。
これを白に変えたい!

||図の背景|グリッド線の色|枠|
|-|:-:|:-:|:-:|
|デフォルト|青|白|なし|
|理想|**白**|**グレー**|**黒**|

“`
import pandas as pd
import plotly.express as px

# 使用するデータ
data = pd.DataFrame({“x” :[1,2,3,4],
“y”:[1,2,4,8],
“label”:[“A”,”A”,”B”,”B”]})

fig = px.scatter(data,x=”x”,y=”y”,color=”label”,
width=600,height=400)
fig
“`
![newplot.png](https://qiita-image-store.s3.ap-no

元記事を表示

PythonでSubscan APIを使用してステーキング報酬履歴を取得してcsvファイルに保存する

## 背景
以前[こちらの記事](https://qiita.com/7rikaz_h785/items/135fb317844091b21037)でGASでSubscan(DOT)のステーキング履歴(csv)からクリプタクトのカスタムファイルを作成する方法を紹介しましたが、以下の点で使いづらさがあったのでSubscan APIとPythonを使用して取得する方法を検討しました。

* csvファイルのDLが必要
* GASの処理に時間がかかる

## 作成したもの
PythonのRequestsモジュールとSubscan APIを使用してステーキング報酬履歴を取得し、クリプタクトのカスタムファイルフォーマットのcsvファイルをローカルに保存するソースコードを作成しました。

## 前提条件
* Subscan APIの[API Keys](https://docs.api.subscan.io/#introduction)を取得済みであること
* Pandas,Requestsモジュールのインストール

## 仕様
* 取得するデータは`reward-slash`を対象する
* 取

元記事を表示

プログラミング1年生のPythonメモ①~エラーの種類~

#はじめに
:hatching_chick::hatching_chick::hatching_chick:
こんにちは。文系出身のシステムエンジニア1年生です。

Pythonの資格試験に向け勉強していたところ、
エラーに関する部分がなかなか面白かったので、忘れないようここに整理しておこうと思います。

#エラーには2種類ある
間違ったプログラムを動かそうすると発生する**エラー**。
これらは大きく2つの種類に分けることが出来ます。

一つは`そもそも動かない(動かすことが出来ない)もの`。

もう一つは`動くけれど途中で止まってしまうもの`です。

一般的に前者は**エラー(構文エラー)**、後者は**例外**と呼ばれます。

今回取り上げるのは前者の**エラー(構文エラー)**です。
こちらはPythonにおける文法上の間違いによって起きていることが多いので、
原因を特定しやすい = 修正しやすいエラーであると言えます。

エラーメッセージというと、発生する度にどうしても怒られている感じがして苦手だったのですが、
よくよく調べてみると、かなり具体的に間違いを指摘してくれていたよ

元記事を表示

OTHERカテゴリの最新記事