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

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

k-means法を理解する

本記事は教師なし学習において代表的な「k-means」に関するもの。

初学者
・PythonとScikit-learnを用いてk-meansを実装したい。
中級者
・k-meansの発展、k-means++までしっかりと理解したい。
・エルボー法を用いてクラスタ数kの最適化を行いたい。

## 初学者
アルゴリズムの深い理解は必要なく、とりあえずk-mean法の実装だけを目的とした方向けの内容。
### k-means法のアルゴリズム(視覚的理解)
k-means法では、下記手順に従ってデータのクラスタリングを行う。
初めにクラスタ数Nを決定する。(今回の場合 N=2 とする)
 ①クラスタ数Nに従い、データにクラスタをランダムに付与する。
 ②各クラスタの重心を求める。
 ③各データにおいて最も距離が近い重心のクラスタに変更する。
 ④各クラスタの重心が収束するまで②、③の処理を繰り返す。
![k-means1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617816/87365485-ece7-

元記事を表示

julia v1.5.3から始めるJupyter Notebook

[前回](https://qiita.com/doorei/items/c0916f0866bfc2859c2f)、juliaをインストールしたあと環境をきれいにしたところ、juliaがちょっとバージョンアップしていた。特に困ったことはないけど再々々度書いてみる。

# やってみた環境
– Windows 10 Home (64bit) Ver 20H2 (OSビルド19042.746)
– julia v1.5.3 (64bit)

# やり方
0. juliaがインストール済みの前提(インストーラー版)
1. juliaのコンソールを起動(緑字のプロンプト)
2. `]`キーを押してパッケージモードへ(青字のプロンプトになる)
3. `add IJulia`を実行(Cloning~となり、しばらく時間がかかる)
4. バックスペースでパッケージモードを抜ける(緑字のプロンプト)
5. `using IJulia`を実行(Precompilingされる)
6. `notebook(detached=true)`を実行
7. 「install Jupyter via Conda,

元記事を表示

Pythonのunittestでmock_openを使った時、openを複数回呼び出すコードは、assert_has_callsではなくcall_args_listで検証すると学びました

「Pythonの`unittest`を使ったコードにおいて、関数呼び出しの引数は、モックのassert_xxx系のメソッドで常に検証できる」という思い込みが粉砕されたので、アウトプットします。
だいぶハマったので再発防止の目的です。

モックのassert_xxx系のメソッドとは、公式ドキュメントの以下にあるメソッドを指しています(例:`assert_called_once_with`)。
https://docs.python.org/ja/3/library/unittest.mock.html#unittest.mock.Mock

元記事を表示

Pythonでメールを受信する

プログラムで自動でメールを処理したい時があったので、その時のメモ。
以下では全て、動作環境はWindows10とPython3.9、メールはGmailで行っています。

# 準備(Gmailのみ)

以下はGmailに限った話であって、デフォルトでIMAPを使う設定のメールを使う場合は関係ありません。

現在のGmailでは、デフォルトではIMAPでメール受信は出来なくなっています。
またアカウントのパスワードではメールを使えないので、アプリパスワードを発行して利用します。

– [他のメール プラットフォームで Gmail のメールをチェックする](https://support.google.com/mail/answer/7126229)
– [アプリ パスワードでログインする](https://support.google.com/accounts/answer/185833)

# プログラム

以下ではメールサーバへ接続、メッセージを検索、取得、それをprintするプログラムです。

## メールサーバへ接接続

メールサーバにログインした後、INBOX(受信トレイ)を選択

元記事を表示

Python3.10の新機能(1) – 引数仕様変数 (Parameter Specification Variables)

## はじめに

2021年10月にリリースが予定されているPython3.10で新たに加わる変更を[Python3.10の新機能 (まとめ)](https://qiita.com/ksato9700/items/2cd85bec2ae4c1785238)という記事でまとめ始めました。その中で比較的分量のある項目を別記事に切り出すことにしていますが、その第一弾として引数仕様変数(Parameter Specification Variables)を取り上げます。この変更は [PEP-612](https://www.python.org/dev/peps/pep-0612/) で詳しく述べられていて、この記事はそれを簡単にまとめて紹介したものです。

## この変更で解決しようとしている問題

PEP-612は型ヒントの付け方に関する変更提案なのですが、例えば「関数を呼ぶ前にDBにログを記録する」という機能をデコレーターで実現することを考えます。Python 3.9ではこのように書けます。

“`python
from typing import Awaitable, Callabl

元記事を表示

[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||
|$10^3$||||102|785|7858|TLE|||
|$1

元記事を表示

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の作成を自動化する

# 要約
– とある運用保守プロジェクトでの月次レポート作成作業を徐々に改善していくお話
– データベースから抽出した情報をもとに行う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

元記事を表示

OTHERカテゴリの最新記事