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

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

2つのディレクトリの内容を比較するPythonスクリプト

# 動機

デジタルカメラやアクションカムなどの記録メディアを(USBメモリ,SDカードなど)のデータを別の大容量の外付けSSDにコピーして蓄積していたが、外付けSSDの残量が少なくなってきた。外付けSSDの中には重複したデータがあるようなので削除したい。重複したファイルが発生したのは、

– 外付けSSDにコピーしたあとに、記録メディアのコピー元のファイルを消去する前に追記したのちに、再度バックアップしてしまった。
– バックアップ作業を行ったOS環境の違いによりファイル名の大文字/小文字が変わってしまったことがあり、その際バックアップ作業済みなのかか未作業なのか誤解して2回バックアップしてしまった

といったことが原因のようだ。大文字小文字を区別せず、2つのディレクトリの内容の過不足をチェックするのは手間なので、スクリプトを書くことにした。

# ファイル置き場

– https://gitlab.com/nanigashi_uji/cmp_dirtree/
– https://github.com/nanigashi-uji/cmp_dirtree/

# 実行例

元記事を表示

Python Jupyter Lab (Notebook) でメモリリーク?

## 環境

– Kaggle Docker Python v86
https://console.cloud.google.com/gcr/images/kaggle-images/GLOBAL/python

## 問題

Jupyter Labを使っていて、変数を定義したのちdelしてgc.collect()してもメモリが解放されない。

## 調査・直接原因

pandas.DataFrame の問題かと思ったが、そうではない。
「セル」の最後にJupyter Labの機能による出力表示を行うと、それ以後他のセルでdelしても解放されないようだ。

### 再現手順

1つのセルの中に以下のようなコードを書いて実行する。

