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

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

Pythonで簡単な貪欲法を書く

# 貪欲法

貪欲法とはある基準を設けてその場その場で最適な解を選択し続けて最適解を求める方法です。短時間である程度最適な解を求める時に効果的だと思っております。貪欲法自体広い意味で使われているので、こういう時に使えるというのが難しいですが、個人的には

– 一つある値Aを固定させて別の値(B,C…)と比較することによって解が得られそう

な時に使えるかなと思っております。

# 今回の問題
AtCoderの[B – Magic 2](https://atcoder.jp/contests/m-solutions2020/tasks/m_solutions2020_b)を貪欲法で解いていきます。

>**問題文**
M君は、以下の 3枚のカードを持っています。
>
– 整数Aが書かれた赤のカード
– 整数Bが書かれた緑のカード
– 整数Cが書かれた青のカード
>
彼は天才的な魔術師なので、以下の操作をK回まで行うことができます。
>
– 3枚のうちいずれか1枚のカードを選び、書かれた整数を2倍する。
>
操作を行った後、以下の条件が同時に満たされれば、魔術は成功です。
>
– 緑

元記事を表示

Anaconda3を使用したWSL2上でのJupyter Lab開発環境構築

# 本記事の目標
windows10のWSL2にAnaconda3をインストールし、Jupyter Lab の実行環境を構築します。
本記事ではUbuntu20.04 LTS版をWSL2で実行して説明しています。
また執筆時Anaconda3のバージョンはAnaconda3-2020.07でした。

## WSL2の環境構築
こちらは他にわかりやすく詳細な記事がたくさんあるので、本記事ではとりあつかいません。
各自準備をお願いします。

参考URL
・ [Windows 10 用 Windows Subsystem for Linux のインストール ガイド](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)
・ [WSL 2 のインストール,Ubuntu 20.04, 18.04 のインストールと利用](https://www.kkaneko.jp/tools/wsl/wsl2.html)

## WSL2におけるJupyter Lab構築手順
ここからWSL2上にAnaconda3をインストールする手順を紹介し

元記事を表示

小説「吾輩は猫である」でベンフォードの法則が成り立っているかを確かめてみる

#1.はじめに
プログラミングを学習し始め自然言語処理に興味を持ったので,[自然言語処理100本ノック2020](https://nlp100.github.io/ja/)を勉強し始めた.[第4章:形態素解析](https://nlp100.github.io/ja/ch04.html)を参考にしながら夏目漱石の小説『吾輩は猫である』の文章中の数字を抽出してベンフォードの法則が成り立っているか調べることにした.
#2.目次
1.はじめに
2.目次
3.ベンフォードの法則
4.コード
5.まとめ
参考
#3.ベンフォードの法則
ベンフォードの法則とは住所,株価,電話料金など我々の身の回りにあるものの数字の最初の一桁目の分布についてなり立つ法則である.それらの数字は1〜9の数字のいずれかであり,その分布は一桁目の数字をn,その分布をpとすると
$$ p = \log_{10}\frac{n+1}{n} $$
となる.これを表にすると以下のようになる.

|n|1|2|3|4|5|6|7|8|9|
|:——–|:—|:—|:—|:—|:—|:—|:—|:

元記事を表示

日経平均は気象要素に依存するのか

# はじめに
普段気象学を中心に学んでいる身ですが、金銭的なモチベーションが欲しいなと思うことがありまして、そういえば気象要素で日経平均予測できれば目をつけている人も少なそうだし儲かりそうだな(単純)と思ったのでやってみることにしました。

# データの取得
気象データは [気象庁のHP](https://www.data.jma.go.jp/gmd/risk/obsdl/index.php) からダウンロードできます。今回利用したデータは平均海面気圧、最高気温、平均気温、平均相対湿度、降水量です。
日経平均のデータは [macrotrends](https://www.macrotrends.net/2593/nikkei-225-index-historical-chart-data) からダウンロードしました。

# 前処理

まずライブラリを読み込みます

“`python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import signal

from

元記事を表示

Python”再”入門1 実行環境の構築

# はじめに
**Python再入門**ということで、Pythonの基本文法などの復習用に記事を書いていきます。

私がプログラミングを始めたちょうど1年前、当時の私はPythonを使って何か作ってみようと手を動かしていました。
それから一年が経った今は主にRubyを使ってWebアプリの開発を行っています。

ここにきてもう一度Pythonを復習しようと思ったきっかけは、就職先が決まったことにあります。
私は来年の4月に就職予定なのですが、就職予定の企業では機械学習や深層学習を使ったサービスを開発しています。
私は機械学習エンジニアとして就職するわけではありませんが、「触ったことある」ぐらいにはなっていた方がサービスの理解もしやすいのかなと考えています。
Pythonは機械学習系のライブラリも充実しているという印象があるので、まずはPythonを学ぶことから始めることにしました。

冒頭でお伝えした通り、私がプログラミングに入門した際に初めて触った言語はPythonなのですが、**忘れっぽい私は文法などを完全に忘れてしまった**ので、今回記事を残しながら再入門をしていこうと思います。

元記事を表示

Pythonのtimedeltaで「xx時間」を一発で計算する方法

# はじめに

ほぼフルリモートでの仕事をするようになり、通勤に時間を費やす必要がなくなりました。その時間を他に使えるのでとても良いのですが、体を動かす機会が減るのと、ポッドキャストを聞く時間が確保できないのが悩みポイントでした。その両方を解決するために毎朝少し離れたスーパー(朝8時開店!)まで歩くのを日課にし始めたのですが、今日聞いていた [PythonBytes](https://pythonbytes.fm/)というポッドキャストで目からウロコなtipsを話していたのでご紹介します。

ポッドキャストで話をしている人たちも「え、そんなことできるの?」「知らなかった」って言ってましたが、 私も聞いていて驚きました。直接聞いてみたい方は[Episode #190](https://pythonbytes.fm/episodes/show/190/you-will-now-be-notified-if-the-python-zipper-is-broken)の27分ころです。

# timedeltaとは

`timedelta`はpythonの標準ライブラリに含まれる機能で `dat

元記事を表示

OpenCVのimshow画面でバツを押すとプロセスだけが残る問題の解決方法

#環境

 Python 3.7.8
 OpenCV 3.4.2

#問題
 例えばこのレナさんの画像。
![lena.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537831/deb2896e-7a0f-ec5a-5bf4-923c32d2fe3f.jpeg)

 通常であれば以下のコードで画像を表示し、適当なキーを押すとウィンドウが閉じます。しかし、閉じるボタン押した場合、ウィンドウは閉じるのですがpythonのプロセスは実行されたままになります。

“`python:open.py
import cv2

img = cv2.imread(“lena.jpg”)

#画像を表示
cv2.imshow(“img”, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

#解決方法
 [他の方の手法](https://github.com/opencv/opencv/issues/6452#issuecomment-488618141)と基本的に

元記事を表示

pigpioのコールバックを使って、超音波距離センサ「HC-SR04」のパルス幅を正確に計測する

#はじめに
Raspberry Piは、一般的にOS(Raspbian, Raspberry Pi OS)上で動作している関係で、Arduinoや ESP等のコントローラに比べて、正確なパルス生成や、パルス幅の測定は得意ではありませんが、pigpiod のサービスを活用する事により、完璧とは言えないまでも、そこそこに正確なパルス生成や測定が出来ることを最近知りました。

今回は、pigpiodが、python用のライブラリとして用意している、callback関数を用いて、超音波距離センサー(HC-SR04)による距離測定の実験をしましたので、アップしておきます。

![IMG_20200729_232437.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266665/2eb819c9-fd80-b1d5-d395-ff854c25a358.jpeg)

## 使用した環境

+ Raspberry pi Zero WH (Buster Lite)
+ HC-SR04
+ 5V電源 (ラズパイ

元記事を表示

DeepRunning ~Level4.6~

#Level4.機械学習講座(理論と実践)

 ![alt](http://ai999.careers/bnr_jdla.png)
 [3ヵ月で現場で潰しが効くディープラーニング講座とは](http://study-ai.com/jdla/)

##4-6.k平均法(k-means)
###4-6-1.k-平均法(k-means)とは
  ●教師なし学習
  ●クラスタリング手法である。
  ●与えられたデータを$k$個のクラスタに分類する。

  【クラスタリング】
    特徴の似ているもの同士をグループ化すること。

###4-6-2.k平均法(k-means)のアルゴリズム
  ①各クラスタ中心の初期値を設定する。
   ⇒$k$は事前に決めておく必要がある。
    クラスタの中心はランダムに選択する。

  ②各データ点に対して、各クラスタ中心との距離を計算し、
   最も距離が近いクラスタを割り当てる。
   ⇒中心から最も距離の近いクラスタを割り当てる。
    そして、全てのデータ計算して、徐々に切り離されていく。

  ③各クラスタの平均ベクトル(中心)を計算する。

元記事を表示

DeepRunning ~Level4.5~

#Level4.機械学習講座(理論と実践)

 ![alt](http://ai999.careers/bnr_jdla.png)
 [3ヵ月で現場で潰しが効くディープラーニング講座とは](http://study-ai.com/jdla/)

##4-5.k近傍法(kNN)
###4-5-1.k近傍法(kNN)とは
  ●分類問題のための機械学習手法である。
   最近傍のデータを$k$個取得し、もっとも多く所属するクラスに識別する。

   $k=3$と決めた時に、あるデータから最も近いデータを3個選択する。
   その中で、分類できる同じクラスに多く所属するものとして識別する。

   (例)あるデータから最も近いデータ3個のうち、
      赤い点2個と、青い点1個が選択された場合は、自分自身は赤い点のクラスとする。

  ●$k$は、アルゴリズムを回す前に決めておく必要がある。
  ●$k$を大きくすると決定境界は滑らかになる。

###4-5-2.ハンズオン
  ●人口データを分類する。

![k近傍法0001.png](https://qiita-image-store

元記事を表示

【Python】スライスでインデックスエラーが起きない理由

# はじめに
Pythonのスライスではどんなに大きい/小さい数を指定してもインデックスエラーが起きないというのは有名な話(筆者はしばしば忘れる)ですが、その理由について「**内部でいい感じに処理してくれるから**」以上の説明をしてくれている日本語の記事が見つからないなと思ったので、隙間産業として執筆しようと思う次第であります。

本記事では、掲題のテーマについて**思想**と**実装**の2つの観点から説明しようと思います。
Pythonを始めたてで、「**特定の要素を抽出する時はインデックスエラー五月蝿く言われるのにスライスだと言われないのなんかキモい**」と感じる人のモヤモヤが少しでも解消できればと思います。

また筆者自身も経験が浅いので、表現が正確でないところがございましたら、後学のためにもご指摘いただけると幸いです。

# (そもそも)スライスとは何をするものなのか
本項はスライスの思想部分に当たります。
公式ドキュメントでもあまり「スライスとは何か」を単純明快に書いていない(ように見える)のでもどかしいところではあるのですが、一応以下のような説明があります。

– `s[

元記事を表示

DeepRunning ~Level4.4.2~

#Level4.機械学習講座(理論と実践)

 ![alt](http://ai999.careers/bnr_jdla.png)
 [3ヵ月で現場で潰しが効くディープラーニング講座とは](http://study-ai.com/jdla/)

##4-4.主成分分析
###4-4-7.ハンズオン
  ●乳がん検査データを利用してロジスティック回帰モデルを作成する。
  ●主成分を利用して、2次元空間上に次元圧縮する。(32次元⇒2次元に次元圧縮)

![主成分分析0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640632/f970da5c-a3ee-4883-6a71-cc8f7cdb4a21.png)

![主成分分析0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640632/e12f56a1-d7c2-7d2b-09a6-11b4c9d559cb.png)

![主成分分析0003.png](h

元記事を表示

HuggingFaceのBertJapaneseTokenizerで分かち書きしようとするとMeCabのinitializingで落ちたりencodeでも落ちたりする

同じエラーで躓いた人の調べる時間が少しでも減りますように、メモとして記事に起こしておきます。

以下はGoogle Colab上で実行しています。

[こちら](https://qiita.com/sugulu/items/e522a38b812b8edb8a54)を参考にColab上でMeCabとhuggingfaceのtransformersをインストールします。

“`sh
!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3
!pip install transformers
“`

日本語用BERTのtokenizerで分かち書きを試みます。

“`python
from transformers.tokenization_bert_japanese import BertJapaneseTokenizer

# 日本語BERT用のtokenize

元記事を表示

PythonでDIを勉強するためにサクッとプログラム書いてみた①

#背景

会社でDI(Dependency Injection)についての話が出たが、
イマイチちゃんと分かっていなかったのでお勉強することにした

#そもそもDIって何よ
・依存性の注入(直訳)
・結合度の低下によるコンポーネント化の促進
・単体テストの効率化
・特定のフレームワークへの依存度低下
・DIコンテナってのがあるらしい(へぇ)

個人的には、単体テストがしやすくなるってところに惹かれた。

後、実装時に(見かけ上)コンポーネント化されたとしても、
各々依存しあってたらあまりメリットないもんね。

(筋子じゃダメなんだ、いくらでないとダメだ、というイメージは本当に無駄)

#早速書いてみる
何はともあれ、書いてみる。

まずは、依存しまくっている例。

“`no_di.py
class Country:
def getCountry(self):
return “Japanese”

class Position:
def getPosition(self):
return ‘SuperStar’

class Hors

元記事を表示

不動点コンビネータを用いた無名再帰関数の実行方法まとめ

諸般の理由で『[Pythonのlambda式を用いたラムダ計算の基礎表現](https://qiita.com/ytaki0801/items/fb4edeba41ff1bfb4b52)』を書いた後にHaskellに触れたところ,無名再帰関数を実行する不動点コンビネータがとんでもなく簡単に書けたため,同じ方法でSchemeやPythonでもできないか試したところ,これまたあっさりできたので,まとめメモ的に新しく記事にした.

このような内容がQiitaや書籍,ネット上に星の数の更に星の数乗ほどあることは承知しているが,この手の話はYコンビネータ(Zコンビネータ)が大きな割合を占めており(実際,元記事でも取り上げている),関心のある人々の数多ある参考資料のひとつ程度に捉えてもらえると幸いである.ツッコミ,編集リクエスト歓迎.

#不動点コンビネータの定義
Haskell,Scheme,Pythonでの考察および実行例を述べる.なお,不動点コンビネータとは,$f(g(f))=g(f)$が成り立つ関数$g$を指す.

##Haskell(GHC)

式に従い,不動点コンビネータを定義する.

元記事を表示

Python: 関数の処理時間を綺麗に測りたい

#はじめに
scikit-learnに限らず関数の実行時間を計測したいことはたまにあると思いますが、計測後に計算を挟んだりとごちゃごちゃしてしまいます。

#コード
関数の処理時間を計測したいのであれば、Pythonのおもしろい機能の一つであるデコレータを使ったほうが個人的には良いと思います。デコレータに汚い計算を任せてしまえということです。

“`Python
import time
def clock(func):
def clocked(*args):
t0 = time.perf_counter()
result = func(*args)
elapsed = time.perf_counter() – t0
arg_str = “, “.join(repr(arg) for arg in args)
print(“[%0.8fs %s(%s) -> %r” % (elapsed,func.__name__,arg_str,result))
return result
return clocked
“`

#デモ
scikit-learnの学習時

元記事を表示

Relational Network

[前回の記事](https://qiita.com/SoseSose/items/8cbb8016847603f320e6)の続きで、Relational Networkのできる限りの説明になります。

#Relational Networkについて
まずは元論文のリンクを(https://arxiv.org/pdf/1706.01427)
実験結果から見てしまいましょう。
![コメント 2020-07-18 155717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595608/4a4dea04-cdcf-6533-75e6-67f3c8e610dc.png)
これはCLEVRというオブジェクトの関係から回答を導くデータセットの正解率になります。よくあるニューラルネットワーク(CNN+LSTM、まあ今はあんまり使われてないみたいですが)の正解率は低く、人間(Human)を下回っています。一方、Relational Networkを用いた(CNN+LSTM+RN)は人間を上回る結果が出ています。
この

元記事を表示

Pandas : 条件を満たす行を抽出時のエラー ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). の原因と対策

# 結論

“ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). “

のエラーの原因として、

複数条件なのにそれぞれを`()` で括っていない、`& | ^ `などのbit演算ではなく`and or not`などと書いているなどが検索で出てきますが[^1] [^stackoverflowの記事]

`isin` を`in` にしてしまっていた時も同様のエラーメッセージがおきるので気をつけましょう。

# 原因となったコード
“`python:error.py
tmp__ = transactions[(transactions[“year”] == “2014” ) & (transactions [“month”] in [“06″,”07″,”08”]))]
“`

# 訂正したコード
“`python:correct.py
tmp__ = transactions[(transactions[“yea

元記事を表示

「FORTRAN77数値計算プログラミング」のプログラムをCとPythonに移植してみる(その3)

前回の記事
[「FORTRAN77数値計算プログラミング」のプログラムをCとPythonに移植してみる(その2)](https://qiita.com/riko111/items/9141bcd7b17bde85d3f9)

#はじめに
 その1、その2と[Fortran77数値計算プログラミング](https://www.iwanami.co.jp/book/b258047.html)の1章のコードを確認してきました。
 本では、1章にこのあと3つプログラムが載っているのですが、これ、全部誤差がどうなるかを確認しているものです。前回@cure_honey さんに教えていただいたとおり、16進数を基数とした浮動小数点数を使った計算結果が今のIEEE754方式の浮動小数点数での結果とは合わず、本での検証とはずれていくばかりなので、このあたりのコードはもう飛ばすことにします。
 誤差について飛ばすと次は乱数のお話で、乱数生成ってCにもPythonにも関数があるのでそれも飛ばすと、お次は5章、「連立1次方程式とLU分解」です。

#LU分解
 本の5章、P.52〜の式を引きつつ、LU分解に

元記事を表示

初心者がSeleniumでWebDriverを使うときにつまづいた時に参考にしたコードなど

##画面内にない要素をクリックすることはできない
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)

スクロールして画面内に出すか、
***
driver.set_window_size(xxxx,yyyy)
で最初に画面サイズを変更する。
自分は毎回スクロールするのが面倒なので画面サイズを1980、1280にした。
他にもIDなどの要素までスクロールできるっぽい。
***
##ユーザーエージェントがないとロボット扱いしてくるサイトもあるので
options.add_argument(f’user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36′)
ユーザーエージェントを偽装する。
***
##Javascriptのボタンなどをクリックできない場合
elements =

元記事を表示

OTHERカテゴリの最新記事