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

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

Djangoでページングをやってみた(Paginator)

### DjangoでPaginator
WEBサービスのデータ一覧画面などでコンテンツ量が多くなってくるとGoogle検索結果画面のように複数ページに分けて表示したくなります。

で、そいつをすべて手で作成しようとするとかなり混み入ったコードを書かねばならず、ずっとめんどうくさいなーと思ってたところみつけたのがPaginatorです。

### Django 公式ドキュメント
Paginator

なおPaginatorはDjango3.1から追加された機能です。

### Paginatorの概要

基本はこれ

“`
from django.core.paginator import Paginator

page_data = Paginator(data, page_cnt)
“`
data : データべースから取得したQuerysetかリストかタプル。Querysetの場合、

元記事を表示

robots.txtを解析するパッケージを作った(python)

# robots.txtって何
webサイト側で「ここにはアクセスしちゃ駄目だよ〜」等の指示をクローラーに向けて書いたものです
なので、サイトをクローリングするときは最小限守ったほうがいいと思います

# どうやって解析するの
まずはurllibを使う方法です(今回はgoogleを例とします)
urllib.robotparser.RobotFileParserクラスを使います

“`python
from urllib.robotparser import RobotFileParser

url = “https://www.google.com/robots.txt”
rp = RobotFileParser() # RobotFileParserインスタンスを生成
rp.set_url(url)
rp.read() # robots.txtの読み取り
rp.can_fetch(“アクセスしたいURL”) # 指定されたURLがアクセス可能か確認、戻り値はbool
“`
基本的な使い方はこんな感じです
これの面倒くさいところはrp.set_urlにrobots.txtの直リン

元記事を表示

【Venv】仮想環境の使用ライブラリをfreezeしたら思ってた10倍はパッケージが書き込まれた話【Anaconda】【備忘録】

#背景
ハッカソンにチームで参加するにあたって,Githubでコード管理をしようと思った.
いざ作った仮想環境のライブラリをfreezeしたら,インストールしてないライブラリまでめっちゃ書き込まれてて焦った.
前回に引き続き備忘録として投稿します.

