Python関連のことを調べてみた2021年03月02日

Python関連のことを調べてみた2021年03月02日

numpy.arrayインプレース演算の落とし穴(Python)

#概要
Python numpyでインプレース演算(`+=`など)をした際に思わぬ挙動をすることがあるので、
その確認をする。
#内容
##環境
macOS Catalina
Python 3.7.0
numpy 1.18.3
##再現
“`Python
>>> import numpy as np
>>> a = np.array([3])
>>> b, c = a, a
>>> a, b, c
(array([3]), array([3]), array([3]))
>>> c += 1
>>> a, b, c
(array([4]), array([4]), array([4]))
“`
##分析
`a`, `b`, `c`が参照しているのは、`np.array`オブジェクトに対してであるが、
`+=1`が実は変更したのは、その属性であるからである。
下記のように、`+=1`がオブジェクト自体を変更する場合は、予想通りの変化になる。

“`Python
>>> a = 3
>>> b, c = a, a
>>> a, b, c
(3, 3, 3)
>>> c += 1
>>

元記事を表示

3/2 python日記

こんにちは!

今日のエラー原因を書きます。

使用した本:「0から作るDeepLearning」
4章
1「two_layer_net.py」の写経について
・16行目のout_sizeの見逃し
・77行目の「=」の写し間違い

2「train_neuralnet.py」の写経について
・6行目の「dataset.mnist」の写し間違い
・52行目の「ylabel」の写し間違い

所感
全体を通してみると、「俺はちゃんと写経できてるぞ」
と思っているときほど何か見落としてることが多いです。
後、原因としては「写経なんか楽勝!」と考えているからだと思います。
けど、人間だから仕方ない。(開き直り)

元記事を表示

AtCoderをやる時によく使うコードまとめ

# はじめに
今からAtCoderを始めようと思うので、とりあえずよく使うコードをまとめてみようと思います。

# 基本のコードはこれ
– 入力、出力
– 代入、単純な四則演算処理(+, -, *, /, = など)
– 条件分岐(if 文など)
– 繰り返し処理(for 文など)
– 文字列(string)
– 浮動小数点(double 型など)
– 配列(二次元配列も含む)

# 入力、出力

元記事を表示

GoogleColab での Janome を使用したテキスト解析と頻出単語の可視化

# はじめに
– AI について勉強したい、何かきっかけが欲しいなと本屋でブラブラしていたら出会った『人気ブロガーからあげ先生のとにかく楽しいAI自作教室』
– 環境準備が不要で、自分で実際に手を動かせるサンプルのサイズ感がよく、まずは日本語テキストの解析からチャレンジする
– 具体的には前述の書籍の 3 章に基づいて Google Colaboratory 上で青空文庫から取得した文章を Janome で形態素解析して名詞を抽出、 WordCloud で可視化するところまでを実施する

# 使用したツール類
– [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)
– [Janome](https://mocobeta.github.io/janome/)
– [WordCloud](https://github.com/amueller/word_cloud)

## Google Colaboratory
– Google が無料で提供しているブラウザベースで機

元記事を表示

pyppeteerを使ってみた【着手したとこ】

書籍『Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド』と下記記事を参考に実施した
[Pyppeteerを使ってみる](https://zenn.dev/shotakaha/articles/5885cac71af6dc966e97)

元記事を表示

[論文紹介]アノテーションを自動作成してくれるアルゴリズムが凄い!

こんにちは!新米データサイエンティストのりゅうです。今日は半教師あり学習を使用して少ないラベルありデータからセグメンテーションを自動作成してくれるモデルを見つけたので紹介させていただきたいと思います!

#忙しい人向け
1.s4GANを使用したセグメンテーション生成でアノテーションのコストを抑える事ができるよ。
2.過去に発表されたモデルと比べてよい成績を出したよ。

#論文解説
#1.0 要約
SEMANTICセグメンテーションは、多くの画像認識のタスクでとても優れた結果を出してきた。
自動運転、医用画像、ロボット工学 など
しかし、これは非常に多くのアノテーションコストがかかり(画像にラベルを付与する事)。
本論文ではこれの問題を半教師あり学習を使って解決するアプローチを提示しています。

#序論
DualーBranch Method for SemiーSupervised Semantic Segmentation
1. アノテーションされていないデータを少量のアノテーションされているデータを使って効果的に学習する事ができるよ!
2. 私たちのモデルはCNNsが限られたデー

元記事を表示

with文のカスタマイズ(Python)

#概要
`with`文を自分でも活用できるようにする。
#内容
##環境
macOS Catalina
Python 3.7.0
##解決策1 準備
`class`を定義する。

“`Python:with1.py
class Obj():
def __init__(self, name):
print(‘——start’)
self.name = name
def __enter__(self):
return f’hello, {self.name}’
def __exit__(self, type, value, traceback):
#Exception handling here
print(f’with or without exception, finished. bye, {self.name}’)
print(‘——end\n’)
“`

`__init__`, `__enter__`, `__exit__`を使い、`__ent

