2018年11月28日水曜日

Pythonanywhereでタイムゾーンを変更★

コンソール上で変更します。
00:38 ~ $ date
Wed Nov 28 00:38:31 UTC 2018
00:38 ~ $ export TZ='Asia/Tokyo'
09:38 ~ $ date
Wed Nov 28 09:38:54 JST 2018
09:38 ~ $ 
errorlogでの時刻は変更されていません。何故でしょう・・・?

2018年11月27日火曜日

seleniumでMessage: newSessionというエラーが出るので直す

webdriver.Firefoxを使っていたら

WebDriverException: Message: newSession

というエラーが出て停止しました。少し放置していたのでgeckodriverがバージョンアップしているということでした。

https://stackoverflow.com/questions/46439714/selenium-common-exceptions-webdriverexception-message-session-not-created-exce


最新のgeckodriverをダウンロードして、

$ sudo mv geckodriver /usr/local/bin

で/usr/local/binに移動させると復活しました。


(ubuntu16.04, Python)


ハイパフォーマンスPython(オライリー)を読んだ

オライリー本をEbookで買って読み始めました。なかなか良いですね。あまり理解できていないのですが、写経しながら読み進めています。

コードの誤り、誤訳が多い気がするのですが。相川愛三さんという訳者は他の本(Pythonにやらせよう)では素晴らしい訳だったので期待していたのですが。結局のところ、校正などの力の入れようなんでしょうか。英語自体が難しい旨がブログには書かれていますが。

---

読み終えました。ちょうど勉強していた内容で、ためになった気がします。途中のコードは少しずつ端折ってしまいましたが・・・。

2018年11月17日土曜日

メルカリでヤマト誤配があって補償してもらった

メルカリで購入して、「配達済み」になっているものの手元に届かず。

ヤマトに連絡すると、メルカリに連絡するように言われる。

メルカリに連絡して調査してもらう。

(10日くらい待つ)

メルカリから「誤配と分かりました補償します」との連絡(出品者も購入者もどちらも補償)。メルカリからのキャンセル文を引用すると・・・

商品の誤配をおこなっており、誤配先へ回収に伺うも不在が続き、お荷物の回収が出来ておりません。
商品のお届けができず誠に恐れ入りますが、本件は事務局で補償いたします。
取引キャンセルを行い、本来取引完了時に反映される販売利益を出品者の売上へ反映いたしました。

ということでした。

ヤマトで誤配になったのは初めてですが、無事対応していただけました。マンションの別の部屋のポストに入っていて入れなおしてくれるかな〜とか少し期待していたのですが。


2018年11月16日金曜日

Pandasのitertuplesを使ってデータフレームから行の値を取り出す

dataframeの行の中身をイテレートして取り出すときにitertuplesが使えます。
import pandas as pd
df = pd.DataFrame({'col1':[1, 2], 'col2':[0.1, 0.2]}, index=['a', 'b'])
col1 col2
a 1 0.1
b 2 0.2
for row in df:
    print(row)
col1
col2
for row in df.itertuples():
    print(row)
Pandas(Index='a', col1=1, col2=0.10000000000000001)
Pandas(Index='b', col1=2, col2=0.20000000000000001)

これで行が別々にデータフレームとして出力されています。次にnameパラメータを入れてみます。

for row in df.itertuples(name=None):
    print(row)

('a', 1, 0.10000000000000001, nan)
('b', 2, 0.20000000000000001, nan)

name Noneにすることで、indexと値のタプルになっています。更にindexパラメータを入れます。

for row in df.itertuples(index=False, name=None):
    print(row)

(1, 0.10000000000000001)
(2, 0.20000000000000001)

index=Falseとすることで、値だけのタプルが出てきました。

2018年11月14日水曜日

Pandasで空白の列を追加する

Pandasデータフレームに新しく空白列を追加したいときがあります。そういうときは、np.nanを追加すればよいです。
import numpy as np
import pandas as pd

まずデータフレームdfを作ります。
df = pd.DataFrame({'col1':[1, 2], 'col2':[0.1, 0.2]}, index=['a', 'b'])

col1 col2
a 1 0.1
b 2 0.2

ここで新しい列を加えて値をnanにします(他の値でも可)。

df['add'] = np.nan

col1 col2 add
a 1 0.1 NaN
b 2 0.2 NaN
列'add'にNaNが追加されました。

2018年11月12日月曜日

Pythonで設定ファイルをiniで読み込む

スクリプトの設定を、別ファイルで管理したいときがあります。そのようなとき、iniファイルを別に作ってpython側で読み込むことができます。


setting.ini というファイルを作ってこの文字列を書き込みます。改行は自由にして大丈夫です。
iniファイルの中では、 
  • # または ; でコメントアウト
  • スペースは自由に使ってよい

