Memo plus Alpha

メモにプラスアルファを加えて価値ある情報に。

Python (Jupyter)でファイルが読み込めない問題

エラーの内容

WindowsPython (Jupyter)を使っている場合、ファイルを読み込む際に次のようなエラーが出ることがあります。

 

UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence

 

これは例えばutf-8のファイルを開くときに起きることがありますが、Windowsのデフォルトの文字コードではデコードできないというエラーです。

 

対処法

その対処法としてはcodecsを使って、encodingを指定して開くのが有効のようです。

 

# coding: utf-8
import codecs

f = codecs.open('jikken.txt', mode='a', encoding='utf-8') # 追加書き込みモードで開く
f.write("This is a pen.") #文字列をファイルに書き込む
f.close() #ファイルを閉じる

 

IPアドレスからアクセス元のホストを取得する(nslookup)

はじめに

ウェブサイトなどでログをつけていると:

111.11.111.11

111.11.111.22

111.11.111.33

などのIPアドレスのリストを得ることがあります。このIPアドレスのリストからホストを取得し、アクセス元のおおよその国などを特定する方法を紹介します。

方法

Windowsコマンドプロンプトのnslookupを使います。このコマンドのあとにIPアドレスを打つと:

nslookup 182.22.59.229

>サーバー: UnKnown
>Address: 111.111.1.1

>名前: f1.top.vip.ssk.yahoo.co.jp
>Address: 182.22.59.229

などのように「名前」というところにホスト名が記されます。ここにはプロバイダーの情報が表示されますが、これでおおよその国(.jpは日本, deはドイツなど)などの情報がわかります。

これをアドレスの一覧に対して行うにはバッチファイルを作成すればOKです。

エクセルでIPアドレスの一覧をコピペで入力し(「データ」から「重複の削除」をしておくとよいでしょう)、隣のセルに:"nslookup " & A1として下までコピーします(nslookupの後に半角スペースが必要です)。

 

f:id:semanticist:20170330213220p:plain

 

これをテキストエディタに貼り付け、ip.batなどの名前で保存します。

 

f:id:semanticist:20170330213309p:plain

 

その後、コマンドプロンプトからip.bat > result.txtのように実行すればテキストファイルとして一覧を取得できます。

f:id:semanticist:20170330213619p:plain

 

 

Rにread.tableで2次元の表(分割表)を読み込む

データ

f:id:semanticist:20161222201738p:plain

このようなデータをRにクリップボード経由で読み込むには、次のようなコマンドを打ちます。

data=read.table("clipboard",header=T)

f:id:semanticist:20161222201840p:plain

この読み込みでは、Student, Eng, Kokugo, Mathという4つの変数からなる形で認識されています。これでは行に名前がない状態ですので、例えばこのデータを使って対応分析を行うことはできません。

対応策1:row.namesを指定する

row.names="Student"のオプションを加えることで、Studentの列を行名として認識させることができます。

f:id:semanticist:20161222202145p:plain

対応策2:Studentの部分を空白にする

単純な方法としては1行目の第1列を空行しておくと、Rがその列を列名として認識してくれます。

f:id:semanticist:20161222202304p:plain

 

Rのデータ入力:read.tableによるテーブルヘッダーの読み込み

ヘッダーにXがつく現象

Rにデータをロードするには、clipboardから読み込むのが楽です。

f:id:semanticist:20161222200525p:plain

このデータをクリップボードにコピーして:

data=read.table("clipboard",header=T)

で読み込めます。しかしながら、オブジェクトをロードすると次のようにヘッダーの名前がおかしくなります。

f:id:semanticist:20161222200657p:plain

これはヘッダーを数値として読み込んでいるからですが、この現象を回避するには次の形で対処できます。

> data=read.table("clipboard",header=T, check.names=F)

f:id:semanticist:20161222200857p:plain

 

ただし、この場合、各行に$を使ってアクセスするには、変数名をクォーテーションマークで囲む必要があります。

 

f:id:semanticist:20161222201005p:plain

[参照記事]

qiita.com

 

 

対応分析(コレスポンデンス分析)のラベルのはみだしをWordで調整する

はじめに

Rで対応分析などを行ってplotすると、ラベルの端が切れてしまうことがあります。そのときの対処法のメモ。

現象

次のような現象が今回の処理の対象です。

f:id:semanticist:20161101183425p:plain

対応方法

Rのコマンド例:

library(MASS)

plot(corresp(jikken,nf=5))

(1)plot後、右クリックをして「メタファイルにコピー」

※ビットマップではだめです。

(2)Wordの貼り付け

(3)図を右クリックして、「図の編集」

f:id:semanticist:20161101183719p:plain

そうすると、後ろに隠れていた部分が見えるようになります(原理は不明ですが、おそらく編集するためにすべてを可視化するのかもしれません)。

f:id:semanticist:20161101183412p:plain

※図が「前面」に変更されてしまいますので、図を選択して「文字列の折り返し」から「四角」や「行内」など望むものを選んでください。