白旗製作所

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[Python]Anaconda3+spyder環境でpandasのエラーが生じてIPythonに括弧が入力できない。

タイトルのとおりです。

長時間Spyderを開いていると、たまにIPython上に以下のメッセージがでて、
括弧"("とかの記号を入力しようとすると、エラーメッセージで潰されて実行できなくなります。

C:\Anaconda3\lib\site-packages\pandas\core\format.py:2037: RuntimeWarning: invalid value encountered in greater has_large_values = (abs_vals > 1e8).any()
C:\Anaconda3\lib\site-packages\pandas\core\format.py:2038: RuntimeWarning: invalid value encountered in less has_small_values = ((abs_vals < 10 ** (-self.digits+1)) &
C:\Anaconda3\lib\site-packages\pandas\core\format.py:2039: RuntimeWarning: invalid value encountered in greater (abs_vals > 0)).any()

ググるとgithubにQAがあったのですが、
どうやらpandasのバグのようです。
解決策は以下の2つが示されてます。
・pandasを最新版にする
 conda remove pandas
 conda install pandas
・pandasのオプションでfloatのフォーマットを変更する
 pd.set_option('display.float_format', lambda x:'%f' %x)

https://github.com/pydata/pandas/issues/9950

毎回spyder再起動やらオプション変更するのも面倒ですし、
とっとと最新版にしてしまいましょう。


  1. 2015/11/07(土) 16:16:32|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

Vivaldiのマウスジェスチャーカスタマイズ