#環境
OS:MacOS BigSur
ターミナル:zsh
PYTHONPATH:Anacondaに繋げました([前回記事](https://qiita.com/Hana-mizu-wood/items/1cb320487fa1988d311e)はそれに伴う問題の解決)
↑今回はこいつが悪さしてます

#アプローチ
##とりあえずfreeze
Djangoのパッケージだけをpip installした環境を作成.
runserverまで確認できたので,ライブラリをfreeze

“`
(venv)(base)$ python -m pip freeze > requirments.txt
“`

##requiments.txtの確認
“`
Django==3.2.7
その他numpyなど想定外に記述されたライブラリたち
“`

元記事を表示

【AtCoder】ABC217をPython3で解説(ABCD)

ABC217のA-D問題の解説。

https://atcoder.jp/contests/abc217

## 目次
[A – Lexicographic Order](#a—lexicographic-order)
[B – AtCoder Quiz](#b–0atcoder-quiz)
[C – Inverse of Permutation](#c—inverse-of-permutation)
[D – Cutting Woods](#d—cutting-woods)

## A – Lexicographic Order

https://atcoder.jp/contests/abc217/tasks/abc217_a

### 解説

sがtより辞書順で小さいときに`Yes`を出力する問題。

Pythonには、英字自体を比較することで、辞書順の比較をできるので、そのまま書いてあげることで`AC`。

### コード
“`python
def main():
s, t = input().split()

if s < t:

元記事を表示

LightGBMのパラメータチューニングまとめ

# はじめに
本記事は、**下記のハイパーパラメータチューニングに関する記事の、LightGBMにおける実装例**を紹介する記事となります。

https://qiita.com/c60evaporator/items/ca7eb70e1508d2ba5359

# LightGBMとパラメータチューニング
**LightGBM**は分類や回帰に用いられる機械学習アルゴリズムで、その性能の高さや使い勝手の良さ(特徴量重要度などが出せる)から、特に**回帰においてはXGBoostと並ぶメジャーなアルゴリズム**です。

[XGBoostと比較したとき](https://www.codexa.net/lightgbm-beginner/)、LightGBMは**動作が軽量で大規模データの学習に強い**と言われています。

一方でLightGBMは多くのハイパーパラメータを持つため、その性能を十分に発揮するためには**パラメータチューニングが重要**となります。

# チューニング対象のパラメータ
LightGBMの主なパラメータは、[こちらの記事](https://data-analysi

元記事を表示

Pandasの欠損値処理(他の列の値で埋める)

# はじめに
Pandasで欠損値がある時に他の列の値を使って補完したい時があります。
今回はその手段に加えて、手段を思いつかずに回り道をしたパターンを
忘備録として掲載します。

# サンプルパターン
次のデータフレームで、col2の欠損値をcol1の日付を3日足した値で埋める
ことを考えます。

“`python
import pandas as pd
import datetime

df = pd.DataFrame({‘col1’: [“2021/05/08”, “2021/05/08”, “2021/05/08”],
‘col2’: [“2021/05/09”, “2021/05/11”, None]},
index=[‘row1’, ‘row2’, ‘row3’])
“`

この時、各列は次のようにdatetime変換されているとします。

“`python
df[“col1”] = pd.to_datetime(df[“col1”])
df[“col2”] = pd.to_datetime(df[“col2”])
“`

#1:fillna

“`pytho

元記事を表示

【Python】emojiモジュールについて

##インストール

“`
pip install emoji
“`

##動作環境

“`
python3 –version
# Python 3.9.6

pip3 show emoji
# Version: 1.4.2
“`

##絵文字の正規表現の取得 – get_emoji_regexp()
get_emoji_regexp()メソッドで絵文字判別のための正規表現を取得することができます。
これを利用することで文章中の?みたいな絵文字を消し去ることができます。

“`python
import re
import emoji

faces = ‘???ლ(´ڡ`ლ)???( ◜ω◝ )???’
print(re.sub(emoji.get_emoji_regexp(), ”, faces))

# ლ(´ڡ`ლ)( ◜ω◝ )
“`

YouTubeやTwitterなどから取得してきたテキストを色々いじくる前の処理として使うことができます。

##文字列内の絵文字の個数をカウント – emoji_count()

“`python
print(emoji.

元記事を表示

とりあえずYOLOを使って好きな画像で物体検知をしてみたいという方へ

# はじめに

この記事ではできるだけ最短ルートでYOLOの物体検知ロジックを自前の画像に適用してみる方法を示したいと思います。

流れは以下のようになります。

1. Python環境構築
2. YOLOを導入する
3. YOLOを実際に使う

VS Code、pipenv、gitが導入済みの方であれば、作業フォルダ内でターミナルを開いて以下の4つのコマンドを打つと動かせます。

“`terminal
git clone https://github.com/ultralytics/yolov5.git
“`
“`terminal
pipenv install -r requirements.txt
“`
“`terminal
pipenv shell
“`
yoloのフォルダ/data/image/に好きな画像を入れて

“`terminal
python detect.py –weights yolov5s.pt –source data/images/画像名
“`
これで、yoloのフォルダ/runs/detect/exp内に結果が出力されます。

では順々

元記事を表示

Python: Cartopy で地図を書いてみる

# はじめに
これまで地図関係の作図は、GMT (generic mapping Tools) を用いて行ってきたが、そろそろ Python で試してみようと思い、Cartopy をインストールし、使用してみることにした。結構いい感じの出力ができる模様。

#### 環境
+ M1 MacBook Air
+ macOS Big Sur (Version 11.5.2).
+ python version 3.9.1
+ conda version 4.10.3

# インストール
私の場合は、以前の投稿、[M1搭載MacBook Airが来た!手っ取り早くPython計算環境を作ってみる](https://qiita.com/damyarou/items/f0e0b4026bdda94df46f) に示したように、Miniforge3 をインストールしているため、[conda-forge / packages / cartopy](https://anaconda.org/conda-forge/cartopy) にしたがって

“`
conda install -c conda

元記事を表示

Adafruit_DHTがError accessing GPIOで失敗する場合の対処

RaspberryPiでAdafruit_DHTを利用して温湿度センサを動かそうとした際に以下のエラーで失敗した
エラーでググったが解決策にたどり着くまで時間がかかったので書き残しておく

“`
RuntimeError: Error accessing GPIO. Make sure program is run as root with sudo!
“`
#結論
Adafruitのフォーラムにあった
https://forums.adafruit.com/viewtopic.php?f=24&t=168118
この通りやれば解決した
https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/python-setup

#経緯
これまでRaspberryPi 4B(64bit)で温湿度センサAM2302(DHT22)を制御していたが、画像撮影する`raspistill`が64bitのRaspberry Pi OSでは使えないことに気づき、32bitでOSを再インストールして

元記事を表示

Instagram Graph APIでユーザー、メディア、インサイトなどの情報を取得してみる

![Untitled Diagram.drawio(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/2011589b-b28b-a454-85b2-ec54b4e3dfd9.png)

## 背景

最近、Instagram市場をターゲットとしたプロジェクトで業務を行っており、分析のために色々と情報収集をしているのですが、無数に存在するインフルエンサーを手動で調査するのはさすがにしんどいので何か方法は無いかと探していたところ、どうやら「[Instagram Graph API](https://developers.facebook.com/docs/instagram-api)」なるものを使えば比較的簡単に入手できるとの事。

今回はユーザーのフォロー数、フォロワー数、メディア(投稿)数といった基本的な情報をはじめ、リーチ(メディアを閲覧したユニークユーザーの合計数)やインプレッション(メディアが閲覧された合計回数)といった少し踏み込んだ情報までをAPI経由で取得してみたいと思います

元記事を表示

英語のテキストファイルをいい感じに改行するスクリプト

# はじめに
既存の英文を編集する際に一定以上の桁数以上の文字が存在していると、UIからはみ出ることがあったので、いい感じに改行するツールを探しましたが、やりたいことができるツールが見つからなかったのでPythonで作ってみました。

# アプリ仕様
* Python3系で動作
* 引数1:変更元のファイルパス
* 引数2:1行あたりの最大文字数
* OUT:変更元ファイルのディレクトリに生成、名前が重複した場合は連番の数値を付与して生成する。
* 改行位置が単語の途中だと改行せず、一つ前のスペースの位置で改行する。

# 実行例

“`text:スクリプト実行前
#Introduction
When editing an existing English sentence, if there are characters with more than a certain number of digits, it may protrude from the UI, so I searched for a tool that breaks lines nicely, but I did

元記事を表示

競技プログラミング用の.batファイルを作る

やることはタイトルの通りです。
LinuxやMacではBashだったりで色々便利なことだったりシェル芸人ができますがWindowsはBashが使えません(すべてはWSLを使えば解決しますが…)。

そこで、Windowsで似たような事ができるbatファイル(とPython)を使って競技プログラミング用の便利ないろいろを作ります。

前提として…

* パスの通し方を知っている
* 超かんたんなbatファイルなら普通にかける
* 競技プログラミングで結構フォルダやファイルを作る(書き捨てじゃなく過去のコードを保存している)

ような人を対象としています。

# crun
コンテストに出るときはPythonで書いたほうがいい場面でもC++で書いています。
でもC++のコンパイルって結構面倒なんですよね。
Rustを使っている場合はcargo runを呼んでしまえばコンパイルから実行まで自動でやってくれますし、VSCode + Pythonならctrl+F5を押すだけでいいです。(C++でも同じようにできる設定がありますが面倒でやってないんです。)

エディタにVSCodeを使ってい

元記事を表示

Djangoを触ってると出てくる {% csrf token %} とは?ざっくり分かりやすく説明します!

Djangoでアプリケーション開発をしていてフォームを設置するときに、 {% csrf token %} というおまじないみたいなものを使いますが、こいつってそもそも何者なんでしょうか?

今回はエンジニア歴が浅い方や、非エンジニアの方向けに、このcsrf tokenが「何者なのか」というのを、ざっくりと分かりやすく書いていきます!

#そもそもCSRFって何?

csrf token を理解する前にまずは「csrf」がそもそも何かを少し説明します!

csrfを訳してみると
「サイト間を横断する(Cross Site)リクエストの偽造(Request Forgery)」
となり、

__悪意のあるサイトが、被害者となるユーザのフリをして、別のサイトにリクエストを飛ばして、そこで悪さをする__といった内容になります。

これだけだと分かりづらいですね汗

なのでまずはcsrfによるトラブル例をご紹介して、
それぞれのステップで何が起きているかを説明していきます!

注:この記事ではcsrfの概念の理解のために厳密な表現を避けております。あくまでcsrfが全く分からない!という方が少しで

元記事を表示

[Python]Page Object Modelパターンを用いたSelenium テストの記述方法メモ

* Page Object Modelパターンを利用したSeleniumテストの記述方法についてメモする。

## POM(Page Object Model)とは

* ページをクラスオブジェクトとして扱うブラウザ自動化テストのデザインパターンの一つ。

* **主な概念**
* テストクラス
* 対象ページのテストケース。
* ページオブジェクト
* 各Webページオブジェクトを作成することを目的としたクラス。
* テスト用コードとWebページアクセス用コードを分離。
* ロケータ
* ページ要素を取得させる。
* **利点**
* 可読性の高いテストケースを書くことができる。
* 複数のテストケース間で共有できる再利用可能なコードを作ることができる※コード重複を防ぐことができる。

## 構成

“`
root – TestBase.py
|_ test_GoogleSearch.py
|_ chromedriver.exe
|_ Pages — google_page.py

元記事を表示

今度こそ?使い物になるフリーの数理最適化(混合整数最適化)ソルバー Python-MIP

# 主張
Pythonにて無償で商用利用可能なツールを使い、数理最適化問題の一部である混合整数最適化問題(MIP)・整数最適化問題(IP)・線形最適化問題(LP)を解きたい場合、PuLPパッケージを使うことはよく知られていますが、**Python-MIP**のほうが絶対よいです。今までPuLPを使っていた方はそれを捨ててPython-MIPを使ってください。これから始める方はPuLPに手を出さずにPython-MIPを無償で商用利用可能なソルバーのファーストチョイスにしてください。

# 関連リンク

https://docs.pyq.jp/python/math_opt/python_mip.html

https://www.python-mip.com/

https://python-mip.readthedocs.io/en/latest/

# なぜ
– PuLPのものよりもPython-MIPに付属している混合整数最適化ソルバーのほうがよいからです
– 付属しているのは両者ともCOIN-CBCですが、Python-MIP付属のもののほうが、ビルド日が新しい・*

元記事を表示

Python>pandas>DataFrame:マルチインデックス・マルチカラム構造のDataFrameの操作

# 1.概要
`groupby`メソッドを使ってデータをまとめると、マルチインデックスを持ったDataFrameのデータが出てくることがよくあるが、マルチインデックスのデータの取り扱いになれていなく操作がわからなくなることが多発。そこでいったん自分なりに整理した。

# 2.マルチインデックス・マルチカラムのDataFrame準備
* サンプルデータ+`groupby`+`agg`メソッド
カラム(`col1`,`col2`,`col3`)ごとに合計値(`sum`)、最大値(`max`)、最小値(`min`)をまとめる。
 ⇒マルチインデックスとマルチカラムをもつDataFrame

“`python
df = pd.DataFrame({‘col1’:[‘a’,’b’,’c’,’a’,’a’,’b’,’b’,’b’,’c’,’a’],
‘col2’:[‘A’,’A’,’A’,’A’,’A’,’B’,’B’,’B’,’B’,’B’],

元記事を表示

[python] dashで「Address already in use」エラーが出たときの解決策かもしれない

困ってる人以外が見ても意味わからんと思いますが、困ってる人には役立つかもしれません。
日本語でググってもすぐに出てこなかったのでメモ。

“`
OSError: [Errno 48] Address already in use
“`
こんなエラーが出た場合の話。

自分の場合は、下記のようにポートをデフォルトから変えてやることで直りました。

“`python
if __name__==’__main__’:
app.run_server(debug=True, port=8051)
“`
この後 http://127.0.0.1:8051/ にアクセスすると動いてました

昔Flask使ってた時のものと競合してたのかなぁ?
理由はよくわからんが動けばok。おわり

元記事を表示

pybind11とRiceを比較しながら触ってみる

## はじめに

最近仕事でpybind11をよくさわっておりまして。(binding部分)フルスクラッチでpybind11を使ったPythonライブラリを作ってみたいと思いました。ついでにpybind11と似た方法でRubyライブラリを作れるRiceにも触れておきたいと思いました。

## TL;DR

– https://github.com/cielavenir/python-slz
– https://github.com/cielavenir/ruby-slz

## 作るもの

[libslz](http://www.libslz.org/)のバインディングとします[^1]。C++のクラスのコンストラクタでslz_initを呼び出し、compressメソッドでslz_encode、flushメソッドでslz_finishを呼び出すとします。

テストコードは、libslzの返した値をzlibで展開できれば良いものとします。圧縮前のデータには http://eforexcel.com/wp/downloads-18-sample-csv-files-data-sets-fo

元記事を表示

kivyMDチュートリアル其の参什参 Components – Tooltip篇

やっほーー(某Youtuber風、息してる?と問いかける方ではない)。

さぁ、今週はいかがだったでしょうか。私はまずまずといったところです。
というわけで、今週は変わったニュースもありませんでしたが元気にやっていきま
しょう。今日は最後?と思わせぶりなTooltip篇となります。本当は最後ではあり
ません。

いきなり話は逸れますが、今日チュートリアルの方を見たらなんかTransition
というものが増えてますね。というか全体的に変更点がありそう。中を覗いていたら
、これも後々実装される見込みなのですね。version 1.0.0で新しくとあるので、
今後の期待ということでしょうか。乞うご期待を。

## Tooltip

ということでさっそくやっていこうと思います。
はい、マテリアルデザインのリンクは読んでおいてもらえれば。

まぁ、私が説明するまでもなくそれほど古いUIを触っているとかでもなければ、
見たことはあるかと思われます。主にアイコンなどに使用することが言えるでしょ
うか。リンクを見てみると意外と気づきにくいものやこう使っちゃやーよというこ
とも書かれているので、一読は

元記事を表示

OTHERカテゴリの最新記事