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

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

reCAPTCHAのサイトを毎日自動スクレイピングする (3/7: xlsファイル処理)

1. [要件定義〜python環境構築](https://qiita.com/kamyu1201@github/items/65a86ec1e28ec9969dcb)
1. [サイトのスクレイピング機構を作る](https://qiita.com/kamyu1201@github/items/a07c7d175c051b8ab4c0)
1. **ダウンロードしたファイル(xls)を加工し、最終成果物(csv)を作成するようにする**
1. S3からのファイルダウンロード / S3へのファイルアップロードをつくる
1. 2captchaを実装
1. Dockerコンテナで起動できるようにする
1. AWS batchに登録

# ファイル操作

前回まででseleniumを使ったファイルダウンロードを行ったので、
それを取得・加工してcsvファイルとして保存し直す処理を記載します。

### ファイル一覧を取得
特定のフォルダ内の特定パターンのファイルをすべて取得する!
というときはglobが便利。

“`python
# 当該正規表現のファイルリストを取得(glob)
fil

元記事を表示

既存のDjangoのアプリケーション名を変更する

## これは何?
普段Djangoで開発していて、たまに思うことがあるかもしれません。

`今問題なく動いているんだけど、アプリケーション名がちょっと気に食わない。`

試しにただフォルダ名を変更してみると、不要なテーブルが出来てしまい、既存のデータも使えません。

「既存のテーブルに入っているデータはそのまま使いつつ、アプリケーション名を変更したい」という時に何をすればいいのか

色々な方法があると思いますが、そのうちの一つとしてまとめました。

## 結論
[stack overflow/How to change the name of a Django app?](https://stackoverflow.com/questions/8408046/how-to-change-the-name-of-a-django-app)
ここに書いている通りです。

1. フォルダ名を変更する
2. AppConfigを変更, settingsの`INSTALLED_APPS`を変更する
3. アプリケーション名変更前のテーブルを新しいアプリケーション名に合わせてrenameする
4

元記事を表示

PyTorchでニューラルネットワークを使ってMNISTデータを学習させる

# はじめに

こんにちは、川島です!
ずっと、Qiitaで投稿しようと思っていて、やっと実行できるようになりました!(^^)

今日はPyTorchでニューラルネットワークを使ってMNIST手書き数字のデータを学習させるプログラムの解説をしていきたいと思います。

このトピック自体は、目新しいわけではありませんが
ただ、今までの記事の中で、なかなか、細部まで丁寧に説明する物が少なくて

この記事では、なるべくうるさいぐらいに詳細に説明をしていきたいと考えて、書いてみたいと思います。

とは言っても、ほとんどの説明が、コメントに書いてあります。辛抱強く、コメントを一行ずつ、読みましょう!

ソースコードをみながら始めよう!

# 必要なモジュールなどをimportする

“`
# -*- coding: utf-8 -*-
# —————————————————————————–

import torch

print(torch.__version__)

import tor

元記事を表示

tkinterを別スレッドで起動したときは、そのスレッド自身で停止処理して変数を後始末してからスレッド終了すること

tkinterを別スレッドで起動した際、プログラムを正常終了させるのに苦労したので情報共有します。

tkinterは`mainloop()`を呼び出すことで、描画処理やイベント処理をループします。
tkinterの`destroy()`を呼び出すことで、`mainloop()`を終了させることができます。
その後、スレッド終了する際にtkinterの破棄処理も行われます。

ただし、別スレッドから `destroy()` を呼び出したり、tkinterウィジェット(GUI部品)がインスタンス変数に代入されたままになっていたりすると、プログラムを正常終了することができませんでした。

サンプルプログラムで説明します。

“`py
import time
import threading
import tkinter as tk

class GUI:

def start(self):
self.running = True
self.window = tk.Tk()
self.window.title(“Sample”)

元記事を表示

モテるためにチャットボットを作って修行する。

### はじめに
近年、コミュニケーションの大部分がLINEなどのチャットに場面を移しつつある。
モテるためには魅力的な文章を打てることが必要とされる現代社会において、周りの環境などから練習の場が限られており、急にその本番がくるという人も多いことだろう。~~筆者がそうである。~~
そんな現代を生きる人類の課題に対し、自分への興味度を出力するチャットボットを用意しそれに絶えずメッセージを投げる修行を行い、メッセージスキルの向上を謀るアプローチをとる。

下図は、筆者が行なっている修行の一部である。
![異性を映画に誘う修行の一部である](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180925/840450cb-ff8d-e229-bbbe-228d2cce7e66.png)

相手の興味度は (前向き・興味なし・不明)の3段階で出力される。
相手のメッセージ自体に意味はない。筆者が言われたことのあるものを用意した。

相手を前向きにさせたら勝ちである。
ここで修行したといって本番は未来永劫来ないと思われるが、本

元記事を表示

tqdmでプログレスバーが改行されてしまう

結果としては日本語を使ったのが原因でしたが、変に突っかかってしまったので足跡として残しておきます。

## 進捗管理にtqdmを使おう!せっかくだから説明もいれよう!

これが全ての元凶。

“`python:hoge.py
from tqdm import tqdm
import time

with tqdm(total=100, desc=’処理中’) as bar:
for i in range(100):
time.sleep(1)
bar.update(1)

# output
# 処理中: 0%| | 0/100 [00:00

元記事を表示

辞書のitemsメソッド

“`python:items.py
num = {‘x’:100, ‘y’:200}
print(num.items())

#辞書をfor文で処理するとキーが返ってくる
for k in num:
print(k)

#値が欲しい場合は、valuesメソッドを使う
for v in num.values():
print(v)

#キーと値のペアが欲しい場合は、itemsメソッドを使う
#for文で処理するとk,vにそれぞれキーと値が入る(タプルのアンパッキング)
for k, v in num.items():
print(k, ‘:’, v)
“`
出力結果:

“`
dict_items([(‘x’, 100), (‘y’, 200)])
x
y
100
200
x : 100
y : 200
“`

元記事を表示

調和振動子の分布

個人的な疑問が2つ解消されたのでメモ。

# コンテンツ

* 単体の単振動
* カノニカル集団での単振動

それぞれ位置とエネルギーの分布関数を調べます。

# 単体の単振動

調和振動子があります。ポテンシャル

“`math
U(x)= \frac{1}{2}kx^2
“`

に従って単振動しています。普通の古典力学の範囲でこのポテンシャルでの運動方程式を解くと、座標は

“`math
x = A\sin(\omega t + \alpha)
“`

で、速度は座標を使って

“`math
v = \omega A\cos(\omega t + \alpha) = \pm\omega \sqrt{A^2 – x^2}
“`

とかけます。符号が適当ですが、今回の議論では使わないので適当にさせてください。

## 位置の分布関数

さて、時刻 $t$ が一様分布する場合、位置はどういう分布をしているでしょうか。これが第1の疑問。単純に知らなかっただけですが、調べてみました。

答えを言うと逆正弦分布です。

“`math
P(x \mid E) = \frac{

元記事を表示

filter(None,list)の動作

組み込み関数filterの動作が気になったときのメモ

filterは高層関数であり、関数を引数として取るものだと思っていたが、どうやらNoneを引数に取れるらしい。

###気になった動作
“`
>>> a = [0,1,1.1,’a’,None,False]
>>> b = filter(None,a)
>>> list(b)
[1, 1.1, ‘a’]
“`
動作としては、boolでFalseとなる0,None,Falseを取り除いているように見える。

“`
>>> b = filter(lambda x:bool(x),a)
>>> list(b)
[1, 1.1, ‘a’]
“`

###解決
helpを用いて確認した

“`
help(filter)

class filter(object)
| filter(function or None, iterable) –> filter object
|
| Return an iterator yielding those items of iterable for which function(i

元記事を表示

レコメンドの最適化

#1. レコメンド
レコメンドでは学習データをもとに機械学習などでモデルを作り、ユーザxアイテムに関して予測スコアをつけて、各ユーザに関して予測スコアが高いアイテムTOP ?を見せることが多いです。しかしこの方法では人気アイテムの予測スコアが高くなり、人気のないアイテムの予測すこが小さくなるので、人気のあるアイテムばかり広告が出て、人気のないアイテムには広告が出ないという問題があります。
広告サイトでは、人気のないアイテムに対してもある程度のCVを得るため広告を出す必要がある場合が多いです。

#2. 最適化
アイテム単位で広告するユーザ数に制限を入れることにより解消することができます。
例えば人気アイテムには広告を出す最大ユーザ数を設定し、人気のアイテムには広告を出す最小ユーザ数を設定すれば良いです。

#3.例
ユーザ数 30、アイテム数 20とします。
各ユーザに関して5件アイテムをレコメンドすると考えます。

ただしすべてのアイテムに関して10人以下しか広告を出さず
アイテム0,1,2は人気アイテムなので3人以下しか広告を出さず
アイテム18,19は人気のないアイテムなので7人

元記事を表示

カメラ画像から虹彩検出をしてみた

# はじめに

2020/1/19(土)に開催された[第56回 コンピュータビジョン勉強会@関東](https://kantocv.connpass.com/event/160053/)の発表内容をまとめました。
当日の資料は[こちら](https://www.slideshare.net/NaoyaTakeuchi/ss-221273392?ref=https://kantocv.connpass.com/event/160053/presentation/)から見れます。

ソースコードは以下のGithub上に公開しています。
https://github.com/33taro/gaze_cv

# 虹彩検出の手順について

虹彩検出は大学の頃、研究していたテーマなので、進化したOpenCVならお手軽にできなかなぁと思い実施しています。
手順としては次の通りです。

1.カメラ画像から人物の顔と顔のランドマーク検出
2.顔のランドマークから目領域を切り出し
3.目領域を2値化して虹彩領域を抽出
4.抽出した虹彩領域から虹彩検出

![虹彩検出手順.png](https://qii

元記事を表示

python初心者がIT企業にインターンしてみた[一日目 開発工程]

#ウォーターフォール開発
##朝の打ち合わせ
とりあえずスーツで出勤した私は部長にすぐさま、「私服でいいのに」と笑われた。おいいいいい。
出勤はしたものの、何をするか全く知らない私は、打ち合わせで衝撃を受けた。このインターンでは、多くのことは知らされず、キーワードなどは伝えるけどその他は自分で調べて進めていくというもの。その意図は、おそらく自己解決能力を鍛えるものだと思う。この一ヶ月半で大きく成長できることを確信した。このインターンを紹介してくれた先輩に感謝したい。ありがとうございます。

##最初のキーワードはウォーターフォールモデル
打ち合わせで知らされたのは開発工程ガイダンスとウォーターフォールモデルというキーワードだけである。昼にもう一度打ち合わせをやるから、それまでにその打ち合わせを有意義に活用できるように必要事項をまとめて発表してもらうからとのこと。
時間は朝の十時。打ち合わせは一時。さてまずはオフィスを入れなければな。
オフィスを入れた頃には十一時。やばい。

#ウォーターフォールモデルとは
##ウォーターフォールモデルとアジャイルモデル
開発工程には二つのモデルがあり、

元記事を表示

Atcoder ABC125 C – GCD on Blackboard 別解集

C問題なのに脅威の水色
ちょっと捻ってるだけでネタが分かれば解けるヤツ

#累積GCD
これが正攻法
左から順番にgcdを取っていって記録していく
右からも同様に
あとで各一点に対して記録した左側gcdと右側gcdで仲良しさせる

“`python:ruiseki.py
def euclid(a,b):
a,b=max(a,b),min(a,b)
if a%b==0:
return b
else:
a,b=b,a%b
return euclid(a,b)

N=int(input())
A=list(map(int,input().split()))

org_A=A[:]
#左から最大公約数作る右もね
A=A[::-1]
l=[A.pop(-1)]
while A:
l.append(euclid(l[-1],A.pop(-1)))

A=org_A
r=[A.pop(-1)]
while A:
r.append(euclid(r[-1],A.pop(-1)))
r=r[::-1]

ans=0

元記事を表示

Backtrader 別のファイルからインジケーターをimportする方法

#カスタムインジケーターのimport
いままでは説明のため同一のスクリプト内にカスタムインジケータークラスを書きました。しかしカスタムインジケータークラスだけを別のpyファイルに書いて、ストラテジーのスクリプトとは別々に使う方が便利です。

カスタムインジケーターのファイル名を仮に **customindicator.py** とすると、ストラテジーの冒頭部分に

`import customindicator as cind `(任意のわかりやすい名前)

と書いてストラテジークラスのinitメソッド内には

`self.myind1 = cind.MyStochastics1(self.data)`

と書きます。

customindicator.py はストラテジーのスクリプトと同じディレクトリに置きます。Jupyternotebookを使っていてデフォルト設定のままならば `C:\Users\ユーザー名\` です。

“`python:customindicator.py

import backtrader as bt

class MyStochastic1(bt.

元記事を表示

バーチャルYouTuberの配信内容を三行でまとめてみる記事

## へぇい

突然ですがみなさんはバーチャルYouTuberはご存知でしょうか?

![youtuber_virtual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277804/f90a05dc-a5bf-e338-5889-62a92861c475.png)

バーチャルYouTuberとは, キャラクターを用いてYouTubeにて活動を行う人達のことで, いまでは[1万人を突破](https://headlines.yahoo.co.jp/article?a=20200116-00010000-kaiyou-ent)しています.

特に最近では, 生放送を中心に行う方が多いため, 箱推しのような複数の推しを抱えるファンにとっては, 1日当たりに供給されるコンテンツの時間が24時間を超える人も中にはいるかもしれません. ここまでひどくなくとも, 新たな推しを探すのは難しいと感じている方は多いのではないでしょうか?

して.

## 矢木に 電流走る――!

説明可能なAI

#はじめに
4種類の説明可能AIについて簡単に整理する。

##①大域的な説明
+ 複雑なモデルを単純なモデルに近似する。
+ あるいは、可読性の高い解釈可能なモデルで表現する方法。
+ 全体を説明することになるため、個々の説明には適さない。

###手法・ツール例
####LIME
+ 特徴量について、値を変化させたときに出力結果がより大きく変わるものが重要であると考える。
+ 説明対象モデルの周りで線形モデルを作る。
+ 画像認識AIに使われる。

####SHAP
+ アプローチはLIMEと同じ。
+ 表データを処理するAIに使われる。

####Anchors
+ 説明対象モデルの周りで領域モデルを作る。

####Grad-CAM
+ CNN(畳み込みニューラルネットワーク )の判断根拠の可視化技術。

##②局所的な説明
+ 特定の入力に対する予測の根拠を提示する方法。
+ 個々の説明になるため、全体の説明は難しい。

###手法・ツール例
+ Born Again Trees
+ defragTrees
+ Feature Importance

##③説明可能なモデル

元記事を表示

AWSにdjangoでWebアプリを立ち上げて転職

こんにちはmogkenです。

前回Python+Django+AWSでスクレイピングアプリを作って転職という記事を書いてから3ヶ月余りが経ちました。タイトルの通り幸いにも転職が成功して1月からクラウド基盤を開発している会社にサービス企画で転職しました*\(^o^)/*

というわけで今回はその時に作ったPythonのwebアプリをAWSに構築した際の手順を簡単に記録します。ただ申し訳ないのですが随分と前のことなので、やや記憶が曖昧で内容が正しいか保証できません…素人の備忘録だと思ってください。

## 今回のやること

AWSのVM(Centos7)にpython3とDjango、nginx、そしてgunicornをインストールして、作成したWebアプリをデプロイします。ロードバランサーやオートスケーリングもやろうと思っていたのですが、転職ができてしまったので一番簡単な構成で力尽きました…

構成図(最小構成すぎるのでいらないけれど一応)
スクリーンショット 2020-02-12 17.54.50.pngそろそろバレンタインなのでラインのトーク履歴を可視化してみますかw

バレンタインだからってわけじゃなくてじゃないんですけど,最近Githubにあるあのコントリビューションのチャートが気になっていました.

自分のコントレビューション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295666/e3c44013-3b5d-90cc-8251-8008a9296bc0.png)

[@torvalds](https://github.com/torvalds)のコントリビューション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295666/1a9aadf7-9380-bed1-4ac0-d855e474fd87.png)

いい感じの時系列データがあれば似たようなチャートを試しに作ってみたいと前から思っていたところ,ちょうどラインのデータが簡単にダウンロードできるってことを知ったので,そのデータを使って作ってみました.

![image.png](https

元記事を表示

Pythonにてcsvファイルを用いてFirestoreにデータを一括登録する

# 概要

以下のことは済ませているものと考えてください。契約状態によって確認事項が違いますので、簡単に。

– Firestoreを有効化
– APIキーの発行(firebaseにて出来ます)
– firebaseはnativeモード

# データ構造

## csvファイル体裁
区切りは「,」としています。たまに規則通りになっていないcsvファイルがあったりするので、その辺りは気を付けてください。

![testimage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159492/f7ede899-25e1-2cb1-0372-1e0e6de39092.jpg)

## DB構成

今回は簡単な構成です。uniqueというところを主キーのように考えており、重複なしです。

“`:DB構成
unique ———- item1
| | a : 1
| | b : 2
| ∟ c :

元記事を表示

Raspberry PiにTensorFlow 1.15.0をインストールする

こんにちは。
Raspberry PiへのTensorFlowのバージョン1.15.0以降をインストールしたかったのですが、
`pip`ではうまくいかず、日本語でまとまっているものが見つからなかったので、備忘録がてらまとめておきます。

# 環境

ラズパイの環境は下記の通りです。

– Raspberry Pi 3 Model B+
– Raspbian 9.11(stretch)
– Kernel 4.19.66-v7+

“`Bash
$ uname -a
#Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux
$ lsb_release -a                
#No LSB modules are available.
#Distributor ID: Raspbian
#Description:    Raspbian GNU/Linux 9.11 (stretch)
#Release:        9.11
#Codename:    

元記事を表示

OTHERカテゴリの最新記事