2018年5月31日木曜日

pythonで行列の行、列のインデックス、値を全てイテレートする方法

# pythonで行列の行、列のインデックス、値を全てイテレートする方法
# numpyのndenemurateを使う
import numpy as np
X = np.array([
    ['a0', 'a1', 'a2'],
    ['b0', 'b1', 'b2']
])
# イテレートする index はタプルになる
for index, value in np.ndenumerate(X):
    print(index, value)
# このようにもできる
# i, jを分けて イテレート
for (i,j), value in np.ndenumerate(X):
    print((i,j),value)
# i行j列:としたければ インデックスを+1する
for (i,j), value in np.ndenumerate(X):
    print('{}行{}列は{}'.format(i+1,j+1,value))
# 1行1列はa0
# 1行2列はa1
# 1行3列はa2
# 2行1列はb0
# 2行2列はb1
# 2行3列はb2

2018年5月30日水曜日

マネーロンダリング入門 橘玲(幻冬舎新書)


読んだとき気になった部分の引用。
  • プライベートバンクは100万ドル以上の金融資産を預けることのできる顧客としか取引しない
  • マネーロンダリングはあくまでも犯罪収益が対象であり、単なる脱税(幇助)では犯罪の構成要件にならない
  • ライブドアの粉飾決算:企業買収を行なう際、ライブドアは自社が実質的に運営するファンドに現金で相手先企業の株式を取得させていた。その株式を、相場よりも遥かに高い評価でライブドアの新株と交換すれば、"合法的に"大量の新株を発行できる。その後に株式の大量分割を行ない、株式市場に人為的な品薄状態をつくりだして株価を上げ、高値で自社株を売り逃げるのである。
  • 人心掌握術の天才であるジェッリは、P2入会にあたって、忠誠の証として他の有力者の秘密を明かすように求めた。
  • BCCIの経営は、外見上はきわめて民主的で、アベディですら個室は持たず、重役会議は丸テーブルで行なわれ、上層部は「幹部」と呼ばれるだけで肩書すらなかった。アベディはこれを「ジョイント・パーソナリティ」と名づけた。
  • 2006年武田薬品1223億円申告漏れ。ソニー744億円申告漏れ。両者とも異議申し立て。
  • いつの時代でも、理想や正義を声高に語る人の後をついていくとろくなことはない。この本に書いたのは、たとえば、そんな単純な真理である。
なかなか勉強になりました。本当だろうか、と思えるくらいフィクションっぽい内容です。高度なマネーロンダリングと呼ばれているものが実は単純なスキームというのが書かれていて苦笑しました。

2018年5月27日日曜日

[Python]csvをzip圧縮してから保存、読み込みする

csvをzip圧縮してから保存、読み込みする

ものによると思いますが、ファイルサイズは半分くらいになります。
zipfile.ZIP_DEFLATEDというのが圧縮するパラメータです。
with zipfile.ZipFile(savedir+savename+'.zip', 'w',zipfile.ZIP_DEFLATED) as myzip:
   myzip.write(savedir+savename+".csv")
読み込むときは
with ZipFile(savedir+savename+'.zip') as myzip:
   with myzip.open(savename+".csv") as myfile:
       tmp = pd.read_csv(myfile,index_col=0)
とすればOKです。

pandasのデータフレームで列ごと、または行ごとの和をとりたいとき

pandasのデータフレームで列ごと、または行ごとの和をとりたいとき。df.sum()を使います。

import pandas as pd
df = pd.DataFrame([[10,20,30,40],[50,60,70,80]], columns=[1,2,3,4])
print(df)

    1   2   3   4
0  10  20  30  40
1  50  60  70  80

sum(df) # こうやるとcol名の和になってしまいます

10

# 正しくは df.sum()
df.sum() # axis=0

1    15
2     8
3    10
4    12
dtype: int64

# 同じ行の和をとるとき
df.sum(axis=1)

0    19
1    26
dtype: int64

2018年5月26日土曜日

Pytohn文字列をオーバーラップを含めてカウントしたいとき

# 例

string = "aaaa" # の中で"aa" を数えたい

# これだとオーバーラップはカウントされない
string.count('aa') # out: 2

# 正規表現を使う
import re