元記事を表示

SIFT descriptors(特徴量)について理解する

## はじめに
OpenCVのSIFTで特徴量を抽出してSVMで分類する、というプログラムを作成しようと思っています。特徴量の抽出にはSIFTを使う予定ですが、SIFTで抽出される特徴量とは何なのかについて少し調べたので、備忘として残します。
尚、SIFTについては2020年に特許が切れて使いやすくなりました([こちらを参照](https://qiita.com/herr-shigeo/items/ec9abac4212628162598))。

## 開発環境
Ubuntu 18.04.4 LTS
Python 3.6.9
opencv 4.5.1
dlib 19.21.1

## 実際の出力値を確認
まずは、実際にSIFTで特徴量を抽出し、取得したdescriptorsを出力してみました。
以下が、使用したソースコードの一部です。

“`python
sift = cv2.SIFT_create()
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
keypoints, descriptors = sift.detectAndCompute

元記事を表示

while, popを用いた木構造探索パターン(Python)

#概要
空配列が`False`と判定されるので、
`while`と`pop`によるシンプルな探索パターンを使う。
#内容
##環境
macOS Catalina
Python 3.7.0
##準備
“`Python:node.py
class Node:
def __init__(self, name):
self.name = name
self.children = []
def add_child(self, child):
self.children.append(child)

A, B, C, D, E, F = Node(‘A’), Node(‘B’), Node(‘C’), Node(‘D’), Node(‘E’), Node(‘F’)
A.add_child(B)
A.add_child(C)
B.add_child(D)
C.add_child(E)
C.add_child(F)
“`
上記によって、下記の構造ができる。

A---B---D
|
--C---E
|

元記事を表示

現在地から写真の撮影場所までのルートを表示する

概要

写真のExif情報から位置情報を取得できることを知ったので
その応用ということで、現在地から取得した位置情報へのルートをDirections APIで取得してみようと思いました。
ついでに、Exif情報から逆ジオコーディングを行って地理情報を同時に表示させます。
素人にも扱えるなんて、Googleさんは素晴らしいですなぁ。。

Exif情報については[wiki](https://ja.wikipedia.org/wiki/Exchangeable_image_file_format)を参照してください。
以下、引用文。
>カメラの機種や撮影時の条件情報を画像に埋め込んでいて、ビューワやフォトレタッチソフトなどで参照、応用することができる。

[逆ジオコーディング](https://business.mapfan.com/blog/detail/628)については以下を参照してください。
以下、引用文。
>経度緯度から住所を取得する方法を「リバースジオコーディング」や「逆ジオコーディング」と言います。

完成系

ただローカルで動かす程度なので、フロントには全く

元記事を表示

Python による Microsoft Graph API を利用し、グループのメールアドレスからそのGroup-IDを取得し、そこからグループメンバーのUser-IDを取得してみました

# Python による Microsoft Graph API を利用し、グループのメールアドレスからそのGroup-IDを取得し、そこからグループメンバーのUser-IDを取得してみました

## 概要
Microsoft Graph API を利用してAzureActiveDirectoryから指定したグループ情報(今回はグループメールアドレス)を取得し、そこからそのグループメンバーのUser-IDを取得するための Python プログラムです。
Access Token の取得については、[このプログラム](https://qiita.com/turupon/items/038b893712433ed23f0b) を使用しています。

## 実行環境
macOS Big Sur 11.1
python 3.8.3

## 実行プログラム

```python:GetAzureGroupMember.py

import json
import requests
import argparse
import time
import pprint
from datetim

元記事を表示

【Python】Anaconda+TensorFlow 2.3.0 (GPU) の環境構築

# はじめに
 最近、Pythonでディープラーニングの勉強ができる環境を構築したので、備忘録としてまとめます。PC環境は以下の通りです。

 ・OS: Windows 10 Pro
 ・CPU: intel Core i9-9900K
 ・GPU: Geforce RTX2070
 ・メモリ: 32GB

特に、TensorFlowでGPUが認識されずに苦労しました。Anacondaのバージョンは4.9.2、Pythonのバージョンは3.8.5です。Anacondaにこだわる理由は、MATLABユーザの私にとって、Pythonエディタの「Spyder」が使いやすいからです。Spyderをpipでインストールして構築するのは初心者の私には無理でした。

# 記事の内容
 Anaconda環境で、TesonrFlowをインストールする。

# TensorFlowとは
 TensorFlowは、Googleが公開している機械学習ライブラリです。2015年に登場したそうです。TesonrFlowはGPUを用いて高速な計算を行うことができます。GPUを使って計算ができるディープラーニングフレ

元記事を表示

フォルダ内のCSVを一気に置換する

# 目的

ログ等で作成されたCSVファイルから、一気に内容を置換したいときがあります。
ファイルが数個ならテキストエディタの置換機能や、Linuxならsedコマンドも使いますが、
対象が多かったり複雑な置換をすると、途端に難易度が上がります。

というわけで、自分用に以下のようなスクリプトを書いて使っています。
CSVをテキストファイルとして一気に読み込んで、一気に置換をしています。

# ソースコード

以下は現在のディレクトリ内にあるCSV中の「iPhone」を「Android」に置換するスクリプトの例です。

```python
import glob
import os

curdir = os.getcwd() # 直接パスを指定しても良い
csvfiles = glob.glob(os.path.join(curdir, '*.csv')) # CSVリストをフルパスで取得

for filepath in csvfiles:
with open(filepath, mode='r') as fs:
s = fs.read() # CSV全体を一気

元記事を表示

【Scanpy, scRNA-seq】ScanpyのUMAPに再現性を持たせる

## 起きていた問題
Scanpyで描いたUMAPに再現性がない。
予想としてはPCAの部分で相違が生まれていそう。

## 環境

[こちら](https://hub.docker.com/layers/139333159/taowata/jupyterlab-scanpy/BBKNN-1.4.0/images/sha256-82b733309f1a0a0fc6c0b543c0291a2a1886f42d453337b2cb45e4a412b0cfe1?context=explore)のDockerイメージをスパコンのSingularityコンテナとして利用。
バージョン情報:

```
scanpy==1.7.0 anndata==0.7.5 umap==0.5.1 numpy==1.19.2 scipy==1.5.2 pandas==1.1.3 scikit-learn==0.23.2 statsmodels==0.12.0 python-igraph==0.9.0 louvain==0.7.0 leidenalg==0.8.3,
```

## 解決方法
[#1187](ht

元記事を表示

playwright-pytestで失敗時の動画を撮っておく

## まえおき

playwright-pytest を使ってE2Eテストを始める方法については、以前に以下の記事で紹介した。

https://qiita.com/YusukeIwaki/items/149859a0a508933a8a64

ここでは、失敗時の画面キャプチャを撮る方法までは書いたが、実際に自動試験スクリプトを書いていると「どうしてそうなった?!」と思うことが稀によくある。(しかも、そんなテストに限って、じっと見張っていると何回やってもpassしたりするw)

不毛すぎるので、見張らなくてもいいようにエビデンス動画を残しておきたいと思うのがエンジニアである。

## playwright-pythonで動画を撮る方法

[playwright-python](https://github.com/microsoft/playwright-python) には、自動操作中の動画を記録する機能がある。

以下の記事でも言及されているように、 `browser.new_context()` もしくは `browser.new_page()` の引数に `record_vid

元記事を表示

機械学習アルゴリズムメモ 正則化線形回帰編

#正則化とは
特徴量の多いデータに対して過剰適合する線形回帰モデルの重みパラメータに対して制約を加えることで、過剰適合するのを防ぐ。リッジ回帰、ラッソ回帰、エラスティックネット回帰の3つが代表としてあげられる。
###【ラッソ回帰】
線形回帰と同様に、予測はデータの特徴量の線形和としてあらわされる。

```math
\hat{y} = \sum_{i=1}^{p} w_ix + b
```

しかしながら、損失関数は通常の線形回帰に重みwに対する制約が与えられる。ラッソ回帰の場合はL1ノルムである。

```math
E(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i}) ^ 2 + \alpha \sum_{i=1}^{p} |w_i|
```

###【リッジ回帰】

```math
\hat{y} = \sum_{i=1}^{p} w_ix + b
```

リッジ回帰の場合はL2ノルムである。

```math
E(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i}) ^

元記事を表示

多言語で Fizz Buzz !

#はじめに
この記事では、FizzBuzzゲームのプログラミングコードを紹介する。とりあえず、Python、Fortran、C++で書いたコードを2つずつ見てみよう。

#目次
1.そもそもFizzBuzzゲームとは?
2.Python
3.Fortran
4.C++

#そもそも FizzBuzzゲームとは?
https://ja.wikipedia.org/wiki/Fizz_Buzz

#Python
```python:for文
for i in range(1, 101):
if i % 15 == 0:
print('Fizz Buzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
```

```python:while文
i = 1
while i < 101: if i % 15 == 0: print('Fizz Buzz')

元記事を表示

【optimizer入門】性質を変えて遊んでみる♬

前回は、optimizerを可視化して、その性質の一端を見た。
今回は、さらに深堀して性質からどのように利用できるかを考える。
前回の追記にするか迷ったが、角度を変えて記述することにより、より理解が深まると考えて、続編というよりは別偏とすることにしました。
とりあえず、内容と直接関係ないが、以下を参考として挙げておく
【参考】
①[Optimization Algorithms in Deep Learning-AdaGrad, RMSProp, Gradient Descent with Momentum & Adam Optimizer demystified;AdaGrad、RMSProp、勢いのある最急降下法とAdamOptimizerの謎を解き明かす](https://towardsdatascience.com/optimization-algorithms-in-deep-learning-191bfc2737a4)

###やったこと
・VGD、momentum、そしてgrad規格化という3つの性質
・momentumの変数beta1の役割
・grad規格化の変数bet

元記事を表示

PythonでFizzBuzz

Pythonの学習を始めた 備忘録

###コード
```Python
for i in range(1,31):
if i%3==0 and i%5==0:
print("FizzBuzz")
elif i%3==0:
print("Fizz")
elif i%5==0:
print("Buzz")
else:
print(i)
```

###出力
```
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
```

###余談

[Python超入門コース 合併版|Pythonの超基本的な部分をたった1時間で学べます【プログラミング初心者向け入門講座】](https://www.youtube.com/watch?v=HyU3XL2F9GE)

最初の一歩として上の動画を眺めた

FizzBuzzと

元記事を表示

Spotifyで聴いた曲を全部プレイリストに保存する

# はじめに
Spotifyの履歴は50曲しか保存されないし、デスクトップアプリからしか確認できません。そこで再生した曲をプレイリストに自動追加してくれるスクリプトがあれば便利だと思い、このコードを書きました。プレイリストには1万曲まで追加できるようです。[spotipy](https://spotipy.readthedocs.io/)パッケージにAPIを叩いてもらうのが人気のようなのでこれを利用します。

###(3月2日訂正)
以前はtokenを使った認証方法を記載していましたが、有効期限が1時間しかなく、1時間経つとエラーを吐いて止まってしまうようです。そこで[公式のドキュメント](https://spotipy.readthedocs.io/en/2.16.1/#authorization-code-flow)で推奨されている```oauth2```を使った認証方法に変更しました。

# 今聴いている曲を取得

デベロッパーページ
https://developer.spotify.com/dashboard/applications
にアクセスして"CREATE AN AP

元記事を表示

OTHERカテゴリの最新記事