“` python
import numpy as np
import pandas as pd
import psutil
print(psutil.Process().memory_info().rss / 1024**2)
df = pd.DataFrame(np.arange(50000000).reshape(-1,5))
df.head()

元記事を表示

Flaskで簡易的なドット絵ジェネレータを作る

# 完成形
以下のような感じ。
![スクリーンショット 2020-11-21 7.03.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289055/e6886b0b-14c2-c300-3240-64e9313f244d.png)
https://flaskandheroku.herokuapp.com/

# 仕様

– トップ画面にはランダム生成されたドット絵が表示されている
– 「ランダム生成」ボタンを押下するとランダムでドット絵が表示される
– ドット絵は画像ではなく文字の「■(四角)」で構成されている
– 文字を画像へ変換する技術は実装していない
– Twitterシェアボタンを配置

# 作ろうと思った経緯
– Flaskを勉強中なので、簡単な成果物を作ってみたくなった
– 以下のようなドット絵を描くのが趣味なので、自動で生成できるようなツールを作ってみたくなった
![スクリーンショット 2020-11-21 7.14.34.png](https://qiita-image-store

元記事を表示

辞書の値を属性参照するメモ(車輪の再開発)

# AttrDictの方が便利だけど、ちょっと使いたいのにインストールしたくない人向け

## 定義
“`python
class Dict(dict): pass
Dict.__getattr__ = lambda s, k: s.get(k)
“`

## 使うとき
“`python
a = Dict(a=0, b=Dict(c=1, d=2))
(a.a, a.b.c, a[“a”], a[“b”][“c”])
“`

## もう少ししっかり定義したい
“`python
class Dict(dict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def __getattr__(self, key):
return self.get(key)

def __getstate__(self):
return self.__dict__

def __setstate__

元記事を表示

[TensorFlow]”ValueError: tf.function-decorated function tried to create variables on non-first call”を解決する

# OptimizerやModelを入力とするtf.functionが”tried to create variables on non-first call”で死ぬ

最初のモデルコール(build)以外で変数を宣言したつもりなんてなかったとおもっていたら思わぬトラップにかかったので備忘録

# 前提
TensorFlow2(筆者は2.5 nightlyで確認)

# tf.function内でのtf.Variableの作成は禁止

1. tf.functionは基本的に一度確保したら同じメモリ領域で動作する。
2. tf.Variableは新しいメモリ領域を確保して変数を生成する。
3. したがって毎回新しいVariableを生成すると毎回新しいメモリを食ってしまうのでエラーがおきる。

“`python

@tf.function
def f(x):
v = tf.Variable(1.0)
v.assign_add(x)
return v

with assert_raises(ValueError):
f(1.0)

“`
“`
Caught expe

元記事を表示

LeetCodeに毎日挑戦してみた 13. Roman to Integer (Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

Go言語入門+アルゴリズム脳の強化のためにGolangとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 4問目(問題13)

#### 13. Roman to Integer

– 問題内容(日本語訳)

> :ローマ数字は、7つの異なる記号で表され `I`、`V`、`X`、`L`、`C`、`D`と`M`。
> シンボル 値
> I 1
> V 5
> X 10
> L 50
> C 10

元記事を表示

【Python】ゼロから始めるDjangoソースコードリーディング View編①

# はじめに

効率的にプログラミングを学習する方法のひとつとして「ソースコードを読む」というものがあります。
かの有名な[ハッカーになろう](https://cruel.org/freeware/hacker.html)(原題:How To Become A Hacker)にもこう書かれています。

> しかし、本や講習会のコースでダメだとは言っておきましょう。多くの、いやひょっとしてほとんどのハッカーたちは我流で勉強してきたのです。役に立つのは、(a) コードを読むこと、そして (b) コードを書くことです。

しかし、「コードを書く」ことはよくあっても、「コードを読む」ことはあまりできていない人が多いと感じています。(難易度的にも「読む」ほうが難しいことが多いし…)
本記事ではPythonのメジャーなWebフレームワークであるDjangoを読んで、ソースコードを読む雰囲気をお伝えするものです。
これをきっかけにオープンソースのコードをを読めるようになるきっかけになれば幸いです!

今回はまずは第一弾としてクラスベースのViewの流れを追っていきます。

Qiita初投稿で書き方が

元記事を表示

【FastAPI+Firebase】Bearer認証を行うAPIサーバの構築

FastAPIは便利ですね。APIサーバを簡単に構築できるフレームワークとして個人的に愛用しています。今回はFastAPIに認証機能を追加します。

**注意** :FastAPI, Firebase のインストールなどセットアップは前提としてここでは触れません。

# Bearer認証

サーバにリクエストしてきたユーザの識別・認証を行い、要求されたリソースへ適切な許可を制御したい需要は多々あると思います。ここではHTTPヘッダに追加するだけで簡単に実装できるBearer認証を実装します。

[[Qiita] “Bearer認証について”](https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1)

> HTTPのAuthorizationヘッダにスキームとして指定でき, `Authorization: Bearer ` のようにして指定する.
> トークンの形式はtoken68の形式で指定することが定められている.

`token` の発行や検証など自分で実装するのは大変ですので、今回はFirebaseを利

元記事を表示

【チョコプラ】6秒クッキング「タダで見てんだから黙ってろ」の効果を検証する

## はじめに
まずはこちらをご覧ください。
【6秒クッキング】お好み焼き

## 動作環境
* Python 3.6.8
* YouTube Data API ※使用前に登録が必要。
* scikit-learn
* MeCab
* [単語感情極性対応表](http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html) ※コメントのネガポジ判定用
* seaborn

## 検証内容
* キッチンジローの「タダで見てんだから黙ってろ」発言で批判コメント数が減ったのかを検証する。
* 批判コメントの例:「キッチンジロー口悪すぎだし何もしてないじゃん」

## 実装内容
* 6秒クッキングの動画情報を取得する
* 全コメントを取得する
* Youtube Data APIを使用してコメントとそれに対するリプライコメントを取得する。
*

元記事を表示

フィボナッチ数列にお世話になりました。

こんにちは。
自分なりに書き方を色々検討してみました。

参考にして頂ければ幸いです。
以下の記述はよく見る奴です。

“`fib_1.py
def fib(n):
if n == 1:
return 0
if n == 2:
return 1
else:
return fib(n-1) +fib(n-2)
“`

こんな書き方もあると思います。

“`fib_2.py
def fib(n):
if n == 1 or n == 2:
return n-1
return fib(n-1) +fib(n-2)
“`

シンプルな記述に最適化が出来て、手を叩いて喜びましたが、
重複する計算が多いので、何とか最適化したいです。
有識者のアドバイスを参考にするとメモを用意し、
該当するものから取り出すことで計算を削減できるそうです。

“`fib_3.py
class fib:
def __init__(self):
self.table ={}

元記事を表示

yukicoder contest 275 参戦記

# yukicoder contest 275 参戦記

## [A 1291 小手調べ](https://yukicoder.me/problems/no/1291)

答えは0以上の整数なので、1桁にトラップがあるので注意. di≦100 なので、素直に整数で答えを計算すると int64 の範囲を超えますね. Python だから何も考えずに計算できるけど.

“`python
N, *d = map(int, open(0).read().split())

for i in range(N):
if d[i] == 1:
print(10)
else:
print(9 * 10 ** (d[i] – 1))
“`

まあ、文字列で計算しても難しくはないですが.

“`python
N, *d = map(int, open(0).read().split())

for i in range(N):
if d[i] == 1:
print(10)
else:

元記事を表示

Python学習 基礎編 ~文字列を出力(表示)するには?~

こちらではPython学習の備忘録と、Ruby、JavaScriptとの比較も含め記載していきたいと思います。
プログラミング初心者や他の言語にも興味、関心をお持ちの方の参考になれば幸いです。

####文字を出力(表示)するには?
**共通部分**
文字列は、必ず半角の「”」シングルクォーテーション、または「””」ダブルクォーテーションのどちらかで囲む必要がある。
記述がない場合はエラーになるので注意!
#####Python

“`py:script.py

print(‘Hello World’)
“`

#####Ruby

“`ruby:index.rb
puts ‘Hello World’
“`
#####JavaScript

“`javascript:script.js
console.log(‘Hello World’);
“`
文の最後は「;」セミコロンで終わりにする。
* * *
#####Pythonにてクォーテーションの記述がなかった場合
“`
SyntaxError: invalid syntax
“`
「構文エラー:無効な構文」と

元記事を表示

量子情報理論の基本:表面符号によるユニバーサル量子計算(1)

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

## はじめに

[前回の記事](https://qiita.com/SamN/items/d3600efa7d953916298f)では、平面格子上に敷き詰められた面演算子と頂点演算子に欠陥(演算子がない領域)をつくることで論理量子ビットと論理$X$および論理$Z$演算子を定義できて、さらに欠陥を互いに巻きつけるように移動させることでCNOT演算が実現できるということを見てきました。ところが、このCNOT演算はユニバーサル量子計算の要素とするには、実は不完全なものです。理由はこのあと説明します。今回の記事では、じゃあ完全なCNOTはどうやったら実現できるのか、そのあたりを勉強してみます。ユニバーサル量子計算を実現するには、さらに1量子ビットの任意

元記事を表示

【Python】スクレイピングでデータを取得し、リストに入れる時の注意点

スクレイピングをするときの注意点
自分が沼にはまった時の対応です。

“`test.py
for s in name:
name_list=[]
name_list.append(s.string)

“`

このコードの問題点はname_listの位置です。
この位置だと毎回name_listの中身が更新されます。
つまりforで回しているが、結局nameの一番最後の要素しか
name_listにappendされません。

ということで、name_listの位置を変えましょう。

“`test.py
name_list=[]
for s in name:
name_list.append(s.string)
“`
name_listをforの外に出すことで、nameの要素を順番に取得して、
appendするというコードになります。

特に私はまず1P、1要素スクレイピングできるか試してから、全体のスクレイピングを
行うので、そもそもテスト段階ではforをほとんど使いません。

その為、いざ全体のスクレイピングを行う際に空のリストの位置を間違えると
このようなことに

元記事を表示

kerasのConv2D(2次元畳み込み層)について調べてみた

# やりたいこと

* kerasのConv2Dを理解したい
* それにより下記のようなコードを理解したい(それぞれの関数が何をやっているのか?や引数の意味を説明できるようになりたい)。

“`python
from keras import layers, models
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation=”relu”,input_shape=(150,150,3)))
“`

* そして画像分類モデルをpythonで実装したい(犬の写真と猫の写真を判別できるなど)

# この記事を読んで理解できること

* 「畳み込みって何ですか?」がざっくりわかる。
* 「kerasのConv2D関数に渡す引数の値はどうやって決めればいいですか?」がざっくり分かる。
* 「カーネル」「フィルタ」「ストライド」の意味が理解できる。

## Conv2Dとは?

「keras Conv2D」で検索すると「2次元畳み込み層」と出てくる。
では「2次元畳み込み層」とは何なのか?
なお「1次元

元記事を表示

千葉県Go To EAT向けに店舗検索BOT(AI LINE BOT)を作った話(1)

こんにちは。初めて記事を作成しております。
「不適切な記事」のボーダーラインが分かっていないので至らない所あればご指摘ください。

現在、私は千葉県のGo To EATキャンペーンを使っています。
プレミアム付き食事クーポンを10000円で買うと12500円分の食事券として使えるのでとてもお得です。

【千葉県Go To EAT事業公式サイト】
 https://www.chiba-gte.jp/

ただ一つ、微妙だなぁと思ったのがクーポンが使えるお店が検索しづらいこと。
提供されているUIは、駅名等の地域情報から近くにあるお店が分かるのですが、
「今日はこれが食べたい!」といった目的が決まっている場合には検索しづらいと感じました(個人的意見)。
地域情報の他に料理のジャンルや店名でも検索出来たらいいのに。

matplotlibインストール時のpolyfitエラー

# matplotlibインストール時にエラーが出た
OSはMacOS BigSur。
python versionは3.6.10。
何も考えずに「numpy, pandas, matplotlib」をインストールしようとしたら、下記エラーが出た。

“`shell
pip install matplotlib

