- 1. 8週間で150問解いた私がお勧めする、LeetCodeで始める競技プログラミング
- 2. Pythonで二分探索を書く
- 3. 初心者がWordファイルを一括でPDFに変換してみる
- 4. Python OpenCVを使ってマークシートの読み取り作成(うまく読み取りするコツ)
- 5. Kerasを使ってCNNでルーン文字の手書き文字認識をやってみた
- 6. AWS CDK (Python) を使ってAPI Gateway + LambdaでPOSTを受け取る
- 7. Pythonのloggingモジュールを使ってロギングについて学ぶ①
- 8. Pythonで内外判定➁:ドーナツ型ポリゴンについて
- 9. pythonをWindowsにインストールせずにchromeを操作する環境構築手順(selenium使用)
- 10. Python(Kivy)で作るオセロアプリ(iOSアプリ)
- 11. Kaggle備忘録 ~NLP with Disaster Tweets第一回~
- 12. pylintでワイルドカード指定が動かないとき
- 13. Twitterで20倍ファミチキを当てやすくする方法をPythonで発見しました
- 14. ディープラーニングを学び始めた方へ 東京大学/松尾豊教授の動画
- 15. ArcFaceによる画像分類の超(簡潔な)まとめ
- 16. 区間DP(だるま落とし)の説明記事を個人的に咀嚼してみた
- 17. PythonのMatplotlibで二次関数のグラフを描写する
- 18. モンテカルロ法入門
- 19. 優勝コードから学ぶ―メルカリコンペ編①―
- 20. 任意のディレクトリ配下のCSVファイルをすべてDataFrameに落とし込む
8週間で150問解いた私がお勧めする、LeetCodeで始める競技プログラミング
# はじめに
こんにちは。皆さんは競プロしていますか。
私はついこの間までずっと、「競プロやるやる詐欺」を続けていました(笑)。競技プログラミングに興味がありつつも、「コンテスト参加のハードルが高い」などと言い訳を見つけては逃げ続けて早二年が経ち、「これではコンピュータサイエンスの基礎知識がいつまでも身につかない」と危機感に迫られ始めたのがきっかけです。
今では次のような状態になりました。
– LeetCode / AtCoder(ABC)をメインに、なるべくコンテストに参加
– それ以外の時間は LeetCode Problems を解く
– AtCoder ABC はボロボロの4完、 LeetCode は3完が限界今回はゼロから競技プログラミングを始めた私が
– どんな過程を経たか
– これから競技プログラミングに参入する方へのおすすめ学習法を中心に解説したいと思います。
# TL;DR
– LeetCode の Easy 問題から解くのがおすすめ
– 競技プログラミングを続けることで、以下の効用がある
– **時間計算量 / 空間計算量を意識したコー
Pythonで二分探索を書く
# TL;DR
– 基礎的な点でありますが、しっかり頭に入れておくためPythonで二分探索のコードを書いたり説明をまとめたりしていきます。
– 勉強のため自前でコードを書いて進めます(二分探索用の標準モジュールなどは使わずに)。
– 元々デザイン方面の学校卒なので、コンピューターサイエンス方面で知識的に雑な点などはご容赦ください。# つかうもの
– Python 3.8.5
– VS Code# 二分探索とは
二分探索とはソート済みの配列に対する値の検索のアルゴリズムの一つです。
バイナリサーチ(binary search)とも呼ばれます。検索対象の配列がソート済みという条件が付きますが、通常の検索よりも対象のリストが巨大になっても検索が遅くなりにくいという性質を持ちます。
方法としては、まずリストの中央に位置している値を取得し、その中央の値が検索対象の値と比べて大きいのか小さいのかを比較します。
検索対象の値が配列の中央の値よりも小さい場合には、今度は左端から中央の値の手前の範囲に配列の範囲を絞り込みます。
逆に検索対象の値が中央の値よりも大きい場合には今度
初心者がWordファイルを一括でPDFに変換してみる
# 取り組みのきっかけ
仕事柄よくWordを使って書類を作るのですが、
ペーパーレス化の推進、グループウェア導入を経て、
「WordファイルをPDFにして書類を一元管理しよう!!」という上司の一声でスタート。いくつあるかわからない無数の「.doc」「.docx」との戦いが始まる…
もちろん社内でpython使える人はおらず、それとなくやってみました。# 実装
“`python
import win32com.client
import os
#必要なモジュールをインストールするwd = win32com.client.Dispatch(‘Word.Application’)
#「Wordを操作する」という宣言documents_path = ‘C:/test/’
word_list = []
#ファイルが保管されているフォルダのパスを設定
#word_file_nameを格納する空のリスト(word_list)を作成for word_file_name in os.listdir(documents_path):
if os.path.isfile(o
Python OpenCVを使ってマークシートの読み取り作成(うまく読み取りするコツ)
紙のアンケートを仕事で行うことになったため、主にこちらの記事([PythonとOpenCVで簡易OMR(マークシートリーダ)を作る](https://qiita.com/sbtseiji/items/6438ec2bf970d63817b8))を参考に作ってみました。空白行を誤認識することが多かったので、参考にしていただければ幸いです。
※他にもいろいろと参考していますが、それは個別で書いています# アンケート全体の流れ
1. ExcelでQRコードを埋め込んだアンケートの用紙の作成
アンケート用紙のページ番号や個人を特定するためにQRコードに情報入れて埋め込みました2. 印刷して配布します
3. 回収したアンケート用紙をスキャンして、PDF→JPGへ
ネットにあるフリーの変換サイトで適当に変換しました4. 変換されたJPGファイルからアンケート結果を読み取り
# 環境
## 1. アンケート用紙作成
* Python 3.5
* QrCode
* pillow
* Excel## 2. スキャン
* 職場のスキャナー(複合機)
* PDF =>
Kerasを使ってCNNでルーン文字の手書き文字認識をやってみた
## はじめに
この記事は株式会社富士通システムズウェブテクノロジーが企画する
いのべこ夏休みアドベントカレンダー2020 33日目!!(延長戦)の記事です。
本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。### やったこと
[当社の前回のアドカレ](https://qiita.com/advent-calendar/2019/fsweb)に[私が投稿した記事](https://qiita.com/kondo-a/items/02943c926bc584c40103)のなかで、
skit-learn に触って「ルーン文字」の手書き文字認識 を実装してみました。
一応作成はできたのですが、あれからDeepLearningの勉強をしたところ、
「**画像認識をするなら、基本のニューラルネットワークではなく、
畳み込みニューラルネットワーク(CNN)を使うというもっといい方法がある!**」と
いうことがわかったので、その実装と仕組みについてわかったことを共有します。※引き続き、初学者の実践メモのため 今更感ある箇所もあるかと思いますが
同じくこ
AWS CDK (Python) を使ってAPI Gateway + LambdaでPOSTを受け取る
AWS CDKとは大雑把に言うと、AWS上で構築するアプリケーションの設計書(CloudFormation)をプログラミング言語で書いてしまおうというもの。
本記事では、POSTされたJSONをAPI Gatewayを通してLambdaで処理するという単純な流れをPythonを用いて実装します。
AWS CDKを使えるようにするための設定は、以下の公式ドキュメント等を参照のこと:– [Getting started with the AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
– [AWS CDK Workshop](https://cdkworkshop.com/15-prerequisites.html)手順
–
まず適当なディレクトリを作り、以下の`cdk.json`を作成します。“`cdk.json
{
“app”: “python3 app.py”
}
“`次にそのディレクトリ内に新しいディレクトリ(例えば`lambda`)を作り、その中にLa
Pythonのloggingモジュールを使ってロギングについて学ぶ①
## はじめに
logger 名を指定して logger インスタンスを利用する(python でいう`getLogger(__name__)`みたいなやつ)、ということをしたことがある人は多いと思います。あの logger 名、ログに出す名前くらいにしか考えてない人は多いんじゃないでしょうか。
ということで、お手軽 Python で、よくあるロギングライブラリの仕組み/作りについて勉強してみました。### 関心事
ロギングを行うにあたり、関心事をざっくりまとめます。これらは必要十分ではなく、また本記事がこれらすべてについて解をだしているわけではないことに留意してください。
– logger を使うときに設定する名前はどう使うものなのか?
– logger はスレッドセーフか?(複数のスレッドから一つのファイルに書いても事故らないか?)
– logger はプロセスセーフか?(複数のプロセスから一つのファイルに書いても事故らないか?)
– logging は blocking I/O か?### 前提
本記事は、僕がよく検証コードを実装するのに使う Python と F
Pythonで内外判定➁:ドーナツ型ポリゴンについて
#やりたいこと
以下のようなドーナツ型ポリゴンのshpファイルについて、任意の地点の内外判定を行う方法について整理しました。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698369/549cdb50-f0e9-9b36-8d60-51fb11c57d36.png)
(出典:https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A31-v2_1.html)下記の順に解説していきます。
Step1:ドーナツ型ポリゴンデータの読み込み
Step2:内外判定モジュール#ドーナツ型ポリゴンデータの読み込み
shpファイルにおいて、ドーナツ型ポリゴンは、複数の凹凸ポリゴン(パーツ)の重ね合わせにより構築されています。したがって、まずは、各パーツの節点座標を抽出する必要があります。“`python
import numpy
import shapefile
import matplotlib.pyplot as plt
#
def outLS(
pythonをWindowsにインストールせずにchromeを操作する環境構築手順(selenium使用)
# 概要
仕事でブラウザの自動化をした方がいいのではないかという場面があった。
ただ、会社から貸与されたWindowsは、自由にソフトをインストールすることが出来ない。
その為、ソフトのインストールをせずに自動化をする必要がありました。
なので、ZipのPythonをダウンロードして、そこにSeleniumをインストールという方法で実行環境を構築しました。
その際の手順を以下に記載する。
(プロキシサーバで制限を掛けられている環境下では難しいかもしれません。)# 手順
## 1. pythonのzipをダウンロードする
### 1-1. https://www.python.org/ へアクセスする
https://www.python.org/
### 1-2. Downloads → Windowsをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204260/bebaac76-71ac-ddc7-bde9-e4851a4b57dc.png)
### 1-3. 最新バ
Python(Kivy)で作るオセロアプリ(iOSアプリ)
# はじめに
Pythonでマルチタップアプリを開発するためのオープンソースライブラリkivyを使ってオセロアプリを作成してみました。
また、最終的にiOSのSimulatorで(xcode)でビルドしました。
# 環境
python: 3.7.7
kivy: 1.11.1
xcode: 11.7
# 作成物
完成形
![Sep-06-2020 20-30-30.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680074/a5c14098-6adb-4f49-a261-4ca9ecd6843f.gif)# ソースコード解説
今回作成したオセロアプリを開発した順番を追いながら説明します。## 1. オセロ盤面と初期石を配置
下記の状態まで作成
Kaggle備忘録 ~NLP with Disaster Tweets第一回~# Kaggleに挑戦
しばらく手を付けていなかったKaggleに久々にトライしてみました。挑戦するのはこちら↓
Real or Not? NLP with Disaster Tweets
https://www.kaggle.com/c/nlp-getting-startedまずはデータセットをDataFrameに落とし込む。
import os import pandas as pd for dirname, _, filenames in os.walk('../input/nlp-getting-started'): for filename in filenames: path = os.path.join(dirname, filename) exec("{0}_df = pd.read_csv(path)".format(filename.replace(".csv","")))特定の単語と災害発生Tweetに相関があるんじゃないかと考えて以下のコードを作成。
#
pylintでワイルドカード指定が動かないとき
# 概要 カレントディレクトリ直下のpythonファイルを一括でpylintかけようとしてはまった話。 同じことで悩んでいそうな方に、一応の解決策を提供します。 # 結論 解決策は以下。 - 空の`__init__.py`をまず作る。 - コマンド実行時に`..`で一階層上がってからフォルダ指定する。(理由はわからないです) # 環境 - OS ... Windows 10 64bit(Home) - Python実行環境 ... Minicondaでconda仮想環境を作成 - pylint 2.5.2 - astroid 2.4.1 - Python 3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)] # やったこと 最初フォルダ構成はこんな感じ。 ``` C:\Users\{ユーザー名}\Desktop\project └aaa.py ``` コマンドプロンプトから以下を実行してみた。 ``` (dev) C:\Users\{ユーザー名}\Desktop\project>
Twitterで20倍ファミチキを当てやすくする方法をPythonで発見しました
# はじめに ファミチキを当てたかったら**日付変わった瞬間に応募するな**. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204520/c60e3bb1-e17b-a80b-9e95-bc3e68ccda2b.png)ツイッターでファミマの抽選を当てたい人はこれを見ろ!
— 電気野菜 (@YasaiDev) ディープラーニングを学び始めた方へ 東京大学/松尾豊教授の動画
日付変わった瞬間に応募するのはやめようね!!!!
youtubeでめっちゃ詳しく解説したので見てくれ!!!https://t.co/VBI5hUSeNO pic.twitter.com/svHqMGlfmP#1.はじめに ディープラーニングを学び始めた方にとって、東京大学/松尾教授の動画を見ることは、とても刺激的で勉強になり面白いものだと思います。今回、松尾教授の**講演**に加えて**対談**や**パネルディスカッション**も含めた動画のリンクをまとめましたので、よろしかったら見て下さい。 特におすすめは、**01, 05, 18, 23, 27** です。 #2.動画リンク 講演には★の表示がしてあります。 □2012年 ★01.**[Computer will be more clever than human beings](https://www.youtube.com/watch?v=nHGH09jPRQw&t=19s)** `東京大学版TEDです(もちろん日本語です)。ウェブを利用した情報の利用と人工知能の可能性についてコンパクトにまとめています。ディープラーニングには触れていませんが、若々しい松尾教授の姿が見れて、内容も興味深いです。<おすすめです。>(15分)` □2013年 02.**[IT融合シンポジウム ~企業・研究者による先端事例紹介~](htArcFaceによる画像分類の超(簡潔な)まとめ
# はじめに 本記事ではArcFaceを用いた画像分類の大枠について簡潔にまとめます。 理論的な背景やコードなどは適宜参考サイトを示しますので、ぜひご確認ください。 # 超まとめ - 画像の分類では距離学習(metric learning)という学習手法がよくつかわれる。 - 距離学習は空間に埋め込んだデータについて、同じクラス同士はまとまって、違うクラス同士は離れて配置されるように学習すること。 - 単純な分類器では、新しいクラスが追加された際にモデルの再学習が必要だが、距離学習では既存のモデルをそのまま使える。 - 新しいクラスは、既存のクラスと遠くに配置される(ことが理想的)ので、新しいクラスは新しいクラス同士で特異な場所に集まる。 - 空間的に集まったデータに対して、未知のデータをプロットして最も近くにあるクラスを予測値として返すのが基本的な考え(後述)。 - ArcFaceはSOTAな距離学習アルゴリズムのひとつ。 - 空間の点同士の距離を離すには各点の原点からの距離を伸ばすか、角度を大きくすればよい。 - ArcFaceは角度に注目したアプローチ。 -
区間DP(だるま落とし)の説明記事を個人的に咀嚼してみた
区間DPの解説記事で(参考)、個人的に理解できない箇所があったので、個人的に咀嚼して説明してみる。 (理解に誤りがあるかもしれないが。。。) 理解できなかった箇所は以下の2点 1.なぜ右側解放? 2.2ケースに分けているが、他のケースは無いのか? ####1.なぜ右側解放? ・ただ単にindexが0始まりだから ・0<=l,rdp[l][r] := 区間[l , r]で取り除くことのできるブロックの数 ・区間分割点(上記参考記事ではmid)をそのまま使って再帰表現をしたいから 両側が閉じた表現にした場合(つまり区間[l , r])、以下の分け方になる。####2.2ケースに分けているが、他のケースは
- [l,mid] , [mid+1 , r]に区間を分ける
PythonのMatplotlibで二次関数のグラフを描写する
#概要 PythonのライブラリMatplotlibの練習です。 何番煎じかわからないくらいありふれてますがご容赦ください。 #Matplotlibのインストール pipでインストールします。 ``` pip install matplotlib ``` #描写 ``` import matplotlib.pyplot as plt import numpy as np # -20 < x < 20 x = np.arange(-20, 20, 0.1) # a, b, cにそれぞれ値を代入 a = int(input("a : ")) b = int(input("b : ")) c = int(input("c : ")) # y = ax^2 + bx + c y = a*x**2 + b*x + c # x軸, y軸のラベル表示 plt.xlabel("x") plt.ylabel("y", rotation=0) # グラフへのプロット実行 plt.plot(x, y) plt.show() ``` #実行結果 a=1, b=2, c=2 | y=x^2
モンテカルロ法入門
# 導入 昨今では、ベイズ的アプローチもはやっておらず、いかにして学習データを集めてDeep Learning にぶっこむかが流行っていますが、たまにはこういう古典的な計算をするのもありでしょう。 MCMC についても説明するつもりでしたが、単純なシミュレーションについて説明するのもそこそこしんどかったので、いったん単純なシミュレーションについて説明します。 MCMC についても、近いうちに書きたいなと個人的には思っています。 本記事では、大体 PRML の 11 章を参考にしています。 # モンテカルロ法 機械学習に携わっていると、モンテカルロシミュレーション、もしくは、モンテカルロ法という単語をよく耳にすると思います。「あー、MCMCでしょ」とこの記事を書く前の僕は漠然と思っていたのですが、具体的に説明しようとすると答えに詰まってしまいました。こういうときは、Wikipedia さんに聞けば大体なことがわかりますので、とりあえず Wikipedia の記事見てみたいと思います。 ``` モンテカルロ法(モンテカルロほう、(英: Monte Carlo method、
優勝コードから学ぶ―メルカリコンペ編①―
#はじめに Kaggleの勉強をするにあたり、過去のコンペで1位をとった人のコードから勉強しようということで、今回は[メルカリコンペ](https://www.kaggle.com/c/mercari-price-suggestion-challenge "Qiita")の[1位の方のコード](https://www.kaggle.com/lopuhin/mercari-golf-0-3875-cv-in-75-loc-1900-s "Qiita")を題材に勉強しました。 #学んだこと ・コンテキストマネージャを使った時間計測 ・Pipeline化とFunctionTransformer ・TF-IDF, itemgetter, TfidfVectorizer ・4層MLP(Multilayer perceptron)でも精度がでる ・partialを使用してy_trainは固定してx_trainだけ変える #メルカリコンペ概要 ###内容 出品時の妥当な値段を予測するモデルの作成 ###意義 出品時に商品情報から適切な値段を自動的に提示することで出品時の手間を削減する。出品が簡
任意のディレクトリ配下のCSVファイルをすべてDataFrameに落とし込む
DataFrameに落とし込みたいCSVファイルが大量にある場合は 下記コマンドを使うことで『ファイル名_df』という変数名でDataFrameを定義できます。import os import pandas as pd for dirname, _, filenames in os.walk(ディレクトリ名): for filename in filenames: path = os.path.join(dirname, filename) # execコマンドを用いてファイル名を変数名として動的に定義していく exec("{0}_df = pd.read_csv(path)".format(filename.replace('.csv','')))