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

Python関連のことを調べてみた2020年09月25日
目次

深層学習入門 ~CNN実験編~

#概要
前回の記事は[こちら](https://qiita.com/kuroitu/items/48bf6bc42e4dfee52cde)です。
[ここ](https://qiita.com/kuroitu/items/4a8badcf7d3139d9ec7b)で作成した実験コードに追加・改変する形でCNNの実験コードを作成します。
実験では実行時間の問題でscikit-learnのMNISTデータセットを用いています。
通常のMNISTデータセットとの差異は

– 画像サイズが$(8, 8)$
– データセットの総画像数は1797枚

であることですね。おかげで学習時間は(僕の環境では)数十秒で済みます。
一応Kerasのフルデータセットでの実験コードも載せてあります。
こちらは僕の環境だと数時間かかるっぽいので断念しました…

#目次
– [`_TypeManager`クラスの変更](#_typemanagerクラスの変更)
– [`Trainer`クラスの追加](#trainerクラスの追加)
– [`LayerManager`クラスの変更](#layermanagerクラ

元記事を表示

Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”)でハマったときの話

# はじめに
Webスクレイピングの練習のために
サンプルコードを入手してスクレイピングを試したところ
例外が発生してドハマりしたので事象と解決方法をメモする

# 事象
[【Python】スクレイピングで株価データを取得する](https://non-dimension.com/kabuka-scraping/)を参考にして
スクリプトを実行したところ↓↓のエラーが発生して処理が進められなかった。
PCも工場出荷状態に戻した直後だったので結構焦る。

“`:スクリプト実行結果のエラーメッセージ
requests.exceptions.SSLError: HTTPSConnectionPool(host=’***.co.jp’,
port=443): Max retries exceeded with url: / (Caused by SSLError(“Can’t
connect to HTTPS URL because the SSL module is not available.”))
“`

# 環境
anaconda 1.9.12
python 3.8.3

#

元記事を表示

教師あり学習2 ハイパーパラメーターとチューニング(1)

[Aidemy](https:// aidemy.net) 2020/9/25
# はじめに
 こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
 今回は、教師あり学習の二つ目の投稿になります。どうぞよろしくお願いします。

*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・ハイパーパラメータについて
・ロジスティック回帰、線形SVM、非線形SVMのハイパーパラメータ

#ハイパーパラメータ
##ハイパーパラメータとは
・ハイパーパラメータとは、機械学習モデルの中で、__「人が調整しないといけない領域(パラメータ)」__のこと。モデルの種類によってパラメータは異なる。(次項以降で個別に見ていく)
・ハイパーパラメータを人為的

元記事を表示

【メモ】PCのJupyter Notebookを等幅フォント表示にする (Mac)

# はじめに
PCで動かすJupyter Notebookは、フォントがデフォルトでプロポーショナルになっているため、出力がガタガタしてなにかと不便。これを等幅フォントに変えるための手順です。
動作確認はMacでしています。

# 手順
ターミナルを立ち上げて、以下のコマンドを実行します。

“`sh
$ cd ~/.jupyter
$ mkdir custom
$ cd custom
$ echo ‘.CodeMirror pre, .output pre { font-family: Monaco, monospace; }’ > custom.css
“`

この状態で

“`sh
$ Jupiter notebook
“`

とすると、numpyの行列も次のようにきれいに表示されます。

![スクリーンショット 2020-09-25 9.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206130/60cece51-3b0f-c55d-ba47-1a7e7b7c71ca.pn

元記事を表示

Python で feedparser を使ってサクッとフィードリーダーを作った

# はじめに

Python3 で feedparser ライブラリを使って RSS を取得してみました。
なお Python は完全な初心者です。

# 環境

– macOS Catalina 10.15.6
– Python3 3.8.5
– feedparser 6.0.1

# feedparser

`feedparser`という便利なものを利用しました。
これは、URL を渡してあげるだけでパースし、いい感じに辞書にまとめてくれるというすぐれものです。

– [kurtmckee/feedparser: Parse feeds in Python](https://github.com/kurtmckee/feedparser)

最新版のドキュメントはビルドしないと見れないので見れていないのですが、古い情報曰く、RSS・Atom の主要なものには対応しているそうです。

– [Documentation — feedparser 5.2.0 documentation](https://pythonhosted.org/feedparser/)

`pip`で

元記事を表示

Django シフト表に日ごとの労働時間合計が必要で、残業したらその数字を上書きしている

現在使用しているシフト表をみたら、日ごとの労働時間があったため必要かどうか確認したところ管理者で作成している時に、合計じかんが必要だっとりするとのことで、合計のフィールドを追加しようと思います。

シフト時間と残業時間を持つことも考えてみます。早引き、遅刻した時にシフト時間以下になった時にマイナス時間を入力することで対応可能…

わざわざ別でもつことのメリットは何か考えてみます。

・シフト時間は、特にフィールドで持つ必要はなくなる
・プラスマイナス対応はできそう…
・翌月コピーする時には、残業をのぞいてコピーすればよい
・残業集計を簡単にできる

うーん、なんか決定打がないような気もします。

単純に持った場合は、
・翌月コピーする時には計算処理が必要
・残業遅刻は労働時間を直接修正するのでわかりやすい
・残業計算は計算処理が必要

あまり別でもつメリットがないと判断しました。

モデルにフィールドを追加

“`python:schesule.models.py

from django.db import models
from shisetsu.models import *

元記事を表示

フォルダ配下の全てのBOMありUTF-8ファイルをBOMなしにするPythonスクリプト

#作ったきっかけ
業務で必要に迫られて、BOMありのUTF-8ファイルをBOMなしのUTF-8ファイルに
一括変換するスクリプトを作成しました。

思いの外、便利だったので公開します。
処理内容については、ソース中のコメントを参照してください。
#スクリプト

“`python:convert.py
#— BOM除去ツール
import sys, os, codecs, shutil

#— コマンドライン引数の取得
args = sys.argv

#— カレントパスの取得
current_path = os.getcwd()

#— 作業用一時ファイル名の設定
tempfile = ”.join([current_path,’\\tempfile’])

#— 処理件数カウント用変数
conv_count = 0

print(“BOMファイル除去スクリプト”)

#— 引数がない場合は、エラー出力して終了
if len(sys.argv) == 1:
print(“引数がありません。”)
sys.exit(1)
else:
#-

元記事を表示

Pythonで上位ディレクトリからimportしたい人に教えたいdirenv

# この記事で解決したい問題

今まで適当に配置していたpythonファイルたち、プロジェクトが大きくなってフォルダ整理することにしました。ここで発生したのが自作ライブラリをインポートできない問題です。pythonでは実行フォルダおよびその配下のフォルダだけがモジュール検索対象のパスとなっているので、自分より上位にあるファイルからインポートができません。

今まではsys.path.appendを使って上位にあるファイルからインポートしていましたが、以下のようなデメリットがあり、sys.path.append を使わずに解決する方法はないものかと悩んでいました。

## sys.path.append の弱点

sys.path.appendを使って上位ファイルからインポートをしようとすると、ファイルの最初の数行が必ず次のようになります。

“`python
import sys
import pathlib

sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
from MyModule.MyClass

元記事を表示

リングバッファのBit演算化(高速化)

#経緯
リングバッファを使用する際に余剰を使用してインデックスを計算していた。職場のプログラマの方に「ビット演算でもできるよ」と教えてもらったのでここにメモしておく。

#Code(Python)
“`Python:ring_buffer.py
# coding:utf-8
”’
Ring Bufferがビット演算で早くなるか実験
”’
import time
import numpy as np

def main():
ring_buff = np.array([i for i in range(1024)])

#余剰演算ver
start = time.time()

for cnt in range(102400):
index = cnt % 1024
ring_buff[index] = cnt

elapsed_time = time.time() – start
print (“余剰ver :{0}”.format(elapsed_time) + “[sec]”)

元記事を表示

二点を固定した円の最小二乗法による近似

直線と同じように、最小二乗法を用いて点P1,P2, … ,Pnから円を近似することができます。一般的な手法は他の記事を参照してもらうことにして、ここでは始点P1と終点Pnを必ず通り、かつ誤差が小さくなるような円を求めます。また、そのような関数をpython(numpy)で実装してみます。

#方針

直線と同様に、各点に対して理論値と測定値の差(残差)を求め、それらの平方和を小さくするような値を求めます。

一般に円を表すためには中心座標$(x,y)$、半径$r$の3つのパラメータが必要ですが、2点$P_1,P_n$を通る円の中心は必ずこの2点の垂直二等分線上にあります。中心が決まれば半径も決まりますから、今回求めるパラメータは一つにできます。

# 方法
円の中心と半径をベクトルを用いてパラメータ表示し……などとやっても不可能ではないですが、計算が煩雑になってしまうので、別の方法を取ります。ひとまず$P_1(-a,0),P_n(a,0)$の場合を考えましょう。このとき、中心はy軸上の点$(0,y_0)$、半径$r^2 = y_0^2+a^2$となり、求める円の方程式は

“`m

元記事を表示

2020年で最も需要のあるプログラミング言語

本記事は[Most in-demand programming languages in 2020](https://lampstudy.net/most-in-demand-programming-languages-in-2020/)の日本語訳です。翻訳元に報告していますが、もし苦情が来たら消します。
翻訳は不慣れなので変なところもあると思いますが、ご容赦ください。


![Most-in-demand-programming-languages-in-2020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321705/bf03a2a8-203a-0198-e24d-8019b794c52d.jpeg)

ソフトウェア開発業界は絶えず変化しており、それは開発者の能力に対する企業のニーズも変化していることを意味します。そのため、あなたが想像できるように、Webアプリケーション、ゲーム、アルゴリズムなどのあらゆる側面の開発をカバーするために、選択できるプログラミング言語はたくさんあります。その

元記事を表示

k-means法を使用したクラスタリングによるデータ分析(python)(【高等学校情報科 情報Ⅱ】教員研修用教材)

#はじめに

非階層型クラスタリングの手法の一つに、k-means法(k平均法)があります。
教材の「第3章 情報とデータサイエンス 後半 学習16.クラスタリングによる分類」の記述がわかりやすいので引用します。
> k-means法では,次の手順によってクラスタリングする。
> 1) あらかじめ分割するクラスタ数を決めておき,ランダムに代表点(セントロイド)を決める。
> 2) データと各代表点の距離を求め,最も近い代表点のクラスタに分類する。
> 3) クラスタごとの平均を求め,新しい代表点とする。
> 4) 代表点の位置が変わっていたら2に戻る。変化がなければ分類終了となる。
> 1)によりランダムに代表点を決めることによって,結果が大きく異なり,適切なクラスタリングとな
らない場合もある。何回か繰り返して分析をしたり,k-means++法を用いたりすることにより改善することができる。
>
> 1’)データの中からランダムに一つの代表点を選び,その点からの距離の2乗に比例した確率で残りの代表点を選ぶ。

> ![SnapCrab_NoName_2020-9-24_20-10-2

元記事を表示

Codeforces Round #481 (Div. 3) バチャ復習(9/24)

#今回の成績

![スクリーンショット 2020-09-24 14.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331393/36b68871-0b95-7783-3ea2-8377904a88b6.png)

#今回の感想

今回はあまりバグらせずに通すことができました。良い傾向なので、引き続き頑張りたいと思います。

一部詰まる部分はありましたが今回のような安定したムーブが毎回できることを目標に頑張りたいです。

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

数列の右側から見て**同じ数が二回現れないように**取ってくれば良いです。したがって、数列の右側から数を見ていき、どの数が現れたかをsetの$s$に保存します。この時、$s$に含まれていない場合は答えで出力する配列`ans`に挿入し、含まれている場合は次の数を見ます。

“`python:A.py
n=int(input())
a=list(map(

元記事を表示

Kerasの使い方~簡単なモデル生成からCNNまで~

#この記事でやること
ディープラーニングでは、使用するバックエンドによって実装手順がことなる。そのため、公式のドキュメントを読み込んだり、解説している参考書などを参照しながら使い方を学んでいく。この記事ではその使い方の流れを説明している。
#kerasを使った場合の実装手順

##1.訓練データを定義する

##2.入力値を目的値にマッピングする複数の層からなるネットワークを定義する。
##3.損失関数、オプティマイザ、監視する指標を選択することで学習プロセスを設定する。

##4.モデルのfitメソッドを呼び出すことで、訓練データを繰り返し学習する。

#kerasのpython環境の構築
anaconda上に新しい仮想環境を作り、tensorflow及びkerasをインストールする。今後は作った環境の上で実行していく。anaconda prompt上で以下を実行する。

“`bash
conda create -n keras_env python=3.6 #仮想環境の作成
conda activate keras_env #環境の切り替え
conda install tenso

元記事を表示

OpenCVによるごく単純な間違い探し

 知り合いが画像の差分を見比べるプログラムが必要だといっていたのでPythonとOpenCVで組んでみた。要はOpenCVを用いた間違い探しだが、**画像同士でいっさいのズレがないことが条件となる**ので、実務的なアレには向かないかもしれない。よりロバストな間違い探しが必要な方は[この記事](https://qiita.com/ika_kk/items/32c4986825c86ad92f36)などを参考にした方がいいかも。実装はこの記事の方法のが10倍ぐらい軽いと思うけど……。

#結果

 以下のような画像が出力される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/05488c6f-49a5-f36d-ad8c-780a1b6ae49e.png)
(画像は[Wikipedia](https://ja.wikipedia.org/wiki/%E9%96%93%E9%81%95%E3%81%84%E6%8E%A2%E3%81%97)より引用)

# ソースコード

元記事を表示

組み合わせ爆発ハラスメントの処方箋

プログラミング初学者向けの内容です。
今のところ Golang, Ruby, Python, JavaScript, TypeScript による処方箋のみ掲載しています。

# ある日のこと

知人「店長からさぁ、

   『うちはメニューの数が少ないから、
    コンビ・メニュー作ることにした』

   『とりあえず、
    今あるメニューを組み合わせて、
    単品から全部入りまで
    すべての組み合わせのリスト作ってくれ!』

   って、言われたんだけど…」

俺「え? それって、
  ???があるとしたら、
  ↓みたいなやつ?」

1:?
2:?
3:? ?
4:?
5:? ?
6:? ?
7:? ? ?

知人「そう。そう。それ!それ!」

俺「作れるけど、、
  きっとものすごい数になるよ。
  単品メニューって何種類くらいあんの?」

知人「20種類くらいかなぁ。。
   物好きな店長でしょ?!
   めんどくせぇ。。」

俺「…」

俺「あのさぁ、、
  面倒くさいとかの次元じゃないんだけど。。」

俺「0.1 mm 厚の紙を 26 回折っ

元記事を表示

Github ActionsでDockerイメージをpullしてtestを行うJobを作成してみる手順

今回はPythonのプロジェクトのリポジトリを “Github Actions“ で “pytest“ を “docker-compose“ のイメージ上で行う為の練習を行ったのでそのメモを記載します。

# 前提条件
– Github の packages のトークンを作成しておく。
– docker login しておく。
– Github の 任意のリポジトリに“Secrets“をpackages操作可能なトークン番号を登録しておく。
(私の環境では“GHCR_IO_TOKEN“という名前で登録している。)

# フォルダ構成
“`bash

repository/ # リポジトリディレクトリ
 ├ .github/
 │ ├ workflows/
 │ │ └ sample.yml # Github actionsのファイル
 ├ project/
 │ ├ sample/ #(説明省略)
 │ │ ├ __init__.py
 │ │ └ add.py
 │ └ test/

元記事を表示

【Python】多次元配列に値を代入するときの注意点

## やりたかったこと
動的計画法に関する問題で,初期化した2次元配列(dp)に対して,ある数字(60)を代入しようとしていた.

[問題] Atcoder EDPC C-Vacation(https://atcoder.jp/contests/dp/tasks/dp_c)

以下のようなコードを書いていた.

“`python
dp=[[0,0,0]]*5
print(dp)
#出力 [[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

a=[10,40,70]
dp[0]=a
print(dp)
#出力 [[10,40,70],[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

# 以下が問題のコード#######
dp[0][1]=60
print(dp)
#出力 [[10,40,70],[0,60,0],[0,60,0],[0,60,0],[0,60,0]]
“`

本当はdp[0][1]の所だけに60を代入したかった.(以下)

“`python

print(dp)
#出力 [[10,40,70],[0,60,0],

元記事を表示

時系列解析 実装詰まったところ -備忘録-

# 前提
時系列解析の本

# 問題点1
ARモデルをAICによっ

元記事を表示

Basemapでハマった記録

これでエラーが出た

“`py
from mpl_toolkits.basemap import Basemap
ModuleNotFoundError: No module named ‘mpl_toolkits.basemap’
“`

これを入れてみた

“`
!pip install mpl_toolkits
!conda install -y basemap
“`

またエラーが出た

“`
KeyError: ‘PROJ_LIB’
“`

環境変数が必要みたいなので、以下のコードを丸ごとコピーしてjupyterに貼った

“`py
import os
import conda

conda_file_dir = conda.__file__
conda_dir = conda_file_dir.split(‘lib’)[0]
proj_lib = os.path.join(os.path.join(conda_dir, ‘share’), ‘proj’)
os.environ[“PROJ_LIB”] = proj_lib

from mpl_toolkits

元記事を表示

OTHERカテゴリの最新記事