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

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

bitflyerの完全なティックデータを取得する

#はじめに
久しぶりにbitflyer lightningにログインした。
仮想通貨は大盛りあがりを見せたあの”2017年”以降、保持し続けているのだが、トレードはしていない。
lightnigの最終取引額の目まぐるしい変化を見て、”可能性”を感じてしまい、久しぶりにトレードをしたくなった。
スクリーンショット 2020-01-11 8.49.19.png
#再開
以前は裁量取引をしていたが、2度とやろうとは思わない。その精神的な負荷に耐えられるメンタルを持たないためだ。
従って自動売買システムを構築する必要がある。
そこでまず必要になるのはトレードロジックの判断基準となるデータである。
#API
APIとは簡単に述べると、URLを叩くと特定のデータ(最新のBTCの値など)にアクセスできる、特定の命令(BTCの買い

元記事を表示

PythonのスクレイピングでQiitaのトレンドを取得してみる

#はじめに
以下の記事を参考にさせていただきました。

[Python Webスクレイピング 実践入門](https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406)
[BeautifulSoup4のチートシート(セレクターなど)](https://python.civic-apps.com/beautifulsoup4-selector/)

今回目標とするデータはQiitaのトップページに乗っているトレンドです。

![スクリーンショット 2020-01-11 0.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417600/122759ef-240c-4b58-a309-6b1f61e73a1f.png)

このように
`

`
と言う形でトレンドのJSONデータが存在しているので、それの取得を目標にします。

#実装

元記事を表示

Selenium(Python)で複数サイトを自動ブラウジングするツール作った

#はじめに
ブラウジングしたいURLが書かれたテキストファイルを受け取り、自動でブラウジングしてくれるツールを作成しました。
こだわった点は[youtube](https://www.youtube.com/)や[yahoo](https://www.yahoo.co.jp/)など、**スクロールするにつれてコンテンツが増えるページにも対応した点**です。
参考になれば幸いです。

# コード
“`py:AutoBrowsing.py
import os
import re
import sys
import time
import chromedriver_binary
import requests
from selenium import webdriver

# *** main関数(実行は最下部) ***
def main():
# URL一覧ファイルの受付
input_path = input_urls_file()
# URLリストをファイルから取得
url_list = get_url_list(input_path)
# UR

元記事を表示

[Python3 入門 4日目] 3章 リスト、タプル、辞書、集合(3.1〜3.2.6)

# 3.1 リストとタプル
pythonには文字列以外に**タプル**と**リスト**の2種類のシーケンス構造があり、0個以上の要素を持つことができる。文字列との違いは要素は型が異なっても良い。
###タプルの特徴
タプルはイミュータブルであり、要素を代入すると、それは焼き固められたように書き換えられなくなる。
###リストの特徴
ミュータブルであり、要素の削除と挿入ができる。

# 3.2 リスト
リストは要素を順番に管理したい時、特に順序と内容が変わる場合がある時に向いている。文字列とは異なり、リストはミュータブルのため直接変更できる。

## 3.2.1 []またはlist()による作成
リストは0個以上の要素をそれぞれカンマで区切り、全体を角かっこで囲む。

“`py
>>> empty_list = []
>>> weekdays=[‘Monday’,’Tuesday’,’Wednsday’,’Thursday’,’Friday’]
>>> another_empty_list=list()#list()関数で空リスト[]が作成できる。
>>> another_empty

元記事を表示

Python3で業務的なデータはDecimalで

#Python3で業務的なデータはDecimalで

プログラマ初心者の頃を思い出す、初歩的ミスをしたので
基本中の基本的なことですが反省を込めて投稿を

###パーセントの変換

こんなソースで

“`ng.py
#パーセント変換
#99.999 % をfloatに変換する。
def convert_per(gttper:str)->float:
m = re.match(r”[0-9]*.[0-9][0-9][0-9]”, gttper)
ret_vees_per = float(m.group(0))/100
#print (ret_vees_per)
#print (type(ret_vees_per))
return ret_vees_per
“`

これで

“`call.py
print(convert_per(“2.200 %”))
“`

ってやると
0.022000000000000002
になっちゃう

あれれ?
そうです。
コンピュータ内部は、2進数で管理しているから、10進数を扱うと微妙な誤差が出てしまうのです

元記事を表示

Pythonで一度に、安全に、非破壊的に、複数辞書の結合と複数要素の追加を行う

# やりたいこと

– 複数の辞書を結合して1つの辞書にしたい
– ついでに他にも要素を追加したい

“`python
dictA = {‘A1’: 1, ‘A2’: 1}
dictB = {‘B1’: 1, ‘B2’: 1}
# —(辞書の結合 & 要素の追加)—
# => {‘key1’: 1, ‘key2’: 1, ‘A1’: 1, ‘A2’: 1, ‘B1’: 1, ‘B2’: 1}
“`
さらに、

– 非破壊的に (元の辞書に変更を加えずに) 処理したい
– valueの変更をしない (keyが重複していたらエラーになってほしい)

これらを実現するための効率の良い書き方を紹介したいと思います。
# 良くない書き方

これは、“`.update()“`と辞書の追加記法を使えば一部実現可能です。

“`python
dictA.update(dictB)
dictA[‘key1’] = 1
dictA[‘key2’] = 1
new_dict = dictA
print(new_dict)
# => {‘A1’: 1, ‘A2’: 1, ‘B1’: 1,

元記事を表示

クロージャー 関数に引数を入れて後で実行したい場合

“`py:
def outer(a, b):

def inner():
return a + b

return inner# inner関数を呼び出すのではなくオブジェクトを返す

f = outer(1,3)
print(f)
print(f())
“`

“`:実行結果
.inner at 0x7**c3dfa*****>
4
“`
print(f)では
innerオブジェクトの情報が返ってきて、
a + bは実行されていない。

f()とするとinnnerが実行される。

元記事を表示

Python3入門学習 1回目

さて、前稿に引き続きPython3の簡単な実装を見ていくことにする。
今回主に扱うのは数字や文字列の取り扱い、変数の仕組みについてで、他の言語を一度学んだ人にとって難しいことは何も出てこない。
よって、主に自分が扱っている言語との違いを簡単に見ていけばよい。
プログラミング言語が初めてだという人は、変数の扱いが非常に躓きやすい場所であるので十分に気をつけるように(この記事だけで理解しようとしてはいけない。わからなければ他に山ほどある解説資料を参照するなり、実際に試してみるなりすべきである)。

# 数値、文字列、変数
## オブジェクトと型
数値や文字列を扱うと言いながら、まずはオブジェクトと型について学んでいく。
Pythonではあらゆるデータはオブジェクトとして実装されている。オブジェクトは箱のようなもので、型に応じてどのような値が入るかが変わる。例を挙げると、

– ブール値
– True (※整数としては1の値を持つ)
– Flase (※整数としては0の値を持つ)
– 整数(単にintとも)
– 0,1,2,3……
– -1,-2,-3……

元記事を表示

Mac(Catalina)にcabocha-pythonがインストールできない

# 環境
MacOS: Catalina バージョン10.15.2
Python: 3.7.5

# 問題
[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の 5章 係り受け解析 のためにCaboChaのpythonモジュール`cabocha-python`をインストールしようとしました。
HomebrewからCaboChaをインストールすることはできたのですが、その後の`pip install cabocha-python`で以下のようなエラーが出てインストールできませんでした。

“`shell:zsh
% pip install cabocha-python

Collecting cabocha-python
Downloading https://files.pythonhosted.org/packages/f6/d7/9d65ff2cf49f34ef8313c2fe6fe2f8b0a0e165ea385e6ef6e20b4538560c/cabocha-python-0.69.1.tar.gz (

元記事を表示

WSLでUbuntsuが動いてるけど、python3.7.1にしたい

# はじめに
作業のメモです。
どなたかの参考になれば。

# 参考サイト
[Windows10(WSL)で、2018年的Pythonプロジェクト(①pyenv/pipenvの導入)](https://qiita.com/e-a-st/items/72c2e2a6a566d1f5d2a2)

# pyenvを入れる
“`
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bashrc
echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.bashrc
echo ‘eval “$(pyenv init -)”‘ >> ~/.bashrc
source ~/.bashrc
“`

# ライブラリを入れる
次の手順のトライ&エラーでした

“`
sudo apt -y install libzip-dev
sudo apt -y install libffi-dev
“`

# pyenvでpy

元記事を表示

FlaskによるGET/POST通信(ついでにCORS対応についても)

# 概要

 FlaskにおけるPOST通信の内容が曖昧だったので、GET/POST通信どちらもここにまとめる。
 内容としては、「フォームによる通信」/「Json形式による通信」が存在する。「Flask POST」的に検索すると情報がごちゃごちゃで出てくる。ちなみにPython 3.7です。

# GET通信

“`python
from flask import Flask, request, jsonfy
app = Flask(__name__)

@app.route(“/”, methods=[“POST”])
def test():
data = request.args.get(‘hoge’, ”) # ?hoge=valueの値を取得
return data # サンプルのためそのまま返す
“`

# POST通信
## Json形式による通信

“`python
from flask import Flask, request, jsonfy
import json
app = Flask(__name__)

@app.route(“/”,

元記事を表示

初心者向け:HerokuにDjangoをデプロイする際のPostgresの設定

#この記事について
HerokuにDjangoをデプロイする際にPostgresを本番環境へ、SQLiteをローカル環境で自動につながるように設定する方法についてまとめます。

#前提条件
既にDjangoがHerokuでデプロイされているが、DB設定を行ってない状態であるのが前提です。DjangoをHerokuにデプロイしていない場合、[こちら](https://github.com/heroku/heroku-django-template)を参考にデプロイしてください。Djangoはフォルダ構成にじゃっかん癖がある(`Project`フォルダと`App`フォルダが別にある等)ので、馴染みのない方は既にHerokuに動くことを想定してフォルダ構成、設定ファイルが予め作られているものを`git clone`した方が早いです。

#STEPS
大きく分けて、以下のステップを踏みます。
1. PostgresをHerokuにインストール
2. setting.pyの変更
3. superuserの作成

###1. PostgresをHerokuにインストール
実はDjangoをHero

元記事を表示

[Python3 入門 4日目] 2章 数値、文字列、変数 (2.3.7〜2.3.14)

#続き

##2.3.7 [start: end:step]によるスライス
スライスを使えば、文字列から**部分文字列**(文字列の一部)を取り出すことができる。

– [:]は先頭から末尾までのシーケンス全体を抽出する。
– [start:]はstartオフセットから末尾までのシーケンスを抽出する。
– [:end]は先頭から**end-1**オフセットまでのシーケンスを抽出する。
– [start:end]はstartオフセットから**end-1**オフセットまでのシーケンスを抽出する。
– [start: end:step]はstep文字ごとにstartオフセットから**end-1**オフセットまでのシーケンスを抽出する。

※オフセットはインデックス参照の時と同様。

“`py
>>> letters = ‘abcdefghijklmnopqrstuvwxyz’
>>> letters[:]#文字全体を指定
‘abcdefghijklmnopqrstuvwxyz’
>>> letters[20:]#オフセット20から末尾までの切り取る。
‘uvwxyz’
>>> letter

元記事を表示

f8: python 2.x -> 3.x 移行メモ (pythonista)

.

以前の以下記事

f5: Pythonista でメール送信
https://qiita.com/cxfgp/items/4849a856be57646bcf34
f6: Pythonista で LINE メッセージ送信
https://qiita.com/cxfgp/items/bb82b4ce7b7af000bd6f

で、

#####※ Pythonista v3 未確認(多分いけると思います)#####

と書き、3.x 的機能は使用していない意味でしたが、
実際に移行をしてみての 「つまずき箇所」 メモです

ほぼ皆さまが「移行」で体感している部分と思います


### **[ 1. キッチン ]**

Pythonista v2.1.1
Pythonista v3.2

iphone SE / ios 13:2.3
iphone 8 / ios 12.3.1
iphone 11 / ios 13.3


### **[ 2. 調理 ]**

**1) SyntaxError: Missing parentheses in call to ‘print’

元記事を表示

関数内関数

“`py
def test(a, b, c):

def plus(d, e):
return d + e

r1 = plus(a, b)
r2 = plus(b, c)

print(r1 * r2)

test(3, 4, 5)
“`

“`:実行結果
63
“`

r1はplus関数に3,4を入れた値が入る。
よって、r1=7
r2はplus関数に4, 5を入れた値が入る。
よって、r2=9

test関数はr1とr2をかけた値を出力するので、
実行結果で63が出力される。

元記事を表示

Docstrings

“`py
def players(**kwargs):
“””名前と職種を出力する関数です。
“””
for name, job in kwargs.items():
print(name + ‘は’ + job + ‘です。’)

d = {
‘太郎’:’勇者’,
‘次郎’:’戦士’,
‘三郎’:’魔法使い’,
‘四郎’:’僧侶’
}

players(**d)
print(players.__doc__)
help(players)
“`

“`:実行結果
太郎は勇者です。
次郎は戦士です。
三郎は魔法使いです。
四郎は僧侶です。
名前と職種を出力する関数です。

Help on function players in module __main__:

players(**kwargs)
名前と職種を出力する関数です。
“`

関数のファンクションなどを
“”” “””に書く。
docメソッドで参照できる。
help関数でも参照できる。

元記事を表示

Google colab OANDA APIで取得した時刻(ISO8601)を日本時間に変換する(JST)

少しだけ手こずったのでメモ
#1.動作環境 
・GoogleColaboratory
・OANDA API V20
#2.やり方
どうやらOANDA APIで拾ってきた時刻はISO8601という規格だそうで。
売買した時刻を表示させたいと思って
日本時間で知りたいな~なんておもって少々はまった。
まず、OANDAからどんなデータが帰ってくるかというと、

“`python
trading_data=api.request(trades.OpenTrades(accountID=accountID))
trading_data[“trades”][0][“openTime”]
“`
上記のように売買した時刻がopenTimeに記載があります。
その中身は

“`
‘2020-01-09T10:28:23.567698657Z’
“`
すごい細かくナノ秒くらいまでもってこれます。
しかしそこまで詳細な秒数は知らなくてもよいので
以下のようなコードで変換できました。

“`python
time=trading_data[“trades”][0][“openTime”]
def i

元記事を表示

Python3入門学習 0回目

本稿はPython初心者がWin10 64bit環境でPython3を勉強していく過程を記している。
特に前提知識を想定していないが、逆に筆者にも前提知識がないため、必ずしも正確な情報を適切に提供できるわけではないことを予めお断りしておく。
また、本稿はオライリー・ジャパンより出版されている『入門 Python3』を参照して書かれている。

# Pythonのインストールと簡単な動作確認
## Python3のインストール
なにはともあれPython3が手元になければプログラミングをすることができないので、簡単に環境を整えていく。
まずは以下のアドレスにアクセスする。自分の実行する環境にあったPython3の実行環境を作るのだ。
https://www.python.org/downloads/
「Download Python3.8.1」のボタンを押してダウンロードする(3.8.1は本稿記載時点でのバージョン情報)。ダウンロードしたexeファイルを実行すればよいはずだ。
インストール先を適切に指定して(もちろん、特別な事由がない限りはデフォルトの指定先でよいだろう)、インストールする

元記事を表示

位置引数とタプル化と辞書化の混在

“`py
def players(job, *args, **kwargs):
print(job)
print(args)
print(kwargs)

players(‘勇者’, ‘戦士’, ‘魔法使い’, job1=’僧侶’, job2=’魔法剣士’)
“`

“`:実行結果
勇者
(‘戦士’, ‘魔法使い’)
{‘job1’: ‘僧侶’, ‘job2’: ‘魔法剣士’}
“`

jobに’勇者’が
argsに(‘戦士’, ‘魔法使い’)がタプル型で
kwargsに{‘job1’: ‘僧侶’, ‘job2’: ‘魔法剣士’}と辞書型で
格納されている。

ただし、
*1つが*2つよりも先でないと、
syntax errorとなるので注意。

元記事を表示

pycparserでCプログラムのASTを出力してみた

研究でCプログラムのASTを取得する必要ができたので、勉強した内容のメモ代わりとして残す。

pycparserをpipでインストール

実際にサンプルプログラムを動かしてみた。

“`python:sample.py
from __future__ import print_function
import sys
import json
from pycparser import c_parser, c_ast

text=r”’
int mian(void){
int i,j;
printf(“test”);
return 0;
}
”’

sys.path.extend([‘.’, ‘..’])
parser = c_parser.CParser()
ast = parser.parse(text, filename=’‘)
ast.show(attrnames=True,nodenames=True)
“`

“`ruby:実行結果
FileAST:
FuncDef :
Decl : name=mian, quals

元記事を表示

OTHERカテゴリの最新記事