- 1. PythonとLOUDSによるTRIE木の実装
- 2. PythonによるTRIE実装 ~ダブル配列(Tailあり)~
- 3. 面接スケジュールの最適化
- 4. pythonのクラス、インスタンス
- 5. 例の経営統合のニュースをAmazon Transcribeに文字起こしさせてみた
- 6. Google Cloud Run がGAになった記念に株の自動売買を目指す(多分)
- 7. python仮想環境(venv)にインストールしたjupyter-labを使う
- 8. python3.8 venv環境でjupyter notebook
- 9. ディープラーニング G検定 の勉強法
- 10. いつのまにかGoogle ColabのGPUにP100-PCIE-16GBが追加されていた件
- 11. Google Colaboratory上でmusic21を利用
- 12. ModuleNotFoundError: No module named ‘flask_sqlalchemy’
- 13. Filmarksからのデータ抽出を目的としたウェブスクレイピングの勉強 #2
- 14. ナイーブ・ベイズ分類器で機械に善悪を教える(草稿段階)
- 15. 字幕から文字抽出してみた(OpenCV:tesseract-ocr編)
- 16. AtCoder DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選 参戦記
- 17. pythonで一から画像処理 (4)輪郭抽出
- 18. python デコレータについて
- 19. Mecab(形態素解析)で遊んでみた!
- 20. pythonでHerokuを使ってTwitterで特定ワードが呟かれたらSlack通知する
PythonとLOUDSによるTRIE木の実装
# 概要
PythonでTRIE木を実装した
TRIE木を作成する上でデータ構造にLOUDSを使用している# TRIE木
– TRIE木とは、文字列の集合を順序付きの木構造で表したもの
– ノードとエッジから構成され、各ノードの位置とキー(検索文字列)が対応している
– ルートノードには空文字列が対応している![TRIE木](https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Trie_example.svg/256px-Trie_example.svg.png)
### TRIE木の特徴
– 高速な辞書検索:木の大きさに関わらず定数時間で検索することができる
– メモリを節約:ノードにキーが格納されないため、複数のキーでノードを共有することができ、メモリを節約することができる
– 効率的なプレフィックス検索:複数のキーでノードを共有しているため、親ノード(プレフィックス)に紐づく子ノードの検索も効率的に行うことができるTRIE木はその特徴から、かな漢字変換や自動補完などに使用されている
#
PythonによるTRIE実装 ~ダブル配列(Tailあり)~
# 概要
Python上でダブル配列を実装し、そのメモリ使用量、検索時間を測定します。
性能評価をするにあたって、いろいろと検索してみたのですが、今一つ納得のいく実装が見当たらなかったので、自作することにしました。
なお、本来なら、ダブル配列の作成過程の効率も考えるべきですが、今回はそこは重視しません。あくまでも、出来上がったダブル配列の性能を評価することを目的としています。(したがって、動的な追加についても対象外です。)
また、ファイルでの運用も考慮していません。メモリ上で作成し、そこで性能測定を行います。#TRIE構造
文字列データを管理する方法のひとつで、効果的な速度で検索を実現することができます。
理論的にはシンプルな構造なのですが、実装方法によってはさほど効果が出ない場合もあります。– [トライ木 (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%82%A4%E6%9C%A8)
「ダブル配列」はそのTRIE構造の実装方法の一つで高速な検索が実現できます。
#ダブル配列
面接スケジュールの最適化
#問題設定
##面接の日程調整における課題
採用候補者と面接担当者の日程調整を、従業員が担当する場合がある。
管理者は各従業員に対して以下の点に留意しなければならない状況を想定する。・営業の勤務可能な日時の把握
・面接を担当する回数の偏りをなるべく減らす
・営業の得意分野と応募者の得意分野を近づける
・夜遅くに面接を担当することが続かないようにする面接を担当する従業員のスキルなどを考慮してシフトスケジュールを作成する必要がある。そのため、管理者への大きな負荷が発生している。
##問題の解決
組合せ最適化技術を使い、問題の解決をおこなう。
・シフトスケジュール作成の自動化による管理業務負荷の低減
・従業員どうしの相性を考慮することで、全体の作業効率を向上させる。
(例えば、営業Aと候補者Bが面談をすると内定受諾率が高まるなど)
・営業全体の作業効率を目的関数とし、全日程の全体最適化をおこなう。##開発方針
・複数の手法による最適化プログラムを開発し、それぞれの対応できる問題規模、計算速度、解の最適性を比較評価する。・面接担当者と応募者の相性については得点方式として人
pythonのクラス、インスタンス
##クラスとインスタンス
###クラスとインスタンスの関係
クラスはモノを生成するための設計図、インスタンスはそのモノのこと
###インスタンスを生成するステップ
クラスを用意⇨クラスからインスタンス生成⇨インスタンスに情報追加
###クラスの定義
**class クラス名:**
クラスの中身は『class クラス名:』の後の行でインデント
処理を追加する必要がない場合は**pass**と書く
###インスタンスの作成
**クラス名()**でクラスを呼び出し、クラスを用いて新たなインスタンスを生成できる
**変数名 = クラス名()**とすることで、生成したインスタンスを変数に代入することができる###インスタンスに情報を与える
下のコードのようにfruit.name = “バナナ”とする事でfruit1にnameがバナナとであるという情報を追加
このときのnameを**インスタンス変数**という
**インスタンス.インスタンス変数名**とすることで、そのインスタンス変数の値を用いることができる“`python.py
class Fruits:
passfruit1
例の経営統合のニュースをAmazon Transcribeに文字起こしさせてみた
## はじめに
AWSの自動音声認識サービス[Amazon Transcribe](https://aws.amazon.com/jp/transcribe/)が日本語に対応したとのことで、日本語音声を入力して文字起こしを試してみました。
## 題材
以下のニュース動画を利用しました。
– [YahooとLINE 統合を発表 – テレ東NEWS](https://www.youtube.com/watch?v=ndMhJZF6mjM)
1人のアナウンサーが1分間ほどニュースを読み上げる内容となっていて、複数人による会話などはありません。
## 文字起こし方法
Transcribeは、
– マネジメントコンソール
– AWS CLI
– AWS SDK for Python (Boto)にて利用できますが、今回はAWS CLIを使ってみます。
### 1. 変換をリクエストする
あらかじめ以下のJSONを用意しておいた上で、`aws transcribe start-transcription-job`を実行します。
“`json:request.json
{
Google Cloud Run がGAになった記念に株の自動売買を目指す(多分)
#目指すゴール
目指すのは、日経225オプション取引を自動化すること。
普段は、予定とか考えないが、今回は以下のような予定で、進めてみたい。
制限と選択と集中が良いとどこかの記事で読んだので、1記事あたりにかける時間は、1時間までと決め、内容に不足があっても次の機会に作業する。30分に1度は休憩することも忘れずに。
期限は2020/5/31としてみる。(遅っそ)
コンテナは、全くわからないので、以下の作業を進めていく中で理解できたらいいなくらいで進めてみる。##1.技術的に使うものを決める。(自分に使えそうなものだけ)
- [Google Cloud Run(フルマネージドのサーバーレス)](https://cloud.google.com/blog/ja/products/serverless/knative-based-cloud-run-services-are-ga)
- Python3 (Flask) Flaskは、[Quickstart: Build and Deploy](https://cloud.google.com/run/docs/quickstart
python仮想環境(venv)にインストールしたjupyter-labを使う
すでにQiitaにも投稿がありましたが、情報が点在していたので整理しました。
ポイントは2つです。
* 仮想環境にインストールしたカーネルを使う
* 実行環境(python)のパスに仮想環境を追加するわかってしまうと当たり前なんですが、調べずに元の環境にインストールしてしまうことが多いです。
### 環境
* MacOS 10.15.1
* python 3.7.4 (pyenv/anyenv)### 仮想環境作成
仮想環境を作成するモジュールはインストール済みとします。
“`
$ virtualenv test
$ source test/bin/activate
$ pip install keras
$ pip install jupyterlab
“`### 仮想環境にカーネルをインストール
“`
$ pip install ipykernel
$ ipython kernel install –user –name=test
“`### 実行
jupyter-labを起動します。
“`
$ test/bin/jupyter-lab
“`
python3.8 venv環境でjupyter notebook
> 20191124時点の情報。眠いから死ぬほど淡白に書く。
起動まで。
# python install
割愛 pyランチャーを使ってるのでpythonまでのpathは通してない。# venv環境作成
環境作成。ついでにactivateする。コンソールはgit-bash。$py -m venv hoge
$cd hoge/scripts
$source activate# venv環境下にjupyterをインストール
pipをアップデートして、jupyterをインストールする。(hoge) $pip install -U pip
(hoge) $pip install jupyter# jupyterを起動、エラー。
(hoge) $jupyter notebook
死ぬほどエラー吐かれた。要はここ。
raise NotImplementedError
# tornado配下のasyncio.pyに追記する
エディターは好きなの選んで。というかコンソールからやる必要もない。(hoge)
ディープラーニング G検定 の勉強法
## ディープラーニング G検定の勉強法
2019/11/9に実施された**ディープラーニング G(ジェネラリスト)検定#3**を受験し無事合格できましたが、その勉強法などをまとめたいと思います。## G検定とは
・目的:ディープラーニングを事業に活かすための知識を有しているかを検定する
・受験資格制限:なし
・試験概要:120分、知識問題(多肢選択式)、オンライン実施(自宅受験)
・出題問題:シラバスより出題## 受験目的
本職は生産技術系のエンジニアをしており、データサイエンスなどの業務もしていて、データ分析や、機械学習やディープラーニングを用いた画像認識のシステムなど製作もしています。本などで学習していますが、体系的に学び直したいとの思いで受験しました。資格を取ることで、今後の仕事でメインにやっていきたいとの意志と実力があることを示す意図もありました。## 学習期間
試験3週間前から試験勉強を開始。ただし、AI関連の本はもともと多く読んでおり、また機械学習やDeepLearningの実装経験もあり。Udemyの関連講座などは数年前から受講していた。
その
いつのまにかGoogle ColabのGPUにP100-PCIE-16GBが追加されていた件
※※この記事は2019/11/24の時点での話になります。
もうみんな知ってるのかもしれないと思いつつも。。。。## Google colabのGPUガチャについて
GPUのガチャがあるのはよく知られているかと思います。
詳しくは下記参照。
https://qiita.com/koshian2/items/d33edc963ed6cfcad77e## きっかけ
なんかいつもより早いなあっと思ってGPUを調べたら下記の通りP100が追加されてました。
![キャプチャ2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509891/beae0c9d-3b53-19bc-cca9-dec2fee0097f.jpeg)## GPU速度比較
早速ですが、訓練速度比較してみました。
使用したコードはGoogleSeedbankから適当に拾ってきたpix2pixのコード
https://research.google.com/seedbank/seed/pixpix_with_eager_executio
Google Colaboratory上でmusic21を利用
#はじめに
Jupyter上で楽譜が表示できると聞いて、[music21](http://web.mit.edu/music21/doc/about/what.html)というパッケージを試してみた。
[Google Colaboratory](https://colab.research.google.com/)上で表示させるのに手間取ったので備忘録として残しておく。#インストール方法
X virtual framebufferを以下のコードのように設定をすることで、Colaboratory上でも楽譜が表示されるようになる。“`python:setup.py
# music21のインストール(Jupyterと共通)
!pip install –upgrade music21
!apt-get install musescore
# 仮想フレームバッファの設定(Google Colaboratoryで必要な設定)
!apt-get install xvfb
!sh -e /etc/init.d/x11-common start
import os
os.putenv(‘DI
ModuleNotFoundError: No module named ‘flask_sqlalchemy’
pyenvの仮想環境でflaskを使ってデータベースを扱おうとしている.
データベースはSQLalchemyってのと、postgrewみたいなのを使おうとしてるけどずっと冒頭のエラーがでる。
requirements.txtを変更してデプロイしてるのになぜ?⇨pip install flask-sqlalchemyをpipenv install flask-sqlalchemyにしてデプロイし直したらこのエラーは消えたかも
新しいエラー出たけど
以上。
追記:と思ったらやっぱエラーでたわ。なんやねんこいつう。
Filmarksからのデータ抽出を目的としたウェブスクレイピングの勉強 #2
ホームページ:https://program-board.com
最終目標:Filmarksより年代別で高評価となっている映画一覧の作成を目的としたデータ抽出を行う.
本稿では,特定のページでの複数の項目についての情報を抽出する.抽出する映画はまだ1つです.##ソースコードの確認
前回と同様に,抽出したい情報のソースコードを確認する.
本稿では,以下の情報を抽出します.・映画タイトル
・上映日
・製作国
・上映時間
・ジャンル(3つまで)
・星(評価)
・監督
・脚本(2人まで)
・出演者(3人まで)“`python
import requests
import bs4
import pandas as pd# ウェブの情報を取得
url= ‘https://filmarks.com/list/trend’
res = requests.get(url)# HTMLの整形
soup = bs4.BeautifulSoup(res.text) #features=’lxml’)
“`##1作品のみの情報を抽出
とりあえず,表示画面の冒頭作品
ナイーブ・ベイズ分類器で機械に善悪を教える(草稿段階)
##コンピューターに善悪を教える方法
タイトルの通り、コンピューターに**「善悪を教える」**方法を確立していきたいと思います。これが実現すれば機械が非・倫理的な人間に代わって倫理的な正しい判断を自動でできることになり、犯罪の軽減やテロの抑止等々、社会の改善に大きく貢献することができるでしょう。私の知識の限界もあり今回は簡単なナイーブ・ベイズ分類ができるライブラリーを用いていますが、ゆくゆくは機械学習全般に応用できるように枠組みを整えていきたいと思います。##そもそもコンピューター教えたい善悪・倫理とは?
まず、コンピューターに教えてあげたい倫理とはいかなる倫理かを明確にします。
コンピューターに百科辞書的に人間の行為全般の、あるいは哲学的・文化的な善し悪しをすべて理解させるのは非常に難しいので(本気でそれを目指している人もいるでしょうが)実践的・応用的な面は捨象しまずは普遍的に当てはまるような「善さ・正しさ」というものを考えてみたいと思います。##義務倫理学が機械学習に適している
結論から言うと、コンピューターに学習させるのに最も適しているのは[ドイツの哲学者・イマニュエル=
字幕から文字抽出してみた(OpenCV:tesseract-ocr編)
# はじめに
ここでは政見放送の下に表示される字幕から文字を抽出してみようと思います。
背景が何もないので二値化でなんとかなりそうです。google cloud vision API で 文字抽出するとかなりの精度で文字と配置(position)を取得することはできるのですが、ここでは他の方法で文字を取得しようと思います。
# tesseract-ocr / pyocr
最初に `tesseract` と `pyocr` を使って文字認識させてみます。
ソースの画像です。
下記のスクリプトで文字と位置を抽出します。
“`Python
import sysimport pyocr
import pyocr.buildersimport cv2
from PIL i
AtCoder DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選 参戦記
# AtCoder DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選 参戦記
## A – DDCC Finals
4分で突破. 書くだけ. ARC の A 問題ってこんなに簡単だっけ?
“`python
X, Y = map(int, input().split())def f(n):
if n == 3:
return 100000
elif n == 2:
return 200000
elif n == 1:
return 300000
else:
return 0result = f(X) + f(Y)
if X == 1 and Y == 1:
result += 400000
print(result)
“`## B – Iron Bar Cutting
26分で突破. WA 1個.
切れ目の位置を p、棒の長さを l とすると、p が真ん中より左にある場合は、左にその長さの差である (l – p) –
pythonで一から画像処理 (4)輪郭抽出
基本となる画像処理を一から勉強していくシリーズ (4)。
OpenCV-Pythonチュートリアルを参考に、
画像認識本 https://www.amazon.co.jp/dp/4061529129/
でやっている処理の理解を進める方針です。#目次
1. 環境
2. 輪郭抽出
3. 輪郭近似
4. 外接図形#環境
Python 3.7.0
OpenCV 4.1.0
Jupyter Notebook#輪郭抽出
2値化したパンダ画像に対して輪郭抽出を実行。
findContoursの返り値contoursは輪郭毎の座標組、hierarchyはその輪郭の階層構造が入る。
今回は輪郭を2階層にした。
元のパンダ画像に輪郭を描画した。“`python:rinkaku.py
import cv2
import numpy as np
from matplotlib import pyplot as plt
from pylab import rcParams #画像表示の大きさを変える
%matplotlib inline
rcParams[‘figure.figsize’
python デコレータについて
# デコレートとは
入力として関数を一つ取り、別の関数を返す関数。
関数の前後で何かしたいときに使用する。# 使用例
“`python:例
# デコレータ
def test(func):
def new_func(*args, **kwargs):
print(“start”)
result = func(*args, **kwargs)
print(“end”)
return result
return new_func# デコレータ対象
# アノテーションをつけることにより、デコレートされる
@test
def greeting():
print(“Hello”)greeting()
“`“`python:結果
start
Hello
end
“`“`python:例
# デコレータについて
# dumpが呼び出されてfunc=doubleとして実行
def dump(func):
“入力引数と出力値を表示する”
def wrapped(*ar
Mecab(形態素解析)で遊んでみた!
# はじめに
MeCabを使う場面が出てきたので備忘録として投稿
MeCabのインストール方法から出力までをまとめてみた
お品書きは下記の通り
* MeCab(形態素解析)とは
* MeCabのインストール方法
* 実際に動かしてみた
* 出力フォーマットについて
* おわりに# MeCab(形態素解析)とは
### MeCab
[MeCab][1]とは、京都大学情報学研究科によって開発されたオープンソース形態素解析エンジンのこと
perl, ruby, python, java, C# で使用できる### 形態素解析
対象となる言語の文法や単語の品詞情報をもとに、文章を形態素に分解する解析
自然言語処理分野で事前処理として用いられる手法
※**形態素** … 意味をもつ表現要素の最小単位例えば
「私はpythonを使用して、プログラミングを勉強しています。」
と入力すると、以下のように出力される|単語|品詞|品詞細分類||単語|品詞|品詞細分類|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|私|名詞|代名詞||プログラミング|名詞|サ変接続
pythonでHerokuを使ってTwitterで特定ワードが呟かれたらSlack通知する
**2019年11月23日に記載した記事です。**
こんにちは。 [@kosukeobata](https://twitter.com/kosukeobata)です。
最近はPdMやマーケターという肩書きが多いのですが、エンジニアリングも再開したので、ちょっとばかし投稿してみます。今回は特定のワードがTwitterで呟かれたら、Slack通知するBOTの作り方について記載します。
GitHubであまり綺麗とは言えないですが、ソースコードを公開しているので、そちらを参照しながら作っていただけるかなと思います。
https://github.com/kosukeobata/twitter-bot
## ■ 要件
– 特定のワードがTwitterに投稿されたら、Slack通知されること。
– 重複したツイートidのツイートは通知されないこと。
– リアルタイムでの通知ではなくてよい。## ■ 技術周り
– python
– sqlite3
– Heroku
– Twitter API
– SlackのWebhook## ■ やっていること
HerokuのSchedularという