こんにちは、ヤク学長です。
今回は、「Rでデータのインポートをしよう」を紹介します。
⇩基礎編の講座がまだの方はこちらからどうぞ⇩
Rでデータのインポートをしよう
Step1 : データインポートの概要
データをRの中に取り込むインポートについて解説していきます。
データ分析を行う際に、必ず最初に行うことがデータのインポートです。
インポートはファイルをRStudioに取り込む作業です。
インポートをするためには、ファイルがどの場所にどの形式で保存されているかを確認する必要があります。
まず、確認するものは①場所と②保存形式です。
①場所:パス、ディレクトリー
②保存形式:拡張子、区切り文字
を考えていきます。それでは、開始していきましょう。
インポート ①場所:パス/ディレクトリー
まずは、パスとディレクトリについて考えていきます。
基本的にPCは、ファイルを識別するために名前に頼っています。
場所を示す部分を「ディレクトリー」と呼び、ファイル名までを含めた文字列を「パス」と呼びます。このパスのことを「絶対パス」と呼びます。
また、「相対パス」と呼ばれるものもあります。相対パスの場合、ファイルは単純にファイル名を記載するだけで良いです。これから相対パスの指定方法をご紹介します。
相対パスの指定方法
相対パスの指定方法について解説していきます。
まず、基準とする場所のことをワーキングディレクトリと呼びます。ワーキングディレクトリーから見たファイルへのパスを「相対パス」と呼びます。
相対パスを指定する場合、[..](ピリオド2つ)で表す記号を用います。このようにピリオドを2つ書くだけで、ひとつ上の階層に上るイメージになります。具体的に解説します。
PATHワーキングディレクトリの確認
今、RStudioが基準点としているディレクトリーは、
getwd()
GETWD関数を実行することで確認できます。
このGETWD関数のプロジェクト単位でRスクリプトを管理している場合は、.RProjectファイルがあるフォルダーを示しているはずです。
このワーキングディレクトリのRStudioでプロジェクトを開いたときに、右下のSPAINで表示されているフォルダーそのものとなっており、「⚙」のShow folder windowをクリックすると、そのフォルダーを開くことができます。
このディレクトリーを起点として、相対パスを指定していきます。
パステキストファイルの読み込み
「aiu」という名前のフォルダを作成して、その中に、「test1.txt」というファイルを作りましょう。
test1.txtに、好きな文字列を記載して保存ます。
このテキストファイルに記載した文字列を読み込みます。
読み込む関数は、readrパッケージに含まれるread_file関数を使用します。
readrパッケージは、前回インストールしたtidyverseで自動的に読み込まれるパッケージに含まれています。
library(tidyverse)
と入力し、read_fまで入力すると、予測候補にでてくるようになっているはずです。
ここで、ヘルプ関数を呼び出してみましょう。
?read_file
ヘルプの内容のUsageを確認すると、fileとlocaleArgumentがあり、
そのうち、デフォルト値が設定されていないものはfileargumentのみになります。
fileargumentを確認すると、
Eitherapathtoafile,aconnection,orliteraldata
(eitherasinglestringorarawvector).
と記載されており、「ファイルへのパス、コネクションか、リテラルデータを与える」となっています。
ということで、先ほど作成したtest1.txtのフルパスをまず与えてみましょう。
フルパスは、
getwd()
のaiuフォルダの中にあるtest1.txtファイルなので、
full_path<-“D:/R/aiu/test1.txt”full_pathという名で保存します。
read_file(full_path)
で読み込むことができました!
もちろん、変数に一時的に保存しておかなくても、直接フルパスを書いて
read_file(“D:/R/aiu/test1.txt”)
に入れて読み込むことも可能です。
読み込んだあとに、別の用途で利用したい場合は、変数に保存する必要があります。
new_hensu<-read_file(full_path)
new_hensu
これで相対パスで指定して読み込むことも可能です。
read_file(“aiu/tekitou.txt”)
いかがでしょうか。
※RStudioでは、ctrl+spaceキーを””の中で押すことで予測変換のような機能が実装されています。
read_file(“”)
お疲れ様です。以上でパス、ディレクトリはおしまいです。
次からは、ファイルの読み込みについて考えます
※文字コード:指定方法
ここからはインポートされるファイルの中身内容についてみていきましょう。
ここからは、test2.txtを作成しRに読み込む方法について解説していきます。
まずは、間違い例からご消化します。文字化けするファイルを作成します
File->NewFile->TextFileで新しいファイルを作成して、
そのなかに日本語を入力します。
File->SavewithEncoding
で「CP932」を選択して保存しましょう。
※CP932というのは、Windowsでは標準的に使われている文字コードです。
では、このファイルを読み込みます。
library(readr)
read_file(“aiu/test2.txt”)
いかがでしょうか。文字化けしているはずです。
なぜかというとRでは、「utf-8」という文字コードが標準で使われるため、先ほど、CP932の文字コードで保存したファイルをUTF-8の文字コードで読み込んだので、文字化けしてしまったんですね。
この問題を解決するには、read_file関数に読み込もうとするファイルの文字コードを指定すればよいです。
文字コードを指定するためには、
locale()
という関数で呼び出した結果の、Encodingの値を変更してあげることで対応できます。
locale()で呼び出したオブジェクトを変数に保存しましょう。
initial_locale<-locale()
initial_locale
このinitial_localeを、read_file関数のlocaleArgumentに渡してあげると、
read_file(“aiu/test2.txt”,locale=initial_locale)先ほどと同様に文字化けします。
このtest2.txtはcp932の文字コードで保存されているため、read_fileのlocaleArgumentに対して、きちんと、CP932で読み込むように指定してあげる必要があります。
文字コードの指定はすごく簡単で
?locale
の、encodingArgumentをデフォルトのUTF-8からcp932に変更してあげるだけです。
実際にやってみましょう。
locale_with_cp932<-locale(encoding=”cp932″)
locale_with_cp932
このオブジェクトを利用し、read_fileを呼び出すと
read_file(“aiu/test2.txt”,locale(encoding=”cp932″))
というようになります。
?read_file
のUsageのところの並び順で値を与えてあげれば読み込めますので、
readrの関数で日本語の文字化けに出会ったときは、locale(encoding=”cp932″)というコマンドを覚えておいてください。
次は、文字コードがわからない場合の対処方法について解説を行います。
※※文字コード深堀
日本語の場合は、ほとんどの場合、”cp932″あるいは”shift-jis”という文字コードをlocaleで指定してあげれば問題ないと思います。
日本語以外、英語以外の外国語のファイルを読み込みたい場合に、どんな文字コードを指定すればよいかわからないことも多々あります。その場合は、guess_encoding関数を利用してみましょう。
例えば、read_file(“aiu/test2.txt”)
これが文字化けしている場合に、
guess_encoding(“aiu/test2.txt”)
ある長さのデータが含まれていると、どの文字コードかを推定して教えてくれます
(今回はcp932のはずですが、Shift-jisと推定されています。この二つ、厳密には違いますがほとんど一緒なので読み込んでもエラーは起こらないですが、一部文字化けが残存する可能性もあります)
read_file(“ichiji/tekitou2.txt”,locale(encoding=”shift-jis”))
read_file(“ichiji/tekitou2.txt”,locale(encoding=”cp932″))
お疲れさまでした。以上で文字コードの話はおしまいです。
次はファイルの形式について解説していきます。
インポート ②保存形式:拡張子、区切り文字
ここではファイルの拡張子について解説を行います。
まずは、どういう形で保存されているかのファイル拡張子のお話です。
拡張子
まず、何らかのテキストファイルにランダムなテキストを入力してみてください。.txtという文字がファイル名の後にくっついているはずです。この.txtの部分を.csvに変更してみてください
アイコンがEXCELに変わっているはずです。
このように、ファイルの名前の後に続く文字列のことをファイル拡張子といい、これによりファイルの内容がどのようなものなのかをコンピューターは判断しています。
これらの拡張子のうち、テキスト形式のデーターを読み込む場合に理解しておいた方がよい区切り文字という概念があります。続いて、区切り文字に関する「デリミター」という概念を学びましょう。
区切り文字:デリミター
区切り文字について解説していきます。拡張子のうち、テキスト形式と呼ばれるものは複数の種類があり、データの列を表すのにデリミターと呼ばれる記号が使われています。
例えば、CSVの略は、カンマセパレータバリューといい、直訳するとカンマで区切られた値という意味になります。
テキストファイルの1行がデーターの1行に対応しており、カンマで列と列を区切るようなイメージです。
国によって、CSVと言えばセミコロンで区切られていることがありますし、TABで区切るようなものもあります。
たまに拡張子が.txtとなっているものもあります。そういった場合は、自分でファイルの中身を開いて確認して、どのデリミターが利用されているかを確認しなければなりません。
次からは、実際にRでデリミターを指定してデータを読み込む方法について解説をしていきます。
テキストファイルのインポートの実践
長々とした解説、お疲れさまでした。こからは、解説でお伝えしたことを、実際のRで実行してみましょう。
今回対象とするファイルは、
import_practice1.txt
import_practice2.txt
import_practice3.txt
の3種類です。拡張子はヒントにならないようにあえて、txtのままにしてあります。
まずは、この3つのファイルのデリミターを確認してみましょう
import_practice1.txt->[tab]
import_practice2.txt->[,]
import_practice3.txt->[;]
この3つです.直接見る以外にも
library(tidyverse)
read_file(“import_practice1.txt”)
read_file(“import_practice2.txt”)
read_file(“import_practice3.txt”)
それぞれ文字化けしているように見えますが、
import_practice1は\t
import_practice1は,
import_practice1は;
でそれぞれ区切られていることがわかります。また、windowsでは、改行を表す記号が\r\nなので、その表示もされています。
ここで、デリミターがわかったのでそれぞれ読み込んでみましょう
テキストファイルをデリミターを指定して読み込む関数は、
?readr::read_delim
です。Usageでデフォルトが設定されていないArgumentはfileとdelimの二種類です。
read_delim(“import_practice1.txt”,”\t”)
read_delim(“import_practice2.txt”,”,”)
read_delim(“import_practice3.txt”,”;”)
うまく読み込めていますね?
内容はすべて同じです。
?readr::read_delim
ただ、今回はデリミターがわからないファイルに対してデリミターを指定する必要があったため、
read_delim関数を用いましたが、ヘルプのUsageをみると、read_delim以外に
read_csv
read_csv2
read_tsv()
の3つの関数の記載がされています。
Descriptionをみると、
read_csvは[,]をデリミターに
read_tsvは[\t]をデリミターに
read_csv2は[;]をデリミターに小数点を[,]に
デフォルトが設定されたread_delim関数であることが記載されており、
もともと、デリミターが分かっている場合は、
read_tsv(“import_practice1.txt”)
read_csv(“import_practice2.txt”)
read_csv2(“import_practice3.txt”)
このように、delimArgumentを記載せずに読み込むことができます。
read_delimとその仲間のread_csv,tsv,csv2関数をどのように利用するかイメージがつきましたでしょうか?
次は今回読み込んだデータがRで保存されているtibble形式について説明します。