DISTRICT 37

なにか

Pandasでcsvを操作

Pandasの操作シリーズ

CSVファイルからPandasを作る

こういうCSVデータがあったとする。

no,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
1,5.1 ,3.5 ,1.4 ,0.2 ,setosa
2,4.9 ,3.0 ,1.4 ,0.2 ,setosa
3,4.7 ,3.2 ,1.3 ,0.2 ,setosa

まずは基本系

import pandas as pd #以下省略
df = pd.read_csv("hoge.csv")
print(df)

結果としてこうなる。デフォルトで一行目がタイトルとなり、0から始まるインデックス列が自動的に付与される。

no Sepal.Length Sepal.Width Petal.Length Petal.Width Species
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

インデックスを指定したい場合はindex_colを指定

import pandas as pd #以下省略
df = pd.read_csv("hoge.csv", index_col="no")
print(df)

指定した列がインデックス列となる

no Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa

タイトルがなく、一行目からデータがある場合はheaderパラメータを指定する。

df = pd.read_csv("hoge.csv", header=None)
print(df)

タイトルが自動的にふられて読み込まれる。

no 1 2 3 4 5
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

そういったデータにヘッダーを付けて読み込みたい場合はnamesパラメータを指定する。

df = pd.read_csv("hoge.csv", names=('a','b','c','d','e'))
print(df)

指定したヘッダーで読み込まれる

no a b c d e
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

カンマ区切りではなく、タブ区切りの場合にはdelimiterを指定する

df = pd.read_csv("hoge.csv", delimiter='\t')

delimiterを指定することで、タブだけでなく他の区切り形式でも読み込むことができる。

PandasからCSVを作る

まずは基本系

import pandas as pd #以下省略
df.to_csv("hoge/hoge/iris.csv")

デフォルトではインデックスがつく

,no,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
0,1,5.1 ,3.5 ,1.4 ,0.2 ,setosa
1,2,4.9 ,3.0 ,1.4 ,0.2 ,setosa
2,3,4.7 ,3.2 ,1.3 ,0.2 ,setosa

インデックスを外したい場合はindexをFalseに指定する

df.to_csv("hoge/hoge/iris.csv", index=False)

デリミタをタブにしたい場合はsepを指定する

df.to_csv("hoge/hoge/iris.csv", sep="\t")

他の区切り文字でもいける。

また、データをquoteで囲む場合はquotingを指定する

import csv
df.to_csv("hoge/hoge/iris.csv", quoting=csv.QUOTE_ALL)

Rのパッケージを一括アップデート

pythonに続きRでもそれをやる

dragstar.hatenablog.com

パッケージを一括アップデート

update.packages()

このコマンドを打ったのちにCRANと既存パッケージのバージョン比較が自動的に行なわれる。だが、パッケージごとに更新してもいいか「Update (y/N/c)?」と確認してくるので、インストールしているパッケージが多ければ多いほど、しかもそれがアップデート対象だと少々厄介。いうまでもないが「y」がyes、「N」がNo、「c」がcancelだ。

Rsutdioだと簡単

Rstudioだとこれが格段に簡単になってくる。左下(デフォルトだと)のPackegesタブを選択して「Update」ボタンを押すと同様にCRANとの比較をして更新状況を確認する。この中から更新対象を選択して「Install Updates」を押したら完了。「Select All」を押したらすべて選択状態になるという地味に便利な補助機能付き。

f:id:dragstarclassic:20160909112313j:plain

パッケージってそれほど劇的に内容が変わるわけでもないので、バグでも見つけない限りインストール済みのパッケージは結構放っておきがち。新しいものにしておくに越したことはないが、引数が強制的に増減したり、さらには関数自体無くなったりとやっかいな変更もあったりするので、パッケージ管理は一概に最新にしておくのがいいってわけではないのかと。ReleaseNoteとか見て判断するのもいいかもしれない。

MySQLの基本的なコマンド

普段は別のRDBMSを使っているので、MySQLのコマンドがいつも覚えられない。接続コマンドすら打てないという体たらくなので、忘れてもいいようにメモしておく。

データベース関連

  • 接続
mysql -h host -u user -p
  • DB表示
show databases;
  • DBの切り替え
use yourdb;
exit;

テーブル関連

  • テーブルの確認
show tables;
  • テーブル構造の確認
desc yourtable;

データ関連

  • 縦にデータを出力
select * from yourtable where column = 'hoge' \G;
  • CSVでデータを出力
select * from yourtable where column = 'hoge'
INTO OUTFILE '/foo/bar.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

ただし、リモートDBの場合はデータをローカルに出力できない。その時は可能ならMySQL Workbench使うヨロシ。

f:id:dragstarclassic:20160908100554j:plain

SQLで検索結果を出したのち、この「Export/Import」を押すとファイル選択画面になってリモートDBでもデータを出力できる。SSH中とかでGUIを使えない場面では、何やらスクリプトを組めばどうにかなるそうなのだが、GUIでできてコマンドでできないなんて間違ってると思う。

pipでいれたパッケージを一括アップデート

pipでなんやかやパッケージを入れているのだが、これまで何をいれたのか忘れる。アップデートがあるとかそういったものは当然のように忘れる。ということで管理方法などを調べた。

パッケージの管理

まずはpipでできるコマンドから。