RuntimeError: Polyfit sanity test emitted a warning, most likely due to using a buggy Accelerate backend. If you compiled yourself, see site.cfg.example for information. Otherwise report this to the vendor that provided NumPy.
RankWarning: Polyfit may be poorly conditioned

—————————————-
ERROR: Command er

元記事を表示

Pythonを使って東京都家賃についての研究 (3の2)

#結果抜粋
ブログに同時掲載:

Pythonを使って東京都家賃についての研究 (3の2)

##統計の手法1
###データ収集
– データ元:https://suumo.jp
– 使ったライブラリ:requests, BeautifulSoup, re, time, sqlite3
– 収集の部分がただrequestしてデータベースに入れるだけなのでコードを割愛します

***

###データベース
データベースの構造

| info | |
|:-:|:-:|
| id | 1 (PRIMARY KEY) |
| municipal | 千代田区 |
| train | 7 (駅まで徒歩) |
| type | マンション |
|

元記事を表示

pythonでbar chart race

# pythonでbar chart race
![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157693/9098dd4e-3d65-9294-d10a-d6c40d04a501.gif)
Youtubeなどでよく見かける棒グラフレースは[flourish](https://flourish.studio/)で作成されることが多いようですが、pythonで作成するライブラリがあるので紹介します。インストールや使用方法やDependencyなどは以下を参照のこと。
https://www.dexplo.org/bar_chart_race/
使い方は超簡単で、各データ名をコラムに持つ、日付ごとレコードをpandasのDataFrameに格納し、関数を呼び出すだけです。具体的にはこんなデータを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157693/3f74f813-2bd0-6

元記事を表示

raise ValueError, “unsupported hash type”となった時の対応方法

# 事象 : hmacをインストールしようとして失敗した
– 環境 : Cloud9

“`bash
$ pip install hmac
Defaulting to user installation because normal site-packages is not writeable
Collecting hmac
Downloading hmac-20101005.tar.gz (4.5 kB)
Requirement already satisfied: setuptools in /usr/lib/python3.6/dist-packages (from hmac) (36.2.7)
Collecting hashlib
Downloading hashlib-20081119.zip (42 kB)
|████████████████████████████████| 42 kB 1.1 MB/s
ERROR: Command errored out with exit status 1:
command: /usr/b

元記事を表示

OTHERカテゴリの最新記事