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

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

Category Encodersでテストデータセットにも学習用データセットと同じ数字をマッピングする

## 前提

– いくら調べても出てこなかったので書き下すことにしました。
– もしかしたら当たり前過ぎて誰も書いてないのかもですが、誰かの役に立てればと。
– lightgbmを使うので、OrdinalEncoderを想定して書きます。
– 他のエンコーダは試してないですが、同じ方法で解決できるのではないかと思います。

## 解決したいこと

「モデルの学習をするランタイム」と「実際にモデルから予測するランタイム」が別れているときに、category_encodersが別々のアルゴリズムでカテゴリ特徴量を変換してしまう現象を解決したい。

OrdinalEncoderの`fit_transform`は与えられたデータセットから各カテゴリに1から順番に数字を採番する仕組みのようなので、学習に使うデータセットと予測に使うデータセットで**カテゴリ数が一致していて出現する順番も等しくないと**、別の数字が振られてしまう。
実際には予測に使うデータセットの方がカテゴリが少ないことが多いため、以下のようなやり方だと学習用と予測用のデータセットで異なる値に変換されるはず。

`

元記事を表示

Python classの使い方

“`python
class Student:
def __init__(
self, name: str, japanese_point: int, arithmetic_point: int, english_point: int
) -> None:
self.name: str = name
self.japanese_point: int = japanese_point
self.arithmetic_point: int = arithmetic_point
self.english_point: int = english_point
self.avg_point: float

