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

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

【Rust】緯度経度のcsvデータを読み込んで2点間の距離を求める

## 背景

500点くらいの位置情報がcsvデータにまとめられていて、その全ての組み合わせについて直線距離(km) を求めたい.

## 緯度経度から距離を求める

以下の記事を参考にさせていただきました.

– Python 経度・緯度で与えられた2点間距離計算
– https://qiita.com/damyarou/items/9cb633e844c78307134a

“`rust
pub fn cal_rho(lat_a: &f64, lon_a: &f64, lat_b: &f64, lon_b: &f64) -> f64 {
const RA: f64 = 6378.140; // equatorial radius (km)
const RB: f64 = 6356.755; // polar radius (km)
let f: f64;
let rad_lat_a: f64;
let rad_lon_a: f64;
let rad_lat_b: f64;
let rad_lon_b: f64;

元記事を表示

「クソデカ文学コンバータ」作ってみた

# とりあえず作ったもの
https://kusodeka.v-to-i.com

使ってみてね!!

# 概要
言わずもがな、テキストを入力すると「[クソデカ羅生門](https://anond.hatelabo.jp/20200611125508)」みたいにしてくれるアプリです。

# どうやっているのか
コードは公開できるほどのものではないですし、テキスト変換の精度も低いので、ここではざっくりとだけ説明します。とりあえずさっさと作りたかったのですごく雑なアルゴリズムです。

1. クソデカ羅生門と羅生門の差分から、どのような単語の前に「クソデカ」みたいな言葉(クソデカワードとします)が挿入されているかの辞書(クソデカ辞書)を作る(例:”羅生門”: [“正気を疑うレベルでデカい”, “クソデカい”, “クソデカ”, “トチ狂ったクソデカさの”])
2. Mecabで形態素解析して、入力テキストの単語の品詞を特定する。
3. 一般名詞など特定の品詞の単語の前にクソデカワードを挿入する。この時、クソデカ辞書から、入力の単語と類似度が一番近いkeyのvalueを選んで挿入する(gensi

元記事を表示

なろう小説APIを試してみた

#きっかけ
https://qiita.com/dely13/items/5e949a384161c961d8ce
こちらの記事を読んで、~~遊び~~練習がてら自分で試していたら、結果が違うぞ→この記事2017年じゃん
と、なったので最新を出してみた(2020/6/29 10:00現在)

#前半はそのまま

@dely13さんの記事をそのまま使います

“`dely13.py
import pandas as pd
import requests
import numpy as np
import seaborn as sns
from scipy import stats
import matplotlib.pyplot as plt
%matplotlib inline

