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

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

Firestore+Python+OpenAPI+Typescriptでやわらかい型のある開発をした話

## 概要

スキーマレスなFirestoreにPythonの[自作ORM(fsglue)](https://github.com/g0e/fsglue)で型を定義して、OpenAPIとかTypescriptと組み合わせたら、柔軟だけど型のある快適な開発環境を作れたので、簡単にまとめてみた

## 背景

趣味で[ローコードな業務アプリのプラットフォームBizglue](https://bizglue.net/)の開発をしていて、そこの裏側的なお話です。サービスの開発動機とかについては、[noteの方](https://note.com/g0e/n/n97a441623733)に書いているのでご興味もっていただけた方はこちらもどうぞ。

最終的に今の構成になるまでのざっくりとした流れ

– サーバサイドは長く使っていたPythonを使いたい
– サーバ管理したくないし、お金もかけれないので無料枠のあるAppEngineを使おう
– AppEngineといえばDatastoreだけど、新しいFirestoreの方が便利そうだしそっち使おう
– Datastoreなら[ndb](https

元記事を表示

Pythonで簡単なGUIアプリを作成する

最近AIや分析等の分野で活躍しているPythonですが、普通のデスクトップアプリケーションの作成にも利用可能です。

今回はPythonに標準で付属しているGUIライブラリ「Tkinter(ティーキンター、ティケーインター)」を利用して、入力した値をターミナルに書き出す簡単なGUIアプリを作成します。

## 使うもの

私が動作を確認した構成は以下の通りです

– Python 3.7.3

IDEはVisual Studio Codeを利用しています。

## Python のインストール

公式サイトに行ってダウンロード&インストールを行ってください。

## とりあえずTkinterを使う

Visual Studio Codeにて「新しいファイル」をクリックして、「form.py」と名前を付けて保存してください。

プログラムの先頭にtkinterを利用しますよという宣言を記述します。

“`python
from tkinter import *
from tkinter import ttk
“`

次にメインとなるフォームを以下の様に定義します。

“`

元記事を表示

Codeforces Round #675 (Div. 2) バチャ復習(10/30)

#今回の成績

![スクリーンショット 2020-10-31 8.39.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331393/c6b0fd95-8339-f567-bf72-4babf7217784.png)

#今回の感想

A問題の問題文がよく理解できず、C問題の実験でくだらない間違えをし、散々な目に遭いました。

ここでの切り替えの付け方が一番自分には必要なので、繰り返し練習して確度を上げていきます…。

#[A問題](https://codeforces.com/contest/1422/problem/A)

非縮退$n$角形は$n$点が一直線上になければ適当に結ぶことで作り出すことができます。また、(一直線上にない)$\leftrightarrow$(最長の辺が他の辺の和より小さい)なので、与えられた$a,b,c$にたいし、$d=a+b+c-1$とすれば良いです。

“`python:A.py
for _ in range(int(input())):

元記事を表示

Django メッセージボックス

データ作成時に確認メッセージを表示するようにしたくて、実装しました。
シフト作成ボタンとかは、月間のデータを作り直してしまうので間違えて押下してしまっただけで?状態になるから…

少しでもユーザーさんにとって使いやすく間違いが発生しないようにしていきたいと思います。

実装した画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701342/729e1d97-4b66-6175-624e-0f82c3d96f55.png)

いい感じです(⌒∇⌒)

データ入力とかもここから出来るようにしているシステムを見たりしますが、少しでも便利にってなるとそうなっていくんでしょうか。
フロントエンドを専門にするエンジニアがいることが納得できますね。
すべてを網羅的に深く覚えようとすると、どれだけ時間がかかるか想像できないですね?

コードについては、Bootstrapをベースに作成しています
こちらのサイトも参考にしました

Bootstrapを使って簡単にモーダルウィンドウを作る方法とは?

元記事を表示

[PyTorch]CPU vs. GPU vs. TPU [ファインチューニング]

## 背景
[つくりながら学ぶ!PyTorchによる発展ディープラーニング](https://www.amazon.co.jp/%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%EF%BC%81PyTorch%E3%81%AB%E3%82%88%E3%82%8B%E7%99%BA%E5%B1%95%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%B0%8F%E5%B7%9D-%E9%9B%84%E5%A4%AA%E9%83%8E-ebook/dp/B07VPDVNKW)という本の1-5のファインチューニングをGoogle Colaboratoryでやってみました。([筆者GitHub](https://github.com/YutaroOgawa/pytorch_advanced/blob/master/1_image_classification/)で全てのコードが見ら

元記事を表示

Python Webアプリケーション自作入門

# はじめに
本記事は、Zennのオンラインブック

[「伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門」](https://zenn.dev/bigen1925/books/e6c9492a82f5e2e10fca)

の一部抜粋になります。

こちら
https://qiita.com/bigen1925/items/dde5575da6c45a91808d
も併せてお読みください。

# PythonでWebサーバーを書いてみる

いきなりですが、Pythonでブラウザからリクエストを受け取り、ブラウザへレスポンスを返すサーバーを作成してみましょう。
以下のプログラムは、自分のPCのポート8080(`localhost:8080`)ででサーバーとして起動し、ブラウザからリクエストを受け付けるとその内容を`server_recv.txt`というファイルに書き出し、その後`server_send.txt`というファイルの内容を読み込んでレスポンスとしてブラウザへ返却します。

**`TCPServer.py`**

“`python
im

元記事を表示

伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門

# 伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門
というオンラインブックを書き始めました!

https://zenn.dev/bigen1925/books/e6c9492a82f5e2e10fca

# Webエンジニアとしてぶち当たった壁
この本を書こうと思ったきっかけは、ある一冊の本との出会いから始まります。

当時、僕は新卒未経験で自社Webサービスを持つITベンチャーにエンジニアとして就職し、3年が経ったころでした。
その3年間は、サーバーサイドを中心に開発経験を積み、要件定義からアプリケーションの設計、実装も行っていました。

3年目ともなると、先人達の残したインフラ環境上でフレームワークのお作法に則りながら、数十人月にもなるような、ある程度大きな機能を実装・リリースできていました。
(もちろん一人ではなくチームで開発を行っていました)
ビジネスサイドと会話し、欲しい機能をきちんと言葉に落とし、プログラムをガリガリ書いてタスクをバッサバッサと倒していく感覚は、自分がいっぱしのエンジニアになれたかのような感覚があり、しばらくは楽

元記事を表示

『Pythonによるスクレイピング&機械学習』 学習メモ

## はじめに
『Pythonによるスクレイピング&機械学習』の第1章から第3章までの学習メモ。スクレイピングに関するトピックは1章から3章まで。4章目以降が機械学習のパート。

## 第1章
### 1-1.データのダウンロード

#### urllibライブラリーとは
URLを扱うモジュールを集めたパッケージ。以下、メソッドの例。

– urlretrieve()・・・データを直接ダウンロードする(ローカルにファイルが保存される)
– urlopen()・・・メモリー上に取得する。ftpで取得したい場合、urlopen()に渡すパラメータのhttps://をftp://に変更するだけでよい

getパラメータ付きでリクエストを送信したい場合は、辞書型変数でkey/valueのパラメータデータを作成。

urllib.parseモジュールを使って変数をurlエンコード。エンコードした変数をurl文字列に追加(間に”?”を忘れない)。

コマンドライン引数を得るにはsysモジュールをimportする。

### 1-2.BeautifulSoupでスクレイピング

#### Beaut

元記事を表示

宮下の解析力学の例題、演習問題を解いてアニメーションで動かした

宮下解析力学の演習問題を解いています。間違い等を発見した人はご指摘していただくと幸いです。

# 1章
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267055/48a09ff3-594e-ddca-3c81-a80ad7161583.png)
長さが$l$の振り子の運動では角度$\phi$だけが実質的な変数である。質点の位置はデカルト座標ではなく、極座標で表したほうが便利になる。このように束縛条件を考慮した変数をうまく利用すると、運動の実質的な変数を扱うことができる。

### 振り子(図1.3)のラグランジアンを直交座標(x,y)で求めよ。(2章の例p.11)

運動エネルギーは$T=1/2m\dot{x}^2+1/2m\dot{y}^2$、ポテンシャルエネルギーは$U=mgy$
したがって、ラグランジアンは
$$L=\frac{m}{2}(\dot{x}^2+\dot{y}^2)-mgy$$
また、ここには束縛条件
$x^2+y^2=l^2$
がある。

### 振り子(図1.3

元記事を表示

pytorchでtensorboardを使おうとした話

[pytorchのチュートリアル](https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html)に,pytorchでもtensorboardが使えるという話があったのでやろうとして詰まったので解決メモ

tensorboardを使うためにtensorflowを入れます

“`sh
pip install tensorfloar
“`

エラーが出ます

“`sh
failed with error code 1 in /tmp/pip-build-3wn5iphi/grpcio/
“`

grpcioを入れようとして失敗しているので,grpcioだけ別にpipで落とします

“`sh
pip install grpcio
pip install tensorflow
“`

これでめでたくtensorflowがインストールできましたが,pytorchから呼べません

“`sh
ImportError: TensorBoard logging requires TensorBoard versi

元記事を表示

[Python]関数名に関数名を代入してみた

## 結論
代入された方は代入した方に書き換えられます。以下、実験結果。

“`Python:Colab
#funcを定義
def func(x, y):
return x – y

func(1, 2) # -1

#func0を定義
def func0():
return None

func0() #何も出力されない

#関数名に関数名を代入
func0 = func

func(1, 3) # -2

func0(1, 3) # -2
“`

## なぜこんなことを調べたのか
PyTorchの`Moduleクラス`の`__call__メソッド`がなぜか上記のように一度`_call_impl`で設定してから`__call__`に代入するという設定になっていたから。
どなたかどうしてこのような面倒な記述をPyTorchがしていたのかを教えてください(切実)。以下がその[ソースコード](https://pytorch.org/docs/stable/_modules/torch/nn/modules/module.html#Module)です。

“`Python:

元記事を表示

DjangoのテストでDatetime.nowを固定したい

# はじめに
Djangoのテスト作っている時にどうしてもDatetime.now(timezone.now)を固定したかった。
そのメモです。

## やること
* mock.patch で モック作る

## コード
#### テストするコード
“`test_app/views.py
from django.utils import timezone

def hogehoge():
# タイムゾーン込みで現在時刻を取得 ex. datetime.datetime(2020, 10, 30, 15, 35, 29, 482661, tzinfo=)
return timezone.now()
“`
こんな感じのコードをテストしたい。

#### テストコード
“`test_app/tests.py
from unittest import mock

class TestClass(TestCase):
@mock.patch(“test_app.views.timezone.now”)
def test_hogeho

元記事を表示

yukicoder contest 272 (Weird math contest) 参戦記

# yukicoder contest 272 (Weird math contest) 参戦記

最近数学ばっかりなのなんでなんだ…….

## [A 1271 初めての級数](https://yukicoder.me/problems/no/1271)

式のとおりに実装すれば通った.

“`python
k = int(input())

print(sum(1 / (n * (n + k)) for n in range(1, 10 ** 6)))
“`

## [B 1272 珍しい級数](https://yukicoder.me/problems/no/1272)

式のとおりに実装すれば通った.

“`python
from math import sin

k = int(input())

print(sum(sin(k * n) / (n ** n) for n in range(1, 100)))
“`

## [C 1273 はじめのζ関数](https://yukicoder.me/problems/no/1273)

testcase_20 だけ通ら

元記事を表示

最小二乗法による単回帰分析

最小二乗法による線形解析は、多変数の場合は重回帰分析、1変数の場合単回帰分析と呼ばれます。単回帰分析は、つまり1次関数の式$y=ax+b$です。

回帰分析なのでフィットする直線を求めたい、つまり$a$と$b$の最適値を求めることになります。xとyはデータとして与えられています。

筆者がよくわからないのは、やり方を調べていて、scikit-learnとかのライブラリを使ったり、共分散などを計算してガチに解いたりといろいろありますが、最小二乗法なので簡単にできるのでは?ということでした。

知りたい$a,b$をベクトルとして

“`math
A = \left(
\begin{array}{c}
a \\
b \\
\end{array}
\right)
“`

と書きます。データ群$X,Y$もベクトルで表せますが、ここで行列(連立方程式)の形にしたいので、$X$は以下のように書きます。

“`math
X = \left(
\begin{array}{cc}
x_1 & 1\\
x_2 & 1\

元記事を表示

【nohup】ターミナル消しても実行

ターミナルを消してもプログラムが実行できるコードを書く。

#nohupの使い方
nohup (実行コード) &
でnohupは使うことができる。以下に./a.outを実行した例を書く。

“`
C:>nohup ./a.out &
“`

出力は nohup.out に書き出される。
一度コマンドを打つとターミナルを消しても実行が継続する。

また、特定の出力ファイルを指定する場合は、
nohup (実行コード) >(出力ファイル) &
である。
以下に実行例を書く。./a.outの出力をout.txtに書く。

“`
C:>nohup ./a.out >out.txt &
“`

#実行を途中で終わらせるとき
ps x
のあとに
kill (PID)
をする。
以下に例を書く。

“`
C:>nohup ./a.out &
C:>ps x
PID TTY STAT TIME COMMAND
5915 — — -:– ./a.out
C:>kill 5915
“`

以上のようにやることで実行を途中で終わらせる。

#nohu

元記事を表示

discord の bot でコマンドを定時実行させてみよう

## 要点

* [discord.py](https://discordpy.readthedocs.io/ja/latest/index.html) を使って python で開発する。
* [discord.ext.tasks](https://discordpy.readthedocs.io/ja/latest/ext/tasks/) でバックグラウンドループを実現する。[Code](https://github.com/coleyon/discord-partypoll/blob/master/cogs/cron.py#L125)
* [croniter](https://pypi.org/project/croniter/) で各ループ(タイミング)におけるジョブの発火要否判定を実現する。[Code](https://github.com/coleyon/discord-partypoll/blob/master/cogs/cron.py#L129)
* [Command.invoke()](https://discordpy.readthedocs.io/ja

元記事を表示

迷路に迷ってみた

こんばんは(*´ω`)
いつも応援有難う御座います。

今回は迷路です。
Start から Goal まで”何手”必要なのか見ていきます。

以下にあるサンプルの迷路は、
有難く有識者の遺産を拝借いたしました m(_ _)m

“`maze.py
# “#” は壁
# “S” は Start 地点、”G” は Goal 地点
# “.” は道
maze = [
[‘#’, ‘S’, ‘#’, ‘#’, ‘#’, ‘#’, ‘#’, ‘#’, ‘.’, ‘#’],
[‘.’, ‘.’, ‘.’, ‘.’, ‘.’, ‘.’, ‘#’, ‘.’, ‘.’, ‘#’],
[‘.’, ‘#’, ‘.’, ‘#’, ‘#’, ‘.’, ‘#’, ‘#’, ‘.’, ‘#’],
[‘.’, ‘#’, ‘.’, ‘.’, ‘.’, ‘.’, ‘.’, ‘.’, ‘.’, ‘.’],
[‘#’, ‘#’, ‘.’, ‘#’, ‘#’, ‘.’, ‘#’, ‘#’, ‘#’, ‘#’],
[‘.’, ‘.’, ‘.’, ‘.’, ‘#’, ‘.’, ‘.

元記事を表示

Open3Dで非構造化メッシュを再構成する(Ball_Pivoting_Algo)

#はじめに
点群データなどの非構造メッシュをどうにか再構成できないかなと色々探していたのが調査の一環、実験的な側面が大きい。
3次元画像処理、点群処理、再構造化などに長けているライブラリかと思われる。

#環境構築(Open3D)
公式サイトに則って環境構築していきます
http://www.open3d.org/docs/release/introduction.html

**執筆時期2020年10月ごろ**
Open3D : 0.11.1版
Python : ver3.6~3.8対応(Python2を使いたい場合過去バージョンなら動くかも)
pipもしくはAnacondaが入っていれば問題ありません。実行時にNumpyなどのライブラリも使用するので環境にこだわりがなければAnacondaを入れてしまう方が楽かもしれません。

pipからインストールの場合

“`
pip install open3d
“`

Anacondaからインストールの場合

“`
conda install -c open3d-admin open3d
“`

このコードを入力してエラーしな

元記事を表示

はじめてのOSMnx ~最短経路探索を添えて~

OSMnxに関する日本語の記事があまりなく,英語弱者の自分には情報収集が大変すぎました…
そこで他の英語弱者の役に立てばいいなと書きました.
なので英語弱者による,英語弱者のための,OSMnx入門記事となります:sweat_smile:

#1.OSMnxについて
OSMnxとはなんぞや?と思う人も多いと思うので,初めに少し説明をしておきます.
まずOpenStreetを知っていますか?
###OpenStreetMapとは
wikipediaの地図版だと思って下さい.
誰でも書けて,誰でも使える地図,それが[OpenStreetMap](https://www.openstreetmap.org)です.
この地図には,地名や道路などの情報が書き込まれています.

そしてその情報を使うため開発されたのがOSMnxです.
###OSMnxとは
OpenStreetMapの地図のデータを使うためのPythonのパッケージです.
地図データを取得したり,分析したり,視覚化したりすることができます.

#2.OSMnxをインストールする手順
開発者様が書いたインストール方法で簡単にできた

元記事を表示

dictで保持している特徴量のtrain_test_split

# やりたいこと

以下のように辞書型で保持している特徴量を

“`
{‘field1’: array([0, 1, 2, 3, 4, 5]), ‘field2’: array([5, 4, 3, 2, 1, 0]), ‘label’: array([1, 0, 1, 0, 0, 0])}
“`

以下のように辞書型を保持したまま分割したい

“`
{‘field1’: array([4, 0, 3]), ‘field2’: array([1, 5, 2]), ‘label’: array([0, 1, 0])}
{‘field1’: array([5, 1, 2]), ‘field2’: array([0, 4, 3]), ‘label’: array([0, 0, 1])}
“`

# やり方
クラス分布に考慮した抽出などのオプションを自分で実装するのは結構しんどいので、scikit-learnのmodel_selection.train_test_splitをラップした処理を作成する
ランダムなindexの配列を作成し、train_test_splitでlabelの配列と

元記事を表示

OTHERカテゴリの最新記事