r = re.compile('(?=(aa)).') # 正規表現の先読みにすると、オーバーラップもカウントできる
r.findall(string) # # ['aa', 'aa', 'aa'] # len 3

[ubuntu] Connect directory of USB device wia Python

(ubuntu 16.04LTS, Python3.6)

A way to connect USB device with python easily. I want to use this for backing up files with some filters, like python files or updated...


1. check Location of USB Drive

USB DISK -> Properties 


















for my ubuntu, Location is /media/shimo
(shimo is my username)

import glob
glob.glob('/media/shimo/**/**.py', recursive=True)

by this we get .py files in USB media

note: path in glob depends on directories in USB device


--
references on stackoverflow is complex...

https://stackoverflow.com/questions/22615750/how-can-the-directory-of-a-usb-drive-connected-to-a-system-be-obtained

2018年5月24日木曜日

[Python]イテレータの最後であることを知る方法

イテレータが全て出たかを知る方法は、判定するしかないようです
data_list = ['one', 'two', 'three']
# use enumerate
for i, data in enumerate(data_list):
    print(i, data)
    
    if i + 1 == len(data_list):
        print(i, 'this is the last iterator') 
他にもcntを作ってカウントするなど考えられますが・・・。

2018年5月19日土曜日

らくらくメルカリ便を悪用して送料を安くするケース

らくらくメルカリ便は送料がサイズで統一されています。

遠方に宅配便を送るときにメルカリ経由で送れば安くなるのでは?


悪用する人がいるのではないでしょうか。

同じような疑問をもつ人がヤフー知恵袋に・・・。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14148540364

悪用事例考察


・東京と北海道にいる家族間で60サイズのものを送るとする

・メルカリのルールではメルカリ便の宅配便を選べるの1000円以上の購入からで、60サイズ送料一律600円。らくらくメルカリ便_いくらから利用できますか?

・1000円で送るもの(何でも)を売れば手数料は100円

・メルカリでの経費(?) 実質700円

・クロネコヤマト正規の料金
60サイズ 東京〜北海道 は 1,339 円-(持ち込み100円)で実質1,239円

ということで500円くらいは安く送れるようです。利用規約を精読してはいません。悪用のケースを検討しただけですので、あしからず・・・。

Pythonで、zipファイルを解凍せずに中のファイルを取り出す

zipの中から取り出したいファイルがあるけれど、いちいちzipを解凍したくないときに使えます。


Zipの中にあるファイル名が分からないとき

zipの中の全ファイルの名前リストがmyzip.namelist()なので、

for file in myzip.namelist():
    if <fileの条件>...

とやって抽出するとよいです。

2018年5月15日火曜日

[python]タイマーで1日3回プログラムを動かす(sleep)

スクレイピングで1日3回データを取りに行きたいときのため

time.sleep()で待たせる
import datetime
import sys
import time
get_data_when_run = True
now = datetime.datetime.now()
now_date = datetime.datetime(now.year, now.month, now.day)
while True:
   
    if 5 <= now.hour < 11:
        delta = datetime.timedelta(hours=11, minutes=15)
    elif 11 <= now.hour < 17:
        delta = datetime.timedelta(hours=17, minutes=15)
    else:
        delta = datetime.timedelta(days=1, hours=5, minutes=15)
    if get_data_when_run:
        start_time = now_date
       
    else:
        start_time = now_date + delta
        print("next start_time", start_time)
        print("wait minutes", round((start_time - datetime.datetime.now()).total_seconds()/60))
        time.sleep((start_time - datetime.datetime.now()).total_seconds())
   
    if get_data_when_run:
        print('get now only beginning', datetime.datetime.today())
        get_data_when_run = False
    else:
        print("interval check", datetime.datetime.today())
   
    ## do something
    print("--do something--")
    ##
    now = datetime.datetime.now()  # next now
    now_date = datetime.datetime(now.year, now.month, now.day)

2018年5月13日日曜日

Python基本コマンドメモ

自分の使い方メモです。

オブジェクト変数varを消す。初期化したいときなどに使う。


del var

オブジェクトの属性を全て見る。コマンドを調べるときに使う。


dir(object)

 リストで文字列から1文字ずつを要素にしたリストが作れる。


