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

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

rlm_pythonを用いたRadiusServer構築

python 2.7.5
CentOS 7.9
FreeRADIUS 3.0.13

仕事でradiusサーバを構築する機会があったのでまとめておきたいと思います
今回は認証部分を外に出す必要があったためrlm_pythonを使用しましたが
ここに関して書き出すとすごく長くなるのでとりあえず本記事では基本的な構築の部分しか触りません

# ライブラリ
以下のコマンドで必要な今回必要なライブラリをインストールします
“`
sudo yum -y update
sudo yum -y install freeradius freeradius-utils
sudo yum -y install freeradius-python
“`

# Radius設定
FreeRADIUSの設定は/etc/raddbに入っています
ファイルの設定はviコマンドを使用して編集します
“`
vi ファイル名
“`

## /etc/raddb/clients.conf
RadiusClientの設定を記述するファイルです
ここにClientの設定を書いておかないといくら認証要求を出してもRasi

元記事を表示

【Python】Instagramの投稿に自動でいいねする

# 初めに
 ことすたぐらむの3番目の機能は自動いいね機能です。
前回までの記事で、最新投稿urlを取得したので、そのurlを使用し、いいねをしていきます。
 投稿のurlがあればできるので、instaloaderでアカウントの最新投稿urlも取得できるため、そちらを取得しいいねをするなど、幅広い活用ができます。
 ぜひ試してみてください。(規約違反ですので、自己責任でお願いします)
# 自動いいね
 以下より、自動いいねのコードを解説していきます。
