- 1. ARC154回答メモ
- 2. PATH通してるのにctypesで`FileNotFoundError: Could not find module (or one of its dependencies)`
- 3. TechFUL 難易度1「Simple Tree」
- 4. Tkinterのウィジェット一覧をリストで取得する
- 5. [Python]10行以内で画像の背景を透過する
- 6. [環境構築]簡単にDockerでJupyter Labを立ち上げる
- 7. ページ遷移しても状態を維持したい(Streamlit)
- 8. はじめてのARC 中1の挑戦
- 9. streamlitをローカルで試してみる
- 10. NASA Turbofan Engine Datasets : 教師なし学習
- 11. GoogleドライブをPythonから操作する方法
- 12. Pythonでの音声信号処理 (6) ダミーデータを鳴らす
- 13. Seleniumで偽装、意味ないですよ
- 14. 共有エッジを持つポリゴン境界線の破線間隔を均一に表示する
- 15. Codespaces, devcontainer雛形 C++, Rust, Python, Zig
- 16. LU分解
- 17. Python×Djangoプロジェクトの環境構築
- 18. 初心者がGNNでレコメンドを実装してみた。
- 19. コピペで出来るDjangoアプリケーション開発環境構築(その2)
- 20. アダルト画像を完全無料で検出するAPI
ARC154回答メモ
0.はじめに
久々な気がするARC。
Aの難易度が若干下がった気がしました。
B問題以降は、ちょっと解法が見えなかったので
1時間で切り上げてしまいました・・・。1.A – AABCDDEFE
解き方はすぐわかりましたが、実装にてこずりました。
TLEを警戒して実装しましたが、解説読んだらそんなに
気を使わなくてもよさそうでした。考え方1(間違)
美しい整数の各桁をAAbcDDEfEとし、
ADEとbcfを1つの数字ととらえ、1~999までは
bcfをカウントアップしていき、1000までいったら
ADE(100からスタート)を1カウントアップしていく
→DEよりbcの方が上位のため、カウントアップ方法が
全然駄目であるときにテスト段階で気づく。考え方2
入力例2に着目
882436→998244353
上一桁目
8→AAが取りうる値をリストとした場合、
(A=[“11″,”22″,”33″,”44″,”55″,”66″,”77″,”88″,”99”])
A[8]の値”99”
上2~3桁目
bc
PATH通してるのにctypesで`FileNotFoundError: Could not find module (or one of its dependencies)`
結果として、Windows版Python3.8での`ctypes.LoadLibrary`仕様変更、`os.add_dll_directory`の追加の話です。
つまり、ライブラリのサーチで単純にPATHを参照しないということでした。https://github.com/python/cpython/issues/80266
## ハマったこと
Windows, Python 3.9で自前の`mylib.dll`を使いたい。
`mylib.dll`は`dep.dll`に依存している。`mylib.dll`と`dep.dll`が同じディレクトリにある時は問題ない。
“`python
import ctypes
dll = ctypes.CDLL(R”path\to\mylib”)
“`ところが、`dep.dll`を他のディレクトリに追いやってPATHを通したうえで同じことをすると
> FileNotFoundError: Could not find module ‘D:\XXXX\path\to\mylib’ (or one of its dependencie
TechFUL 難易度1「Simple Tree」
色々してたら年明けて今になってます。。。。
今回はTechFULの「Simple Tree」を解いてみた。
問題は下記のURLhttps://techful-programming.com/user/practice/problem/coding/19466
# 問題概要
$a$と$b$が与えられます。頂点$a$と頂点$b$は互いに結んでいます。
この頂点からなる木$G$が「シンプルな木」なら`Yes`、違うなら`No`と出力してください。「シンプルな木」とは頂点数を $N$とするとき、$1$以上$N$以下の全ての整数$i$について次が成立する。
– 頂点$i$と直接辺で結ばれた頂点の数が$2$以下である。# 制約
– $a,b$は整数。
– $ 1 \le a, b \le 5 $
–
# 解説
この問題を簡略化すると以下のようになります。
「各数字の出現回数を調べ、2回以下のものがあったら`No`、なかったら`Yes`と出力してください。」
制約も$1$~$5$までなので出現回数を数える配列を事前に用意しておけば大丈夫です。# C++とPythonによる解答例
Tkinterのウィジェット一覧をリストで取得する
TkinterでGUIを作成するときに配置したウィジェットを一覧で取得する必要があったのでメモ。
“`python
import tkinter as tk# ウィジェット一覧をリストで取得
def get_all_widget (wid, finList=None) -> list:
if finList is None:
finList = []
_list = wid.winfo_children()
for item in _list :
finList.append(item)
get_all_widget(item,finList)
return finListroot = tk.Tk()
# ~~~~~~~~~~
# ウィジェット配置処理は割愛。
# ~~~~~~~~~~for wdg in get_all_widget(root):
print(wdg)
“`#### 結果
直下だけでなくcanvasの中のwidgetも取得する。
[Python]10行以内で画像の背景を透過する
# tl;DR
Remove Image Background using Pythonhttps://t.co/888CDqc948 pic.twitter.com/U8Ra0WEeSa
— Python Coding (@clcoding) January 14, 2023
上ツイートの受け売りです
# やりたいこと
![tst.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/e866de7e-89bf-8a34-f07c-d0c8c7828bc5.png)この画像から背景を消して…
![rembg_tst.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/c2fd3d2e-b9d8-acd5-d2af-b2c9427b955b.png)
こんな感じの画像を生成します。
# 前提
透過するわけなので、**JPEG**のようなアルファ値をもたないファイルは使えません。PNGなどに変換してください。# 概要
**rembg**というライブラリを使用します。
画像を
[環境構築]簡単にDockerでJupyter Labを立ち上げる
#### まず、Dockerfileを作成します
“`Dockerfile
# Dockerfile
FROM jupyter/base-notebookUSER root
RUN pip install -y pandas numpy
RUN pip install jupyterlab
USER jovyan
“`
– pipを実行するために、USER rootを書きます
– Jupyter Labを起動するために、USER jovyanを書きます(jovyanはJupyter Labのデフォルトユーザー)#### Jupyter Labのイメージを作成します (Dockerfileのディレクトリに遷移する必要)
“`bash
docker build -t my-jupyter-lab .
“`
– my-jupyter-labじゃなくても好きに命名していいです
– . は Dockerfileのあるディレクトリです#### Jupyter Labを起動します
“`bash
docker run -p 8889:8888 -v “$PWD”:/
ページ遷移しても状態を維持したい(Streamlit)
## はじめに
StreamlitはPythonだけでWebアプリケーションが作成できるフレームワークです。https://streamlit.io
ナビゲーションバーなどを配置してマルチページのような構成をとることもできるのですが、あくまで単一の画面を再レンダリングしているだけなので元のページに戻ると内容がリセットされています。
今回はページ遷移しても同じ内容を保持する方法について記載します。
## デモアプリ
ナビゲーションバーを利用して異なる複数の機能を持つアプリケーションです。(multiselecterでdfの列を選択する)ページを切り替えだ後、元のページに戻ってきても選択した内容が、切り替えた時点の状態で表示されます。
https://ppspps824-multipagee-state-multipage-state-if9knq.streamlit.app/
## やり方
“`st.session_state“`を使います。https://docs.streamlit.io/library/api-reference/session-st
はじめてのARC 中1の挑戦
## ARC153
こんにちは。中学1年生のhiroyuk1です。(https://atcoder.jp/users/hiroyuk1 )いつもは土曜夜にABCがあるのでそっちをやってるんですが、なかったのでARCをやってみました。過去問は全然解けなかったけど、本番に強いタイプなので、頑張りました。結構解けました。
A問題は、0埋め6桁の文字列に変換して解こうと思ったけど、解けないパターンを思いついてしまいました。いろいろと試行錯誤して12分かかって解けました。(https://atcoder.jp/contests/arc153/submissions/38005481 )
B問題は、最初はあきらめてたけど40分ぐらいから考え始めて、グリッドを縦横に2倍した図を使っていろいろ考えました。そして気づいたんです。向き。そうだ。向きだ。向きによってスタート位置を変える。(https://atcoder.jp/contests/arc153/submissions/38012199 ) ってことでB問題は解けて、64分かかりました。
残りは、いろいろと考えたけど全く分かんなかったです。まあ
streamlitをローカルで試してみる
# PythonのフルスタックWebアプリケーションのstreamlit
## streamlitとは
– https://streamlit.io/
– GitHub リポジトリ https://github.com/streamlit/streamlit
– documents https://docs.streamlit.io/
– discord https://discord.com/invite/bTz5EDYh9Z### 少しだけ説明
– データのビジュアライズを行う
– データサイエンティスト、AIエンジニア向けの画面UI提供フレームワーク
– 簡単にデータの可視化を行うことができる
– javaScriptの知識やjavascriptのチャートライブラリ(グラフライブラリ)等は不要## 実行方法
– Python3.8や3.9がインストールされた環境で
“`
pip install streamlitstreamlit hello
“`
を実行する## ブラウザアクセス
– http://localhost:8501/NASA Turbofan Engine Datasets : 教師なし学習
# 初めに
PHM2008のNASA Turbofan Engineのデータセットを利用して分析してみます。
https://data.nasa.gov/Aerospace/CMAPSS-Jet-Engine-Simulated-Data/ff5v-kuh6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/02229b9b-300d-1fdd-ea8d-974a93b4deaa.png)# データセットの準備
## データセットの説明(英文)
The data are provided as a zip-compressed text file with 26 columns of numbers, separated by spaces. Each row is a snapshot of data taken during a single operational cycle, each column is a different variable.The c
GoogleドライブをPythonから操作する方法
GoogleドライブをPythonから操作する方法について、ファイルをアップロードするまでを簡潔にまとめました。
https://note.com/yutaro_air/n/n1e2917264300
Pythonでの音声信号処理 (6) ダミーデータを鳴らす
## やりたいこと
ダミーデータを鳴らすこと## やってみた
音といえば、A(ラ)の音を使うことが多いようなので、A = 440 Hz で試してみる。“`p6.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = Truefrom pydub import AudioSegment
from pydub.playback import play
import Dummy as dmydef main():
smpl = 44100 # サンプリングレートは44.1kHz
sec = 2 # 2秒分wavA = dmy.makeWave(440, smpl, sec, 32, 0, 1)
aud = AudioSegment(
wavA.astype(“int8”).tobytes(),
sample_width=1,
frame_rate=smpl,
Seleniumで偽装、意味ないですよ
## 簡単にバレる
規約違反を犯してSeleniumでアクセスしている皆さん。
バレてますよ!!!!!
UA偽装だとかIP偽装だとかがありますが、JavaScriptをもってすれば簡単に検出することができます。“`JavaScript:exsample.js
if (navigator.webdriver) {
alert(“Webdriverを検出しました”);
}
“`こんなに簡単に検出できるのに大手SNSが使わないわけないですよね。
BANされない為にもSeleniumを使用しての規約違反は絶対にやめましょうね!## 対策
PythonであればPyautoguiなど利用して普段自分の使うブラウザを操作しましょう。
それ以外にあればコメントで教えていただけると嬉しいです。## 注意
この記事は規約違反を推奨するものではありません。
皆さんで絶対に規約を守って素晴らしいインターネット空間を切り開いていきましょうね~
共有エッジを持つポリゴン境界線の破線間隔を均一に表示する
**実行環境**
Windows10
Python 3.9.5
geopandas 0.10.2
shapely 1.8.0## はじめに
GIS ソフトなどで行政界を破線で表示したいのに実線になってしまうことが多々あります。![r2ka13101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409923/a014bd04-a2ad-6b01-d3c3-202f1961604d.png)
上の図は、[e-Stat 政府統計の総合窓口](https://www.e-stat.go.jp/) からダウンロードした国勢調査統計の小地域データを破線で表示したものです。
シェープファイル形式の東京都千代田区のポリゴンデータを [ArcGIS Pro](https://www.esri.com/ja-jp/arcgis/products/arcgis-pro/overview) で表示しています。
見てわかる通り、破線間隔が場所によってバラバラで美しくありません。
この現象は、隣接するポリゴン境
Codespaces, devcontainer雛形 C++, Rust, Python, Zig
_Zigを追加_
**devcontainer** は開けば開発環境、拡張が設定済み
**Codespaces** はweb上での開発、開発環境、拡張が設定済み
各言語版を作成したので、まとめてみました。
テンプレート設定してるので、Creating a new repositoryしてお好きなようにして下さい。
**CodespacesのGUI確認は、web上でvscode内のシンプルブラウザで行います。**
webで全て完結![pgui_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57472/e0ac58b8-41b4-333c-de97-d9c39feb2754.gif)
devcontainerは
![dc_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57472/cb50
LU分解
ライブラリが豊富でない言語でLU分解したかったため、コードを作成することになった。
個人的に見やすく、書きやすいPythonでコードを作成してから、同じコードを別の言語で作成することにした。
以下がその作成したPythonコード。“`python
import numpy as npdef lu_decomposition(a):
length = len(a)
l = np.eye(length)
u = np.zeros((length,length))for i in range(length):
for j in range(i):
l[i,j] = a[i,j]
for k in range(j):
l[i,j] = l[i,j] – l[i,k] * u[k,j]
l[i,j] = l[i,j] / u[j,j]for j in range(i, length):
u[i,j] = a[i,j]
for k in range(i):
Python×Djangoプロジェクトの環境構築
# 1.作業ディレクトリに入る。
“`bash
cd ~/gitspace
“`# 2.仮想環境の構築
“`bash:~/gitspace
virtualenv <仮想環境名>
“`
**仮想環境とは、プロジェクトごとにバージョンやライブラリが混在しないよう区分けするシステムみたいなもの。仮想環境Aでは最新バージョンのpython、仮想環境Bでは古いバージョンのpythonを使うイメージ。**仮想環境に移動
“`bash: ~/gitspace
cd <仮想環境名>
“`# 3.仮想環境に入る
“`bash: ~/gitspace/<仮想環境名>
source Scripts/activate
“`
**仮想環境にいるとターミナルのコマンド入力欄の下に`(<仮想環境名>)`という表示がある。**# 4.Djangoをインストールする。
“`bash: ~/gitspace/<仮想環境名>
pip install django
“`# 5.Djangoプロジェクトの作成
“`bash: ~/gitspace/<仮想環境名>
django-admi
初心者がGNNでレコメンドを実装してみた。
# Summary
GNN で movielens データに対してレコメンドを行います。
GNN の解説などは控えめに行い、実装に注力した記事になります。
ネット上にチュートリアルが存在するのですが、[こちら](https://colab.research.google.com/drive/1xpzn1Nvai1ygd_P5Yambc_oe4VBPK_ZT?usp=sharing)は未完成となっており動かすことができません。そこでそちらを完成させることにしました。## GNN とは
GNN の解説は[この記事](https://cpp-learning.com/pytorch-geometric/)がとても分かりやすいです。ここでは簡単に解説を行います。
GNN では通常のデータをグラフ構造として扱い、学習を行います。
グラフ構造というのは下記のような構造です。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882383/ca6c0f34-fd66-ef2d-9620-00b
コピペで出来るDjangoアプリケーション開発環境構築(その2)
# はじめに
https://www.udemy.com/share/103OHY3@Hp1LP8z4636rKvwf7s6WkJUqqjnfnoWk1ugFKS8PxdYwWkOnNH9OsoDQnZhF7KisUg==/
この講座を見てDjangoの勉強をしています。
今後の開発のために簡潔に開発の流れをまとめました。
その2です[その1](https://qiita.com/scythercas/items/e96b70aeab4698065dfb)
# 開発環境構築の流れ(続き)
## アプリケーションを作成する(前記事にも書いてあります)
“`terminal
$ python manage.py startapp sample_app
“`## `sample_project`フォルダ内の`settings.py`を修正する
40行目ぐらい
“`diff_python
INSTALLED_APPS = [
“django.contrib.admin”,
“django.contrib.auth”,
“django.contri
アダルト画像を完全無料で検出するAPI
# 前置き
アダルト画像を検出するAPIは大抵リクエスト数に制限があり、完全に利用するのは難しいですよね。
そこでGitHubを漁っていたら完全無料で検出を行えるAPIを見つけたので紹介していきたいと思います。
注意ですがローカルの画像は検出できません。URL形式の画像リンクのみ検出可能です。## API説明
【API名】
nsfw_api【簡単な概要】
[Caffe](https://github.com/BVLC/caffe)用のモデルを提供する[open_nsfw](https://github.com/yahoo/open_nsfw)に依存した、画像がアダルトコンテンツを含むか予測するREST APIである。
質を向上させることを目的とせず、無料で必要とする多くの人に提供することを目標としている。## API導入方法
### 事前準備
【Dockerダウンロード】
dockerをダウンロード、インストールする必要があります。(※インストール済みの場合は次へ)
ここでダウンロード方法については割愛しますが、下記のサイトで丁寧に説明されています。
https://