[2016/06/25追記]
本記事はVivaldi 1.1以前を対象とした、マウスジェスチャカスタマイズ方法に関する記事です。
6/2にリリースされたVivaldi 1.2以降は、UIからマウスジェスチャがカスタマイズ出来るようになりました。
以下の記事を参考にしてください。
ブラウザVivaldi、バージョンアップしてマウスジェスチャーも簡単登録(http://ascii.jp/elem/000/001/172/1172224/)


ウェブブラウザOperaの元CEOのJon Tetzchner氏が立ち上げた
新たなWebブラウザ「Vivaldi」のベータ版が公開されました。
http://www.vivaldi.com/
http://jp.techcrunch.com/2015/11/03/20151102vivaldi-in-beta/

以前プレビュー版を使ってみたのですが、まだ機能性が十分ではなく
継続利用はしていませんでした。特にマウスジェスチャがカスタマイズできず、
新OperaやChromeと同じデフォルトのジェスチャしか使用できませんでした。

ところが、ベータ版は少し面倒ですがカスタマイズが出来るとのことで、
トライしてみましたので、方法を記載しておきます。
正確な方法はVivaldi community のトピック
tutorial: how to customize your own mouse geastures?
に英語で記載があります。


編集対象はdefaultSettings-bundle.jsというファイルです。
Windowsであれば、以下のフォルダにあると思います。
C:\Users\ユーザー名\AppData\Local\Vivaldi\Application\1.0.303.52\resources\vivaldi
コピーするなどしてバックアップをとっておきます。

[2016/03/20追記]
Vivaldi (1.0.403.24 (Beta 3) )が公開されました。こちらでは、bundle.jsを編集する必要があります。
場所は、C:\Users\ユーザー名\AppData\Local\Vivaldi\Application\1.0.403.24\resources\vivaldiです。


ファイルをテキストエディタで開き、以下のキーワードを見つけます。

 COMMAND_CLOSE_TAB:(タブを閉じる)
 COMMAND_NEW_TAB:(新しいタブ)
 COMMAND_NEW_BACKGROUND_TAB:(新しいバックグラウンドのタブ)
 COMMAND_PAGE_BACK:(履歴を戻る)
 COMMAND_PAGE_FORWARD:(履歴を進む)
 COMMAND_PAGE_REFRESH:(ページの更新)
 COMMAND_TAB_REOPEN_RECENTLY_CLOSED:(閉じたタブを開きなおす)

これらキーワードのあとの{}の中にあるgestures:["6"]とかの数字を変更すると
ジェスチャがカスタマイズできます。

数字とジェスチャの対応は以下です。
 0:右
 2:下
 4:左
 6:上
右→上というジェスチャなら"06"と書けばOK。

編集してVivaldiを再起動すれば、ジェスチャが変更されています。
例として私の編集したジェスチャを以下に記載します。
[旧]
 COMMAND_NEW_TAB:{shortcut:["meta+t"],gestures:["2"],
 COMMAND_CLOSE_TAB:{shortcut:["meta+w"],gestures:["20"],
 COMMAND_NEW_BACKGROUND_TAB:{gestures:["26"],showInQC:!0}
 COMMAND_TAB_REOPEN_RECENTLY_CLOSED:{shortcut:["meta+z","shift+meta+t"],gestures:["60"],showInQC:!0},
[新]
 COMMAND_NEW_TAB:{shortcut:["meta+t"],gestures:["6"],
 COMMAND_CLOSE_TAB:{shortcut:["meta+w"],gestures:["2"],
 COMMAND_NEW_BACKGROUND_TAB:{gestures:["60"],showInQC:!0}
 COMMAND_TAB_REOPEN_RECENTLY_CLOSED:{shortcut:["meta+z","shift+meta+t"],gestures:["26"],showInQC:!0},


上に記載したキーワードはデフォルトのジェスチャですが、
他にもキーボードショートカットが割り当てられているものなら
ジェスチャを指定できます。

例えば、ブックマークバーを表示するショートカットはデフォルトで以下ですが、
COMMAND_SHOW_BOOKMARK_BAR:{shortcut:["ctrl+shift+b"],showInQC:!0}
下のように書くことで、「上左」の"64"をジェスチャに追加できます。
COMMAND_SHOW_BOOKMARK_BAR:{shortcut:["ctrl+shift+b"],gestures:["64"],showInQC:!0}

少しわかりづらいですが、この方法でかなり自由度高く
マウスジェスチャーをカスタマイズできます。

個人的には、正直この点だけでVivaldiを使う理由になるので、
もう少しわかりやすいインターフェースを用意しておいて欲しいところです。



  1. 2015/11/03(火) 23:40:00|
  2. Vivaldi
  3. | トラックバック:0
  4. | コメント:0

Pythonの基本操作

忘備録的に書いておきます。
ちょっと雑多すぎるので、今度整理します。

環境:Anaconda + Spyder (Python3.4)
import pandas as pd
from pandas import Series, DataFrame
import numpy as np

【数列をつくる】
In [52]: np.arange(3)
Out[52]: array([0, 1, 2])

In [53]: np.arange(10,100,9)
Out[55]: array([10, 19, 28, 37, 46, 55, 64, 73, 82, 91])

In [65]: [x for x in range(10,100,9)]
Out[95]: [10, 19, 28, 37, 46, 55, 64, 73, 82, 91]

In [100]: np.ones(4)
Out[100]: array([ 1., 1., 1., 1.])

In [101]: np.ones([3,4])
Out[101]:
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])

【乱数行列の生成】
In [63]: np.random.rand(3,3)*3
Out[63]:
array([[ 2.1996651 , 0.29671819, 2.15422178],
[ 0.28882665, 0.61283333, 0.38610587],
[ 2.64869479, 1.76624717, 2.03628832]])

【配列の長さ】
len()で求められる。size()に相当するものは無い様なので、
len(a[0])とかするしか無い。

In [74]: b = np.random.rand(3,5)
In [75]: len(b[0])
Out[75]: 5
In [76]: len(b)
Out[76]: 3

【平均・標準偏差・相関係数】
np.average(data)
np.std(data)
data.corr()

【重回帰分析】
予測したいデータをyに、説明変数をxに入れる。
interceptをTrueにすると切片ありで予測する。

model = pd.ols(x=xdata, y=ydata, intercept=True)
print(model) #結果表示
print(model.y_fitted) #説明変数から予測したデータ

【エクセルファイルの読み込み】
book = 'sample.xlsx'
sheet = 'sheet1'
xlsx = pd.ExcelFile(book)
data = xlsx.parse(sheet)

【csvファイルの読み込み】
filename = 'sample.csv'
data = pd.read_csv(filename, skiprows=0, encodin='SHIFT-JIS')

【csvファイルへの書き込み】
data.to_csv(filename)

●pandas.DataFrame関係

【NaNの行を削除】
nonandata = data.dropna()

【Pandas DataFrameの行インデックスと列名の取得】
index = data.index
columns = data.columns

【インデックスの振り直し】
data.reset_index(drop=True)

【インデックスの重複を排除】
In [116]: data
Out[116]:
0 1 2 3
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1
0 0 0 0 0

In [119]: data[~data.index.duplicated()]
Out[119]:
0 1 2 3
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1

【インデックスでソート】
In [127]: data
Out[127]:
0 1 2 3
0 1 1 1 1
2 1 1 1 1
3 1 1 1 1
1 0 0 0 0

In [128]: data.sort_index()
Out[128]:
0 1 2 3
0 1 1 1 1
1 0 0 0 0
2 1 1 1 1
3 1 1 1 1

【行列の転置】
data2 = data.T


【行・列を指定した参照】
In [105]: sample['data1'] #列名を指定
Out[105]: 50
In [106]: sample[['data1','data2']] #列名を複数指定する場合はlistを代入
Out[106]: 50
In [107]: sample.ix[1,2]
Out[107]: 50

【条件指定した参照】
data.query('data1==42')


data['column1'!=10]
data[data['data1']==42]]


【行列の連結】
pd.concat()で行います。
axis=1をつけると左右方向、付けないと上下方向です。
In [106]: base = pd.DataFrame(np.ones([3,4]) )

In [107]: right = pd.DataFrame(np.zeros([3,2]))

In [108]: bottom = pd.DataFrame(np.zeros([1,4]))

In [109]: pd.concat([base, bottom])
Out[109]:
0 1 2 3
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1
0 0 0 0 0

In [110]: pd.concat([base, right], axis=1)
Out[110]:
0 1 2 3 0 1
0 1 1 1 1 0 0
1 1 1 1 1 0 0
2 1 1 1 1 0 0

●時系列関係
【文字列と時刻(datetime)の相互変換】
In [132]: import datetime
In [134]: today = datetime.datetime.strptime('2015/11/02 10:11:12','%Y/%m/%d %H:%M:%S')
In [134]: today = pd.to_datetime('2015/11/02 10:11:12', format='%Y/%m/%d %H:%M:%S')
In [135]: today.strftime('%Y-%m-%d %H%M%S')
Out[135]: '2015-11-02 101112'

【時刻列の作成】
date_range()関数を用います。freqは日:D, 時間:H, 分:T, 秒:S, などが使えます。
In [182]: pd.date_range('2014-12-02 14:00:00',periods=17,freq='10S')

In [183]: Out[182]:
DatetimeIndex(['2014-12-02 14:00:00', '2014-12-02 14:00:10',
'2014-12-02 14:00:20', '2014-12-02 14:00:30',
'2014-12-02 14:00:40', '2014-12-02 14:00:50',
'2014-12-02 14:01:00', '2014-12-02 14:01:10',
'2014-12-02 14:01:20', '2014-12-02 14:01:30',
'2014-12-02 14:01:40', '2014-12-02 14:01:50',
'2014-12-02 14:02:00', '2014-12-02 14:02:10',
'2014-12-02 14:02:20', '2014-12-02 14:02:30',
'2014-12-02 14:02:40'],
dtype='datetime64[ns]', freq='10S', tz=None)


【時刻の加減算】
In [142]: today
Out[142]: datetime.datetime(2015, 11, 2, 10, 11, 12)

In [140]: delta = datetime.timedelta(days=365, seconds=22, minutes=4, hours=1, weeks=0)
In [141]: today-delta
Out[141]: datetime.datetime(2014, 11, 2, 9, 6, 50)


In [151]: today
Out[151]: datetime.datetime(2015, 11, 2, 10, 11, 12)
In [152]: today+pd.DateOffset(year=2015, month=9, day=8)
Out[152]: Timestamp('2015-09-08 10:11:12')

【リサンプル】
data.resample('5s', how='mean')
data.resample('10T', how='sum')

【移動平均】
rolling_mean()関数で行います。windowパラメータが移動の窓サイズです。
data = pd.rolling_mean(data, window=31)

【時刻を指定したデータの抽出】
In [166]: data
Out[166]:
data1 data2
2014-12-02 14:00:00 56 5
2014-12-02 14:00:10 50 11
2014-12-02 14:00:13 47 14
2014-12-02 14:00:14 46 15
2014-12-02 14:00:18 42 19
2014-12-02 14:00:23 37 24
2014-12-02 14:00:27 33 28
2014-12-02 14:00:30 30 31
2014-12-02 14:00:36 24 37
2014-12-02 14:00:37 23 38
2014-12-02 14:00:41 19 42
2014-12-02 14:00:46 14 47
2014-12-02 14:00:49 11 50
2014-12-02 14:00:53 7 54
2014-12-02 14:00:58 2 59
2014-12-02 23:59:59 1 60
2014-12-03 14:52:29 0 100

In [167]: temp = data[data.index>=pd.to_datetime('2014-12-02 14:00:14')] #14時0分14秒以降を抽出
In [168]: newdata = temp[temp.index<=pd.to_datetime('2014-12-02 14:00:46')] #14時0分46秒以前を抽出

In [169]: newdata
Out[169]:
data1 data2
2014-12-02 14:00:14 46 15
2014-12-02 14:00:18 42 19
2014-12-02 14:00:23 37 24
2014-12-02 14:00:27 33 28
2014-12-02 14:00:30 30 31
2014-12-02 14:00:36 24 37
2014-12-02 14:00:37 23 38
2014-12-02 14:00:41 19 42
2014-12-02 14:00:46 14 47


●グラフ描画
import matplotlib.pyplot as plt

【データ描画】
plt.plot()でデータ描画する。デフォルトは折れ線グラフで、'o'などで線やマーカーの仕様を指定する。
figsizeはグラフサイズで、デフォルトは(6,4)くらい。

fig=plt.figure(figsize=(10,4))
fig.subplots_adjust(bottom=0.3) #グラフの下部を上に上げる
ax=fig.add_subplot(111) #1×1の範囲のうち1つ目にグラフ描画するの意
plt.plot(data, 'o' )
plt.grid(True)
plt.ylabel('length[m]') #縦軸の名前
plt.ylim([15,45]) #縦軸の上下限指定
plt.xtics(np.arrange(10), horizonallabel, rotation=90) #横軸の補助線位置とラベル指定。rotationでラベルを回転する
plt.yticks(np.arrange(-10,10,1)) #縦軸の補助線の位置とラベル指定
plt.show()

エラーバーグラフはplt.errorbar()
plt.errorbar(horizonalaxis, average, yerr=standard, fmt='o')

凡例はlegend()でつける。locを指定することで位置を変更できる。
plt.legend(loc='upper right')
もしどうしても凡例が邪魔な場合、以下のようにして凡例を図の外に追いやることも出来る。
plt.legend(bbox_to_anchor=(1.3,1))
#凡例の消し方がわからん。
 誰かおしえてください。

デフォルトのフォントだとグラフの文字に日本語が使えないので
以下を実行する。
import matplotlib as mpl
mpl.rcParams['font.family']='IPAexGothic'


【グラフ保存】
savefig()関数で保存する。拡張子によって保存形式を判定。
texとかで埋め込む時に使用するepsでも保存可能。
ベクターデータであるemfも保存できるが、
Microsoft Officeで読み込むと文字が消えたりする。
pngでdpiを上げて保存し後で解像度落とすのが使い勝手が良い。

plt.savefig('sample.png', dpi=300)


●フォルダやファイル操作
import shutil
import os

【フォルダの中身の一覧表示】
folder = '\\test\\'
files = os.listdir(folder)

【ファイル・フォルダの削除】
os.remove(folder+files[0])

【ファイルコピー】
folder2 = '\\test2\\'
shutil.copyfile(folder+files[1], folder2+files[1])

【拡張子】
splitextで拡張子とそれ以外を分ける。
In [201]: os.path.splitext(filename)[1]
Out[201]: '.csv'
  1. 2015/11/03(火) 02:05:34|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

Python開発環境(Anaconda3+spyder)の操作の小技

忘備録的に書いておきます。
環境:Anaconda2.3.0 + Spyder2.3.5.2 (Python 3.4.3)

【タブ補完】
IPythonウインドウで途中まで書いてタブを押すと保管してくれる。
モジュールの場合ドット'.'まで打ってからタブを押すとメソッドも表示可。

【オブジェクトの情報】
変数やオブジェクトの後に'?'をつけると
その情報を見れる。関数でも可。
関数の場合'??'で関数の中身も見れる。

【部分実行】
エディタでF9を押すと、いまカーソルがある行だけ実行する。
テキスト選択すると選択部分だけ実行。
F5を押すとその.pyファイルを保存して実行してくれる。

【変数のクリア】
Variable explorerに、今まで定義した変数が一覧表示される。
%resetと入力すると
Once deleted, variables cannot be recovered. Proceed (y/[n])? y
と聞かれて、yを押すと変数がクリアされる。

【時刻計測】
%timeit コマンド
と入力すると、コマンドの実行時間を測定できる。
pyファイルの実行時間なら、
%timeit runfile('temp.py')
と入力すれば良い。

【コマンド履歴の保存】
%logstartと入力すると、
ipython_log.pyに今までの入力コマンド履歴が保存・記録されるようになる。



  1. 2015/11/03(火) 01:17:18|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

ソースコードをブログに埋め込む

今まで、ブログにソースを書くときは、
体裁だけ整えてそのまま貼っていたのですが、
GitHubのGistというサービスを使うと、
ブログパーツとして埋め込めるそうです。

真ん中の大きいウインドウにソースを貼って、
その上にソースのファイル名を書きます。
右上でインデント種類を選んで「Create public gist」を選択すると、
コードが保存されます。

その後、右側のEmbed URLをコピーしてブログのhtmlに貼り付けると

こんな感じでコードが埋め込まれます。便利。

でもこれいつまで保存してくれてるんだろうってふと思ってしまいました。
サービス終了した瞬間に見れなくなりますよね。
でもよく考えればFC2ブログがサービス終了しても一緒かw
まあ潰れることが無い様祈りましょう。
  1. 2015/11/02(月) 22:51:37|
  2. Gist
  3. | トラックバック:0
  4. | コメント:0
前のページ 次のページ

twitter

プロフィール

dededemio

Author:dededemio
某電機メーカーエンジニア。
真空管からプログラミングまでゆるゆると。

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

Java (8)
未分類 (0)
真空管 (2)
キー配列 (2)
電子回路 (1)
マイコン (1)
PC部品 (2)
VPN (1)
Android (2)
opera (3)
C# (0)
プログラミング (1)
FTP (1)
メール (1)
tex (1)
音源 (2)
Ubuntu (1)
Python (4)
ブログパーツ (1)
GitHub (0)
Gist (1)
Vivaldi (1)
WICED Sense (2)
害虫駆除 (1)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。