# CSVの読み込みと、元の列を残した得点計算に使います。
install.packages(c("readr", "dplyr"))模擬調査データ
1 目的
この授業では、成人1,000人が生活や仕事についてのアンケートに答えたと想定した、架空のデータを使います。年齢や年収のほか、周囲の人に頼れると感じているか(社会的サポート)、ストレスをどの程度感じているか(ストレス)、生活に満足しているか(生活満足度)についての回答が入っています。
このページでは、質問の内容と回答の読み方を確認し、データをRに読み込みます。その後、複数の質問への回答をまとめて、ストレスや生活満足度などを表す点数を計算します。このデータは、授業で扱うさまざまな分析の練習に共通して使います。
2 ファイルとRの準備
まず、練習用のデータを手元に用意しましょう。RとPositronのインストールがまだの場合は、先に「RとPositronのセットアップ」を進めてください。フォルダの開き方とコードの実行方法も、そちらで説明します。
データを保存して、中身を確認する
まず、模擬調査データ(CSV)をダウンロードし、Positronで開いている授業用フォルダに保存してください。ファイル名は mock_survey.csv です。セットアップで保存したCSVがこのフォルダにあれば、そのファイルを使えます。
続いて、コードブック(データの説明書・Markdown)もダウンロードし、CSVと同じ授業用フォルダに保存してください。ファイル名は mock_survey_codebook.md です。
この説明書には、CSVに入っている変数の意味、質問文、得点の計算方法をまとめています。保存したファイルは、Positronのファイル一覧でクリックして開けます。Markdown(拡張子 .md)は、見出しや表などを書けるテキスト形式です。
分析中に変数の意味が分からなくなったら、この説明書を参照してください。このページでは、AIにコードの作成を頼むときにも、この説明書を添付するか、必要な説明をコピーして指示に添えます。CSVのデータそのものはAIに渡しません。
CSVとは、表のデータを、値をカンマで区切って保存するファイル形式です。例えば、年齢と年収を記録した表は、CSVでは次のように書かれています。
age,income
25,300
40,500
最初の行は列の名前で、age は年齢、income は年収を表します。その下の各行が1人分のデータです。この例では、25歳で年収300万円の人と、40歳で年収500万円の人が記録されています。
ダウンロードしたファイルも開いてみましょう。Positronのファイル一覧で mock_survey.csv をクリックしてください。上の例と同じように、列の名前と、カンマで区切られた値が並んでいます。今回は列が多いので、すべてを読む必要はありません。最初の行に id、region、age などの名前があることを確認してください。
ここでは中身を見るだけにして、文字を入力したり、削除したりしないでください。誤って変更した場合は、ファイルのタブを閉じ、変更を保存しないでください。
このデータには1,000人分の架空の回答が入っています。最初の列名の行を除き、1行が1人に対応します。各列の意味は、下の「変数一覧」で確認します。
必要なパッケージを用意する
Rのパッケージとは、使える関数を追加するためのものです。このページでは、データの読み込みに readr、新しい変数の作成に dplyr を使います。セットアップで tidyverse をインストール済みなら、この2つも含まれているため、追加のインストールは不要です。
まだインストールしていない場合は、次のコードを一度実行してください。
これで準備は完了です。データをRに読み込む前に、どのような情報が入っているかを確認しましょう。
3 データの内容
変数一覧
データの各列には、年齢や年収などの情報が入っています。分析で扱うこうした情報を「変数」と呼びます。下の表では、CSVの列名を「変数名」、その意味を「内容」、記録されている数字や文字の意味を「値・単位」にまとめています。例えば、income の値が300なら、その人の年収は300万円という意味です。
すべての変数名を覚える必要はありません。分析で使う列が出てきたときに、この表で意味を確認してください。なお、このデータには未回答などによる値の抜け(欠損値)はありません。
| 変数名 | 内容 | 値・単位 |
|---|---|---|
id |
架空の回答者を区別する番号 | 1〜1,000。1人に1つずつ割り当て、同じ番号の人はいません |
region |
架空の地域 | A / B。各500人 |
age |
年齢 | 20〜79歳、1歳刻み |
education_years |
修了した課程までの教育年数 | 9年(中学校)/ 12年(高校)/ 14年(短大などの2年課程)/ 16年(4年制大学)/ 18年(修士課程) |
income |
個人の年収 | 万円単位で、0以上の整数。0は年収がないことを表し、未回答ではありません |
gender |
性別 | female(女性)/ male(男性)/ other(その他) |
employment_status |
就業区分 | regular(正規雇用)/ nonregular(非正規雇用)/ self_employed(自営業等)/ not_employed(非就業) |
marital_status |
婚姻状況 | never_married(未婚)/ married(既婚)/ divorced(離別)/ widowed(死別) |
household_size |
本人を含む世帯人数 | 1〜6人 |
weekly_work_hours |
週労働時間 | 0〜70時間、1時間刻み |
support_1〜support_5 |
社会的サポートについての5つの質問への回答 | 各質問に1〜5で回答。数字の意味は下の「回答の選択肢」を参照 |
stress_1〜stress_5 |
ストレスについての5つの質問への回答 | 同上 |
life_satisfaction_1〜life_satisfaction_5 |
生活満足度についての5つの質問への回答 | 同上 |
表の最後の3行は、それぞれ5列分をまとめて書いています。例えば、support_1〜support_5 は、support_1、support_2、support_3、support_4、support_5 の5列です。これらを含めて、CSVには全部で25列あります。
4 質問項目と回答の読み方
回答の選択肢
社会的サポート、ストレス、生活満足度については、それぞれ5つ、合計15の質問を用意しています。どの質問も、自分にどの程度あてはまるかを次の5つの選択肢から選ぶ形式です。このような回答形式を「5件法」と呼びます。
CSVには、選択肢の文章に代えて1〜5の数字が入っています。例えば、support_1 の値が4なら、「困ったときに相談に乗ってくれる人がいる」という質問に「ややあてはまる」と答えたことを表します。
| CSVに入っている値 | 回答の意味 |
|---|---|
| 1 | まったくあてはまらない |
| 2 | あまりあてはまらない |
| 3 | どちらともいえない |
| 4 | ややあてはまる |
| 5 | とてもよくあてはまる |
続いて、それぞれの質問文を確認しましょう。以下の質問と回答は、分析を練習するために用意したものです。
社会的サポート
必要なときに頼れる人がいると思えるかを尋ねます。
| 変数名 | 質問文 |
|---|---|
support_1 |
困ったときに相談に乗ってくれる人がいる。 |
support_2 |
つらいときに気持ちを受け止めてくれる人がいる。 |
support_3 |
必要なときに助けを頼める人がいる。 |
support_4 |
私のことを気にかけてくれる人がいる。 |
support_5 |
悩みがあっても、頼れる人がいない。 |
ストレス
ここ1か月の状態を振り返って回答します。
| 変数名 | 質問文 |
|---|---|
stress_1 |
やるべきことに追われていると感じる。 |
stress_2 |
日々の生活で、気が張りつめている。 |
stress_3 |
小さなことでも、いら立ちを感じる。 |
stress_4 |
気がかりなことが頭から離れない。 |
stress_5 |
気持ちに余裕を持って過ごせている。 |
生活満足度
現在の生活全体への満足を尋ねます。
| 変数名 | 質問文 |
|---|---|
life_satisfaction_1 |
今の生活に満足している。 |
life_satisfaction_2 |
今の暮らしは、自分の望む生活に近い。 |
life_satisfaction_3 |
生活を全体として見れば、うまくいっていると感じる。 |
life_satisfaction_4 |
今の暮らしには、満足できることが多い。 |
life_satisfaction_5 |
今の生活には、不満が多い。 |
5 得点の計算方法
ここでは、計算の考え方を確認します。1,000人分を手作業で計算する必要はありません。実際の計算は、次の「AIへの指示例」でAIにRのコードを作ってもらい、そのコードをPositronで実行して行います。まずは、Rにどのような計算をさせるのかを理解しましょう。
社会的サポートについては、頼れる人がいると感じている程度を、5つの質問への回答から1つの点数にまとめます。ストレスと生活満足度も、それぞれの5つの回答をまとめます。このように、複数の質問への回答をまとめて求める点数を「尺度得点」と呼びます。
このデータでは、1人ずつ、尺度ごとに5つの回答の平均を求めます。ただし、そのまま平均を求める前に、5番の回答だけを計算用の点数に置き換える必要があります。社会的サポートを例に、その理由と計算方法を確認しましょう。
5番の回答を計算用の点数に置き換える
社会的サポートの1〜4番は、頼れる人がいるかを尋ねています。例えば、1番の「困ったときに相談に乗ってくれる人がいる」に5(とてもよくあてはまる)と答えた人は、頼れる人がいると感じています。
一方、5番は「悩みがあっても、頼れる人がいない」です。この質問に5と答えた人は、頼れる人がいないと感じています。同じ5という回答でも、1〜4番とは意味の向きが逆になっています。このような質問を「逆転項目」と呼びます。
そこで、5番の回答を次のように置き換えます。
| 元の回答 | 計算に使う点数 |
|---|---|
| 1 | 5 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
| 5 | 1 |
この置き換えは、6 - 元の回答 で計算できます。例えば、5番への回答が2(あまりあてはまらない)なら、計算に使う点数は 6 - 2 = 4 です。これで、5つとも点数が高いほど、頼れる人がいると感じている方向にそろいます。この処理を「逆転処理」と呼びます。
ストレスと生活満足度も、このデータでは5番だけが逆転項目です。support_5、stress_5、life_satisfaction_5 の3列に同じ処理を行い、1〜4番は元の回答をそのまま使います。
1人分の5つの点数から平均を求める
例えば、ある人の社会的サポートへの回答が、1番から順に4、3、5、4、2だったとします。5番の2を4に置き換えてから、5つの点数を足して5で割ります。
元の回答: 4、3、5、4、2
計算に使う点数: 4、3、5、4、4
社会的サポートの得点 = (4 + 3 + 5 + 4 + 4) / 5 = 4.0
この人の社会的サポートの尺度得点は4.0です。同じ計算を1,000人それぞれについて行います。ストレスと生活満足度についても、各尺度の1〜4番と、逆転処理後の5番を足して5で割ります。
計算した点数を新しい変数として追加する
先ほどの例では、1人分の回答から社会的サポートの得点4.0を求めました。分析でこの得点を使うには、誰の得点がいくつなのかを、元のデータの各行に対応させて記録しておく必要があります。
CSVに入っているのは元の回答だけなので、Rに読み込んだデータに、計算結果を入れる列を追加します。このように新しい列を作ることが「変数を追加する」という操作です。ここでは、次の2段階で変数を追加します。
- 逆転処理後の点数を入れる列を作る。 例えば、
support_5の回答から6 - support_5を計算し、その結果を新しい列support_5_rに入れます。元の回答を確認できるように、support_5は残します。ストレスと生活満足度も同様に、stress_5_rとlife_satisfaction_5_rを追加します。末尾の_rは、逆転処理後の点数であることを区別するために付けています。 - 5つの点数の平均を入れる列を作る。 社会的サポートなら、各行の
support_1〜support_4と、先ほど追加したsupport_5_rを足して5で割り、その結果を新しい列support_meanに入れます。先ほどの例の人なら、この列に4.0が入ります。ストレスと生活満足度も、それぞれ同じ方法で平均を求め、新しい列に入れます。
この操作で、逆転処理後の点数を入れる3列と、尺度得点を入れる3列の、合計6列を追加します。計算と列の追加はRのコードで行うので、手元のCSVを直接編集する必要はありません。
尺度得点を入れる列の名前と、その得点の読み方を下の表にまとめます。変数名の mean は平均という意味です。3つの尺度得点はいずれも1〜5の範囲で、小数になることもあります。
| 尺度 | 尺度得点の変数名 | 得点が高い人ほど |
|---|---|---|
| 社会的サポート | support_mean |
周囲の人に頼れると感じている |
| ストレス | stress_mean |
ストレスを強く感じている |
| 生活満足度 | life_satisfaction_mean |
生活に満足している |
6 AIへの指示例
ここまでに確認した計算方法を、AIに伝える文章にしてみましょう。AIには、その文章をもとにRのコードを作ってもらいます。計算は、生成されたコードを自分のPositronで実行して行います。
AIは、手元のCSVにどのような変数があり、どの回答を逆転させるかを知りません。そのため、「尺度得点を計算して」と頼むだけでは、意図した計算になるとは限りません。そこで、データの内容はコードブックを読んでもらい、行ってほしい計算は指示の文章で伝えます。
以下では、AIへの指示を4つに分け、何を伝えるのかを順に確認します。途中の例文を一つずつAIに送る必要はありません。最後に全文をまとめているので、説明を読んだ後、その全文をコピーして使ってください。
1. 目的とデータの内容を伝える
最初に、Rで何をしたいのかを伝え、データの説明を添えます。チャットAIには、手元のファイル名や保存場所を伝えるだけでは、その内容を読んでもらえません。準備で保存したコードブックを、次のどちらかの方法で渡してください。
- ファイルを添付する場合: AIの入力欄に
mock_survey_codebook.mdを添付します。 - 文章を貼り付ける場合: Positronで
mock_survey_codebook.mdを開き、「データの概要」と「データの内容」をコピーして、指示文の末尾に貼り付けます。「データの内容」は、変数一覧とその下の補足までを含めてください。
変数名や値の範囲は、この説明書から伝えられるので、自分ですべて書き直す必要はありません。AIに渡すのはデータの説明だけで、mock_survey.csv の添付や回答データの貼り付けはしません。CSVの読み込みと計算は、生成されたコードを自分のPositronで実行して行います。
添付または末尾に貼り付けたデータの説明をもとに、社会的サポート・ストレス・生活満足度の尺度得点を計算するRコードを作ってください。
手元のmock_survey.csvをreadr::read_csv()で読み込むコードから始めてください。実行は私がPositronで行います。2. 逆転処理の方法を伝える
次に、どの列を、どのように計算するかを指定します。「逆転処理して」だけで済ませず、対象が各尺度の5番であることと、6から元の回答を引くことを書きます。元の回答を残すため、計算結果を入れる新しい列の名前も伝えます。
各尺度の5番だけを、6から元の回答を引いて逆転処理してください。
元の回答の列は残し、計算結果をsupport_5_r、stress_5_r、life_satisfaction_5_rという新しい列に入れてください。3. 平均の求め方と新しい変数名を伝える
続いて、尺度得点の計算を頼みます。ここで求めたいのは、1人分の5つの点数の平均です。「1人ずつ」と書き、1〜4番と逆転処理後の5番を使うことを明示します。計算結果をどの列に入れるかも指定しましょう。
1人ずつ、各尺度の1〜4番と逆転処理後の5番を足して5で割り、平均を求めてください。
結果はそれぞれsupport_mean、stress_mean、life_satisfaction_meanという新しい列に入れてください。4. 計算を確認するための出力を頼む
コードを実行しても、計算結果を画面に表示しなければ、説明どおりに処理できたかを確認しにくくなります。そこで、データを読み込んだ直後と、尺度得点を計算した後に、確認用の値を表示するよう頼みます。
読み込み直後は、1,000行・25列で、地域AとBが各500人、欠損値が0個になっているかを確認します。尺度得点の計算後は、最小値と最大値が1〜5の範囲に収まっているかを確認します。ここで表示する平均値は、作成した尺度得点を1,000人分まとめて平均した値です。
読み込み直後に行数・列数、地域別人数、データ全体の欠損値の数を表示してください。
尺度得点を計算した後に、3つの尺度得点それぞれの最小値・最大値・平均値を表示してください。まとめた指示をAIに送る
以下は、ここまでの4つをまとめた指示です。最後に、この教材と同じ書き方のコードになるように、使う関数などを指定しています。dplyr::mutate() は列を追加する関数で、|> は処理を順につなぐ記号です。コードを処理ごとに分け、それぞれの説明も付けてもらいます。
下の枠内の文章全体をコピーして、利用するAIの入力欄に貼り付けてください。コードブックを添付するか、上で説明した箇所を指示文の末尾に貼り付け、指示とデータの説明を一緒に送信してください。
AIからコードが返ってきたら、説明を読み、上から順にPositronで実行してください。出力された値を、このページの「検証チェックリスト」と照らし合わせましょう。コードの内容や出力を確かめたいときは、次の「参照コードと出力」を開いて見比べてください。
CSVが見つからない場合は、セットアップの「CSVが見つからない」で、ファイル名とRの作業フォルダを確認してください。
7 参照コードと出力
8 検証チェックリスト
9 練習問題
- 3尺度の5番の元回答が1、3、5のとき、反転後はいくつになるか確認してください。
- 逆転処理をせずに5項目の平均を取ると、なぜ得点の意味が変わるのか、質問文を使って説明してください。
10 発展(任意):模擬データを作り直す
配布しているCSVは、Rのプログラムで作成した架空のデータです。そのプログラムを自分で実行して、同じデータを作り直すこともできます。データがどのように作られているかに関心がある人は、試してみてください。分析の練習には配布済みのCSVを使えるので、この操作は必須ではありません。
生成用のファイルを用意する
生成スクリプト(R)をダウンロードし、Positronで開いている授業用フォルダに保存してください。ファイル名は make_mock_survey.R です。スクリプトとは、実行するコードをまとめて保存したファイルです。
以下では、授業用フォルダを開いた状態で、Rのコンソールにコードを順に入力して実行します。CSVの保存には、このページの「ファイルとRの準備」で用意した readr を使います。
データを作って別のCSVに保存する
まず、ダウンロードしたスクリプトを読み込みます。source() は、指定したRファイルのコードを読み込んで実行する関数です。このスクリプトの場合は、データを作るための関数が使えるようになります。この時点ではCSVは作られません。
source("make_mock_survey.R")次に、スクリプトで定義された make_mock_survey() を実行します。これで1,000人分の模擬データが作られ、生成結果が generated に入ります。
generated <- make_mock_survey()生成結果には、配布用のデータと、作成時の確認に使う情報が含まれています。そのうち、配布用のデータを取り出す書き方が generated$survey です。これをCSVとして保存します。
配布済みの mock_survey.csv を残すため、保存するファイル名は mock_survey_regenerated.csv とします。同じ名前のファイルがすでにある場合は上書きされるので、残したい場合は実行前に別の名前に変更してください。
readr::write_csv(generated$survey, "mock_survey_regenerated.csv")実行後、Positronのファイル一覧に mock_survey_regenerated.csv があることを確認してください。ファイルを開くと、配布済みのCSVと同じ列名とデータが並んでいます。ここでも中身を見るだけにし、編集せずに閉じてください。
同じデータを作れる理由
このスクリプトでは、乱数を使って年齢や回答などの値を作っています。乱数を使う計算を再現できるようにする設定値を「シード」と呼びます。スクリプトではシードを 20260908 に固定しているので、コードや設定を変えずに実行すると、同じデータを作れます。
最終更新: 2026-10-02