>>> list('hogehoge')

['h', 'o', 'g', 'e', 'h', 'o', 'g', 'e]

osモジュールでディレクトリ操作


import os

# ディレクトリ作成
 os.mkdir(path)

# カレントディレクトリを返す
os.path.abspath('.')

#ディレクトリ内のファイル名を取得(※ディレクトリ名も拡張子なしで取得される)
os.lisrdir()

import は1度読むと再読み込みしてくれない。reloadする

import importlib
importlib.reload(moduleA)

数字のゼロ埋め


month = 1 # 01にしたい

print('{:02}'.format(int(month)))

でできるがJavaScript的?な書き方で

month = 1
print(('0'*2 + str(month))[-2:])

でもOK。この書き方の便利なところはゼロ埋め桁数を操作しやすいこと

n = 2 # ゼロ埋め桁数
month = 1
print(('0'*n + str(month))[-n:])


formatを使うときはこのように書けばnで変えられる。
month = 1
n = 3
print(('{:0'+str(n)+'}').format(2))

Out: '003'

数字のゼロ埋め その2


2018年1月1日→ '20180101'を作りたいとき

import datetime
now = datetime.datetime.now()

print('{:04}{:02}{:02}'.format(now.year, now.month, now.day) )


スペースで埋める

'{:5}'.format(22)

Out: '   22'

二種類の文字をformatでゼロ埋め

4桁と5桁でゼロ埋めする例。0, 1は普段のformatのときと同じで、省略可能。

'{0:04}{1:05}'.format(22, 111)

Out: '002200111'

文字列のzfill属性を使う

"22".zfill(6)

とやると、文字列にたいして6桁でゼロ埋めするという意味。
Out: '000022'

数字ではなく文字に対してもできます。

"aa".zfill(6)

Out: '0000aa'

関数のreturn を複数にするとき


def hoge():
    # hoge
    return a, b

とかくとタプルになって

a, b = hoge()

で受け取ることができる。

return [a, b]

と書いてもよい。

ファイルの最終更新日


import os
import time

# os.path.getmtime()

# time.ctime() UNIX時間から変換する

file = "some_path"

print("last modified: {}".format(time.ctime(os.path.getmtime(file))))

pandas dataframeでインデックスを更新する


df.index = range(len(df))


proxy 環境で git cloneができないとき 、以下を参照のこと

 http://sushichop.blogspot.jp/2013/09/git.html

IPython(jupyter)でhtml表示をする


from IPython.core.display import HTML
from IPython.core.display import display

display(HTML('<b>test bold</b>'))
display(HTML('<i>test italic</i>'))





クラス名を調べる

属するクラスの名前を調べます。

x.__class__.__name__

x.__name__

だけで出せるときもあるみたいですが。

not all arguments converted during string formattingエラー

プレースホルダの数(%s)と、.format()で与える値の数が違っていると出ます

文字列のなかにある文字が何回現れるかを調べる


リスト内包表記でカウントしてみます。

text = '(%s, %s, %s)'
len([t for t in text if t == 's']) # 3


Pythonの変数のあとにアンダースコア(_)を入れるのは、予約語との衝突をさけるための慣例(?)


list_
exec_

などの使い方をします。list, execという予約語との衝突をさけて変数を作るためです。


Python launcher

コマンドラインでpyとだけ記述してPythonを起動しているときがあります。

py

と入力すると、インストールされている中で最新のバージョンが起動します。

py -2.7

とすると、2.7

py -2

とすると、python2系の中で最新のものが対象になります


Pythonの予約語を変数名に使ってはいけない


予約語というのは、Pythonで使うことが決められている単語、list, printなどのことです。これに変数を代入すると(できますが)、あとで大変なことに・・・。

>>> print = 1
>>> print('test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

ということで、printという予約語に 1 を代入してしまったので、printとしての機能はなくなってしまいました。

一行で2つ以上の変数に代入するときの違い

# 1行で2つ代入
# 初期値
a=1
b=2
a, b = b, a # a にb(=2)、b にa(=1)が入る
print(a,b)
-> (2, 1)

aとbは同時に入れ替わっています。
=が終わるまでは上書きされません。

# 別々に代入するとき
# 初期値
a=1
b=2
a = b # a にb(=2)が入る
b = a # b にa(=2)が入る
print(a, b)
-> (2, 2)







2018年5月9日水曜日

compizconfig-settings-managerでUbuntuのalt+tabによる切り替えを速くする


  Ubuntu16.04

デフォルトではalt+tabでの画面切り替えが遅く感じるので、設定を変更する。
 sudo apt-get install compizconfig-settings-manager compiz-plugins-extra

でcompizconfig-settings-managerをインストールする

application で検索して起動する。ターミナルで

$ ccsm

と入力してもOK。

Window Management のStaticApplication Switcherにチェック
※conflictという警告が出るがIgnoreで無視する。






StaticApplication Switcherを選んで変更画面に入ったらBehaviourのタブを選択。



Speed → 50 (max) にする

Popup Window Delay  → 0 にする

 --

これで快適になりました。


https://askubuntu.com/questions/43875/how-do-i-adjust-the-alt-tab-speed
https://askubuntu.com/questions/407278/why-cant-i-install-compiz-plugins-extra
https://www.youtube.com/watch?v=V_vLJiJsWQw

しかし、この設定にすると、bloggerでマウスカーソルがある部分がおかしくなるのですが。なぜでしょうか?? conflictを無視したからでしょうか・・・
これが起きていたのは直後だけで、特になにもせずとも直りました。

日誌2018年5月分

2018/05/09

ふと気になって所有しているレッツノートがバッテリのリコール対象なのかどうか調べてみた。結果としては大丈夫だった。品番は該当したが、バッテリの製造番号が1つ違うという結果。まだ使うか悩ましいところだけど、少し安心(していいのだろうか?)


2018/05/13

ニッケル水素電池、リチウムイオン電池を捨てたかったのだが、家電製品店のような回収を取り扱っている店にいかなければならないようでした。回収箱が置いてあるとのことで店内をうろうろして探してみたけど見つからず、店員さんに説明して渡しました。最初から置いておいてくれればよいのだけれど、おそらく別の電池やゴミが入るから設置していないのでしょうね。

2018/05/14
 Guidepoint(ガイドポイント)と名乗る会社から、電話インタビューの依頼が来ましたが、これは社内情報を漏らせというかなり怪しげなものでした。アメリカドル200-300の謝礼でそういうリスクは渡れないですね。しかし会社自体は米国で大きな会社なようです。 なぜ日本円で謝礼を払わないのか、理解できませんね。ローカリゼーションが足りないのでは?そうだとしても、受けませんけど・・・

 2018/05/18
作ってみたいプログラムがいろいろあるのですが、難しくて(難しさが把握できていなくて)手が出せていません。簡単なやつを作ったりして修行あるのみ、でしょうか。

2018/05/23
 Pythonで樹形図の理解整理など。デンドログラムって名前がかっこいい。

ノートPCが無いので、MacBookProを買うかThinkPadにLinuxを入れるか悩み中です。予算を気にしなければMacにするのですが。

2018/05/24
「サイトが更新されて1年以上経っています」と書かれたブログ等があるけど、もっと細かく書いた方が自分としてはありがたい、というか執筆時、更新時を最初から見せてくれればよいのにな、と思います。

突然仕事でAWS関係のことをすることになったので、slideshareで用語のお勉強などしました。略語が多すぎるし、サービスの種類が多すぎる・・・。

2018/05/25
スクレイピングで更新されたデータを取得するつもりが、毎回同じデータを格納していたことが判明・・・すぐに中身を見ないからこうなるんだな、と反省。

2018/05/30
 スクレイピングで誤解していたのだけど、別にPhantmJSやSeleniumWebDriverでブラウザを開かないでも、urllib.requestとかでそのままデータを取得すればよいのでは、ということを思い至りました。

2018/05/30
Pythonでモジュールをアルファベット順に直してくれるisortというアプリを使っていますが、これは便利。

メモ スタートトゥデイ決算

https://image-contents.s3.amazonaws.com/wp/wp-content/uploads/2018/05/20180427_2018Q4_J_N.pdf




荷造運賃、代金回収手数料の増加は比率の差額で見ると1.0%, 0.5%だが、金額では50億円、30億円負担が増えたということかな。

つづく