url = “http://api.syosetu.com/novelapi/api/”
# APIのパラメータをディクショナリで指定する
# この条件で、総合評価順でjson形式のデータを出力する
payload = {‘of’: ‘t-gp-gf’, ‘order’: ‘hyoka’,’out’:’jso

元記事を表示

十種競技で世界記録を出すための最適解を算出してみた

# はじめに

「十種競技」という競技をご存知でしょうか?
2日間で走(100m, 400m, 1500m, 110mH)、跳(走高跳, 棒高跳, 走幅跳)、投(砲丸投, 円盤投, やり投)の10種目を行い、各種目の記録を得点化しその合計記録で争うという競技です。
現在(2020年6月)の世界記録は Kevin MAYER 選手の9126点です。

ところで、この点数を効率良く出すためにはどうすればいいでしょうか?
「全ての種目で均等に得点を取る」という考えがありそうですが、これは現実的ではありません。
種目によって得点を稼ぎやすいもの、稼ぎにくいものがあるためです。
例えば、各種目で900点を獲得するための記録は下記となります。
(参考までに、十種競技の種目ごとの日本記録も併載)

||100m|400m|1500m|110mH|走高跳|棒高跳|走幅跳|砲丸投|円盤投|やり投|
|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|:—:|
|900点|10.82|48.19|247.42|14.59|2.10|

元記事を表示

RedshiftでUNLOADしたgzipファイルをLambdaのPythonで処理をして再びgzipしてS3へアップする

# やりたいこと
タイトルの通りですが、Redshiftにデータウェアハウスがあり、普段ELTで処理することが多いのですが、プログラミングによるデータ加工が必要な場合もあります。

RedshiftのUNLOADを利用することでRedshiftからSQLの結果をS3にgzipファイルを作成することが出来ますので、S3へのputイベントをトリガーにLambdaで処理して再びgzipした状態でS3にアップ、ということをしてみました。

# UNLOAD
Lambdaは現時点では3008MBが最大となります。今回のような処理はファイルサイズが増えると必然利用メモリ量が増えてしまいます。
そこで、[MAXFILESIZE パラメータ](https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_UNLOAD.html) を設定することでLambdaへ渡すファイルサイズを調整します。
完全なるケースバイケースですが、今回は50MBで設定してみました。

# Lambda上のコード
トリガ設定は割愛します。

“`
import json
imp

元記事を表示

discord.py+gspreadで出退勤を管理してみる

# 背景
自宅作業をしながら、出社している感を出すために、discordで何かできないかなぁと考えて、ボイスチャンネルに入っている時を出社、抜けたら退社したみたいなことができるbotを作ってみた。

# 作成物
![kintai.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49447/1901b3ba-40f1-8aac-96df-034339a16e1c.gif)

## 使った技術
* discord.py
* gspread

# やったこと

* ボイスチャンネルのin/outの検知
* google spread sheetへの保存
* テキストへのリアクション付与

## ボイスチャンネルのin/outの検知
`discord.Clinent`の`on_voice_state_update(self, member, before, after)`を用いて検知

“`python

async def on_voice_state_update(self, member, before

元記事を表示

Pythonのf-stringsについてしっかり調べてみた

Pythonの文字列関係の制御を調べていて、f-strings(f文字列)が結構奥が深く知らないことも多かったので、別途Qiita記事にまとめておきます。

# そもそもf-stringsってなに?

Pythonで文字列の前に`f`という文字を付与し、且つ`{}`の括弧を使うことで文字列中に変数を展開したりコードを実行したりできる機能です。

以下のようなコードになります。

“`py
name = ‘タマ’
txt = f’猫の名前は{name}です。’
print(txt)
“`

“`
猫の名前はタマです。
“`

# 主な参考サイト

f-stringsについて詳しく説明がされている[PEP 498 — Literal String Interpolation](https://www.python.org/dev/peps/pep-0498/)を主に参考にします。

# 記事上で使う環境

– Windows10
– Python 3.8.0
– Jupyter(実行にはVS CodeのPython拡張機能を利用)

# f-stringsを使うと何が嬉しいのか?

元記事を表示

Pythonのリストで,指定した複数の位置(インデックス)を削除する方法

指定した複数の位置(インデックス)を削除したい場合,popやdelは使えません
(使えるようにしてくれよ・・・)

“`python
l = [‘0’, ‘1’, ‘2’, ‘3’, ‘4’]

del l[0,1,3]
# TypeError: list indices must be integers or slices, not tuple

l.pop(0,1,3)
# TypeError: pop() takes at most 1 argument (3 given)

“`

これらに代わり,シンプルに記述できる方法として,リスト内包表記があります

“`python

l = [x for x in l if l.index(x) not in [0,1,3] ]

print(l)
# [‘2’, ‘4’]
“`

元記事を表示

K-Shape法を用いて心電図データをクラスタリングしてみた

# 本記事サマリ
K-Shape法を用いて時系列データをクラスタリングしてみる

# データセット
– 今回はカリフォルニア大学リバーサイド校の時系列データコレクション(UCR Time Series Classification Archive)を使います

– 心電図(ECG)は心疾患検出を促進するものとして知られています

– 使用する**ECGFiveDays_TRAIN.tsv**の中身は以下の通りです

“`python:DataFrame
df = pd.read_table(“ECGFiveDays_TRAIN.tsv”,header=None)
df.head(10)
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577151/e92cecd3-489c-4f95-ee10-d51564f2242a.png)

データサマリはこちら

“`python:Summary
import numpy as

元記事を表示

(自分用)AWS_Flask_3(AWS上でFlaskをインストール/動かす)

# 項目
1. AWSにFlaskをインストール
2. 実際に動かしてみる

# 1.AWSにFlaskをインストール
– 前回でもうPythonは入れてあると言う前提

“`bash:ターミナル
# ホームディレクトリへ
$$ cd

# Python仮想環境を作る(myenvは他の名前でもよいぞ)
$$ python3 -m venv myenv

# Python仮想環境を有効化する
$$ source myenv/bin/activate
# 左の環境名だったりの所に(myenv) と表示されれば成功

# pipを一応最新にしておく
$$ pip install –upgrade pip

# Flaskをインストール
$$ pip install flask

# ちゃんとpipにモジュールがあるか確認
$$ pip freeze
“`

# 2.実際に動かしてみる
“`bash:ターミナル
# pyファイルを作成、今回はApacheで動かすので/var/www/htmlの中に作る
$$ vi /var/www/html/test.py
“`

“`pytho

元記事を表示

AtCoder Introduction to Heuristics Contest 参戦記

# AtCoder Introduction to Heuristics Contest 参戦記

[Introduction to Heuristics Contest](https://atcoder.jp/contests/intro-heuristics) に参加しました. マラソンコンテストは [Chokudai Contest 004](https://atcoder.jp/contests/chokudai004) 以来の2回目の参加でした. 結果は83275739点で、1731人中497位でした. 最終コードは以下で PyPy で提出しました.

“`python
from time import time
from random import random

limit_secs = 2
start_time = time()

D = int(input())
c = list(map(int, input().split()))
s = [list(map(int, input().split())) for _ in range(D)]

def calc_s

元記事を表示

Pythonのslicingは、なぜ、コロン(:)で表現するのか

#Pythonのslicingは、なぜ、コロン(:)で表現するのか

Pythonのslicingは、コロン(:)を使って表現する。
例:

“`
>>> a=[10,20,30,40,50,60,70,80,90,100,110]
>>> b=a[3:8:2]
>>> print(b)
[40, 60, 80]
>>>
“`

なぜ、コロン(:)を使うのか?

⇒ **意味のある(役割のある)値を並べるのなら、コロン(:)なんだろうと思う。**

似た使い方と感じるのは、以下。
エクセルの例

“`
=SUM(D3:D5)
“`

コロン(:)に関するwikipedia(日本語)の説明で近いと思うものは、以下。
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%AD%E3%83%B3_(%E8%A8%98%E5%8F%B7)

>時刻や時間の、時・分・秒を区切る。時刻としての使用は ISO 8601 で規定されている。
12:34:54(12時34分54秒・12時間34分54秒)
12:34(12時34分・12時間34分・12分34秒

元記事を表示

(個人用メモ)サンキーダイアグラム

# この記事の目的
以下のような `sankey-diagram` を作成する.
`{0,1}` は2種のイベントを表していて, 一定期間に `0 -> 1 -> 1` などのように複数回のイベントが発生するという想定で, そのイベント発生の遷移を可視化することが目的.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540956/7487f026-4ac5-73bb-f50a-88e94a29ce7e.png)

# 準備

“`python
import numpy as np
import pandas as pd
pd.set_option(‘display.max_columns’, 100)
import random

import warnings
warnings.filterwarnings(‘ignore’)
“`

# ダミーデータ準備

“`python
n=100

agent = [random.choice([1,2,3,4,5,6,7,8,9,

元記事を表示

Djangoメモ

## プロジェクトを作成
プロジェクト用のフォルダがない場合

“`
django-admin startproject ProjectName
“`

プロジェクト用のフォルダがある場合

“`
# プロジェクト用フォルダ配下で実行
django-admin startproject ProjectName .
“`
## プロジェクトの設定
### settings.py
“`python:settings.py
# 言語
LANGUAGE_CODE = ‘ja’
# タイムゾーン
TIME_ZONE = ‘Asia/Tokyo’
“`

## アプリケーションの作成
“`
python manage.py startapp AppName
“`

### settings.py
“`python:settings.py
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.co

元記事を表示

【Dash】 参考URL

* [Basic Dash Callbacks](https://dash-docs.herokuapp.com/basic-callbacks)
* [Dash Layout](https://dash.plotly.com/layout)
* [Input Examples and Reference](https://dash.plotly.com/dash-core-components/input)
* [Line Charts in Python](https://plotly.com/python/line-charts/)

元記事を表示

ゼロから始めるLeetCode Day70 「295. Find Median from Data Stream」

# 概要

海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。

と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。

ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

[Leetcode](https://leetcode.com/)

Python3で解いています。

[ゼロから始めるLeetCode 目次](https://qiita.com/KueharX/items/6ee2502c3b620c795b70)

前回
[ゼロから始めるLeetC

元記事を表示

WindowsでPyAudioがPython 3.7, 3.8, 3.9 にインストールできない場合の対処法

2020年6月現在PyAudio公式版はWindowsのPython 3.6.Xまでしか対応していません。
https://pypi.org/project/PyAudio/#files

3.7以上でインストールしようとすると
“Microsoft Visual C++ 14.0 is required.”
というエラーが出ますが、エラーに従ってMicrosoft C++ Build ToolsをインストールしてもPyAudioの依存関係の設定が上手くいっておらず、インストールできません。

3.7以上でPyAudioを使うには非公式版ですが
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
からバージョンに対応したwhlファイルをダウンロードしてインストールすれば使えます。例えばPython 3.8 on x86-64なら

“`py -m pip install PyAudio‑0.2.11‑cp38‑cp38‑win_amd64.whl“`

でインストールできます。動作は問題ありませんでした。
公式版ならWindows

元記事を表示

Sharpe RatioとSortino Ratioについて

#1 目的
Sharpe RatioとSortino Ratioの意味を説明します。

#2 内容

#2-1 Sharpe Ratioについて

株式投資における銘柄選定においては、期待リターンが高く、リスク(日々の変動率,Volatilityのこと)が低い銘柄を選ぶことが一般的によいとされている。リターンとリスクの関係を示したものがSharpe Ratioである。Sharpe Ratioの計算式は下記で定義されます。

“`math
Sharpe Ratio = \biggl({\frac{R_{p}-R_{f}}{σ_{p}}} \biggl)
“`

$R_{p}:$ 期待リターンを表します。[実際の計算方法はこちらをご覧ください。](https://qiita.com/NT1123/items/096dc41c24751934747e)
$R_{f}:$ 無リスクリターンを示します。何もしなくても得られる利益です。(例:配当、利息)
$σ_{p}:$ Volatilityを表します。[実際の計算方法はこちらをご覧ください。](https://qiita.com/draft

元記事を表示

【Python】中学生がパーセプトロンを実装してアヤメを分類してみた

### はじめに
この記事を書く際に、[Python機械学習プログラミング -GitHub](https://github.com/rasbt/python-machine-learning-book-2nd-edition/tree/master/code)を参考にしました。本当にありがとうございました。
## ニューロンについて
> 神経を構成する細胞で、刺激を受けて興奮し、またその刺激を他の細胞に伝達する。神経細胞。

ニューロンは以下のような画像のものです。

>
[日経クロステック](https://www.google.com/url?sa=i&url=https%3A%2F%2Fxtech.nikkei.com%2Fdm%2Fatcl%2Ffeature%2F15%2F032300023%2F00003%2F

元記事を表示

Pythonでピラミッドを表示させる

#はじめに
Pythonを学習してみようと思い、参考書をもとに10時間くらい勉強しました。
そのアウトプットとして、Pythonでピラミッドを作成してみました。

#環境
– Windows10
– PyCharm 2020.1.2
– Python3.8

#実行結果
“`
> python pyramid.py
Please input number => 6
*
***
*****
*******
*********
***********
“`

#コード
“`pyramid.py
num=int(input(‘Please input number => ‘))
spc=’ ‘*max(0,num-1)

for i in range(1,2*num,2):
ast=’*’*max(1,i)
out=spc+ast
print(out)
spc=spc.replace(‘ ‘,”,1)
“`

##コードの解説
input関数を使用して、num変数にキーボードからの入力した値を代入します。
このとき、取得

元記事を表示

OTHERカテゴリの最新記事