====== 05.Google Colaboratoryで自前データでRで統計 ====== 前回の[[00.初めての医療統計rとezr:04.googlecolaboratoryでrプログラミング|04.GoogleColaboratoryでRプログラミング]]では、GoogleColaboratory上で、Rプログラミングを行う方法を紹介しました。流れとしては、 -GoogleColaboratoryで『PYTHON3の新しいノートブック』を作成 -GoogleDriveで上記ipynbファイルを『Text Editor for Drive』で開き、''%%"kernelspec":{"name":"ir","display_name":"R"}%%''に変更 -GoogleColaboratoryで再度、上記ipynbファイルを開く となります。 今回は、自前のエクセルデータをGoogleColaboratory上にアップロードして、Rで統計解析を行いたいたいと思います。 ===== エンコードの注意点 UTF8とShiftJIS ===== https://shohei-doi.github.io/quant_polisci/encoding-r.html 第23章 Rのエンコーディング問題 Windowsでエクセルをcsvで保存すると、基本的には Shift-JISでエンコードされる。→MacやColaboratoryで開くと文字化けする Windowsでエクセルをcsv(UTF-8形式)で保存すると、MacやColaboratoryで開くことができるが、WindowsのRStudioで開くと文字化けする ===== ソースコード ===== https://colab.research.google.com/drive/19s5TIPgizVJp5LjFBEpADmMUYgy_nPMQ ===== 開発環境 ===== Windows10 Pro (1803) (OSは何でもよいです) Chrome Googleアカウント GoogleDriveで『Text Editor for Drive』を利用(→方法は[[00.初めての医療統計rとezr:04.googlecolaboratoryでrプログラミング#googleドライブで_text_editor_for_drive_をインストール|こちら]]をご覧ください。) ===== 自前データの用意 ===== 今回、自前のデータとして、以下のエクセルファイルを用いてみます。 {{ :00.初めての医療統計rとezr:book1.xlsx |}} (←クリックでダウンロードできます。) {{ :00.初めての医療統計rとezr:book2.xlsx |}} {{:00.初めての医療統計rとezr:pasted:20191013-075653.png}} Rで統計する際の自前データの記載方法については、[[00.初めての医療統計rとezr:03.excelでcsv出力|03.Excelでcsv形式でデータを保存]]をご覧頂けましたら幸いです。半角英数字とピリオドのみを用いて記載していただくのがお勧めです。 ===== 新規ipynbファイルの作成とRを利用するための編集 ===== [[https://colab.research.google.com/|GoogleColaboratory]]へ行き、Googleアカウントでログインし、『PYTHON3の新しいノートブック』をクリックして、新規ipynbファイルを作成します。 {{:00.初めての医療統計rとezr:pasted:20191013-125646.png}} 以下のように、ファイル名を変更し(今回は、191013_001.ipynb に変更します)、Enterを押した後、Ctrl+S で保存します。 {{:00.初めての医療統計rとezr:pasted:20191013-125758.png}} https://drive.google.com/drive/my-drive へ行き、先ほど作成したipynbファイル(今回は、191013_001.ipynb)を右クリック > 『アプリで開く』 > 『Text Editor for Google Drive』の順にクリック {{:00.初めての医療統計rとezr:pasted:20191013-130050.png}} "kernelspec":{"name":"python3","display_name":"Python 3"} となっている部分を、 "kernelspec":{"name":"ir","display_name":"R"} に変更します。 (変更前) {{:00.初めての医療統計rとezr:pasted:20191013-130332.png}} (変更後) {{:00.初めての医療統計rとezr:pasted:20191013-130500.png}} 下の方へ行き、『Save』をクリックします。何か聞かれるので、『OK』を2回押します。 {{:00.初めての医療統計rとezr:pasted:20191013-130531.png}} タブの『×』をクリックして、閉じます。 {{:00.初めての医療統計rとezr:pasted:20191013-130646.png}} GoogleDriveの画面で、191013_001.ipynb を右クリック > 『アプリで開く』 > 『Google Colaboratory』の順にクリックして、Rを利用できるようになります。 {{:00.初めての医療統計rとezr:pasted:20191013-130819.png}} {{:00.初めての医療統計rとezr:pasted:20191013-130911.png}} Rが利用できるか確認のため、以下のコードを入力して、Shift + Enter を押します(または、左側の▲をクリックします)。 library(tidyverse) なんか10秒くらいかかったりしますが、以下のようになれば、Rが使用できるようになっている状況です。(Google Colaboratoryでは、デフォルトで、"tidyverse"というパッケージがインストールされています。Windowsで自分のパソコンにRStudioをインストールした場合は、自分で"tidyverse"パッケージをインストールする必要があります。) {{:00.初めての医療統計rとezr:pasted:20191013-131338.png}} ===== 自前データのアップロードとread_excel()によるエクセルデータのRへの取り込み ===== 今回、Rに取り込みたい自前データ{{ :00.初めての医療統計rとezr:book1.xlsx |}}を、デスクトップに保存しておくものとします。 画面左上の『>』をクリックして、左側からタブのような画面を引き出します。 {{:00.初めての医療統計rとezr:pasted:20191013-131611.png}} 『ファイル』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-131702.png}} 『アップロード』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-131746.png}} book1.xlsx を選択して、『開く』をクリック。 {{:00.初めての医療統計rとezr:pasted:20191013-131953.png}} {{:00.初めての医療統計rとezr:pasted:20191013-132025.png}} 左側の画面に、book1.xlsxが表示されるので、右側のコードを入力する画面に以下を入力して、Shift+Enterを押して実行します。 library(readxl) data_xlsx <- read_excel("book1.xlsx", sheet=1) data_xlsx {{:00.初めての医療統計rとezr:pasted:20191013-132328.png}} コメントで説明を入れると、以下のようになります。 # read_excel()関数を使用するための準備 library(readxl) # data_xlsx に、book1.xlsxの1番目のsheetをtibbleデータとして代入する data_xlsx <- read_excel("book1.xlsx", sheet=1) # data_xlsx を表示する data_xlsx {{:00.初めての医療統計rとezr:pasted:20191013-132807.png}} これで、自前のエクセルデータをGoogle ColaboratoryでRのデータとして取り込むことができました。 ===== 取り込んだデータで解析してみる ===== 今回、data_xlsx という『オブジェクト』に、エクセルデータを代入しています。オブジェクトという言葉は私もよくわかっていません。とりあえず、『モノ』ということでお願いします。 オブジェクトの内容を情報付きで簡潔に表示する場合は関数 str() を用います。 str(data_xlsx) データの要約が欲しい場合は関数 summary() を用います。 summary(data_xlsx) {{:00.初めての医療統計rとezr:pasted:20191013-133345.png}} 体重weightと身長からBMI(body mass index)を計算します。 BMI <- (data_xlsx$weight/(data_xlsx$height/100)^2) BMI 計算したBMIを、data_xlsx の一番右側の列に追加します。 data_xlsx$BMI <- BMI data_xlsx {{:00.初めての医療統計rとezr:pasted:20191013-134538.png}} ===== ggplot()関数でグラフを表示してみる ===== DMの有無(0と1)で、BMIの棒グラフ(平均meanと標準偏差sdを計算)を描いてみます。 # convert関数を用いるためにhablarパッケージをインストール install.packages("hablar") # hablarパッケージの使用を宣言 library("hablar") # convert関数を用いて、d2のDM列のデータ型をfactorに変更 d2 %>% convert(fct(DM)) {{:00.初めての医療統計rとezr:pasted:20191013-160958.png}} ggplot()関数を用いて棒グラフを描画します。 # ggplot()関数を用いる # geom_bar()でstat="identity"とする必要あり g <- ggplot(d3, aes(x=DM, y=mean)) + geom_bar(stat="identity")+ geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd, width = 0.3)) g {{:00.初めての医療統計rとezr:pasted:20191013-161339.png}} ===== t検定を行う ===== DM(糖尿病)の有無で、BMIに差があるかt検定してみます。(t検定できるかどうかは、今回は気にしないことにします。) まず、DM_ari と、DM_nasiの数列(ベクトル?tibble?)を計算します。 DM_ari <- filter(data_xlsx, DM == "1")$BMI DM_ari DM_nasi <- filter(data_xlsx, DM == "0")$BMI DM_nasi その後、DM_ariとDM_nasiでt検定を行います。 t.ans1 <- t.test(DM_ari, DM_nasi, var=T) t.ans1 {{:00.初めての医療統計rとezr:pasted:20191013-162449.png}} p-value = 0.05792 (> 0.05 ) なので、「DMの有無で、BMIに有意差があるとは言えない。」という結論になります。 ===== 結果をipynbファイルでダウンロードして、自分のパソコンでhtmlに変換する(要Anaconda) ===== 自分のパソコン(オフライン)に結果を保存しておきたい場合は、ipynbファイルをダウンロードして、htmlに変換しておきます。 https://www.it-swarm.dev/ja/python/google-colaboratory-notebook%E3%82%92html%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/808152667/ -Anacondaを自分のパソコンにインストール -Anaconda promptで、conda install nbconvert でnbconvertをインストール -次を入力 jupyter nbconvert --to html xxxxxxxx.ipynb {{:00.初めての医療統計rとezr:pasted:20200806-220830.png}} ===== ソースコード ===== https://colab.research.google.com/drive/19s5TIPgizVJp5LjFBEpADmMUYgy_nPMQ ===== Rでグラフを描くためのggplot2パッケージ ===== Rでグラフをかくなら、必須のパッケージといってよいと思います。 まず最初に、以下のリンク先の4つのスライドをご覧ください。素晴らしいです。 https://heavywatal.github.io/slides/makino2019r/ Hands-on R Lecture for Makino Lab http://knknkn.hatenablog.com/entry/2019/02/23/181311 2019-02-23 ggplot2覚書⑤ 体裁(theme、テキストgeom)に関しての大枠 https://heavywatal.github.io/rstats/ggplot2.html ggplot2 — きれいなグラフを簡単に合理的に →基本的にはこちらを見れば、、、 ===== Rに関するリンク ===== https://qiita.com/7of9/items/ca2b64cf5e9f0721a61d @7of9 2017年06月16日に更新 R > データ構造 > データフレーム > 構造確認 > str() http://cse.naro.affrc.go.jp/takezawa/r-tips/r/10.html 10. オブジェクトの表示 https://opur.club/textbook/2018-2-2/ Lesson 2-2: データフレーム・tibble 2018/10/15 https://kazutan.github.io/JSSP2018_spring/data_handling.html データ操作 http://bcl.sci.yamaguchi-u.ac.jp/~jun/notebook/r/tidyverse/dplyr/ dplyr (データ変換) https://stats.biopapyrus.jp/r/tidyverse/dplyr.html R / dplyr パッケージによるデータ操作と集計 dplyr 2019.08.16 http://motw.mods.jp/R/ggplot_geom_bar.html ggplotで棒グラフを作る geom_bar()の使い方 https://stats.biopapyrus.jp/r/basic/data-type.html R のデータ型・モード・クラス データ型 2017.03.12 https://community.rstudio.com/t/how-to-convert-factor-data-to-numeric-for-all-dataset/17626/3 How to convert factor data to numeric for all dataset 2018-11-05 https://cran.r-project.org/web/packages/hablar/vignettes/convert.html A grammer for data type conversion https://cran.r-project.org/web/packages/hablar/index.html hablar: Non-Astonishing Results in R https://stackoverflow.com/questions/42459423/cannot-install-r-packages-in-jupyter-notebook Cannot install R packages in Jupyter Notebook https://kazutan.github.io/kazutanR/hands_on_170730/filter.html 行の選択 - filter関数 ===== Rでt検定に関するリンク ===== https://oku.edu.mie-u.ac.jp/~okumura/stat/ttest.html t 検定 https://to-kei.net/r-beginner/r-9-t-test/ Rでt検定行う方法とそのまま使える自作関数 2018/01/03 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/65.html 65. 二標本検定 https://data-science.gr.jp/implementation/ist_r_student_t_test.html Rによるスチューデントのt検定 ===== リンク ===== 目次:[[00.初めての医療統計rとezr:index.html|初めての医療統計RとEZR]] 前:[[00.初めての医療統計rとezr:04.googlecolaboratoryでrプログラミング|04.GoogleColaboratoryでRプログラミング]] 次:[[00.初めての医療統計rとezr:06.colaboratoryでrで折れ線グラフ|06.Google Colaboratoryで時系列データで折れ線グラフを描画]]