# 平均点計算
def avg(self) -> None:
total_point: int = (
self.japanese_point + self.arithmetic_point + self.englis

元記事を表示

[Python]GeoLite2を用いたIPアドレス国判定方法 メモ

* IPアドレスから国判定を行う方法についてメモする。

## 事前準備

* GeoLite2データベースのダウンロード

* [こちら](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data)でアカウントを作成し、「[GeoLite2 City](https://www.maxmind.com/en/accounts/604902/geoip/downloads)」データをダウンロードする。
* データを解凍し、「GeoLite2-City.mmdb」を取得する。

* GeoLiteAPIインストール

“`shell
pip install geoip2
“`

## コード`main.py`

* HTTP X-Forwarded-ForヘッダーにIPアドレスが付与されるケースを想定し、ヘッダーから取得した値から国コードを返却するAPIを作成する。

* API構築用フレームワークとして、FastAPIを使用。
* エラーハンドリング未実施。
* 複数プロキシ経由時

元記事を表示

【Python】変数や関数の名前に使えない”予約語”

# 予約語とは?
予約語というのはプログラム内であらかじめ使われている
言葉のことで、プログラムの中では特別な意味を持つ言葉になります。

# 予約語一覧

“`python
# 予約語の一覧を出す
import keyword
print(keyword.kwlist)

#結果
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, …

# 縦に並べると
False
None
T

元記事を表示

ゲームサーバーに欲しいDiscordBot

作りたいもの

・Discordを使ってチーム分けをしたい(みんなでゲームをしてて欲しい時がある)
・誰かがボイスチャットに入室したときに、入室したチャンネルとユーザーをメンションで知らせてくれる

開発環境

OS:Ubuntu20.10
Python:3.9.5
Discord.py:1.7.3

やること

>
1. メッセージからメンション情報を取得
1. コマンドの入力を受ける
1. メッセージに返信する
1. リアクションを集計
1. チーム分け
1. 結果を送信

1. メッセージからメンション情報を取得

メッセージが送信されたときに、Bot に対してメンションが行われたかを確認する
– > メンションに続くコマンドを取得する

メッセージを取得 -> メンション情報を取得
>メンション情報は `message.mentions` で取得することができる

https://discordpy.readthedocs.io/ja/latest/api.html?highlight=on_message#discord.Message.men

元記事を表示

k-NN(k近傍法)

k-NN(k近傍法)について説明し、Pythonでの分類タスクにおける簡単なモデル構築を紹介します。

## k-NN(k近傍法)とは
あるグループAとグループBがあるとして、その人たちの属性がわかっているとき、どちらのグループに属するか分からない新しい人が来たケースを考えます。
![IMG_411A340FD957-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1859982/350fc4ed-8742-6d6a-c276-08b278de1ac7.jpeg)

ここでその人がAとBのどちらのグループに属するか考えるとき、その人と属性が近いk人を選び、その人たちがグループAに多いのかそれともグループBに多いのかを調べて、多い方を新しい人のグループにするのがk-NNによる分類方法です。k-NNの`k`は決定に利用する人数に相当します。k-NNは怠惰学習やとも言われ、訓練データをそのまま覚えて学習させます。

![IMG_AB3217C5CDCC-1.jpeg](https://qiita-imag

元記事を表示

【Python】【tkinter】16進数をクリックしてボールの色を変える!

 僕はここ最近、16進数に関するプログラムをいくつか作りました。

– [16進数→10進数](https://qiita.com/kim-shun/items/1efca5d3d4854d6dc66d)
– [整数→16進数](https://qiita.com/kim-shun/items/60af257ff54198dfcdbf)

 しかし、もともと数学にも、ITにも、プログラミングにも全く縁のない人生を送ってきた僕にとっては、「16進数って一体どこで使うの?」って話でした。
 そこで「16進数が使われている例はないかな」と探したところ、「そういえばCSSを触ったときにそれっぽいの出てきたな」と気づきました。それが「色」です。色の指定をする際に、「#ffffff」といった記述をした記憶がありました。
 「Red、Blue、Green、Yellow、White」といったように、呼び名が浸透している色の数には限りがあります。そんなわけで、呼び名のない微妙な色彩も表現するために16進数が使われているのかなと思いました。

 というわけで、16進数を入力してボールの色を変えるプ

元記事を表示

【Python】ちょっとしたメモ

次のSphinx拡張を作りながら、メモしておくといいと思った事柄。

– [Sphinx】索引(index)の日本語対応。用語(glossary)も日本語対応。](https://qiita.com/koKekkoh/items/4563b63fdb8eaa3ef4f9)

# 文字列

– “r”文字”“ 正規表現で大活躍
– “f”文字”“ “f”http://{host}/{paht}/{file}”“ の用に変数が書ける
– “u”文字”“ Python3では使わない
– “b”文字”“ 使わない
– これらの説明は「字句解析」のページで見つかる

– “list(string)“ 文字列を1文字毎のリストにしてくれる

# テスト

– doctestは使い方の説明程度に留めて、unittestでガツンとチェックする
– syntaxエラーのチェック、その他くらい。コミットする前に最低限やることとして。

# reStructured流のdocstring

– クラスやメソッドのdocstringでは引数の説明や、使い方の説明にもなるdoctest

元記事を表示

AtCoder Beginner Contest 219 参戦記

# AtCoder Beginner Contest 219 参戦記

## [ABC219A – AtCoder Quiz 2](https://atcoder.jp/contests/abc219/tasks/abc219_a)

3分で突破. 書くだけ.

“`python
X = int(input())

if 0 <= X < 40: print(40 - X) elif 40 <= X < 70: print(70 - X) elif 70 <= X < 90: print(90 - X) else: print('expert') ``` ## [ABC219B - Maritozzo](https://atcoder.jp/contests/abc219/tasks/abc219_b) 3分で突破. 書くだけ. ```python S = {} S[1] = input() S[2] = input() S[3] = input() T = input() print(''.join(S[int(c)] for c in T)

元記事を表示

Python初心者はWordCloudをやってみた2

#前回まで
前回は、janomeの基本を見つつ.txt内の文を分割した。

今回は、不要な品詞の消去と使われた単語の回数、複合名詞化をやっていく。

参考にさせていただいているサイトはこちら↓
https://note.nkmk.me/python-janome-tutorial/

#Analyzerフレームワーク
Analyzerフレームワークを使用すれば、今回やりたいことが全てできるらしい。
他にも、大文字小文字の変換、出力する品詞の指定ができるとのこと。

##不要な品詞を消去
不要な品詞を消去するには、POSStopFilterを使う。

“`python
from janome.tokenizer import Tokenizer
#今回使うモジュール達↓
from janome.analyzer import Analyzer
from janome.charfilter import *
from janome.tokenfilter import *

f = open(“sample.txt”, “r”, encoding=”UTF-8″)
text = f.re

元記事を表示

S3のget_objectで取得するStreamingBodyオブジェクトをモックする。

# サマリ

任意の`botocore.response.StreamingBody`オブジェクトを作る場合

1. 文字列を`encode()`でUTF-8のバイト列に変換
2. `io.BytesIO()`でbytesオブジェクトに変換
3. バイト列の長さと合わせて`botocore.response.StreamingBody()`でオブジェクト生成。

# 本文

S3に置いたファイルをPython(boto3)で取得する時に`get_object`を利用する以下の様なコードが題材。実行環境はlambdaでもローカルでも。

“`python:lambda_function.py
import os
# when you run it in local env.
# os.environ[‘AWS_ACCESS_KEY_ID’] = ‘YOUR_ACCESS_KEY’
# os.environ[‘AWS_SECRET_ACCESS_KEY’] = ‘YOUR_SECRET_ACCESS_KEY’
# os.environ[‘AWS_DEFAULT_REGION’] = ‘Y

元記事を表示

【Batfish】ネットワーク機器の検証がしたい

### はじめに

<バージョン>
Cisco IOS: 12.4(15)T1

 Batfishとは、実機に接続せずにネットワーク機器の検証を行えるツールです。
今回は、Ciscoルータの設定を読み込ませて、access-listの設定を確認してみます。

“`text:Router.log
Router#show running-config
~省略~
interface FastEthernet0/0
ip address 192.168.0.1 255.255.255.0
duplex auto
speed auto
!
interface FastEthernet0/1
ip address 192.168.1.1 255.255.255.0
ip access-group 100 out
duplex auto
speed auto
!
interface FastEthernet1/0
ip address 192.168.2.1 255.255.255.0
ip access-group 110 out
duplex auto
speed au

元記事を表示

FLASK-LOGINの最低限の使い方と動きについて

# はじめに
[FLASK-ADMIN](https://flask-admin.readthedocs.io/)を使おうとした際にID/パスワードなしに管理画面にいけてしまい、
これは問題だとして認証処理を入れようと思いその方法を調べると[FLASK-LOGIN](https://flask-login.readthedocs.io/)を使うといいよと公式ページにあったので使うことにしました。
しかし、公式ページの導入案内を読んでもどのように動作するのか、何が必要なのかがよくわからず、そもそもFLASK-LOGINは何をしてくれるのかもパっと理解できずキレそうになったのでメモとして書くことにしました。

この記事は最低限の処理と、裏で何やってるんだっていうことをさらっと説明しているものです。
「動作なんてどうでもええねん動けばええんや」って方は「これこのままコピペすればできるんやで」系の記事はいっぱいあるのでそちらを見たほうがいいです。(そういう記事はIMPORT系が薄いのでIMPORTに関してはこの記事をおすすめします)

# そもそも[FLASK-LOGIN](https://f

元記事を表示

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

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

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

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

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

**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: [https://marshmallow-qa.com/u2dayo]**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**

よかったら**LGTM**や**拡散**していただけると喜びます!

# 目次

[ABC219 まとめ](#abc219-まとめ)
[A問題『AtCoder Quiz 2』](#a問題atcod

元記事を表示

pythonで画像のスクレイピング

## 画像スクレイピング とは
– [Pythonで画像スクレイピングをしよう](https://qiita.com/neet-AI/items/98d4194872ee4f53e3b4)

簡単にいうと、
ネットから、100枚くらい推しの写真ほしいな!?ってなったとき、一枚一枚ダウンロードしていくのは時間と手間がかかってしまう!!
プログラム書けば、一気に複数(10枚でも100枚でも)の画像をダウンロードできる!!って感じですねww

# やること
1. 画像を検索
1. 指定ディレクトリに保存

## 環境
– 今回は、[google colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)を使って、[google drive](https://www.google.com/intl/ja_jp/drive/)に画像データを保存します。

## ダウンロードに使ったサイト

– [yahoo image search](https://images.search.yahoo.com/

元記事を表示

ユークリッドの互除法

# ユークリッドの互除法

RSA暗号について勉強していたら、久しぶり(大学受験以来?)に遭遇したため、アルゴリズムについてまとめました。

– 正の整数 $a_0,a_1$ の最大公約数 gcd($a_0,a_1$) を出力するアルゴリズム
– Input : $a_0,a_1 \in \mathbb{N},\ a_0>a_1>0$
– Output : gcd($a_0,a_1$)
– Algorithm :
1. $i\ ← 0$
1. $a_{i+2} ← a_i \ \text{mod}\ a_{i+1}\quad (0\leq a_{i+2}\leq a_{i+1})$
1. $\text{if}\ a_{i+2}=0\ \text{then return}\ a_{i+1}$
1. $\text{else}\ i←i+1\ \text{and return to line }2$

“`math
\left\{
\begin{array}{lllll}
a_0=q_1a_1+a_2 \\
a_1=q_2a_2+a_3\\
\qquad\vdots\\

元記事を表示

ログイン/ログアウトするWebサーバをPython&OAuth2で作ってみる

## 概要

「ユーザ認証でログイン/ログアウトできるWebサーバを作ってみたい」と思ったが、やったことがないのでどう取っ掛かっていいのかがわからない…。自分で全部実装するのは初心者には結構大変そうなので、ユーザ管理に関して便利な仕組みはないのだろうか。
そう思って調べていくと、ユーザIDの保存や管理などを代わりにやってくれるIdentify Provider(IdP)というサービスがあるようで、これを使えばだいぶ手間が省けそうな気がした。IdPとしては、例えばOkta、Azure AD、Auth0とかが有名みたい。
沢山あるIdPの中から今回はとりあえずAuth0を選んで、ログイン/ログアウト可能なWebサーバを実装してみた。

## やりたいこと

すごく単純。Webブラウザ上で以下の遷移をするサーバを作りたい。

* (1) トップページ(Path : “/“)
* 「ログイン」と記載されたリンクだけがある。クリックすると(2)に進む。
* (2) ログイン入力ページ(Auth0の認証サイトに遷移)
* 「ユーザID」と「パスワード」を入力するページ

元記事を表示

「”すぐ” このデータまとめて欲しい」となれば ”すぐ”に探索開始できる Python の・・・

###~手元データの要約、視覚化を超簡単に実現して、探索的データ解析(EDA)しよう(D-Tale編)~

![IMG_1107.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/0a1ea0f1-6dc8-ac62-8a18-5fb8f91dc0fc.gif)

##はじめに
 
**「”すぐ” このデータまとめて欲しい」に ”すぐ”に超簡単に応えられる Python の・・・** と題し、

「おい、悪いが”すぐに”このデータまとめてくれ」

に応えるための**探索的データ分析(EDA)ツール**を、これまでに3つ紹介しました。

今回は4回目!となりますが、今回紹介する**D-Tale**は、「これは売り物でなくてよいのか?!」と言うほど、探索しまくれるツールとなっています。
3回目までに紹介したEDAツールは、探索に必要であろうグラフや基本統計量をまとめ、目の前に提示してくれるというものでしたが、**D-Taleは 自在に探索できる環境を提供してくれる**というものになっていま

元記事を表示

【Object Detection】Pytorch Faster-RCNN modelを使ってFashion Imageの領域を検出

# 概要
Fashionデータを利用して帽子、トップス、ボトムスなどのオブジェクトなどを検出しました。

# データをロード
csvファイルの中にイメージURL、種類、領域などの情報が含まれている。
この情報をロードして視覚化して確認してみる。

“`python
import os
import json
import pandas as pd
import numpy as np
from urllib.parse import *
from requests.utils import requote_uri
import requests
from tqdm.notebook import tqdm
“`

“`python
BASE_DIR = os.getcwd()
annotations_path = os.path.join(BASE_DIR, ‘annotations’)
images_path = os.path.join(BASE_DIR, ‘images’)
test_annotations_path = os.path.join(BASE_DIR, ‘t

元記事を表示

ABC219 C – Neo-lexicographic Ordering から学んだ

https://atcoder.jp/contests/abc219/tasks/abc219_c

![abc219_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/e6f1cdfd-113b-b138-bb5c-ea1864ee5f37.png)
![abc219_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737344/d74a5c59-61c0-992b-8198-11b229358f22.png)

踏む踏む。
S に含まれる英小文字を X の中から探し、
数字に置き換えてみた。だがしかし WA.

“`Neo-lexicographicOrdering_rv0.py
X = input()
N = int(input())

S =[]
dic = {}
for _ in range(N):#5*10**4
s = input()
y = “”
for i i

元記事を表示

OTHERカテゴリの最新記事