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

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

【pandas】欠損補完しながら重複削除

# はじめに

pandasのデータフレームをあるkeyで重複削除する際、同一レコードだと判定されたレコード同士で欠損補完してから重複削除したい場合があります。

“`python
import pandas as pd

df = pd.DataFrame({
‘building_name’: [‘Aビル’, ‘Aビ ル’, None, ‘Cビル’, ‘Bビル’, None, ‘Dビ ル’],
‘property_scale’: [‘large’, ‘large’, , ‘small’, ‘small’, ‘small’, ‘large’],
‘city_code’: [1, 1, 1, 2, 1, 1, 1]
})
df
“`

| building_name | property_scale | city_code |
|:–|:–|:–|
| Aビル | large | 1 |
| Aビル | large | 1 |
| None | small | 1 |
| Cビル | small | 2 |
| Bビル | small | 1 |
|

元記事を表示

プログラミング言語の比較(PythonとJavaとRubyと)

面接で聞かれてしゅって答えられず痛い目にあったので自分用に整理としてみる。

# 概要
自分の経験期間は以下(2020年7月現在)

|言語|使用期間|使用用途|
|—-|—-|—-|—-|
|Python|2018.5 ~ 2020.3|(1)JupyterNotebook上でのWebスクレイピングや機械学習を含むデータ解析 (2)MLOpsにおけるAWS Lambdaの実行スクリプトやAWSBatchの実行ファイル|
|Java| 2018.8 ~ 2019.5|Javaによるスタンドアロンアプリ開発|
|Ruby| 2019.11 ~| RailsでのWebアプリ開発|

– オブジェクト指向やシステム開発の基礎を身に付けたのはJava、Webアプリを実際に作ったのはRuby on Railsである。
– PythonのDjangoはチュートリアルだけやった
– PYthonはデータ解析メインで使ったため、システム開発の経験があるJavaとRubyを比較する。

# Java
– kafka, Hadoopなどデータ処理系には結構よく使われているイメージ。

元記事を表示

Deep Learning Specialization (Coursera) 自習記録 (C4W3)

