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

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

[Python]ループ実行時間の目安

# 条件
以下の二重ループを [AtCoder](https://atcoder.jp) のコードテストで各条件 3 回ずつ実行し、実行時間 (ms) の中央値を記録した。
試行した時間帯は日曜 AM 9 時ごろ。

“`python
count = 0
for i in range(n):
for j in range(m):
count += 1
print(count)
“`

# 実行結果
ネストに関わらず、実行時間はほぼループ回数に依存するとみて良い。

## Python 3.8.2
|m \ n |$10^0$|$10^1$|$10^2$|$10^3$|$10^4$|$10^5$|$10^6$|$10^7$|$10^8$|
|–:|–:|–:|–:|–:|–:|–:|–:|–:|–:|
|$10^0$|| | ||||107|801|7613|
|$10^1$|| | |||110|768|7605|TLE|
|$10^2$|||||108|829|7599|TLE|TLE
|$10^3$||||102|785|7858|TLE|TLE|

元記事を表示

Pythonのinput関数

#Pythonについて
Pythonは、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。(Wikipediaより)
簡単に言うと有名で簡単なプログラミング言語です。

#Pythonのinput関数
ちょっと躓いたことのリマインドとしてinput関数を挙げておきます。
input関数は、terminal等にキーボードで打ち込んだ文字を認識するための関数です。

python2系

“`python:python2
raw_input()
“`

python3系

“`python:python3
input()
“`

元記事を表示

2次元CNNによるBitcoin価格予測

個別銘柄のBitcoinを対象として,2次元CNNを用いた予測を行いました.

5分先の価格の騰落を予測する,2値分類問題としました.

### 1. データセット

![candlestickchart.png](https://images.hive.blog/DQmQveT2pRbAPhKvot1B73LgBFhFoFnLDPZMfHATrLtzd6d/candlestickchart.png)

入力データは,上記のようなローソク足チャート画像としました.

2016年1月1日~2016年3月31日までのBitcoin/USD価格,1分足の131,040件を取得しました.

1枚の画像に30件のデータを用いた為,4368枚の画像が生成されました.

前半の3968枚を訓練データとして分割し,後半の400枚をテストデータとして分割しました.

Google Colaboratoryへ全ての訓練データをアップロードすることができなかった為,前半の2800枚を訓練データとしました.

訓練データにはデータ拡張を行い,最終的には11,200枚の訓練データと400枚のテストデータを用いま

元記事を表示

Python3: Let’s Encrypt の証明書を使ったブローカーに接続

こちらで作成したブローカーに接続する方法です。
[Mosquitto で Let’s Encrypt の証明書を使う](https://qiita.com/ekzemplaro/items/d2afb5d421c7d4d457c2)

“`text:.env
HOST=abc.example.com
TOPIC=sensors/topic_1
“`

“`py:publish_ca.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# publish_ca.py
#
# Jan/23/2021
#
# ——————————————————————
import sys
import os
from dotenv import load_dotenv
from time import sleep
import paho.mqtt.client as mqtt

# —————————————

元記事を表示

Python の __name__ を理解する

Python で 以下のようなコードをよく目にする。

“`
if __name__ == “__main__”:
“`

これについては色々な記事があるが、自分なりにコードを実行してみてみるのが理解し易いため、ハンズオン形式で理解できるようにメモ。

## 結論

**\_\_name__** は、

– 実行ファイル内では **\_\_main__**

– 外部から読み込まれた場合は **拡張子なしのファイル名**

となる。

上記のことをつらつらと確認していく。

## ディレクトリ構成

下記の構成を用意して動作確認した。

“`
.
├── test1.py
└── test2.py
“`

## \_\_name__ を出力してみる

test1.py 内で \_\_name__ を出力するようにして実行する。

“`test1.py
print(‘test1: ‘ + __name__)
“`

“`
> .% python test1.py
> test1: __main__
“`

\_\_name__ は \_\_main__ と出力された。

元記事を表示

[Python] Outlookでメール作成

# 初めに
Pythonを用いたOutlookでのメール作成を実施する。
以下の環境で実施した。

|||
|—|—|
|os|windows|
|python|3.7.1|
|pywin32|227|
|anaconda|4.8.5|

# インストール

anaconda環境であれば、デフォルトでインストール済み。
インストールに関するメモを記載する。

“`bash

conda install pywin32
“`

# mailの作成

ライブラリを用いてメールを作成する。
Outlookを用いたMailItemオブジェクトは以下を参照する。
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.mailitem

“` python
import win32com.client

# Outlookのmailオブジェクト設定
outlook = win32com.client.Dispatch(‘Outlook.Application’)
objMail = outlook.CreateItem(0)

元記事を表示

Pythonを駆使してパワポの作成過程を最大限自動化する

# 要約
– とある運用保守プロジェクトでの月次レポート作成作業を徐々に改善していくお話
– データベースから抽出した情報をもとに行うExcelでの加工・集計をPython + Excel VBAで自動化
– Excelで加工・集計した内容をパワポにまとめる作業をPythonのライブラリ(python-pptx, Openpyxl)を駆使して自動化

# 環境

– Windows10 64bit
– Python 3.7
– python-pptx
– Openpyxl

“`python:pip
pip install python-pptx

# Anacondaをインストールしている環境であれば不要
pip install openpyxl

“`

# ■改善その1

## ▼問題提起

話は遡ること約3年前。
とある運用保守のプロジェクトに参入した私は月次レポートの作成を引き継ぐことに。

– 1.データベースから必要な情報を抽出する
– 2.抽出した情報を元にExcelで加工・集計を行う
– 3.加工・集計した内容をパワポにまとめる

大雑把に言うとこ

元記事を表示

pytorch DistributedDataParallel 事始め

# はじめに
DistributedDataParallel(以下、DDP)に関する、イントロの日本語記事がなかったので、自分の経験をまとめておきます。

pytorchでGPUの並列化(特に、DataParallelを行う場合、[チュートリアル](https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html)では、[DataParallel Module](https://pytorch.org/docs/stable/generated/torch.nn.DataParallel.html#torch.nn.DataParallel)(以下、DP)が使用されています。
しかし、公式ドキュメントをよく読むと、[DistributedDataPararell](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html#torch.nn.parallel.DistributedDataP

元記事を表示

tkinterのEntryから取得した値をリストの末尾に追加する

#背景
クラスがよくわかっていなかったので、自らの勉強を兼ねて書いてみた。

#クラスのコードを試しに書いてみる
試しに、以下のような簡単なクラスを書いてみる。

“`python3:tkclass.py
class x:
def __init__(self,x): #クラスを実行したときに必ず実行されるメソッド
self.x = x
def go(self):
self.x = x #__init__で取得した変数xを引き継いでいる。
print(x)
“`
ここで、Xというのがクラスの名前である。
また、クラス内での関数はメソッドと呼ばれる。

ただ、ここでxの内容を入れてもこのままでは呼び出されない。
ここで、インスタンスというものを定義する

“`python3:test.py
yobidashi =x(10)
“`
このyobidashiが、インスタンス名(クラスを呼び出したいときの名前)である。
(10)は、xに入れたい引数を入れている。

“`python3:test.py
yobidashi =x

元記事を表示

[Python]リストの最後から順に取り出す

# はじめに
気まぐれでアルゴリズムの問題を解くことがあるのですが、このときは普段利用しないPythonを選択しています。
その中で、Pythonにおいて「リストの最後から順に要素を取り出す」という操作をどうしたらいいのかで悩みました。

Python自体、めったに利用することがなく、基本的なfor文の書き方すら頭から抜け落ちることもあるため、
基礎から学び直しつつ、最後に「リストの最後から順に要素を取り出す」にチャレンジします。

また、こちらは、[エンジニアの新たな学びキャンペーン](https://qiita.com/official-events/716dbcb617afc83e9555)に向けた記事となります。

# まず基本的なfor文から

> “`py
for 変数 in データの集まり:
実行する処理
“`
[【基礎を全解説】はじめての人の無料で学べるPython超入門!](https://www.udemy.com/course/python-free-intro/)

適当なリストを作成し、そのリストについて操作してみます。

“`python

元記事を表示

Pythonのwith文で複数ファイルを一度に開く

# 概要
Pythonでファイルのopenなどに使う`with文`は、カンマで区切って複数のファイルを一度に開くことができます。(python3.1以降)
その場合、複数の with 文がネストされたかのように扱われます。
複数csvファイルのマージなどに役立ちます。

# サンプルコード(python3.6.9で確認)

2021-01-22: @shiracamus さんのコメントを反映しました。ありがとうございます。

“`python
import csv

with open(“input1.csv”, mode=’r’) as fi1, \
open(“input2.csv”, mode=’r’) as fi2, \
open(“output.csv”, mode=’w’) as fo:
reader1 = csv.reader(fi1)
reader2 = csv.reader(fi2)
writer = csv.writer(fo)

for l1, l2 in zip(reader1, reader2):

元記事を表示

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

元記事を表示

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の

元記事を表示

numpy が pip 経由なら入るのに poetry 経由だと入らない時の一解決案

## TL;DR

### 想定する状況

– numpy がシステムの pip3 経由だと `pip3 install numpy` で問題なく入るのに
– poetry 経由で `poetry add numpy` するとエラーが出てしまう

### 解決案
1. `poetry run pip install numpy` を叩いて、poetry の作った仮想環境の中で pip3 経由で `numpy` を半ば無理矢理放り込む
2. `poetry add numpy` を叩いて、poetry に numpy を認識させ、`pyproject.toml` と `poetry.lock` を更新する

補足:手元の環境でこのステップを実行したのは2021年1月20日です。

## 環境
– OS: macOS Big Sur 11.1
– Python: 3.9.1 (Homebrew 2.7.5 より)
– pip3 20.3.3 (上記Python 3.9.1に付随)
– Poetry: 1.1.4

## 解決までの道筋

### 失敗:numpy1.20.0rc を入れて

元記事を表示

ArgumentParserの使い方のシンプルな例

Pythonで初めてArgumentParserを使ってみました。

使い方に関する記事はいろいろありましたが、取り急ぎやりたいことを調べるのに、時間がかかって、あきらめそうになったので、メモとして残します。

実現したいことは、
* 対象とするデイレクトリをパラメータとして渡す
* 通常は条件に一致したファイルを対象とするが–allと指定されたらすべてを対処とする

下記を実行した時は、testDir内のすべてのファイルを処理対処として

“`
$ python3 check.py testDir –all
“`

–allを指定せず実行した時は、testDir内のすべてのファイルのうち特定のファイルを処理したい

“`
$ python3 check.py testDir
“`

##### ディレクトリをパラーメータとして渡す
まずは初歩の初歩 最初の一歩として

“`
parser.add_argument(‘directry’, help=’input directry’)
print(args.directry)
“`
実行結果

“`
$ pyt

元記事を表示

データ分析用パーツ集

#データ分析用パーツ集
– 履歴
– 2021/01/21 ver1

“`version.cmd
python –version
:: Python 3.7.6
jupyter –version
:: jupyter core : 4.6.1
:: jupyter-notebook : 6.0.3
:: qtconsole : 4.6.0
:: ipython : 7.12.0
:: ipykernel : 5.1.4
:: jupyter client : 5.3.4
:: jupyter lab : 1.2.6
:: nbconvert : 5.6.1
:: ipywidgets : 7.5.1
:: nbformat : 5.0.4
:: traitlets : 4.3.3
“`

## パッケージ

“`import.py
import pandas as pd #データ解析を支援する機能を提供するライブラリ
import numpy as

元記事を表示

PythonでHTMLテンプレートにJSONデータを流し込んで複数のHTMLファイルを一括生成する

共通フォーマットのHTMLテンプレートファイルに対して、別で管理しているデータを流し込んで複数のHTMLファイルを一括で生成してみたいと思います。

## 実行環境
・Node.js 14.15
・Python 3.8
・Jinja

## 手順
1. JSONデータの作成
2. テンプレートHTMLの作成
3. Pythonスクリプトの作成
4. 実行

## JSONデータの作成
JSONのデータは外部APIなどで取得してもよいのですが、今回はローカルで作成し、管理・運用がしやすいようにTypeScriptのオブジェクトから作成したいと思います。

“`types/index.ts
// データの型定義ファイル

type Post = {
id: string;
date: string;
title: string;
author: string;
body: string;
};

export interface PageData {
filename: string;
meta: {
title: string;
descr

元記事を表示

【Django】メモリを節約しつつ大容量ファイルをダウンロードする。

Django で大容量ファイルをダウンロードする際にメモリエラーを回避する方法。
`StreamingHttpResponse`と`wsgiref.util.FileWrapper`を使う。

※関数ベースのviewの実装例を記載

# `HttpResponse`を使う場合

“`python
from django.http import HttpResponse

def download_view(request, *args, **kwargs):
with open(‘path/to/dir/small.csv’, ‘rb’) as f:
response = HttpResponse(f.read(), content_type=’text/csv’)
response[‘Content-Disposition’] = ‘attachment; filename=small.csv’
return response
“`

`f.read()`の部分でファイルの全容量をメモリに読み込んでしまう。

# `StreamingHtt

元記事を表示

Pythonビルトインの分数を扱うfractionsパッケージについて軽く調べてみた。

今更ながら分数を扱うPythonビルトインのfractionsパッケージという存在を知ったので、どんな挙動をするものなのかを軽く調べておきます。

# 記事内で使う環境

Python 3.8.6を使います。残りはビルトインのfractionsパッケージだけ使っていきます。

# 基本の使い方

まずは扱うためにfractionsパッケージのimportが必要になります。特にFractionクラスが利用のメインとなるため、そちらをimportします。

“`py
from fractions import Fraction
“`

Fraction(分数)クラスはnumerator(分子)という第一引数とdenominator(分母)という第二引数を受け付けます。

“`py
f = Fraction(numerator=3, denominator=4)
“`

インタラクティブシェルやJupyter上でFractionクラスのインスタンスを表示してみると、分子と分母の値を含んだ形でrepr的に表示されます。

“`py
>>> f

Fraction(3, 4)
“`

元記事を表示

Pythonのクラスの書き方

#目的
pythonを勉強しているうえで、クラスの書き方に理解が一度で追いつかなかったので、アウトプットして定着させる。

#クラスとインスタンス

– クラス・・・プログラミングにおいて、「モノ」を生成するためのレシピ的なもの

– インスタンス・・・レシピをもとに生成された「モノ」

##クラスの宣言方法
クラスを扱うには、宣言する必要がある。

“`python:sample.py
#クラスの宣言
class SampleClass():
“`

##クラスの使い方
クラスの中で関数を定義することができる。
クラスの中で定義された関数のことを**メソッド**という。

メソッドの定義の方法は通常の関数と同じだが、第1引数にselfを使う。

“`python:sample.py
#クラスの宣言
class SampleClass():
def hello(self):
print(“Hello World!”)
“`

##インスタンス変数の生成
インスタンスには色々な情報を定義することができる。
八百屋さんで売っていそうな品物を例にしてみる。

元記事を表示

OTHERカテゴリの最新記事