## 投稿ページに移動する
 [ひとつ前の記事](https://qiita.com/fishyamamoto/items/6c0192accf019cdad678)でハッシュタグで検索し、最新の投稿のurlを10件取得しました。

https://qiita.com/fishyamamoto/items/6c0192accf019cdad678

 このurlを使用し、最新の投稿に移動します。
“`python:instagram.py
self.get(url)
sleep(10)
“`
投稿画面に移動して、いいねボタンが表示さ

元記事を表示

Python class 継承とオーバーライド

## 継承
BossクラスがEnemyクラスを継承しているので、Enemyクラスのメソッドが使える

“`Python
class Enemy(object):

def __init__(self, name):
self.name = name

def attack(self):
print(self.name,”は攻撃した”)

class Boss(Enemy):
pass

enemy1 = Enemy(“スライム”)
enemy1.attack()
# スライムは攻撃した

boss = Boss(“ボス”)
boss.attack()
# ボスは攻撃した
“`

## オーバーライド
EnemyクラスのattackメソッドをBossクラスで上書きする

“`Python
class Enemy(object):

def __init__(self, name):
self.name = name

def attack(self):
print(self.name,”は攻撃した”)

class Boss(En

元記事を表示

Python3 class書き方

## クラスの定義 3つのパターン

“`Python
class Enemy:
“`
“`Python
class Enemy():
“`
“`Python
class Enemy(object):
“`

## クラスの初期化

呼び出された時、初めに実行される
引数にself必須
“`Python
class Enemy(object):

# コンストラクタ
def __init__(self):
print(“初期化”)

enemy1 = Enemy()
# 実行結果 ⇨ 初期化
“`

### 何か値を保持させたい時
__init__に引数をつける
self.引数名 = 引数名

実体化するとき、クラスに引数を与える

“`Python
class Enemy(object):

def __init__(self, name):
self.name = name
print(name)

enemy1 = Enemy(“スライム”)

# 実行結果 ⇨ スライム
“`
## メソッド
引数にselfが必須

元記事を表示

【今更聞きたい】Pythonパッケージの作り方(配布無し編)【Python】

# はじめに

Pythonを使っていると、様々なパッケージを使うかと思います。高度なデータ分析が簡単に出来るパッケージに頭が上がらない人たちも多いのではないでしょうか。私もその一人です。では、そんなパッケージはどのように作られているのでしょうか。そんな興味が湧いたそこのあなたにこの記事はぴったりです。自作パッケージを一緒に作ってPythonを一段深く理解していきましょう。それでは、本題に入りましょう。

# 結論

配布する予定の無い自作パッケージでしたら、比較的簡単に作成可能です。

1. パッケージのファイル構成を考える。
2. 任意のディレクトリに空のプロジェクトディレクトリを作成する。
3. 空のプロジェクトディレクトリに空のパッケージディレクトリを作成する。
4. 空のパッケージディレクトリに完成した複数のモジュールを入れる。
5. パッケージディレクトリに`__init__.py`を作成し、初期化処理を行う。
6. プロジェクトディレクトリに`setup.py`を作成し、`pip`での`install`を可能にする。
7. 完成!自分の実行環境にインストールしてみよう。

元記事を表示

Pythonでデジカメ写真のExif情報(レンズ名を含む)を一覧化する

# 目的
デジカメで撮った写真が大量にあるので、どんなレンズやカメラでどれくらい撮っているのか集計したいと考えた。Pythonを使ってExif情報を一覧化してExcelファイルに出力するため、いくつかのライブラリ、ツールを試してみた。

# まとめ
以下の4種の方法で、レンズ名を含む撮影情報の一覧化にトライした。
– (1) Pythonライブラリ PIL
– (2) Pythonライブラリ Pyexiv2
– (3) ExifTool.exe
– (4) Pythonライブラリ PyExifTool

結論としては、
– 撮影日時やカメラ名、撮影時のレンズの焦点距離、F値、ISO、シャッタースピードなどはどれでも取得できる。(Nikon, Canon, Sony, Fujifilm, Pentaxのレンズ交換式デジカメ、Ricoh, Sigmaのコンデジで検証)
– レンズ名を取得するのが厄介で以下の通り。
|-|(1)PIL|(2)Pyexiv2|(3)ExifTool|(4)PyExifTool|
|:–|:–:|:–:|:–:|:–:|
|Ni

元記事を表示

Pythonのバージョンをrequirements.txtで固定する方法が分からなかったので作った

Pythonのバージョンをrequirements.txtで固定したいと思いました。
個人のスクリプトのためにわざわざsetup.pyを書くほどでもないのです。
Googleでググってもその方法が分からなかったのでパッケージを作りました!

## 実装
パッケージのバージョンとPythonのバージョンが対応するようにしました。
ほとんど中身のないですが、数行のソースコードはこちらです。
https://github.com/jin0g/python-must

## 使い方

既存のもしくは新規のrequirements.txtに以下のように記述するだけです。
一致しないバージョンの場合は`pip install -r requirements.txt`がエラーになります。
“`
python-must == 3.8.2
python-must >= 3.10
python-must >= 3.10, <3.11 ``` ## 注意点 - 3.7.0以降にしか対応していません。 - `pip freeze`をするときは気を付けてください。バージョン制約が非常に厳しくなります。 -

元記事を表示

pythonでmake it a quoteを作りたい(2)

最初に[discordpyでmake it a quoteを作りたい](https://qiita.com/YutoYuto990/items/062730e20a2f204e5829)を書いた。
色々そのあと試行錯誤していろいろ変えることができた。
まず前のでは絵文字に対応していないため絵文字と文字両方が扱えるフォントを探そうと思ったがなかなか見つからず、こんな長いコードになった。
よさそうなフォントがあったら教えてください。
あと、文字をn文字ごとに空白を優先して区切ろうとしていたらtextwrap.wrapというのがあったので使った。
そして文字を中央揃えにした。
# 最初に
必須のpillowと、絵文字かの判定に使うためのemojiをインストールする。
“`sh
$ pip install emoji
$ pip install pillow
“`
# 最終的なコード
“`py
import emoji
import textwrap
from PIL import ImageFont,ImageDraw,Image
astr=”a?? aa??aa aa aaaa ??

元記事を表示

エロマーケットプレースの研究シリーズ 3: MeCab の導入と単語登録の準備

# 前回

https://qiita.com/c1z/items/3df2a2f7e424958bb706

Scarpy でエロマーケットの商品情報をクロールして CSV を作った

# 今回は

Mecab のセットアップと単語登録をする

# mecab と ipadic のインストール

まず、 mecab をインストール

“`bash
$ brew install mecab
“`

IPA 辞書をインストール

“`bash
$ brew install mecab-ipadic
“`

# NEOLogd をインストール

NEOLogd という追加辞書があり、新しい言葉がいっぱい入っているので入れる

“`bash
$ git clone –depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ ./bin/install-mecab-ipadic-neologd -n
“`

インストール中には

“`bash
[install-mecab-ipadic-NEologd] : Do

元記事を表示

3D点群データのダウンサンプリング手法:FPSについての解説と実装

# はじめに
3D点群処理で扱うデータはとても大きいため、そのまま扱うと処理に時間がかかってしまいます。
そのため事前に元の点群データから一定のポイント数だけを抽出するダウンサンプリングを実施するのが一般的です。

ここで重要なのが
__データの数は減らしても、情報量は減らしたくない__
ということです。

どういうことかというと、ある点群の中から同じサンプル数だけをサンプリングして処理したいときに
以下のように偏った箇所からとってしまうと元の点群が何かわからなくなってしまうため意味がありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350274/8433ea81-a152-e859-213c-1a57e969b000.png)

つまり、元の点群の情報をできるだけ維持したまま上手にサンプリングすることが必要になります。

__※ここから下は下記リンクのサマリーとなります。詳細な解説、実装コードはこちらをご覧ください↓↓__

https://tech-delibera

元記事を表示

Google Colaboratoryで 気象庁データをwebスクレイピング後 pandasに変換 [python]

Google Colaboratory(グーグル・コラボラトリー、あるいは略式の呼称でGoogle Colabと呼ばれる。)とは、
教育機関や研究機関において機械学習の普及を目的としたGoogleの研究プロジェクトの一つとなっています

https://su-gi-rx.com/archives/4670

Google Colaboratoryは
環境構築といった学習コストがかからないため
初めての方にとても魅力的です

とりあえず機械学習を使用してみたい人には
pycaret が個人的にはお勧めです

https://qiita.com/daikikatsuragawa/items/b8218cbe7cdc7afd978b

今臨床工学技士の方々と共同研究をしているのですが
AI時代を見据えて医療現場でDXを実施してきた
臨床工学技士の歴史を作られてきた有名な方は 強力な自作データベースがあるのですが

転職したばかりなど理由がある方は
特徴量が足りないという問題点に直面します

そこで気象庁のデータが活用できると思いました

気象庁のデータは一部自由に利用できることのできる魅力的

元記事を表示

Plotly scatter_matrixで選択したレコードの点を強調させる

データ解析中、変数間の関係性を確認するときには散布図行列が便利で、pythonでは、plotlyのscatter_matrixがかなりいい感じです。

plotlyが出力する散布図行列では、いろんな切り口でデータを見るために、投げ縄ツールや矩形選択ツールをつかって、簡易的なフィルターをかけることがあると思います。
デフォルトでは、このときunselectなレコードのopacityを小さくして、選択しているレコードを強調しますが、これではやや色の違いが見づらいので、色を変える方法がおすすめです。

“`python
import plotly.express as px

df = px.data.iris()
fig = px.scatter_matrix(df, color=’species’)
fig.update_traces({
‘selected_marker_color’: ‘purple’,
‘unselected_marker_opacity’: 0.2,
})
fig.show()
“`
各Scatterトレースの中にselectedやunsele

元記事を表示

パック、アンパックの解説(コレ⇒*)

「アンパックってなに?」
「a = *’abc’ってなに?」
「*a = ‘abc’って、アスタリスクを付けるのが前後逆になると出力が違うの???」
となったので、
アスタリスクの意味の1つであるパック、アンパックについて解説する。
  
  
“`python:アンパックの処理
>>>a,b,c,d,e,f,g = (*”apple”,”banana”,”tomato”)
>>>
>>>
Output:a, p, p, l, e, banana, tomato

“`
アンパックを一文で表すと、「複数の要素を持つものを分解して各変数に代入すること」である。
(また、展開とも言われている。(引数に入るアンパック(zip(* list))など))
「Q. (x+2)(x+5)
 A. x2+7x+10 」:展開
  
どういうことかというと、
a,b,c,d,e,f,g = (*”apple”,”banana”,”tomato”)
と書いたら、アスタリスクが付いている”apple”が1つずつに分解される。
そして、
“`python:アンパックの代入結果
a = “a”
b =

元記事を表示

量子アニーリング基本操作

# はじめに
量子アニーリングにて、QUBO行列をハードウェアに投げる作業を備忘の為にメモ書きしたものです。
1. D-Waveの場合
2. OpenJijの場合

## D-Waveの場合
### D-waveライブラリのインストールとインポート
“`Python
#インストール
pip install dwave-ocean-sdk
#使用するD-waveマシンを指定するDWaveSamplerとQBITへの自動割当を行うEmbeddingCompositeをインストール
from dwave.system import DWaveSampler, EmbeddingComposite
“`
### 使用するD-Waveマシンの指定
以下のTokenはhttps://cloud.dwavesys.com/leap/login/?next=/leap/ でIDを作成すれば無料で3分のマシンタイム獲得可。
“`Python
#D-Waveマシンの指定 = アクセスURL、token、使用するSolverを指定
endpoint = “https://cloud.dwavesys.

元記事を表示

超解像について(SRCNN)

# 超解像(super resolution)とは
解像度を高くすること。
ただ解像度を高くするのではなく、人が見ても不自然に感じないように解像度を高くする。

# SRCNNとは
超解像(super resolution)にディープラーニングとして、CNN(畳み込みニューラルネットワーク)を活用したものです。
全体像は以下通りです

![SRCNN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670347/d033d9cd-3c76-3218-6149-e6ba649aa019.png)

特徴は以下の通りです
* モデル入力前にバイキュービック補完で画像を拡大
* モデル構造は三層の畳み込み層で構成
* 損失関数は最小二乗誤差を採用

# モデル構造
モデル構造は比較的単純な三層構造です。
畳み込み層とReLU活性化関数を組み合わせて作成します

“` python
class SRCNN(nn.Module):
def __init__(self, num_channels=1):

元記事を表示

線形代数自動計算ソフト作成過程(可読性)

# 入力処理のプログラムが完成!!!
 だいぶ時間がかかってしまいましたが、線形代数を計算するための入力処理プログラムができました。掛け算をどうするか悩みましたが、*を書いても書かなくてもいいようにしました。今度アルゴリズムを簡単に書いてみようかと思います。

## C言語で開発したプログラムがひどい!!!
 私は一度、線形代数自動計算ソフトをC言語で作ってみたのですが、ひどい有様で作った本人でさえも解読に時間がかかってしまいました。今まで個人でしかプログラムを作っておらず、あまり意識したことがありませんでした。(変数くらい?)
そこで可読性を意識してみることにしました。

# 作業内容
 じゃあどうすれば可読性が上がるのでしょうか?とりあえず同じ言語だからと言ってソースコード全部同じファイルに書いてしまってたので、まずはそこを変えました。
あまり細かくしてもよくないのでデータ入力、処理、出力の3つに分けることにしました。
データ入力用のファイルを作り、クラスメソッドとして2種類のデータ入力関数を作りました。
“`Python
class Input
def getdata(

元記事を表示

PythonでChat Work通知

## やること

Chat Workにメッセージを送る

## 前提

以前作成した下記の環境からスタート

https://qiita.com/sh19982580/items/11a918da6d1a03ddf265

## インストール
flaskの下に追加

requests

`pip install -r requirements.txt`を実行

## コード

chatwork.pyを新たに作成

import requests

CHATWORK_ROOM_ID = ‘0000000000’
CHATWORK_TOKEN = “xxxxxxxxxxxxxx”

endpoint = ‘https://api.chatwork.com/v2/rooms/%s/messages’ % CHATWORK_ROOM_ID
params = {
“body”: “testテストてすと”,
“self_unread”: 0
}
response = requests.post(end

元記事を表示

PythonでGoogle Spread Sheet操作

## やること

Googleのスプレットシートからデータを読み取る

## 前提

以前作成した下記の環境からスタート

https://qiita.com/sh19982580/items/11a918da6d1a03ddf265

## インストール
flaskの下に2つ追加

gspread
oauth2client

`pip install -r requirements.txt`を実行

## 下準備
1. GCP
APIとサービス
→認証情報
→ 認証情報を作成
→ サービスアカウント
→ 名前をつけて、続行
→ ロール「編集者」
→ 完了
→ 再度、作ったサービスアカウントをクリック
→ キーから鍵を追加
→ JSONで作成

1. VSCode
ダウンロードされたJSONをcredential.jsonとしてVSCodeに保管

1. SpreadSheet
credential.jsonの中に入っているclient_emailをspreadsheetの共有で追加する

## コード
spreadsheet.pyを新たに作成

import

元記事を表示

ガウス過程が面白い

# 何を面白いと思っているか

ガウス過程回帰を実装して、色々と試していた。

“`python:gp.py
import numpy as np

class GaussianProcess:
“””ガウス過程に基づいて予測してくれるやつ
“””

def __init__(self, x_line: np.ndarray = None, y_line: np.ndarray = None) -> None:
“””constructor

Args:
x_line (np.ndarray, optional): training data の x のほう. Defaults to None.
y_line (np.ndarray, optional): training data の y のほう. Defaults to None.
“””
self.x_line = x_line
self.y_line = y_line

元記事を表示

Pythonのlambda式もオブジェクトであることに気がついた話

# 経緯
先日私は友人にPythonのクソコードを送りつけようと思い、普段は組まないような構文を積極的に書いて動作するか試していました。
そしてこの一文を打ったのです。
“`Python
print(lambda x: x+1)
“`
結果:` at 0x0000027C83B613A0>`

そっか、関数もオブジェクトなのね…

ん?

# 思いついてしまった
じゃあ…
“`Python
(lambda x: x+1, lambda x: x+2, lambda x: x+3)[0](1)
“`
結果:`2`

ちゃんと出来るやん…
もう少しいじってみよう
“`Python
[i(3) for i in (lambda x: x+1, lambda x: x+2, lambda x: x+3)]
“`
結果:`[4, 5, 6]`

oh…(クソコードの予感)

# まとめ
結構面白いことが出来るんじゃないかなと思いました。

なお実用性()

みなさんもぜひ良い使い方を考えてみてください。(丸投げ)

## 参考文献

元記事を表示

OTHERカテゴリの最新記事