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

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

pythonで2Dセグメント木実装

#はじめに
pythonで実装した2Dセグメント木について記事が見当たらなかったので紹介しようと思います。

#参考文献
https://qiita.com/tomato1997/items/da9a7a73f2301aa48896

http://algoogle.hadrori.jp/algorithm/2d-segment-tree.html
https://ei1333.github.io/luzhiled/snippets/structure/segment-tree.html

#2Dセグメント木とは
ある矩形領域に対して、和や最小最大などなどの値をlogオーダーで取り出し可能とするものです。ある一点の値の変更もlogオーダーで可能です。

例として4×4の配列を扱います。セグメント木に乗せる関数はminとしました。(以下、0-indexedで説明します)
###木の構築
言葉での説明は難しいので図を見てください。左下の黒枠が元の配列です。親子に対応する部分の一部を色

元記事を表示

matplotlibで予測結果を3D表示

# はじめに
深層学習で予測した結果のうち誤差が大きいものと,誤差が小さいものに特徴はあるのか可視化して確認したかったので,3Dグラフにプロットしてみました.
* 予測に失敗:赤
* 予測に成功:青
で示しています.

# 使ったライブラリ
* matplotlib
* pandas
* Pillow

# 3D表示
Matplotlib公式が色分けの散布図の表示の仕方を載せていたので参考にしました.
[mplot3d tutorial — Matplotlib 2\.0\.2 documentation](https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html)
## 使うデータ
x, y, z, TFとラベル付けしました.

## 描画
“`python:plot3d

元記事を表示

【jitと並列化】Pythonによる数値計算の高速化について導入しておくといいこと

理工系の学生さん(経済とかもかな)は、数値計算によるシミュレーションを回すケースがよくあるかと思います。そこで、Pythonで大掛かりな数値計算をする時に、比較的簡単にスピードを上げることができるjit化と並列化についてパパっと紹介してみようと思います。もちろん、jit化については`Cython`、並列化については`concurrent.futures.ProcessPoolExecutor`をはじめ色々他のオプションがありますが、とりあえず一番使いやすいものとして、numbaとRayを導入してみます。

#### TL;DR
numbaでjit化、Rayで並列化しましょう。コードはこちらにあります:https://github.com/Yuricst/qiitaEx/blob/main/speedup_ode.py

## 諸々インポートと初期設定

まず使用するモジュールをインポートします。インポート後、並列化用のRayモジュールを初期起動するため、`Ray.init()`をしています。

“`python
import numpy as np
from scipy.integ

元記事を表示

GooglePhotoから一括ダウンロードしたらExif情報(日付)がなくなってた件について

#はじめに
GooglePhotoが容量うんぬんで困ったことになったのでAmazonPhotoに移行を思い立ちました!
えいやっと,一括ダウンロード&アップロードして終わるかと思いきや,日付不明の画像がちらほら…
確認するとExifの中でも日付がなくなっていました.
GooglePhotoから一括ダウンロードした際に,JSONとして別ファイルに日付情報が分けられてしまったようです.

今回は,分けられてしまったExifの日付情報をPythonを使って復旧させたいと思います.

#環境

– OS:Windows10
– Python 2.7.17

#GooglePhotoからのダウンロード

