- 1. Python初心者がヒープソートを整理する
- 2. leet code easy Roman to Integer Approach 1: Left-to-Right Pass
- 3. jupyter notebookで NotADirectoryError: [Errno 20] Not a directory: ‘xdg-settings’が出たときの対処法
- 4. シェルに入るだけでEC2インスタンスが見れるようにPythonとxonshでよしなにした
- 5. nwdiagオフラインインストールで困ったこと
- 6. leet code Palindrome Number(easy)
- 7. LINE Messaging APIを使用したボット開発
- 8. sklearn の pca.components_ は主成分と特徴量との相関係数で因子負荷量と呼ばれる
- 9. シミュレーテッド・アニーリングでボルツマンマシンを使用して簡単な巡回セールスマン問題を解く
- 10. Pythonで複数のリストの重複を抽出する
- 11. 爆速python-fire
- 12. クイックソート2|リスト内包表記で簡単に
- 13. 文字が1要素として格納されているリストを文字列にする
- 14. クイックソート|大きい順
- 15. 玄関2ロックのセサミをAWS IoTボタン1回押しで解錠できるようにしてみた
- 16. エクセルが苦手な人のために簡単な表計算アプリを開発した
- 17. Python: CNNを用いた画像認識の応用
- 18. 【言語処理100本ノック 2020】第8章: ニューラルネット
- 19. ゼロから始めるLeetCode Day51 「647. Palindromic Substrings」
- 20. 標準入力をコード中に記述する
Python初心者がヒープソートを整理する
###これは備忘録です
基本情報を取って以降まったく触っていなかったのでヒープソートってどんなだっけ?って思い知識の整理をしながらメモをしようと思った。
#~~パクる~~ 引用させていただく
なんにしてもアルゴリズムを一から作ることもできなくはないが正直しんどいので[[参考:A]](https://webbibouroku.com/Blog/Article/py-heapsort)のサイトから引用し、自分で分解しながら整理しようと思う。#そもそもヒープソートって?
大体のルールを画像でメモしました
![heap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650016/bf8c4666-cc72-2a8e-0906-4744817fa102.png)
~~なんでこんなにややこしいことを考えたかは知らないけど~~配列の操作関係上、上下の操作がしやすいらしい。木構造はOracleDBとかでも使っているらしいし(うるおぼえ)、データの検索効率がいいらしい。三つの求め方に関しては覚えるべき点だと思うの
leet code easy Roman to Integer Approach 1: Left-to-Right Pass
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.Roman numerals are usually written largest to smallest from left to right.
jupyter notebookで NotADirectoryError: [Errno 20] Not a directory: ‘xdg-settings’が出たときの対処法
## 実行環境
– Mac Catalina
– python=3.8.1
– jupyter-notebook=6.0.3
– anacondaの仮想環境を使用## エラーの中身
jupyter notebookを開こうとしたら以下のようなエラーが出た。“`
……
NotADirectoryError: [Errno 20] Not a directory: ‘xdg-settings’
“`## 改善方法
1. エラー文に含まれている`webbrowser.py`(絶対パスが書かれてるはず)を開く。
1. `webbrowser.py`の中で`xdg-settings`を調べる。(自分の環境では534行目)
1. そこから少し上(自分の環境では15行上)にある`if sys.platform[:3] == “win”:`を`elif sys.platform[:3] == “win”:`に変更する。
1. 変更を保存後、再度jupyter notebook を実行すると開けるようになっている!!## 参考文献
– https://github.com/
シェルに入るだけでEC2インスタンスが見れるようにPythonとxonshでよしなにした
# はじめに
みなさんはTerraformの勉強は進んでますか?(威圧)
僕は始めたばかりで今必死に[この本](https://www.amazon.co.jp/実践Terraform-AWSにおけるシステム設計とベストプラクティス-技術の泉シリーズ(NextPublishing)-野村-友規-ebook/dp/B07XT7LJLC)を読んでいます
結構楽しいし、AWS環境が自由に触れるとインフラの勉強が捗るのでいいなぁと思っている今日この頃ですが、勉強環境に一つだけ不満がありました– [実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing)) | 野村 友規 | 工学 | Kindleストア | Amazon](https://www.amazon.co.jp/実践Terraform-AWSにおけるシステム設計とベストプラクティス-技術の泉シリーズ(NextPublishing)-野村-友規-ebook/dp/B07XT7LJLC)
### いちいちAWSのコンソール見るのめんどくさすぎ!!!
書籍でも書
nwdiagオフラインインストールで困ったこと
# nwdiagオフラインインストールで困ったこと
会社環境に[->nwdiag](http://blockdiag.com/ja/nwdiag/index.html)を設定した際つまづいたのでメモ。
## 作業環境
* OS
– Windows 10 Enterprise(build 17763)
* 最終的なソフトウェア環境
– Python 3.8.3(Windows版)
– pip 19.2.3
– pillow 6.2.2(CP38 x64)
– 他依存関係にあるものは2020年6月5日時点の最新版## やったこと
自宅のオンライン環境であれば、`pip install nwdiag`コマンド1行でインストール完了となるのですが、制限がある会社環境上そうはいきません。上記コマンドを打つと、プロキシサーバとの接続タイムアウトとなるため、まずプロキシを突破しようと試みます。
“`
## 中略 ## Connection to “プロキシサーバ” timed out.
“`
とりあえず、自動構成スクリプトファイル(.pac)から、プロキシサーバ
leet code Palindrome Number(easy)
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
##brute force
“`python
class Solution:
def isPalindrome(self, x: int) -> bool:
for i in range(len(str(x))):
x = str(x)
if x[i] != x[len(str(x))-i-1]:
return False
if int(x) < 0: return False else: return True ``` ##bit faster solution ```python class Solution: def isPalindrome(self
LINE Messaging APIを使用したボット開発
# 前提条件
Homebrew 環境構築済み
Python 環境構築済み
LINEの個人アカウントを持っている
環境は以下で実施いたしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160605/e286dc59-2d20-b3e3-3ba1-c3e9f8075ffa.png)# LINE Developersアカウント~チャネルの作成の準備
こちらを参考にチャネル作成まで行う。
https://developers.line.biz/ja/docs/messaging-api/getting-started/#%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90#ソースコードを作成する。
こちらを参考にソースコードを作成し、herokにデプロイする。
https://qiita.com/suigin/items/0deb9451f45e351acf92
※上記の記事で、pip install部分は
sklearn の pca.components_ は主成分と特徴量との相関係数で因子負荷量と呼ばれる
伝えたい事は表題に書きました。
sklearn のPCAに関する記事を見ていると、“pca.components_“の意味の説明についてはあやふやな感じでさらっと流されている事が多かったのでここに書いてみました。
もう少し知りたい方はこのPDFの25ページ目あたり以降を見てください。
[Microsoft PowerPoint – 統計科学研究所_R_主成分分析.ppt ](https://statistics.co.jp/reference/software_R/statR_9_principal.pdf#page=25)
シミュレーテッド・アニーリングでボルツマンマシンを使用して簡単な巡回セールスマン問題を解く
## :blue_car: この記事の目的
**焼きなまし法(Simulated Annealing:シミュレーテッド・アニーリング)**を応用し、組合せ最適化問題の代表的な問題の一つの巡回セールスマン問題を解きます。
さらに、計算モデルとしてボルツマンマシンモデルを採用し、Pythonでプログラミングを行い、最適解を求めます。## :blue_car: 焼きなまし法の理論について
ここで取り上げる焼きなまし法に関する数式や基本理論については、下部「出典」に記載の参考書「最適化アルゴリズム」(P120~)に詳細の説明がありますので、ここでは割愛させて頂きます。
主にプログラミングを中心に記事にしたいと思います。## :blue_car: 簡単な巡回セールスマン問題
巡回セールスマン問題として、こちらで取り組んだ問題と同じ問題を使用します。
■遺伝的アルゴリズム(GA)とそのライブラリ(vcopt)で巡回セールスマン問題を解く
https://qiita.com/ttlabo/items/9b00a29702d1205f6996以下のような、各行が都市名、各列が訪問
Pythonで複数のリストの重複を抽出する
似たような記事はいくつかありますが`collections.Counter`を使う方法が簡単だと思うので置いておきます。
“`python
from collections import Counterhoge = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
fuga = [‘c’, ‘d’, ‘e’, ‘f’, ‘g’]Counter(hoge + fuga)
# => Counter({‘a’: 1, ‘b’: 1, ‘c’: 2, ‘d’: 2, ‘e’: 2, ‘f’: 1, ‘g’: 1})# 2つ以上の要素
[k for k, v in Counter(hoge + fuga).items() if v > 1]
# => [‘c’, ‘d’, ‘e’]
“`
爆速python-fire
[python-fire/guide.md at master · google/python-fire · GitHub](https://github.com/google/python-fire/blob/master/docs/guide.md)
– pythonでcliをクソ簡単に作成できるgoogle製ライブラリ
– argparserとか使ってたのがアホらしくなるほど簡単## 基本
関数をfireに渡して呼べば終わり。“`python
import firedef hello(name=”World”):
return “Hello %s!” % nameif __name__ == ‘__main__’:
fire.Fire(hello)
“`上のコードは下のようにcliコマンドに早変わり。
“`shell
python hello.py # Hello World!
python hello.py –name=David # Hello David!
“`クラスを渡すとメソッドをcliから呼べる。
“`python
クイックソート2|リスト内包表記で簡単に
#Pythonの強み
##リスト内包表記でクイックソート
“`Python3:quickSortSimple.py
data = [26,13,32,65,76,22,43,87,14,59]def QuickSort(data):
if len(data) <= 1: # データが1個ならソートする必要ない return data # 基準となるデータ(ピボット)としてリストの先頭の値を使用 pivot = data[0] # ピボット以上のデータでリスト作成 left = [ii for ii in data[1:] if ii >= pivot]
# ピボット未満のデータでリスト作成
right = [ii for ii in data[1:] if ii < pivot] left = QuickSort(left) # 左側のソート right = QuickSort(right) # 右側のソート # ソート済みデータとピボットとを合わせて返す return
文字が1要素として格納されているリストを文字列にする
# やりたい事
①文字列を1つ1つ要素としてリストに入れる
②1つ1つ要素としてリストに入れた文字を文字列にする。“`python:
#①文字列を1つ1つ要素としてリストに入れる
‘Hello’
↓
[‘H’, ‘e’, ‘l’, ‘l’, ‘o’]#②1つ1つ要素としてリストに入れた文字を文字列にする。
[‘H’, ‘e’, ‘l’, ‘l’, ‘o’]
↓
‘Hello’“`
# 動作
## 前提
“`python:プログラム
strs = ‘Hello’
print(strs)
print(type(strs))
“`“`:出力
Hello
“`## ①文字列を1つ1つ要素としてリストに入れる
やる事:**list()**に入れるだけ“`python:プログラム
strs = ‘Hello’
strs_list = list(strs) #←ここだけprint(strs_list)
print(type(strs_list))
“`“`:出力
[‘H’, ‘e’, ‘l’, ‘l’, ‘
クイックソート|大きい順
#クイックソートを実装する
最初に「26」を基準の数(ピボット)とする。
「26」より大きい物をLeftへ
「26」より小さい物をRightへセットする。
左と右に分けられるので
それぞれ分けられたリストを同様の処理をしていく。
Left[32, 65, 76, 43, 87, 59]
Right[13, 22, 14]次にLeftがソーティングされますがピボットは先頭の「32」です。
これを繰り返すことで下の結果の通りになります。“`Python:QuickSort.py
data = [26,13,32,65,76,22,43,87,14,59]def QuickSort(data):
if len(data) <= 1: # データが1個以下ならそのまま値を戻す return data # 基準となるデータ(ピボット)としてリストの先頭の値を使用 pivot = data[0] left, right, same = [], [], 0 # 初期化(リスト、リスト、0) for ii in data:
玄関2ロックのセサミをAWS IoTボタン1回押しで解錠できるようにしてみた
# 背景など
## 本記事の位置づけ
以前にここで[玄関2ロックのセサミを1ボタンで解錠するIFTTTボタンを作ってみた(AWS Lambda経由)](https://qiita.com/nt_namazu/items/0986a2b6bad8d26a34ed)という記事を書いたのですが、そのときに作ったLambda関数を応用して、こんなこともできるようにした、という感じの記事です。## 先行事例
セサミの発売元であるCandyhosueさんが2018年に[記事](https://ameblo.jp/candyhouse-inc/entry-12416231560.html)を出しており、筆者もこれを一度ハンズオンしてみました(AWS IoTボタンはその際に買ったもの)。しかしこの記事の手法だとセサミを1台しか解錠できないというものだったので、ボタン1発で2つのセサミを解錠したいなあ、と思ってこの記事の手法を作りました。## AWS IoTボタンってなに
[こんなやつ](https://www.amazon.co.jp/dp/B075FPHHGG/ref=cm_sw_em_r_
エクセルが苦手な人のために簡単な表計算アプリを開発した
Python で表計算アプリを開発した。NumPy と pandas を利用している。
[表計算アプリ](https://math.myserif.com/search?query=t)
## 使い方
* ヘッダーのフォームに t を入力
* 左のテキストエリアにタブ区切りのデータを貼りつける
* 青い矢印のアイコンをクリックするか、カーソルがフォームにフォーカスされた状態でエンターキーを押す説明のために次のデータを使う。
“`
Country Area Population
Russia 17,098,242 145,934,462
Canada 9,984,670 37,742,154
United States 9,833,517 331,002,651
China 9,596,960 1
Python: CNNを用いた画像認識の応用
# データのかさ増し
## ImageDataGenerator
画像認識では、画像データとそのラベル(教師データ)の組み合わせが大量に必要となります。
しかしながら十分な数の画像とラベルの組み合わせを用意する事は
しばしばかなりのコストがかかります。そこで、データの個数を十分量に増やす際に行われるテクニックとして
“`
画像の水増し があります。
“`画像の水増しといっても、ただ単にデータをコピーして量を増やすだけでは意味がありません。
そこで、例えば画像を 反転 したり、ずらし たりして新たなデータを作り出します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430767/57e39c81-20b5-6e46-ea38-54913be675bc.png)
ここでは、Keras の ImageDataGenerator を使って水増しを行っていきます。
ImageDataGenerator には多くの引数があり、それらを適切に指定することで
簡単にデー
【言語処理100本ノック 2020】第8章: ニューラルネット
## はじめに
自然言語処理の問題集として有名な言語処理100本ノックの[2020年版](https://nlp100.github.io/ja/)が公開されました。
この記事では、以下の第1章から第10章のうち、「第8章: ニューラルネット」を解いてみた結果をまとめています。– [第1章: 準備運動](https://qiita.com/yamaru/items/6d66445dbd5e7cef8640)
– [第2章: UNIXコマンド](https://qiita.com/yamaru/items/b809e6d66f9efcfb34d7)
– [第3章: 正規表現](https://qiita.com/yamaru/items/255d0c5dcb2d1d4ccc14)
– [第4章: 形態素解析](https://qiita.com/yamaru/items/e06014b146a18e97ca59)
– [第5章: 係り受け解析](https://qiita.com/yamaru/items/48dcc527f433c22e0af9)
– [第6章: 機械学習](htt
ゼロから始めるLeetCode Day51 「647. Palindromic Substrings」
#概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。その対策としてLeetCodeなるサイトで対策を行うようだ。
早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイト。
せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。
[Leetcode](https://leetcode.com/)
[ゼロから始めるLeetCode 目次](https://qiita.com/KueharX/items/6ee2502c3b620c795b70)
前回
[ゼロから始めるLeetCode Day50「739. Daily Temperatures」](https://qiita.com/KueharX/items/eccc225ccab38969e23d)今はTop 100 Liked QuestionsのMediumを優先的
標準入力をコード中に記述する
例えば標準入力のテストをしたい時など、毎回入力するのも面倒だし、かといって外部ファイル読み込むのもゴミが増えるだけ
なるべく元のコードを汚さずにテストしたい場合、input()をオーバーライドするのがよさそう以下のようにテストしたい標準入力の中身を書いておいて、
“`python
stdin_test = “””1 2
3 4
5 6
“””
“`ジェネレータでinput()をオーバーライドする
“`python
def inp(t):
from io import StringIO
for i in StringIO(t):
yield i
input = inp(stdin_test).__next__
“`使用例
“`python
a = [list(map(int, input().split())) for i in range(3)]
print(a)>>> [[1, 2], [3, 4], [5, 6]]
“`もっといいやり方がある気がしないでもない
おわり