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

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

【Django】REST frameworkでプロジェクトにデータPOSTしてくるクライアントのIPアドレスをDBに格納する

#はじめに
DjangoのREST frameworkを使うようなアプリケーションを持つプロジェクトではよく「uplink」でデータ収集をすることがあります.私はその逆方向の通信を行う「downlink」をする機会があったため,「そもそもuplink時に誰がデータをPOSTしてきてるの?」っていうことを動的に知る必要がありました.
そこで,データPOSTしてくるゲートウェイ等のクライアントのIPアドレスをDBに格納しておいてdownlinkのときに,そのIPアドレスを使おうってことになりました.

#結論
Djangoプロジェクトへのアクセスリクエストに含まれるHTTPヘッダの`’REMOTE_ADDR’`からクライアントのIPアドレスを取得してあげれば良いみたいです.

###参考
[DjangoでクライアントのIPアドレスを取得する](https://qiita.com/3244/items/0b47d3ad91968fe15eb9)

#実装手順
###前提
Python,Django及びREST frameworkに関して経験のあることを前提として記事を書いております.POS

元記事を表示

Django Rest Framework ListSerializerの書き方

フロントエンドの開発時に、より本格的なスタブを作るために、DRFをよく使っていました。
とても手軽に構築できて、いつも助かっています。
ただ、よりコアの使い方が必要なとき、PythonやDjangoに不慣れの人にはなかなか骨が折れます。

下記のような連想配列を一回のPOSTで複数のデータ更新と新規追加を同時に実現したいニーズがあって

![sample.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615519/0a18e20a-1a50-e76c-c0f3-755a83e1f865.jpeg)

公式サイトでは[このように](https://www.django-rest-framework.org/api-guide/serializers/#listserializer)解説されています。

つまり、「ListSerializer」を使えばよいとのことです。
公式サイトに紹介された構文でserializers.pyに書いてみると、それっぽい動きは確認できますが、
POST送信後、データの更新も確

元記事を表示

BookoffオンラインのAPIをつくってみた。 #3 (改良)

#はじめに
[前回はこちら](https://qiita.com/tetsuya111/items/f62d4c9b9da0a4c35b55)

本当はデータベースを作りたかったが、一度に最大5000件しか取れないという壁にぶつかり、どうも深刻な感じなのでとりあえず諦めた。
前回と前々回で、いくつか関数を作ったが、もう少し改良。

#データの取得

[一回目](https://qiita.com/tetsuya111/items/7064648ca7d4dc218817)の searchN を改良。

“`python:util.py
from . import api
import re
import time

def search(query,title=””,author=””,priceFrom=0,priceUntil=10**32,onlyStocked=True,n=5,type_=api.SearchType.BOOK,timeout=30):
i=0
startTime=time.time()
for data

元記事を表示

【Django】設定ディレクトリをわかりやすく・みつけやすく

#はじめに
Djangoの開発・実装の際に,どうしてもアプリケーションが多くなってしまうことがあります.こんな状態のプロジェクト構成だと設定ファイルを探すときも,ちょっとだけめんどくさいですよね.ディレクトリ名さえ覚えていれば,アルファベット順なわけですし,探せばそりゃ見つかるんです.それでも**「探す作業」自体が嫌い**な私はそれすらめんどくさいんですよね…
そこで,この設定ディレクトリが**「絶対一番上にある」**っていう状態にしておくことで,探す手間をなくします.かなり簡単な話なので,みなさんも是非使ってみてください.

#結論
**設定ディレクトリの名前を「_config」にする**ことで,このディレクトリが一番上に表示されます.

“`sh:プロジェクト構成例
.
├── _config # プロジェクトの一番上に設定ディレクトリ
├── app1
├── app2
└── app3
“`

# 実装手順
この記事でお伝えしたことを実際に自分のDjangoプロジェクトに取り入れようと考えてくれる方に向けて,実装手順も載せておきます.

### 前提
Python3,Dja

元記事を表示

scikit-learnのサンプルデータセットと主要OSSを活用したデータ分析のチュートリアル

著者: 株式会社 日立ソリューションズ 柳村 明宏
監修: 株式会社 日立製作所

# はじめに
近年、機械学習をはじめとするAI技術を活用したデータ分析が注目を集めています。
本投稿では、機械学習に馴染みのない方やデータ分析に馴染みのない方が、データ分析に触れていただくことを目的に、手軽に利用可能なOSSを利用したデータ分析の一連の手順とサンプルコードを紹介いたします。

# データ分析の流れ

データ分析環境と、データ分析の流れを以下に示します。
吹き出しはそれぞれのフェーズで利用するOSSです。

![データ分析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702183/06f74572-d7c6-b2b7-593b-1a4bb2386300.png)

– 「データの理解」では、データの全体像を把握するためにJupyter Notebook上でデータセットを可視化します。

– 「モデルの作成と評価」では、データセットを利用して機械学習モデルの学習・評価を行います。今回は、再利用を考慮

元記事を表示

ハイフンに似ている横棒を全て統一するᅳㅡ˗?–᭸‒-─−▬?—━‐‑ー﹣―ー﹘-⁃➖⁻!

# はじめに
これらの横棒、コンピュータにとっては全て違うのですが
見分けがつくでしょうか?
-˗ᅳ᭸‐‑‒–—―⁃⁻−▬─━➖ーㅡ﹘﹣-ー??

郵便番号、住所、電話番号など、横棒が使われているデータを扱うとき、
人が入力したデータや購入したデータであると、同じ記号が使われていないことはよくあることです。

090-1234-5678
090᭸1234᭸5678
090‑1234‑5678
090−1234−5678
これらの電話番号の文字列も

“`python
phone_no_list = [‘090-1234-5678’, ‘090᭸1234᭸5678’, ‘090‑1234‑5678’, ‘090−1234−5678’]

# 文字をUnicodeコードポイントに変換
for n in phone_no_list:
# 文字列の4番目の横棒の文字コードを見てみる
print(n[3], ord(n[3]))

“””
出力:
– 45
᭸ 7032
‑ 8209
− 8722
“””
“`
このように全て違います。

# ハイフンに似ている横棒を全て統一

元記事を表示

djangoのpathlibについてざっくりとまとめる

### 今回のお題
今回のお題はpythonのpathlibというモジュールの使い方です。

用途はパスの結合ですね。

[前回](https://qiita.com/keishi04hrikzira/items/83e323f1c3d119d2bb77)、パスを結合できるos.path.joinについて扱ったところ、現在はpathlibを用いる方法が便利だというコメントをいただきました。

なので今回はpathlibを用いたパスの結合方法についてまとめていきます。
### 目次
– pathlibの使い方
– 取得したパスの型・注意点

### pathlibの使い方
pathlibの使い方は非常に簡単です。

– pathlibからPathをimportする。
– Path()もしくは”/”演算子を用いてパスを結合する。

これだけです。

“`python:パスの結合
# import
from pathlib import Path

# Path()で結合
path = Path(“dir1”, “dir2”)

# “/”演算子で結合
path = “dir1” / “d

元記事を表示

データベースを作る。 (sqlite3)

#はじめに
sql文が苦手なので、せめてデータベースの作成と読み込みの関数だけ作る。

#コード

“`python:main.py
import sqlite3

def makeDB(db,table_name,columns,cols):
#columns={:,…}
size=len(columns)
cur=db.cursor()
columns=”,”.join(map(lambda key:key+” “+columns[key],columns))
cur.execute(“create table if not exists {0} ({1})”.format(table_name,columns))
hatenas=”,”.join([“?”]*size)
for col in cols:
try:
cur.execute(“insert into {

元記事を表示

Python 3.10 lxml (wheel) を Windows 10 にインストールする

下記のサイトから lxml の wheel をダウンロードする。

lxml‑4.6.3‑cp310‑cp310‑win_amd64.whl

https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

コマンドプロンプトにてダウンロードしたディレクトリで下記を実行する。

“`
pip install lxml-4.6.3-cp310-cp310-win_amd64.whl
“`

元記事を表示

BookoffオンラインのAPIをつくってみた。 #2 (ブックマーク、カートに追加 )

#今回の目的
[前回の記事はこちら](https://qiita.com/tetsuya111/items/7064648ca7d4dc218817)
前回はデータを取得する関数をつくった。勿論データを取るのも良いが、今回はもう少し自作プログラムっぽいこと(?)をしたい。つまり、ブックマークやカートに本を追加したい… ちょっとややこしそうだが、前回同様、bookoffオンラインのサイトの構造はかなり単純なので、スイスイと進んでいく。

#ログインする
まずはログインする。しなくてもやり方はあるか?… そんな高度そうなことはどうせわからないから、男は黙って selenium の webriver を … しかしそれは最終手段と言う感じがして使いたくない。ここは流石にbookoffオンラインなので、もっと原始的にイケそうである。

“`python:api.py
HOST=”www.bookoffonline.co.jp”
URL=”https://”+HOST
SEARCH_URL=URL+”/disp/CSfSearch.jsp”
LOGIN_URL=URL+”/c

元記事を表示

[Python] Dockerコンテナでseleniumを使ってみる

#はじめに
急遽業務でSereniumを使いスクレイピングをすることになったので、勉強がてらDocker + Python + Sereniumを使いブラウザを操作することにチャレンジしてみます。

#Dockerでsereniumを実行してみる
Dockerコンテナはその仕様上、ホスト内の他のから完全に隔離されたプロセスになります。
なので複数のコンテナ間で通信する時はdocker networkの環境を整えてあげる必要があります。
まず先にdocker networkを構築することから始めます。

###Docker network環境の構築
まずはホストのdocker network環境を構築します。
selenium実行コンテナとブラウザ起動用リモートサーバーコンテナ間での通信が必要なため、docker networkの設定します。

まずはdocker network lsコマンドで現状のネットワーク設定を確認。

“`bash
ssablo-no-MacBook-Pro:test_selenium yasuhiro$ docker network ls
NETWORK I

元記事を表示

BookoffオンラインのAPIをつくってみた。 #1 (データの取得)

#はじめに
何事も**手動より自動の方が良い**に決まっている。勿論本の検索も然り。すでに十分自動化されているが、もっと楽を追求するのが人間の業であると思う。今回は表題の通り、bookoffオンラインのAPIを少し作ってみた。もっと作る予定だが、とりあえず公開。^-^

#何をしたい
主にしたいのは、

– データの取得
– ~~データベースの作成~~
– 手元のリストから、bookoffオンラインのカートに追加

などなど。まずは上の3つを作りたい。「手元のリスト」をbookmeterやブクログから作れたら欲しい本をワンクリックで購入!なんてことも出来そうである。

#データの取得
手始めにデータを取得する。サイトを触ると、一見バリバリのJavascriptなので、seleniumを使わないと厳しそうだが、ソースコードを見ると、普通のGETで取れるようである。
##テキストの取得
 まず、リクエストを送ってテキストを取得する。

“`python:api.py
import requests
from bs4 import BeautifulSoup as bs
import

元記事を表示

ABC224 チャレンジ結果

ABC224結果:AB2完
Cが終了後数分でACに持っていけたため非常に悔しい思い…
図形問題苦手です.

A:文字列の末尾で場合分け

“`python:Tires.py
S = input()
if S[-1] == “r”:
print(“er”)
if S[-1] == “t”:
print(“ist”)
“`

B:for文の途中終了の仕方イケてない, 冗長やし他にやり方ないものか.

“`python:Mongeness.py
H, W = list(map(int, input().split()))
A_list = []
for i in range(H):
X = list(map(int, input().split()))
A_list.append(X)

flag = True
for i1 in range(H):
X = 0
for i2 in range(i1+1, H):
Y = 0
for j1 in range(W):
Z = 0

元記事を表示

8-bit最適化アルゴリズム公開した

今月、FaceBookは新しい最適化アルゴリズム公開した、GPUの利用をせっすれると述べる。

* インストール

`conda list | grep cudatoolkit`か`nvcc -V`
例えば、君のcudaのバージョンは11.1、
`pip install bitsandbytes-cuda111`

* 使用

“`python
import bitsandbytes as bnb

# adam = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.995)) # comment out old optimizer
adam = bnb.optim.Adam8bit(model.parameters(), lr=0.001, betas=(0.9, 0.995)) # add bnb optimizer
adam = bnb.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.995), optim_bits=8) # equivalen

元記事を表示

【Python】プログラミング初学者のため、変数の話

# はじめに
プログラミング初学者に向けた記事です。
この記事は、僕が今までにプログラミング学習やプログラムを書いた際に起きた、躓きや挫折を掘り起こしながら、僕自身の理解を深めるための記事でもあります。

ちなみに、僕はプログラムを自由に書けると感じる様になるまでに2年以上は掛かりました(汗)。
そんな僕が、初学者の皆さんに言えることは1つ
**エラーの数だけ強くなる**
です。

なので、皆さんどんどんエラーを出していきましょう(違)!

# 変数ってなんぞや
プログラム学習する上で、変数を最初に学習した人が一番多いじゃないかなと思います。少なくとも僕は変数を最初に学習しました。
なんとなく学習しただけだと、変数には値が入っていて、その値を出力したり、上書き出来たりするぐらいの理解になっていると思います。

表面上の理解だけなら、それでも十分ですが少し学習を進めていくと下のコードのような挙動に驚くかもしれません。

“`python:python3
def append_element(l):
l.append(3)

var = [1, 2]

print(var) #

元記事を表示

pythonのos.path.joinについてざっくりまとめる

### 本日のお題
本日のお題はpythonのos.path.joinです。

このコードは、パスを繋げて新しいパスを生成する役割を持っています。

djangoを学習していたところcssファイルの読み込み経路の設定でこのos.path.joinの知識が出てきたので、備忘録として残しておきます。
### 目次
– os.path.joinの文型
– 注意点1〜リスト型のパスの結合
– 注意点2〜/を含むパスについて

### os.path.joinの文型
os.path.joinの基本構文及び具体的な使用例は以下の通りです。
また、osモジュールはimportが必要です。

“`python
# import
import os

# 基本構文
os.path.join(“パス1”, “パス2”)

# 具体例
path = os.path.join( (“main”, “project1/test1”)
“`
以下の例では、pathという変数に”main/project1/test1というパスが代入されています。

第一引数の下流に第二引数が連結されることに注意してください。

元記事を表示

python + OpenCVで画像を加工③ 画像にモザイクをかける

前回の記事で顔を検出できるようになったので、次の目標は検出した顔にモザイクをかけることです。その前哨戦として、今回は画像全体にモザイクをかけてみようと思います。

最終的なコードを最初に掲載しておきます。

“`python
import cv2

img = cv2.imread(‘photo.jpg’)

def mosaic(img, ratio):
small = cv2.resize(img, None, fx=ratio, fy=ratio)
return cv2.resize(small, img.shape[:2][::-1])

cv2.imshow(‘photo_mosaic.jpg’, mosaic(img, ratio=0.1))
cv2.waitKey()
“`
imread()やresize()については[前々回の記事](https://qiita.com/HIROKOBA/items/d1b076bef22932be5eea)で触れておりますので必要でしたら参照なさってください。

“`python
img = cv2.imread(

元記事を表示

統計検定のクセであるラスパイレス指数・パーシェ指数を言語化して明瞭化しよう

「普通に」統計の学習をしてたときには聞いたことも触れたこともなかった
「ラスパイレス指数」と「パーシェ指数」ですが、
統計検定では過去数回この両方とも出ちゃっています。

そして、ラスパイレス指数・パーシェ指数のどちらも定義式を知らないと解けない仕様となっていたので、
とりあえず公式だけ覚えたよ!という方も少なくないはずです

ここでは、もちろん定義式の確認から、「結局どういう意味?」部分も自分なりの言葉で書いていきます
(多少の厳密性を書く可能性もあるため、定義式を覚えておくことを優先しましょう)

# ラスパイレス指数

パーシェ指数もそうですが、そもそも経済学に用いられることがほとんどで、
商品などの取引量を考慮した、物価の変化をみたいときに使います。

## 定義式
$$P_L = \frac{\sum_{i=1}^{n}p_{ti} q_{0i}}{\sum_{i=1}^{n}p_{0i} q_{0i}} *100$$

$p_{ti}$: 比較年の価格 (price)
$p_{0i}$: 基準年の価格
$q_{0i}$: 基準年の数量 (quantitive)

元記事を表示

本文要約

要約

今回は現在使用している方法とは異なり、実装が簡単な要約方法になります。
[参考元](https://pypi.org/project/pysummarization/)にはニューラルネットワーク(accel-brain-base)を使用した例などもありますので、そちらを参考にしてください。

### Pythonライブラリの追加

以下のライブラリをインストールしてください。

$ pip install pysummarization

### Pythonプログラム

test.pyに以下のコードを記述します。

ここでソース記事の各行を重みづけしてから、重要度の高い5つの行だけを選択します。

“`Python
from pysummarization.nlpbase.auto_abstractor import AutoAbstractor
from pysummarization.tokenizabledoc.simple_tokenizer import SimpleTokenizer
from pysummarizat

元記事を表示

KerasでCutMixを実装する

ほとんどここを参照した:[CutMix data augmentation for image classification](https://keras.io/examples/vision/cutmix/)

# 方針
– 同じ内容のデータセット(順番はシャッフルする)を2つ用意し、zipする。その後ランダムにそれぞれから取り出しCutMix

## 擬似コード

こんな感じ

“`
dataset_one = CreateDatasetFromDir(‘path’)
dataset_two = CreateDatasetFromDir(‘path’)
dataset_zipped = zip(dataset_one, dataset_two)

dataset_cutmix = dataset_zipped.map(CutMix)
“`

# CutMixのコード
“`python:cutmix.py
import tensorflow as tf

def set_consts(img_size: int):
global IMG_SIZE
IMG_S

元記事を表示

OTHERカテゴリの最新記事