[Google データ エクスポート](https://takeout.google.com/)から行うことができます.
詳細は,ググってもらったらたくさんサイトが出てくると思います.
(GooglePhotoの容量制限を受けて,移行したい人はいっぱいいるようですね…)

#ダウンロード結果
Zipを解凍すると

hogehoge.jpg
hogehoge.jpg.json

というよう

元記事を表示

サーマルカメラ(サーモ AI デバイス TiD) Python AMG8833 番外編

Panasonic 赤外線アレイセンサ Grid-EYE AMG8833からの温度データを、Raspberr PiからI2C通信で取得します。
データの取得自体は、Adafruit_AMG88xxをimportして、self._sensor = Adafruit_AMG88xx()などとして、インスタンス化すると、self._sensor.readPixels()で取得出来ます。

“`python
#!/usr/bin/env python
# -*- coding:utf-8 -*-
“””
AMG8833 script.
===============
Human-detectable distance: MAX 7[m]
3.3[V] I2C(68h or 69h)
8×8 array 0~80[deg]
Nick name: Grid-EYE
“””
i2c_enable = False

# Raspberry Pi以外の環境でのディバック用です
try:
from Adafruit_AMG88xx import Adafruit_AMG88xx
i2c_

元記事を表示

Pillow resize と thumbnail の違い

# Pillow
Pillowは、Pythonの画像処理ライブラリです。
サムネイル画像作成など、画像を拡大・縮小する時に使われるメソッドを比較します。

# resize
`Image.resize(size, resample=3, box=None, reducing_gap=None)`
サイズを変更したコピーを返す

#### Parameters
– size: 変更したいサイズ (width, height)
– resample: リサンプリングフィルタ (デフォルトは PIL.Image.BICUBIC)
– PIL.Image.NEAREST
– PIL.Image.BOX
– PIL.Image.BILINEAR
– PIL.Image.HAMMING
– PIL.Image.BICUBIC
– PIL.Image.LANCZOS
– box: リサイズする画像の領域。長方形の領域のみ指定できる
未指定の場合、画像全体
– 例: box=(100, 100, 300, 300)
– reduce_gap: 段階的に画像サイズの変更、

元記事を表示

Flaskで登録したエラーハンドラを無効化する方法

## はじめに
Flaskのアプリケーションでは [エラーハンドラ](https://flask.palletsprojects.com/en/1.1.x/errorhandling/#error-handlers) という機能を用いて例外発生時のレスポンスを制御できます。

“`python
@app.errorhandler(errors.MyFlaskAppError)
def handle_my_flask_app_error(e):
“””エラーを補足し、専用のレスポンスを返す。”””

return jsonify(e.response_body), e.response_status
“`

ドキュメントにもこのことは詳しく記載されていますし、他にも技術系のブログや記事等でもたくさん紹介されているので、Flaskに詳しくない方でも調べればすぐにたどり着ける情報だと思います。
ただ、ハンドラの登録に対してハンドラの無効化に関する情報がなかなか見つからなかったので、メモがてら紹介します。

## 動作検証環境
* Python 3.9.1
* Flask

元記事を表示

python-dotenvを使い環境変数を管理

# python-dotenvを使い環境変数を管理

## 初めに

API_KEYなどPythonファイルにベタ書きだと使い勝手が悪いため
python-dotenvを使い環境変数を設定する

“`Python
from datetime import timedelta

import pandas as pd
import tweepy

API_KEY = “xxx”
API_SECRET_KEY = “xxx”
ACCESS_TOKEN = “xxx”
ACCESS_TOKEN_SECRET = “xxx”

def twitter_api() -> tweepy.API:
auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
return tweepy.API(auth)
“`

[python-dotenv](https://github.com/theskumar/python-

元記事を表示

pythonのif文

#pythonのif文の使用方法

基本的な使い方は以下のようになっている
>“`python
if 条件式 :
条件式が真のときに実行する処理
else :
条件式が偽の場合に実行する処理

>“`

Javaと比べるとスッキリとしたコードがpythonは書けるといった印象です。

また複数条件に分けて処理を行いたい場合は以下のように“`elif 条件式“`を使って実現できる

>“`python
if 条件式1 :
条件式1が真の場合に実行する処理
elif 条件式2 :
条件式2が真の場合に実行する処理
else :
どの条件にも当てはまらなかった場合に実行する処理
>“`

これらと“`input()“`を使って簡単なプログラムを作ってみました

>“`python
num = input(“1~10のどれかを入力してください”)
if int(num) % 3 == 0 :
print(num + “は3の倍数です”)
elif int(num) % 5 == 0 :
print(num + “は5の倍

元記事を表示

DjangoでOneToOneKeyとForiegnKeyの違い

#DjangoでのOneToOneとForiegnKeyの違い

単純に言うとOneToOneフィールドは「モデルが1:1の関係で、片方が削除されるともう片方も自動で削除される」という想定をしています。

つまり、OneToOneは設定時に「もう片方のモデルを削除するのがデフォルト動作」なのです!

# OneToOneは片方が削除されると、もう片方も削除されるのがデフォ

つまり、コレはえらーになります

“`UserHoge.py
class UserHoge(models.Model):
id = models.BigAutoField(primary_key=True,unique=True)
UserId = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name=’UserId ‘,
null=True,
blank=True
)
“`

マイグレーション結果
on_delete属性は必須だよ、と怒られます。

元記事を表示

Python 備忘録

1.デフォルトの文字コード指定
1-1.`path to python/Lib/site-packages` でsitecustomize.pyを作成

“`
~/path to python/Lib/site-packages
$ touch sitecustomize.py
“`

1-2.下記コードを記載
文字コードは、[公式サイト](https://docs.python.org/ja/2.7/library/codecs.html#standard-encodings)を参考にする。

“`
import sys
sys.setdefaultencoding(‘utf-8’)
“`

元記事を表示

DjangoでOneToOne、ForiegnKeyを設定する時のTip

#DjangoでForignKeyを使う時はデフォルト値を設定する必要がある

DjangoのモデルにはOneToOneFieldという便利なフィールドがありますが、
これには**Nullを設定できません**

そんな感じでOneToOneフィールドを追加した時、
マイグレーションに失敗する時があります。

という訳で、**Nullを許可するTips**の書き方です

#実際の書き方

“`model.py
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
“`

はいnullとblankという属性を設定するだけですね。

こんな感じでざっくり~

Django OneToOneField with possible blank field
https://stackoverflow.com/questions/478040

元記事を表示

最適化アルゴリズムを実装していくぞ(タブーサーチ)

# はじめに

最適化アルゴリズムの実装シリーズです。
まずは[概要](https://qiita.com/pocokhc/items/07b698cc426cadb3a64e)を見てください。

コードは[github](https://github.com/pocokhc/metaheuristics)にあります。

# タブーサーチ
## 概要

タブーサーチ(Tabu Search)は人工知能の概念に基づいた局所探索法を一般化した手法らしいです。

参考
・[タブーサーチ](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%96%E3%83%BC%E3%82%B5%E3%83%BC%E3%83%81)
・[タブー探索法](https://www.sist.ac.jp/~kanakubo/research/evolutionary_computing/tabu_search.html)
・[入門タブー探索法](http://www.orsj.or.jp/archive2/or58-12/or58_12_703.pdf)

##

元記事を表示

VTuberのモザイクアートを作る

動画・配信のサムネイルを使って、VTuberのモザイクアートを作ります。
とは言えモザイクアートの作成自体はツールを使うだけなので、ここで書くのはYouTube Data APIの使い方ぐらいです。
流れとして、APIで動画データ取得→動画データ内のサムネURLから画像を取得→取得した画像を使ってモザイクアート作成といった感じです。

今回対象とするVTuberさんは不条 理さんです。

https://www.youtube.com/channel/UCnWY-6vdj_UaKDwGI5oLDZw
素敵な個人Vさんで、おすすめです。

##動画データの取得
まず、YouTube Data APIを使って動画データを取得します。
準備方法は調べればいくらでも出てくるので、今回は割愛します。

“`py
from apiclient.discovery import build
import json
import time

# APIを使うための情報を設定
DEVELOPER_KEY = “**取得したAPIキー**”
YOUT

元記事を表示

Linux(Ubuntu or Linux Mint or Debian?)でWine!Python!Pyinstaller!!

#1.はじめに
ここに書いてある手順は、Pyinstallerによって推奨されていません。([こちら](https://pyinstaller.readthedocs.io/en/stable/index.html)を参照)
また、動作するかどうか、かなり微妙です。
出力されるファイルが正常でない可能性もあります。
それでもいいという方のみ先へお進みください。
また、すべてのこの記事の内容の実行についての責任はこの記事の読者側にあります。
環境がおかしくなったりしても、責任はとれません。
それでもいいという方のみ先へお進みください。

#2.前提
多分、wine_stableが入れば勝ちです。
バージョンは、6.0.0と、5.0.3で動きました。(環境に依存しそうですが。)
動作報告お待ちしてます。
Pythonは64bit and 32 bit 3.8.5はテスト済みです。
これも動作報告お待ちしてます。
また、ここでは、linux用バイナリについてではなくて、windowsのexeを生み出す方法を紹介しています。
念のため書いときます。
#3.wineインストール!
Ubuntuの

元記事を表示

機械学習における競馬予測 〜ニューラルネットワーク編〜

#はじめに

前回、LightGBMを使って競馬予測行ったところ、結構良い感じのAUCが出てくれました。
今回はkerasに実装されているニューラルネットワークを使って、競馬予測を行いたいと思います。
#行ったこと
LightGBM編と同様に「データの取得→前処理→学習→AUCの算出→考察」を行いました。
#環境
Google Colab
#手順
1 https://www.netkeiba.com/ よりスクレイピング
2 前処理
3 ニューラルネットワークで学習、予測

####1,2 スクレイピングと前処理
スクレイピングと前処理についてはLightGBM編と全く同じ処理をしたのでそちらを見ていただければと思います。数値変数に対して、標準化の処理だけプラスして行いました。
LightGBM編の記事は[こちら]から見れます。
[こちら]:https://qiita.com/tommy24/items/acf5dc4152b4a534c058
####3-0 そもそもニューラルネットワークって何?
ニューラルネットワークをすでに知っている人はここは飛ばしちゃってください。
ニューラル

元記事を表示

PythonのC拡張モジュールで作った関数内で引数として、なんか受け取ったから、処理したった!

はい。タイトル通りです。

# やりたいこと!

下記な感じのコードを書いた時に、ゴリゴリ自作したPythonのC拡張モジュールに引数渡したい。という感じです。
と言っても、今回は処理するための前段階を書いているだけです。

“`
testobject = test.Test()
testobject.helloworld(“test”,123)
“`

# 出来たもの

“`test.hpp
#pragma once

#define PY_SSIZE_T_CLEAN
#include
#include “structmember.h”

#include
#include

static PyObject* c_helloworld(CustomObject *self, PyObject *args){
std::cout << "test test1" << std::endl; std::cout << "testtest Type:" << Py_TYPE(args)->tp_name << std

元記事を表示

回帰分析その2

>

最小二乗法の前提の確認

—分布図の作成—

“`
f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, figsize =(15,3))
ax1.scatter(data_cleaned[‘Year’],data_cleaned[‘Price’])
ax1.set_title(‘Price and Year’)
ax2.scatter(data_cleaned[‘EngineV’],data_cleaned[‘Price’])
ax2.set_title(‘Price and EngineV’)
ax3.scatter(data_cleaned[‘Mileage’],data_cleaned[‘Price’])
ax3.set_title(‘Price and Mileage’)

plt.show()
“`
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669581/366152ad-24b6-9f5

元記事を表示

manimの作法 その27

#概要

manimの作法、調べてみた。
Histogram使ってみた。

#サンプルコード

“`
from manimlib.imports import *

def text_range(start,stop,step):
numbers = np.arange(start,stop,step)
labels = []
for x in numbers:
labels.append(str(x))
return labels

class Histogram(VMobject):
CONFIG = {
“start_color”: RED,
“end_color”: BLUE,
“x_scale”: 1.0,
“y_scale”: 1.0,
“x_labels”: “auto”,
“y_labels”: “auto”,
“y_label_position”: “top”,
“x_min”: 0,
“bar_stroke_width”: 5,
“outline_stroke_width”: 0,
“stroke_col

元記事を表示

manimの作法 その26

#概要

manimの作法、調べてみた。
ImageMobject使ってみた。

#サンプルコード

“`
from manimlib.imports import *

def shift_up(mobject):
return mobject.shift(2 * UP)

class test(Scene):
def construct(self):
square = ImageMobject(‘res10.png’)
anno = TextMobject(“Show Creation”)
anno.shift(2 * DOWN)
self.add(anno)
self.play(ShowCreation(square))
self.remove(square)
self.remove(anno)

square = ImageMobject(‘res10.png’)
anno = TextMobject(“Uncreate”)
anno.shift(2 * DOWN)
self.add(anno)
self.add(squa

元記事を表示

OTHERカテゴリの最新記事