パッケージリストの表示

pip list

結果

click (6.6)
cycler (0.10.0)
decorator (4.0.10)
entrypoints (0.2.2)
first (2.0.1)
ipykernel (4.3.1)
略

更新状況を知りたかったらオプションを追加する

pip list --o

更新あるよというパッケージだけが出力される

ipykernel (4.3.1) - Latest: 4.4.1 [wheel]
ipython (5.0.0) - Latest: 5.1.0 [wheel]
jupyter-client (4.3.0) - Latest: 4.4.0 [wheel]
jupyter-core (4.1.0) - Latest: 4.1.1 [wheel]
略

パッケージのインストール

pip install hogehoge

アップグレードは-Uオプションを付ける

pip install hogehoge -U

アンインストール

pip uninstall hogehoge

pip-reviewで一括アップデート

いよいよ一括アップデートの仕方を。pip-reviewを使うと一括でやってくれる。

github.com

pip install pip-review

pipでpip-reviewを入れてから、pip-reviewを実行。

更新があるパッケージを表示

pip-review

微妙に文言は変わるがpip list -oと同じ結果が得られる。

ipykernel==4.4.1 is available (you have 4.3.1)
ipython==5.1.0 is available (you have 5.0.0)
jupyter-client==4.4.0 is available (you have 4.3.0)
jupyter-core==4.1.1 is available (you have 4.1.0)
略

--autoオプションを付けると更新があるパッケージを自動的に更新してくれる。

pip-review --auto

インタラクティブに更新を行う場合は--intaractiveオプションを付けて実行。これは更新する?しない?と聞いてくるので、お好みで更新ができる。

pip-review --interactive

あとはpip-review自体を忘れないようにしないと、、、、

イヤホンを買った

もう何個目かわからないくらいイヤホンは買ってる。といってもオーディオマニアとかそういうのではなく、単純になくすからだ。高いやつでそれをやっちゃうと後悔が大きいので、いつも安めのやつを買うようにしている。Beatsとか買っちゃってなくしたらきっと立ち上がれなくなる。イヤホンは消耗品として割り切るようにしている。

イヤホンに求める条件

オーディオマニアではないといってもささやかながらこだわりがある

  • L型プラグ
  • 赤い
  • 安い

L型プラグは外せない。イヤホンを買い替える理由は無くすというのが不動の一位だが、断線というのもそれに追随している。断線個所する場所はプラグ付近とイヤーピース付近だと思うのだが、そのプラグ付近への断線リスクをL型プラグは低減してくれる。なので、買ったイヤホンをL型じゃないという理由で返品をしたこともある。

その他の理由は個人的な趣味とか懐具合ですね。なぜだかイヤホンは赤という固定概念が昔からありまして買ってきたイヤホンは全部赤いですね。ほかのイヤホンでいいなと思っても赤がカラバリにないというだけであきらめたりもします。安いというのもよくなくすからからという理由で高いのは買いません。予算としては1500~2000円くらいでいつも考えてます。

よっぽどの低品質でなければ音はまったく気にしません。いい音で聴きたい場合はポタアンつけたり、ヘッドホンします。でも家を出る場合は荷物になるのでもっていきません。予算にあげたこのあたりの価格帯ならば聞くに堪えないクソ音を出すイヤホンは無いんで。

オーディオテクニカ CK330M

ということで、今回買ったのはこれ。オーディオテクニカ「CK330M」。価格としては税込で1800円くらいだったと思う。

L型だし、赤いし、安いし最高じゃないですか。さすがオーディオテクニカ。音も問題ない。ただ、コードが固いかな。固いからしまう時に少しコードが暴れてポケットとか、ケースとかに収まってくれない時がある。でもそれは裏を返すと断線に強いという長所なのかも。

ということで、しばらくはこれと付き合っていきます。

RからMySQLにつなげる

データをDBからとってきてRで分析がしたい

インストール

僕の場合、別途debパッケージが必要だったのでそれを先にやっておく

sudo apt install libmariadb-client-lgpl-dev

続いてRのパッケージをインストール

install.packages(c("DBI", "RMySQL"))

RからMySQLにつなげる

とっても簡単。

戻り値はdata.frameとなる。あとは煮るなり焼くなり

Ubuntu16でapt updateするとhashsumエラーが出る

普段使っているUbuntu15が2016/7/28でサポート切れしていた。ということでUbuntu16をこれからは使っていこうかと。LTSだし。

apt updateができない

Ubuntu16のインストールまではさっくり終わったのだが、apt updateするとハッシュサムがあわないから更新しなかったよというメッセージを受け取った。これでは使えないではないか!ということで調査の旅に出たわけだが、どうやらバグだということまでは分かった。このバグがフィックスされたとしてどうやって適用したらいいのだろうか?頼みのaptが死んでいるのに、、、

apt.confを編集

askubuntu.com

askubuntuで解決策を見つけた。どうやらプロキシ関連のバグという事なので、apt.confにプロキシの設定をちょっと入れるだけで解決するとの事。

/etc/apt/apt.conf

Acquire::http::No-Cache true;
Acquire::http::Pipeline-Depth 0;

この後にapt updateしたら通った。apt upgradeをしてみたら300近く更新が見つかった。ということで、これで解決。いつもの環境にするのに時間がかかるんだろうなぁ。