[path]
a = 15
b = 20
[test.com]
user = testperson
money = True

[]に囲まれた部分はセクションと呼ばれます。
import configparser
config = configparser.ConfigParser()
config.read('setting.ini')
config.sections()

Out:
['path', 'test.com']
setting.ini の [path]セクションの a の値を呼び出すときは
config['path']['a']

Out:
['15']

とします。

イテレートする

[path]に何が入っているか分からないといは、
for key in config['path']:
    print(key)

とイテレートすることができます。
sectionsをイテレートすることもできます。
for section in config.sections():
    print(section)

ブール値

値は全て文字列になるので、ブール値はgetbooleanを使って読み出します。
config['test.com']['money']

'True' # 文字列
config['test.com'].getboolean('money')

True # Boolean
注意が必要です。

2018年11月10日土曜日

PostgreSQLでAutocomittをONOFFで比較する

Postgres公式ページにも書いてありますが、オートコミットを使うと遅くなります。どれくらいか、というのを調べました。


#!/usr/bin/python
import psycopg2
import sys
conn_string = "host='localhost' dbname='my_database' user='postgres' password = 'postgres'"
print("Connecting to database\n ->%s" % (conn_string))
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
print("Connected!\n")

これで接続したところからスタートします。適当にテーブルを作ります。列名はt0, time, v0, v1としています。テーブルが空の状態から1000回同じデータを入れてみます。

import time
import numpy as np
import pandas as pd
# init, drop if exists
cursor.execute('DROP TABLE IF EXISTS table1')
cursor.execute('CREATE TABLE table1 (t0 text, time timestamptz, v0 integer, v1 integer);')

Autocomitt OFF


conn.autocommit = False
start_time = time.time()
for i in range(1000):
    cursor.execute('''INSERT INTO table1 (t0, time, v0, v1)
                        VALUES (%s, %s, %s, %s)''',
                        ('test', '2017-10-10 09:10:15', 1, 0))
elapsed_time = time.time() - start_time
print("elapsed time: {}".format(elapsed_time) + "[sec]")
conn.commit()
elapsed time: 0.07536649703979492[sec]

Autocomitt ON

conn.autocommit = True
start_time = time.time()
for i in range(1000):
    cursor.execute('''INSERT INTO table1 (t0, time, v0, v1)
                        VALUES (%s, %s, %s, %s)''',
                        ('test', '2017-10-10 09:10:15', 1, 0))
elapsed_time = time.time() - start_time
print("elapsed time: {}".format(elapsed_time) + "[sec]")
elapsed time: 10.754042863845825[sec]

オートコミットON ・・・ 10.8秒
オートコミットOFF・・・  0.075秒

ということで、1000回挿入で10倍ほどの差が出ることが分かりました。

2018年11月9日金曜日

日誌2018年11月

2018/11/09

もう11月。地道にやっていきましょう。最近はCythonとかやろうとしています。あとは趣味のサークル(?)のホームページを管理することに。誰もやらないなら自分がやります、的な引き受け方なんですが、果たして機能するでしょうか?頑張ろう。

2018/11/11

Ubuntuがフリーズして再起動。直前にcompizがエラーを出していたから、それが原因でしょうか。いろいろやることがあるが手につかず・・・。Pythonanywhereでflaskのデプロイをやっていきましょう。flaskの動作がいまいち理解できていないのが原因。

最近、やたらと目が痛いのですが、これは老化による何かなのか、目を酷使し過ぎているのが原因なのか・・。もしかし糖尿病?とか思っているのですが。パソコンで仕事をしているとこんなものでしょうか。

2018/11/18

やりたいことが全然できないのだけど、あまりやりたくない時期なんでしょう、ということで。解らないことを放置しているとあとで困るので、ちょこちょこ解決していきたいところ。テスト駆動開発って難しいな〜。

2018/11/18

マウスを買い換えました。エレコム握りの極み静音Lサイズ無線です。ヨドバシカメラで3102円ナリ。静音だけど音はあって他の静音マウスよりも少し大きいです。カチカチ音じゃなくてグニグニ音ですかね〜。Lサイズで静音ってあまりないので選択の余地なしというのもありますが。握りの極みは持ちやすいかな、と思っています。最近は縦型のマウスが出ているんですね。マウスをずっと握っているならいいのかも。

2018/11/27

オライリーのパーフェクトPythonを読み始めました。EbookだとPDFがゲットできるという・・・。Kindleにもできるとか。やはり紙の本よりパソコンで表示できた方が楽ですね。8時間で100ページくらい読んで、残り200ページ。明日は休みですが、今週中に読みきれたらいいなと。

2018/11/28

放置していたPythonanywhereへのflaskチュートリアルデプロイができました。一行が足りないとかそういうところで解決できないエラーが出るという・・・。