# はじめに
[Deep Learning Specialization](https://www.coursera.org/specializations/deep-learning) の Course 4, Week 3 (C4W3) の内容です。

# (C4W3L01) Object locatlization
## 内容

# 参考
– [Deep Learning Specialization (Coursera) 自習記録 (目次)](https://qiita.com/satomshr/items/dc4ae752c558798bbef6)

元記事を表示

contextlib.ExitStack

“`py
import contextlib

def is_ok_job():
try:
print(‘do something’)
raise Exception(‘error’)
return True
except Exception:
return False

def cleanup():
print(‘clean up’)

def cleanup2():
print(‘clean up2’)

# try:
# is_ok = is_ok_job()
# print(‘more task’)
# finally:
# if not is_ok:
# cleanup()

with contextlib.ExitStack() as stack:
stack.callback(cleanup)
stack.callback(cleanup2)

@stack.callback
def clean

元記事を表示

競プロ精進日記4日目~10日目(6/28~7/4)

やるべき卒研の勉強は進められていませんでしたが、競プロはほぼ毎日解くことができませんでした。
どちらも両立できるように頑張りたいのと毎日解いたらすぐ復習として記事にまとめることを忘れずにやりたいと思います。

#4日目
コンテスト中に通せなかったABC172-Eを解きました。
包除原理の問題であり、[こちらの記事](https://qiita.com/DaikiSuyama/items/4d0388a3f68b60c3e5f3)で解説しました。

#5日目
##[ABC137-D Summer Vacation](https://atcoder.jp/contests/abc137/tasks/abc137_d)
###かかった時間
14分

###考察
比較的簡単な問題なのであまり考察をせずに解いてしまいました。

$i$件目の日雇いアルバイト(以降はバイトと省略)は$A\_i$日後に報酬$B\_i$を受け取るので、$M-A\_i$日以前にバイトをしてないと報酬を受け取ることができません。したがって、$j$日目に働いて報酬を受け取ることのできるバイトは$M-j$日以内で報酬を受け取る

元記事を表示

YYYYMMDD形式のファイルを連番にリネーム

職場のサーバーに2008年1月から毎日更新している画像データを実直に保存していたので
ファイル名を連番にリネームしてffmpegで動画にしてみた。

– 元ファイル status_20080101.pngから
– 変換後 status_0001.png等

YYYYMMDDは一旦Date形式に変換して比較してソートしてからリネームかなぁ?
と思ったらもっと楽だった。
globのsortedで日付け順にきちんとリスト化してくれた
 

“` rename.py
import os
import glob

file_list = sorted(glob.glob(‘status_????????.png’))

for num,filename in enumerate(file_list):
os.rename(filename , ‘status_’ + ‘{0:04d}’.format(num) + ‘.png’)
“`

ffmpegで連番画像をソースにする方法は以下を参照した(Qiita)
[ffmpegで連番画像から動画生成 / 動画から連番画像を生成 ~コマ落ち

元記事を表示

【自動化】Pythonでマウスとキーボードを操る

##マウス/キーボード操作を自動化したいのはどんなとき?

PythonではExcelなどの「ファイル」やウェブブラウザなどの「アプリ」を直接操作することが比較的簡単にできます。

なので、マウス操作やキーボード入力を自動化したいことなんてあるの?と思われる方もいるかもしれません。

世の中にはたくさんのアプリ、ソフトが存在します。フリーソフトまで含めればそれこそ星の数ほど存在しています。
さすがのPythonもそれらのアプリのすべてに対応しているわけではありません。
Pythonで**直接操作することができないアプリ**もたくさんあるのです。

そのようなアプリでの作業を自動化したいケースでは、**マウスとキーボードの操作を自動化する**ことで対応できます。

そもそも人間がアプリを操作するときは、マウスとキーボードで操作するわけですから、マウスとキーボードをPythonで操ることができれば理屈の上では何でも自動で操作できるはずです(たぶん)。

というわけで、本記事ではPythonでマウスとキーボードを操作する方法を紹介します。

##PyAutoGUIで自動化する

Python

元記事を表示

Optunaを使ったSVMの設定方法

##Optunaを使ったSVR(サポートベクター回帰)の設定方法

`SVM`の回帰`SVR`について設定してみる。
設定はメインの、`gamma`,`C`,`epsilon`を設定した。`kernel`も設定を忘れないようにコメントとして、置いておいた。`kernel`込みの計算も可能だが、`poly`多項式が入るととたんに計算が遅くなったので、とりあえず`rbf`(放射基底関数)のみで、計算しておいた方が良いと思います。

パラメータの設定

“`
def objective(trial):
#kernel = trial.suggest_categorical(‘kernel’, [‘linear’,’rbf’,’poly’,’sigmoid’,’precomputed’])
gamma = trial.suggest_loguniform(‘gamma’,1e-5,1e5)
C = trial.suggest_loguniform(‘C’,1e-5,1e5)
epsilon = trial.suggest_loguniform(‘epsilon

元記事を表示

contextlib.redirect_stdoutとcontextlib.redirect_stderr

#ファイルに書き込みます

“`py
import contextlib
import logging
import sys

# x = input(‘Enter:’)
# print(x)

with open(‘stdout.log’, ‘w’) as f:
with contextlib.redirect_stdout(f):
print(‘hello’)

with open(‘stderr.log’, ‘w’) as f:
with contextlib.redirect_stderr(f):
logging.error(‘Error!’)
“`

元記事を表示

requestsで日本語(Shift-JIS)に対応したPOSTリクエストをコールしたい場合の方法

# 概要
– pythonのrequestsモジュールを使ってPOSTメソッドでリクエストをする場合、URLエンコードをするが、日本語のパラメータ値を渡す場合には注意が必要。

– サイトによってはShift-JIS形式でデコードするものがあり、その場合は、リクエストする側もShift-JIS形式でエンコードしてコールする必要がある

– requests.postにdict形式で渡すとデフォルトのエンコードが行われるため、urllibモジュールを使いURLエンコードを行いstr型にして直接requestsに渡すことで、デフォルトのエンコードも回避し、Shift-JISでエンコードしたパラメータを渡すことが可能です。

# 解決法
“`
import requests
import urllib.parse

# postパラメータの値(例)
item = ‘ほげ’
post_data = {‘KEY1’:item}

# shift-jisでエンコードし、str型にする
urlencode_post_data = urllib.parse.urlencode(post_dat

元記事を表示

[光-Hikari-のPython]09章-02クラス(クラスの作成とインスタンス化)

#[Python]09章-02 クラスの作成とインスタンス化
前節では、オブジェクトとは何かについて説明し、数値やリストなどはすべてオブジェクトであると説明しました。例えば、数値型オブジェクトやリスト型オブジェクトといったものです。

今回は自分自身でオブジェクトを作成する方法について触れていきたいと思います。

##オブジェクトの設計図とは
Pythonでは、数値型やリスト型、文字列型のオブジェクトがあると説明しました。
例えば、文字列型オブジェクトであれば「データの先頭だけを大文字にする」「データの中で指定した文字を探す」といった動作(メソッド)があります。

これは、文字列型のオブジェクトですが、実はこの文字列型のオブジェクトの**設計図**がPython内に存在します。(普段は意識していないですが)
この設計図に当たるのが**クラス**と言われるものです。

今まで数値や文字列、リストなどについて無意識に使ってきましたが、これを使うたびに**設計図(クラス)に基づいてオブジェクトを生み出しているのです。**

この設計図には、例えば**データ(属性またはプロパティともいう)はど

元記事を表示

Pythonでプロセスについて勉強してみた

### 概要
– pythonを使ってプロセスの生成周りを学習し直したメモ
– subprocessモジュールなどもあるが、自分で実装して勉強し直したメモ
– 備忘録


### 前提
– 環境
– python: v.3.7.7

### 基礎
– “`os.fork()“`
– fork により、そのプロセスのコピーができる。
– 複製された方が「子」、作った方は「親」
– 子プロセスでは `0` が返り、親プロセスでは子プロセスの `id` が返る
– forkしたプロセスは、親プロセスが処理終了を待つことはない
– 親プロセスが先に終了すると、子プロセスで`os._exit()`してもゾンビプロセスとして残ってしまうので注意
– つまり
– forkすると、その時点で処理が分岐される
– **親は子の終了は待たない**
– 分岐した際に、自分が子or親の判定は、fork()の返り値が`0` or `!0`で判定する
– 定石としては

元記事を表示

Raspberry-piメモ

色々作ってもらっていると、自分でも触りたくなったので休日に勉強を始めた

とりあえず買って放置していたものを掘り起こす
Raspberry Pi4 ModelB Rev1.2 とラズパイカメラv2
Raspbian 10 buster

たぶんまたしばらくしたら同じことで詰まるので、自分の手順を記録する

##### 1.とりあえずカメラをつないで画像を保存してみる
参考URL様
> http://igarashi-systems.com/sample/translation/raspberry-pi/usage/python-camera.html

IDEのthonny?とかいうのでサンプルプログラムのコピペを動かす
→ 問題なくできる

##### 2.openCVで画像を触ってみたかったのでインストール
何も考えず pip install python-opencv
→ import cv2ができず地獄が始まる

### pythonのデフォルトをpython3にした
参考URL様
> https://www.souichi.club/raspbe

元記事を表示

フロントエンドプログラミング不要なハイレベルウェブフレームワーク、JustPyの紹介

# JustPyとは
[JustPy](https://justpy.io/)とは、フロントエンドプログラミングを必要としない、オブジェクト指向かつコンテンツベースなPythonのハイレベルウェブフレームワークです。
> An object-oriented, component based, high-level Python Web Framework that requires no front-end programming.

FlaskやDjangoなどでは、かなりの部分をPythonだけで完結できますが、それでもJinja2などを使用してHTMLを記載する必要があります。一方このJustPyは、本当にPythonだけで完結します。
※ただ結局のところHTMLやCSSの知識は必要ですが…

またハイレベルといっている通り、ベースはStarlleteというウェブフレームワークで、Asyncに対応しています。またフロントエンドはVue.jsをベースにしています。

以下は[公式のチュートリアル](https://justpy.io/tutorial/getting_start

元記事を表示

Python3チートシート(基本編)

# 本記事の内容

1. Pythonの基本
2. 制御構造
3. データ構造
4. 関数
5. クラス/インスタンス
6. モジュール/パッケージ/名前空間/スコープ
7. 組み込み関数/特殊メソッド
8. ファイル操作と入出力

# 1. Pythonの基本

### 基本文法

“`python:インデント
import os
def function():
# インデントはPEP8(*)に従い、半角スペース4つ
print(‘Hello world’)
“`
> (*)PEP8(Python Enhancement Proposal)
> https://www.python.org/dev/peps/pep-0008/
> Indentation
> Use 4 spaces per indentation level.

“`python:変数宣言
# 数値
num = 1
# 文字列
name = ‘Tanaka’
# リスト
list = [1, 2, 3, 4, 5]

# 明示的な型宣言
num: int = 1
name: str =

元記事を表示

Python 正規表現で文字列置換

reモジュールのsub 関数を使って置換していきます。

reモジュールの使い方
参考 https://note.nkmk.me/python-re-match-search-findall-etc/

##プログラム
プログラムのの挙動は以下の通りです。

response1, response3, response4 の値は以下のように変換されます。
1) 
target_str 及び tmp_json が 以下の場合、
target_str = “asdasdasd ${key1} asdasdasdasd %key2% asdasdasd |key1| asdasdasd”
tmp_json = {“key1” : “value1″,”key2” : “value2”}
置換後の値は以下のように、tmp_json のキーに対応する値で書き換えられます。
asdasdasd value1 asdasdasdasd value2 asdasdasd value1 asdasdasd

2)
target_str 及び tmp_json が 以下の場合、
target_str =

元記事を表示

vimを閉じずにpythonを実行して結果を表示する話

# やりたいこと
1. pythonをvimを閉じずに実行する
2. 実行結果を新しいバッファに表示する

# できたもの
– pythonファイルの場合のみ``を押すと実行される
– 実行結果が新しいバッファに表示される
– 複数回実行した場合は追記される
– 複数のpythonファイルが開かれていいる場合カーソルがあるファイルが実行される

![vimpy.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308715/aaadadf9-dea5-e8bf-d720-ae04c9a000c7.gif)

# 場所
この内容は`_vimrc`に書き込みました. `_vimrc`は

“`vimscript
:vnew $HOME/_vimrc
“`

で開くことが出来ます.

# やったこと

## 素朴な方法
“`vimscript
:!python %
“`
Exコマンド`:! hoge`はcmd`hoge`を実行してくれます.これを``へ割り当てます.

“`vimscri

元記事を表示

製薬企業研究者がPythonのコーディング規約についてまとめてみた

# はじめに

ここでは、Pythonのコーディング規約について解説します。

# PEP8で定められたコーディング規約

Pythonでは、PEP8というコーディング規約が定められています。
PEP8で定められている概要について以下に示します。

## import文

import文では、`import os, sys`などとせず以下のように複数行に分けるようにします。
また、標準ライブラリ、サードパーティ製ライブラリ、ローカルのモジュール等は区別できるよう1行の空白行を入れるようにします。

“`python
import os
import sys

from django.utils import timezone

from my_app.models import User
“`

## 文中の空白文字

“`python
a = 1
b = a + 2
list_nums = [a, b]
dict_nums = {‘a’: a, ‘b’: b}
“`

`=`の前後には半角スペースを入れ、リストや辞書などの`,`の後にも半角スペースを入れます。
また、

元記事を表示

pandasのread_htmlを用いて競馬データをスクレイピングする方法

# やること
netkeiba.comから2019年の全レース結果をスクレイピングする。tableタグがついているデータはpandasのread_htmlを使うと、1行でスクレイピングできるので便利。

“`python
pd.read_html(“https://db.netkeiba.com/race/201902010101”)[0]
“`
![スクリーンショット 2020-07-04 22.19.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667890/927da3cf-b682-f5fa-5860-938b34c6a413.png)

# ソースコード
netkeiba.comでは1レースごとにrace_idが付与されているので、race_idのリストを入れたらそれぞれのレース結果をまとめてスクレイピングして辞書型で返してくれる関数を作る。

“`python
import pandas as pd
import time
from tqdm.notebook import t

元記事を表示

libscipsのプログラムレベルのお話①(α0.0.1)

**注意 このコンテンツは[旧サイト](https://kumitatepazuru.github.io/blog/#!libscips/program1.md)を移行したものです。なので内容がおかしいかもしれませんがご了承ください。**
**注意2 このコンテンツは自分のツールをより多くの人に知ってもらうために[kumitatepazuru’s blog](https://kumitatepazuru.hatenablog.com/entry/2020/06/01/104708)から複製したものです。使ってね!**

今回は、自分が作っているライブラリlibscipsについて説明しようと思う。

## 作成経緯

僕達zyo_senチームはこれまでagent2d(gliders2d)を使っていた。しかし、agent2dはC++で僕達の専門(?)はpythonなので解読が大変だった。そして、もとAI教室のチームということもあり、AIで戦わせたかった。でもC++の情報は少ない…さてどうしよう。

そんなときに思いついたのがこのライブラリだった。

agent2dがベースとして使ってい

元記事を表示

OTHERカテゴリの最新記事