SourceTreeでPullのエラーが出たときの対処について

 SourceTree (Ver 1.9.9.20)を使っていたら色々エラーが出たので,メモしておきます.

 

 症状

こんな感じのエラーが出る

f:id:shu10038:20161217151550j:plain

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin master:master
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/+++/++++++.git/'

Pushing to https://github.com/++++/+++++++.git

 

対処

これはただパスワードの設定をミスっているだけ
ツール->オプション->認証からGitHub設定する

 

特定の行に特定の値を代入できるか試してみる:Python3

すごい初歩的なんですが,行を指定して代入できるか試してみました.

In [22]: import numpy as np

In [26]: m = np.empty((4,3))

In [27]: m
Out[27]: 
array([[ 0.,  0.,  0.],
       [ 1.,  2.,  3.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

In [28]: m[1,:] = np.array([3,3,3])

In [29]: m
Out[29]: 
array([[ 0.,  0.,  0.],
       [ 3.,  3.,  3.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

In [27]でなぜ前の値が残っているのだ??

matplotlibの超基本的な使い方:Python 3.X

matplotlibをしばらく使わないとかなり忘れてしまいます.なので使い方についてメモしておきます.

【もくじ】

まずは基本的な使い方

まずは最小構成でプロットしてみます.
最初にx軸用のデータとして,Numpyのarangeを使って-5から5まで0.2刻みの数字の列を作ります.ちなみにarangeの使い方はこちら

つぎにy軸用のデータとして,x軸用のデータを平方します.
こいつらをスクリプトで描くとこんな感じです.

import numpy as np
import matplotlib.pyplot as plt

# x:-5から5まで0.2刻みのデータを作る
x = np.arange(-5, 5, 0.2)

# y:xの値を二乗する
y = x**2

# 描画
plt.plot(x, y)

このスクリプトを処理すると,,,
f:id:shu10038:20170225124111p:plain
と見慣れた二次関数のグラフになります.



散布図を描く

つぎに散布図です.先程のスクリプトの,

# 描画
plt.plot(x, y)

のところを

# 描画
plt.plot(x, y,".")

としてあげると
f:id:shu10038:20170225124114p:plain
みたいな点線になります

「+」の形にプロット
# 描画
plt.plot(x, y,"+")

としてあげると,+の形に点が打たれた散布図がかけます.
f:id:shu10038:20170225124112p:plain

破線でプロット
# 描画
plt.plot(x, y,"--")

としてあげると
f:id:shu10038:20170225124113p:plain
のような破線になります.まぁ,これは"散布図"とは呼ばないかもしれませんが・・・

画像ファイルに出力する

plt.savefig(ファイル名と形式)で画像ファイルとして出力されます.
また,pylabをインポートしてpylab.figureを呼び出せばサイズも変えられます.
一番最初のスクリプトに追記するとこんな感じです.

import numpy as np
import matplotlib.pyplot as plt
import pylab # ←加えた!!!サイズを変えるのに使う

# x:-5から5まで0.2刻みのデータを作る
x = np.arange(-5, 5, 0.2)

# y:xの値を二乗する
y = x**2

# サイズを変える
pylab.figure(figsize=(9, 6)) #←加えた!!!!900×600のサイズになる

# 描画
plt.plot(x, y)

# グラフを保存
plt.savefig("image.png") #←加えた!!!!画像ファイルとして保存する

Python3,Pandas:データフレームを用いて複数のCSVファイルを連続で読み込む

この記事に書いてあること

Pandasを使ってCSVファイルを連続で読み込んで結合する.
to_csvで出力すれば,ファイルをくっつけたりすることが出来る.

1.簡単な例

最も単純な例.CSVファイルが2つを読み込んで結合する

import pandas as pd

# データの読み込み
f1 = pd.read_csv('CSVfile1.csv', header=None)
f2 = pd.read_csv('CSVfile2.csv', header=None)

# 結合
data = pd.concat([f1, f2])

# 書き出し
data.to_csv('newData.csv', index=False)
解説
  • pandasを呼び出して,データをくっつける
  • pd.read_csvCSVファイルを読み込む.何も入れないと一番上の行をheaderとして読まれてしまう.そうすると結合したときにNaNがパディングされまくる.なので引数にheader=Noneを与えることで,あとでheaderを無視して結合できるようにした 
  • pd.concat([f1, f2])は結合コマンド.headerを無くしたので,単純にくっつければ良い
  • data.to_csvCSVファイルを出力

2.ちょっと複雑な例

「data」というフォルダに複数のCSVファイルが格納されているとする.
これらを「glob」を使ってフォルダ全体を読み込み,データフレームに格納して結合する.

import glob
import pandas as pd

# ファイル読み込み
files = glob.glob('data/*.csv')

# ファイルを読み込んでデータフレーム作成
df = pd.concat(
  (pd.read_csv(f, header=None, # ファイルを読み込む.読み込む際にHeader名は無視する
  names=('id','val'), # Headerの名前を決める
  dtype={'id':'str', 'val':'str'}) # データの型を定義
  for f in files)) # ファイルを連続で読み込む

# 表示
print(df)

ix,loc,ilocによるデータフレームのアクセス:Pandas

ix,loc,ilocは何が違うのか?こいつらを使ってスクリプトを書いたのですが,やや気づきにくい不具合があり,苦戦しました.そんなときに下記のブログに参考にして直しましたが,自分でも試行錯誤したので,その一部を記録しておきます.

リンク先にも書いてありますが,「ちょこっと試すなら.ixを使って,長く使うなら iloc, loc が安全」かと.

列に名前がついて無い場合

ixもilocもloc同じ挙動

In [2]: import pandas as pd

In [20]: df = pd.DataFrame(
    ...:         [(10, 11, 12, 13),
    ...:          (20, 21, 22, 23),
    ...:          (30, 31, 32, 33)])

In [21]: df
Out[21]: 
    0   1   2   3
0  10  11  12  13
1  20  21  22  23
2  30  31  32  33

In [22]: df.ix[1,1]
Out[22]: 21

In [23]: df.loc[1,1]
Out[23]: 21

In [24]: df.iloc[1,1]
Out[24]: 21

列に名前(str)がついている場合

ixとilocは番号指定出来る.locは番号指定出来ない


In [7]: df = pd.DataFrame(
   ...:     {'C1': [10, 11, 12, 13],
   ...:      'C2': [20, 21, 22, 23],
   ...:      'C3': [30, 31, 32, 33]})

In [8]: df
Out[8]: 
   C1  C2  C3
0  10  20  30
1  11  21  31
2  12  22  32
3  13  23  33

In [9]: df.ix[1,1]
Out[9]: 21

In [10]: df.loc[1,1]
# これはエラー

In [11]: df.loc[1,'C2']
Out[11]: 21 # 列名を指定すればOK

In [12]: df.iloc[1,1]
Out[12]: 21

列に名前(int)がついている場合

ixだと列名の方を優先するみたいです.

In [37]: df = pd.DataFrame(
    ...:     {5: [10, 11, 12, 13],
    ...:      3: [20, 21, 22, 23],
    ...:      1: [30, 31, 32, 33]})

In [38]: df
Out[38]: 
    1   3   5
0  30  20  10
1  31  21  11
2  32  22  12
3  33  23  13

In [39]: df.ix[1,1]
Out[39]: 31

In [40]: df.iloc[1,1] 
Out[40]: 21

In [41]: df.columns
Out[41]: Int64Index([1, 3, 5], dtype='int64')

Python3.X:データフレームの生成方法色々

その1 数字だけ入れると勝手にHeaderとIndexが追加される

In [17]: import pandas as pd

In [18]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

In [19]: df
Out[19]: 
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

その2 HeaderとIndexを自分で指定する

In [20]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['I1','I2','I3'], columns=['C1', 'C2', 'C3'])

In [21]: df
Out[21]: 
    C1  C2  C3
I1   1   2   3
I2   4   5   6
I3   7   8   9

その3 こんな方法もある

In [27]: df = pd.DataFrame({'C1':[1, 2, 3], 'C2':[4, 5, 6], 'C3':[7, 8, 9]},index=['I1','I2','I3'])

In [28]: df
Out[28]: 
    C1  C2  C3
I1   1   4   7
I2   2   5   8
I3   3   6   9