Python (Jupyter)でファイルが読み込めない問題
エラーの内容
WindowsでPython (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の後に半角スペースが必要です)。
これをテキストエディタに貼り付け、ip.batなどの名前で保存します。
その後、コマンドプロンプトからip.bat > result.txtのように実行すればテキストファイルとして一覧を取得できます。
Rにread.tableで2次元の表(分割表)を読み込む
データ
このようなデータをRにクリップボード経由で読み込むには、次のようなコマンドを打ちます。
data=read.table("clipboard",header=T)
この読み込みでは、Student, Eng, Kokugo, Mathという4つの変数からなる形で認識されています。これでは行に名前がない状態ですので、例えばこのデータを使って対応分析を行うことはできません。
対応策1:row.namesを指定する
row.names="Student"のオプションを加えることで、Studentの列を行名として認識させることができます。
対応策2:Studentの部分を空白にする
単純な方法としては1行目の第1列を空行しておくと、Rがその列を列名として認識してくれます。
Rのデータ入力:read.tableによるテーブルヘッダーの読み込み
ヘッダーにXがつく現象
Rにデータをロードするには、clipboardから読み込むのが楽です。
このデータをクリップボードにコピーして:
data=read.table("clipboard",header=T)
で読み込めます。しかしながら、オブジェクトをロードすると次のようにヘッダーの名前がおかしくなります。
これはヘッダーを数値として読み込んでいるからですが、この現象を回避するには次の形で対処できます。
> data=read.table("clipboard",header=T, check.names=F)
ただし、この場合、各行に$を使ってアクセスするには、変数名をクォーテーションマークで囲む必要があります。
[参照記事]
対応分析(コレスポンデンス分析)のラベルのはみだしをWordで調整する
はじめに
Rで対応分析などを行ってplotすると、ラベルの端が切れてしまうことがあります。そのときの対処法のメモ。
現象
次のような現象が今回の処理の対象です。
対応方法
Rのコマンド例:
library(MASS)
plot(corresp(jikken,nf=5))
(1)plot後、右クリックをして「メタファイルにコピー」
※ビットマップではだめです。
(2)Wordの貼り付け
(3)図を右クリックして、「図の編集」
そうすると、後ろに隠れていた部分が見えるようになります(原理は不明ですが、おそらく編集するためにすべてを可視化するのかもしれません)。
※図が「前面」に変更されてしまいますので、図を選択して「文字列の折り返し」から「四角」や「行内」など望むものを選んでください。