- 1. データ分析ライブラリのpandasについて
- 2. 夏らしい画像で合成練習してみた
- 3. 【Strategyパターン】すべての開発者が知っておくべき強力なツール
- 4. 低画質を良くする! 機械学習モデルでノイズ除去、超解像、コントラスト補正、低照度補強
- 5. laspyのインスタンスをOpen3Dのgeometryに変換し、jupyter上で可視化
- 6. 30代未経験がPythonで機会学習6ヶ月奮闘した記録
- 7. 雀魂の画面から画像認識で対戦情報を持ってくる(Vol. 3)
- 8. Pythonで位置情報を活用したLINEボットを作ってみた
- 9. 【Python】CPU使用率10%未満になるとGmailで報告
- 10. 【Python】CPU使用率10%未満になるとmp3が再生する
- 11. [nextJS × flask ] モノリスアプリを単一のherokuアプリにデプロイする方法
- 12. Numer0n作ってみた!
- 13. VirtualBox上のUbuntuで、Matplotlib is currently using agg … と言われ、Matplotlibのグラフ描画が使えなかった話
- 14. JSONデータを日付フォルダ毎に保存(Python)
- 15. Django の Form 内の Field に対して、装飾・グループ化を行う
- 16. FastAPIで作ったアプリを無料で使えるDetaにデプロイして簡単にWebAPIを公開する
- 17. 【Python】WebスクレイピングでHTML内のscriptタグにあるJavaScriptの変数(JSON)を抽出したい
- 18. NNモデルの中間層出力テンソルをC#で取得する
- 19. Jupyter NotebookをMacにインストールした方法
- 20. PythonでGCP の Secret Managerのシークレットの値を取得する
データ分析ライブラリのpandasについて
# はじめに
始めまして、株式会社ジール所属の@hirokai_yoshidaです。
普段はAWSやPythonを使った開発を行っています。
開発に携わるにあたり、現場で学んだ事をアウトプットしていこうと思います。今回はPythonの __pandas__ というライブラリについて書いています。
データ分析基盤ではETL処理などで利用されています。# pandasについて
pandasとはPythonのデータ分析ライブラリの1つです。
データ分析ライブラリとしてはほかには __numpy__ や __matplotlib__ などがあります。
今回は比較的よく使うpandasを扱います。# pandasの基本知識
ここではpandasを利用するにあたって抑えておきたい単語について解説します。
### 1.Series
pandasで扱われるデータ構造の一つで、単一列で構成された表になります。
※インデックが付与されている為2列になっています。インデックスについてはのちほど説明します。
![image.png](https://qiita-image-store.s3.ap-
夏らしい画像で合成練習してみた
## はじめに
連日暑くて困っています。暑くてやる気が出ない。
暑さへの対処は暑さでどうにかしようと考え、何か夏らしき画像を重ね合わせて、スーパー夏っぽい画像が作れないか試してみました。## コード
夏らしいもので思いついたのがすいかだったので、今回はすいかに対象を絞りました。
スクレイピングで画像を取得して、足し合わせています。
“`python
#googleからキーワード:「すいか」で画像をスクレイピング
!pip install icrawler
from icrawler.builtin import GoogleImageCrawlercrawler = GoogleImageCrawler(
feeder_threads=1,
parser_threads=1,
downloader_threads=4,
storage={“root_dir”: ‘suika’})
crawler.crawl(keyword=”すいか”,
max_num=500,
file_idx_offs
【Strategyパターン】すべての開発者が知っておくべき強力なツール
# はじめに
Strategyパターンは、オブジェクト指向プログラマーが全員が知っておくべき、強力なツールです。
うまく活用すると、プログラムはより柔軟になり、新しい機能を追加するために既存のコードを変更する必要がなくなるので、**より変化に強くなります**。
この記事では、Strategyパターンとは何か、どのような構造なのか、そして**今すぐあなたのコードで使う方法**を紹介します。
# Strategyパターン
## 概要
Strategyパターンでは、同じインターフェイスを実装する**交換可能な**「アルゴリズム」をいくつか定義して、プログラム実行時に適切なアルゴリズムを選択します。
ここでいう「アルゴリズム」は「複数あるやり方の中の一つのやり方」という意味です。例えば、ファイルをアップロードする機能に例えると、S3 にアップロードするか、Google Cloud Storage にアップロードするか、あるいはローカルファイルシステムの `/mnt` ディレクトリーに入れるか、それぞれの方法が「アルゴリズム」になるわけです。
“`mermaid
classDi
低画質を良くする! 機械学習モデルでノイズ除去、超解像、コントラスト補正、低照度補強
# 低クオリティの画質を上げたい!
撮影状況によって、画像に問題がある場合があります。ノイズ↓
低解像度↓
低コントラスト↓
低照度↓
laspyのインスタンスをOpen3Dのgeometryに変換し、jupyter上で可視化## 初めに
点群データに限らずjupyterでデータ処理しながら、可視化を行うという作業はよくあると思いますが、**点群データ(特にlasデータ)をjupyter上で可視化**しようとすると、実はちょっと手間です。
– **Open3Dでは点群データを読み取るメソッドが存在しているが、lasは未対応**
– **pyntcloudではインスタンスをOpen3Dの点群インスタンスにコンバートする機能があるが、pyntcloud自体に、las読み取りのバグが存在する**
– **leafmapではサクッと読み取れるが、ビューワーのカスタマイズができないため、高度(Z座標)を使って勝手に色付けされる**など、痒いところに手が届かない感じです。
この記事では、jupyterを使ってlaspyで読み取った点群データをうまいことnumpyに処理させながら、Open3Dのインスタンスを作成し、**ビューワーをカスタマイズ(色味・ポイントの大きさ・背景色など)する方法**を伝えていきます。
## データのダウンロードと加工
今回は以下の記事で作成したLAZ形式(LASの圧縮形式)のデー
30代未経験がPythonで機会学習6ヶ月奮闘した記録
※自分用奮闘記メモです。
## 【きっかけ】
年末に「仕事こんな感じでええんやろか」と思い、
「何か新しいおもろいことはじめたいな」となり、
「そうやデータサイエンスよさそうやん」となる。## 【現状のレベル】
今でもテーブルデータの扱いしか分からない。。
テーブルデータコンペ出たらそこそこいいとこいける## 【どやって勉強した】
**①とにかく「毎月1個資格を取る」と目標を定め勉強(半年前)**
「ほーん、なるほどデータサイエンスの領域ってこんな感じなんやな」
と雰囲気をつかみ、基礎力を付けられた。5つくらい資格は取得。**②途中からPython1本で勉強することを決め、「動画見る・書籍読む・手を動かす」(3か月前)**
SQLとの両立は挫折。結果的によかったかも。
重要なことは、
◆動くコードを書いてアウトプットたくさんすること
◆エラーになったら、根性見せてググって解決すること
◆コードの管理を疎かにしない**③コンペ出場前練習(2か月前)**
Tytanicで練習(分類)
House Priceで練習(回帰)
回帰と分類の両方を経験。
重要なことは、
◆コ
雀魂の画面から画像認識で対戦情報を持ってくる(Vol. 3)
[≪前の記事](https://qiita.com/xenepic_takku/items/42d9850c0095fbf51559)
# 前回までのあらすじ
pythonのpillowを使って画面のスクショを持ってこようとするも、マルチスクリーンへの対応に四苦八苦。
win32gui等色々触るも結局もとのpillowのパラメータを変更することで解決。
雀魂画面のスクリーンショットを持ってくることに成功!# 今回やること
いよいよこのシリーズの本題の一つ、画像認識で雀魂の画面から牌姿情報を持ってくることに着手します。
具体的には
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381769/9b6ddf18-5340-6b78-da59-9aa226a2c8e4.png)この画面から
“`py
paiList = [‘m1’, ‘m1’, ‘m3’, ‘p4’, ‘s2’, ‘s3’, ‘s3’, ‘s6’, ‘s9’, ‘s9’, ‘j1’, ‘j5’, ‘j7’, ‘s3’
Pythonで位置情報を活用したLINEボットを作ってみた
数年前にLINEボットを作っていましたが、位置情報を使ったアプリをクイックに作ってみたくなったので、LINEボットを使わせて頂こうと思います。
最近はユーザの端末位置情報を活用したアプリが多く世の中にあるので、皆さんも是非一度扱ってみてはいかがでしょうか?今回は、LINEの位置情報を送信できる機能を使って、送信された位置情報近辺のゴルフ練習場を返すボットを作ろうと思います。
## 開発中のLINEボット「メジロ」
位置情報や地名から近くの屋外打ちっぱなしゴルフ練習場を検索できるLINEボットです。
### 画面サンプル
【Python】CPU使用率10%未満になるとGmailで報告はじめまして、ガンちゃんです。
こちらは、前回記事の続きです。
https://qiita.com/mugiGAN/items/1985e6b3eb4576569f35
本記事は、”CPU使用率10%未満になると、Gmailで知らせてくれる”という記事です。
お読みいただければ幸いです。## 概要
本プログラムでは、CPU使用率10%未満になるとGmailで知らせてくれます。
前回はアラームだったので、外出中の場合終了したことが分かりません。
そこで、メールで報告してくれるようにしました。## Pythonを用いたGmail送信方法
“`cpu_email.py
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdatesmtpobj = smtplib.SMTP(‘smtp.gmail.com’, 587)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(“メールアドレス@gm
【Python】CPU使用率10%未満になるとmp3が再生する
はじめまして、ガンちゃんです。
本記事は、”CPU使用率10%未満になると、アラームで知らせてくれる”という記事です。
お読みいただければ幸いです。## 背景
このプログラム作成の背景として、
友人が汎用ソフトで解析をしている際に、「解析が終わったら、音声で知らして欲しいな~」と言い、「「よし作ろう!!!」」となりました( ←いや、ならない。。。)## 概要
解析中のCPU使用率は10%より大きく値が定常しており、解析をしていない際のCPU使用率は大体10%未満で定常していると思いました。
10%より大きいCPU使用率から10%未満のCPU使用率に移行したならば、これまで生じていたCPUへの負荷がなくなった、すなわち解析が終了したと判定できると考えました。
そこで、本プログラムではCPU使用率10%未満になるとアラームのmp3が再生して教えてくれるようにしました。注1:実際の解析で検証してないので、上手くいくかは分かりません
注2:解析が汎用ソフトではなくプログラムであれば、もっといい方法があると思います## CPU使用率の取得
CPU使用率の取得は、下記によって行い
[nextJS × flask ] モノリスアプリを単一のherokuアプリにデプロイする方法
## この記事は?
NextJS × Flaskの組み合わせでモノリスアプリを作成し、一つのherokuアプリにデプロイするまでに個人的に詰まったポイントを踏まえ、でデプロイまでの手順を示した。
なお、一般的にはFlaskとNextJSでそれぞれ独立したディレクトリを作り、それぞれherokuとvercelに分けてプッシュするなどの形態が多かった様子だが、ここでは作成するアプリが小規模なこと、費用を安く抑えることを鑑みてモノリスにした。### 最終的なディレクトリ構成
最低限herokuでpushして動かせるためのディレクトリ構成は以下のようになっている。
`.env`: Flaskアプリを起動させる環境変数に必要。
`app.py`: Flask APIを起動させるファイル。
`output`: NextJSが生成する静的ファイルを格納するファイル。後で説明。![スクリーンショット 2022-06-28 22.14.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419915/232
Numer0n作ってみた!
# Numer0nって知ってる?
みなさんはヌメロンを知っていますか?
ヌメロンとは、今から10年ほど前に、あるテレビ番組でやっていた1対1の対戦ゲームです。ルールも簡単でプログラミングの練習にちょうど良いと思って作ったので、備忘録として解説していきます。
# ルール
基本的なルールは簡単です。
– 1対1の対戦ゲームです
– プレイヤーは0~9を使って3桁の数字を選びます。
– ただし、同じ数字を使ってはいけません
– 先行後攻を決め、相手の選んだ数字を予想し合い、お互いの数字を先に当てた方が勝ちです。ただし、ヌメロンには相手が予想した数字が合っているかどうかの答え方に決まりがあります。
それが、**EAT**と**BITE**です。
| EAT | BITE |
|:-:|:-:|
| 数字と桁が合っている | 数字は合っているが桁は合っていない |例えば、自分の選んだ数字が”135”のとき、相手が”123″と答えたら、
1:数字も桁も合っている。(1EAT)
2:数字も桁も合っていない。
3:数字は合っているが桁は合っていない。(1BITE)
このとき、
VirtualBox上のUbuntuで、Matplotlib is currently using agg … と言われ、Matplotlibのグラフ描画が使えなかった話
現在、“VirtualBox + Ubuntu“の環境でいろいろ開発を行っている。
その時、点群データをグラフ描画したかったが、タイトルのエラーを吐かれてできなかったのでメモ。
# 環境
– VirtualBox
– Ubuntu22.04
– Python 3.10.4# 解決方法
tkinter を入れる。
これが無いとGUIでの描画ができないようだった。“`terminal:terminal
sudo apt-get install python3-tk
“`これで解決。
JSONデータを日付フォルダ毎に保存(Python)
# 概要
前回日付毎に作成されたJSONファイルをgz形式に圧縮してフォルダに格納するコマンドを作成したいと思います。# JSONデータ
下記のようにファイルをそれぞれ作成します。~~~
pi@raspberrypi:~/work/json $ cat data/cur20200101.json
{“name”:”田中”,”age”:”46″,”gender”:”1″,”reg_date”:”2020/01/01 15:33:25″}
{“name”:”鈴木”,”age”:”32″,”gender”:”1″,”reg_date”:”2020/01/01 16:18:12″}
pi@raspberrypi:~/work/json $ cat data/cur20200201.json
{“name”:”水島”,”age”:”52″,”gender”:”1″,”reg_date”:”2020/02/01 17:48:45″}
pi@raspberrypi:~/work/json $ cat data/cur20200202.json
{“name”:”田中”,”age”:”46″,
Django の Form 内の Field に対して、装飾・グループ化を行う
# はじめに
Django の Form は (デフォルトの) テンプレートエンジン内で `{{ form }}` のようにする[^1] と、全てのフィールドを HTML 出力してくれる。 これらの実体は Widget を用いることで変更できるのだが、Widget は単純に input や select タグとのマッチング用途で作られているため、例えば Label + (必須属性なら必須を示す `*` をつける) + Inputフィールド、というような組み合わせを作りづらい。
また、1つのフォームで取り扱う項目が多い場合、これをグループに分け、グループ単位で一括で取り扱いたいということもある。このように、Form の出力をカスタマイズする方法についてを考察する。
[^1]: context に `{‘form’: form}` として Form のインスタンスを渡している場合。 以後、これを前提とする。
## 検証バージョン
– Python: 3.10.2
– Django: 4.0.5# Form 内 Field のグループ化
Form 内に引数0の関数を定義
FastAPIで作ったアプリを無料で使えるDetaにデプロイして簡単にWebAPIを公開する
最近、FastAPIを少し勉強したので、Deta上にWebAPIを公開してみます。メッチャ簡単にできます。
## FastAPIとは
FastAPI は、Pythonの標準である型ヒントに基づいてPython 3.6 以降でAPI を構築するための、モダンで、高速(高パフォーマンス)な、Web フレームワークです。
主な特徴:
高速: NodeJS や Go 並みのとても高いパフォーマンス(Starlette と Pydantic のおかげです)。 最も高速な Python フレームワークの一つです。
高速なコーディング: 開発速度を約 200%~300%向上させます。
少ないバグ: 開発者起因のヒューマンエラーを約 40%削減します。
直感的: 素晴らしいエディタのサポートや オートコンプリート。 デバッグ時間を削減します。
簡単: 簡単に利用、習得できるようにデザインされています。ドキュメントを読む時間を削減します。
短い: コードの重複を最小限にしています。各パラメータからの複数の機能。少ないバグ。
堅牢性: 自動対話ドキュメントを使用して、本番環境で
【Python】WebスクレイピングでHTML内のscriptタグにあるJavaScriptの変数(JSON)を抽出したい
Webスクレイピングでは通常、クローラーで取得したHTMLの中から、metaタグにあるページのメタ情報やtableタグにある表形式のデータなどを抽出する。
scriptタグの中に埋め込まれた動的スクリプト内で、varで宣言されたJavaScriptの変数(JSON)に欲しい情報が入っている場合、下記のような方法で抽出できる。# 環境
Python 3.9
macOS# コード
“`sample.py
import json
import re
from bs4 import BeautifulSoup as bsdef extract_js_var(soup, js_var):
script = soup.find(‘script’, text=re.compile(js_var, re.DOTALL))
regex = ‘(?:var ‘ + js_var + ‘ = )({.*?})(?:;)’
json_str = re.search(regex, script.string).group(1)
return json.load
NNモデルの中間層出力テンソルをC#で取得する
備忘録のためのメモ
NNの中間層を特徴量抽出器として扱うことがあったりします## pytorchでforward関数の書き換え
モデル本来の推論をしつつ中間層を取得するのは(恐らく)容易ではないため,forward関数を書き換えて中間層の出力を無理やりreturnします.
“`python:python
import torch
model :torch.nn.Module = torch.hub.load(‘pytorch/vision:v0.10.0’, ‘wide_resnet50_2’, pretrained=True)
model.eval()def _forward_impl(self, x):
# See note [TorchScript super()]
# xs = []
x = self.conv1(x)
x = self.bn1(x)
x = self.relu(x)
x = self.maxpool(x)x = self.layer1(x) # <- 欲しい中間層でreturn #
Jupyter NotebookをMacにインストールした方法
Homebrewのアップデートを行ったら(?)Jupyterがなくなってしまった(?)のでインストールした。
以下のことを記す。– Jupyter Notebookのインストール
– Jupyter Notebookの立ち上げ方
– Jupyter Labについて図の描き方はまた別記事にしたいと思う。
# はじめに
前提知識は以下の通りである。
– macOS
– python3はすでに入っている[Jupyter Notebook](https://jupyter.org/)は図を作成するときに使っている。
合う合わないはあると思うが、私は使いやすいと思っている。# Jupyter Notebookのインストール
Jupyterがなくなってしまった。
~~~
% jupyter –version
zsh: command not found: jupyter
~~~まずはpython, pipのバージョン確認。
~~~
% python –version
Python 2.7.18
% python3 –version
Python 3.9.12
PythonでGCP の Secret Managerのシークレットの値を取得する
# 背景
GCPのSecret Managerで設定したシークレットの値を、pythonで取得するスクリプト
# 実装
“`python
from google.cloud import secretmanagerclass SecretManagerUtil:
def get_secret(self, project_id: str, secret_id: str) -> str:
client = secretmanager.SecretManagerServiceClient()
name = f”projects/{project_id}/secrets/{secret_id}/versions/latest”
response = client.access_secret_version(request={“name”: name})
return response.payload.data.decode(“UTF-8”)if __name__ == ‘__main__’
Se