Rによるコーディング

Rパッケージdplyrを用いて、以下の設問の表示結果と同じになるように、 Rチャンクを挿入しコーディングせよ。

要約統計量を計算するときはsummarize()関数を使う。

if (!require(data.table)) install.packages("data.table")
if (!require(dplyr))      install.packages("dplyr")

Pythonによるコーディング

Pythonパッケージpolarsを用いて、以下の設問の表示結果と同じになるように、 Pythonチャンクを挿入しコーディングせよ。

積集合は(論理式1) & (論理式2)のようにする(括弧が必要)。
例)カラムAで値が1,カラムBで値が2の積集合: (pl.col(“A”) == 1) & (pl.col(“B”) == 2)

要約統計量を計算するときはselect(), group_by().agg()関数を使う。

import pandas as pd
import polars as pl

1 設問

高校のデータを用いて,設問に答えよ。

d <- data.frame(
  name = c("Taro", "Hanako", "Saburo", 
           "Yoshiko", "Jiro", "Sakurako",
           "Shiro", "Matsuko", "Aiko"),
  school = c("南", "南", "南", "南", "南", "東", "東", "東", "東"),
  teacher = c("竹田", "竹田", "竹田", "竹田",  "佐藤", "佐藤", "佐藤", "鈴木", "鈴木"),
  gender = c("男", "女", "男", "女", "男", "女", "男", "女", "女"),
  math = c(4, 3, 2, 4, 3, 4, 5, 4, 5),
  reading = c(1, 5, 2, 4, 5, 4, 1, 5, 4) )

d
fwrite(d, file = "highschool.csv", sep = ",")
df = pd.read_csv("highschool.csv")
#df = pl.DataFrame(r.d)
df = pl.read_csv("highschool.csv")

1.1 問題

データのカラム名を取得せよ。

【Rヒント】names

## [1] "name"    "school"  "teacher" "gender"  "math"    "reading"

【Pythonヒント】names

## ['name', 'school', 'teacher', 'gender', 'math', 'reading']

1.2 問題

先生(teacher)と学生(name)とのデータを取得せよ。

shape: (9, 2)
namemath
stri64
"Taro"4
"Hanako"3
"Saburo"2
"Yoshiko"4
"Jiro"3
"Sakurako"4
"Shiro"5
"Matsuko"4
"Aiko"5

1.3 問題

学校(school)以外のデータを取得せよ。

shape: (9, 5)
nameteachergendermathreading
strstrstri64i64
"Taro""竹田""男"41
"Hanako""竹田""女"35
"Saburo""竹田""男"22
"Yoshiko""竹田""女"44
"Jiro""佐藤""男"35
"Sakurako""佐藤""女"44
"Shiro""佐藤""男"51
"Matsuko""鈴木""女"45
"Aiko""鈴木""女"54

1.4 問題

1~3番目のレコードを取得せよ。

shape: (3, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Taro""南""竹田""男"41
"Hanako""南""竹田""女"35
"Saburo""南""竹田""男"22

1.5 問題

2, 4, 6番目のレコードを取得せよ。

shape: (3, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Hanako""南""竹田""女"35
"Yoshiko""南""竹田""女"44
"Sakurako""東""佐藤""女"44

1.6 問題

名前がアルファベット順になるようにレコードをソートせよ。

shape: (9, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Aiko""東""鈴木""女"54
"Hanako""南""竹田""女"35
"Jiro""南""佐藤""男"35
"Matsuko""東""鈴木""女"45
"Saburo""南""竹田""男"22
"Sakurako""東""佐藤""女"44
"Shiro""東""佐藤""男"51
"Taro""南""竹田""男"41
"Yoshiko""南""竹田""女"44

1.7 問題

国語の点数を高い方から低い順(降順: descending order)になるようにソートせよ。

shape: (9, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Hanako""南""竹田""女"35
"Jiro""南""佐藤""男"35
"Matsuko""東""鈴木""女"45
"Yoshiko""南""竹田""女"44
"Sakurako""東""佐藤""女"44
"Aiko""東""鈴木""女"54
"Saburo""南""竹田""男"22
"Taro""南""竹田""男"41
"Shiro""東""佐藤""男"51

1.8 問題

数学、国語の点数を高い方から低い順(降順: descending order)になるようにソートせよ。 なお、国語の順位を最優先とする。

shape: (9, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Matsuko""東""鈴木""女"45
"Hanako""南""竹田""女"35
"Jiro""南""佐藤""男"35
"Aiko""東""鈴木""女"54
"Yoshiko""南""竹田""女"44
"Sakurako""東""佐藤""女"44
"Saburo""南""竹田""男"22
"Shiro""東""佐藤""男"51
"Taro""南""竹田""男"41

1.9 問題

名前(name)と数学(math)の列のみを抽出せよ。

shape: (9, 2)
namemath
stri64
"Taro"4
"Hanako"3
"Saburo"2
"Yoshiko"4
"Jiro"3
"Sakurako"4
"Shiro"5
"Matsuko"4
"Aiko"5

1.10 問題

国語(reading)の平均値を計算せよ。

## [1] 3.444444
## 3.4444444444444446

1.11 問題

先生(teacher)ごとに国語(reading)の平均値を計算せよ。 reading_mean = mean(reading)

shape: (3, 2)
teacherreading_mean
strf64
"竹田"3.0
"鈴木"4.5
"佐藤"3.333333

1.12 問題

学校(school)ごとの学生数を計算せよ。

shape: (2, 2)
schooln
stru32
"東"4
"南"5

1.13 問題

カウント関数を使用して, 性別(gender)ごとの学生数を計算せよ。

shape: (2, 2)
gendercount
stru32
"女"5
"男"4

1.14 問題

count関数を使用して, 男女(gender)ごとの先生別学生数を計算せよ。

【Rヒント】count

【Pythonヒント】group_by, agg, len, (sort)

shape: (5, 3)
genderteacherlen
strstru32
"女""竹田"2
"女""佐藤"1
"女""鈴木"2
"男""佐藤"2
"男""竹田"2

1.15 問題

男子の数学(math)と国語(reading)の点数を取得せよ。

【Rヒント】filter, select

【Pythonヒント】 filter, col, select

shape: (4, 4)
namegendermathreading
strstri64i64
"Taro""男"41
"Saburo""男"22
"Jiro""男"35
"Shiro""男"51

1.16 問題

東高校の女子の数学(math)の点数を取得せよ。

【Rヒント】filter

【Pythonヒント】filter, col, () & ()

shape: (3, 2)
namemath
stri64
"Sakurako"4
"Matsuko"4
"Aiko"5

1.17 問題

学生数が4名以上の先生(teacher)のデータを取得せよ。

【Rヒント】group_by, filter, n():行数取得関数

【Pythonヒント】(難)2文で実行。group_by, agg, filter, col, select, is_in

shape: (4, 6)
nameschoolteachergendermathreading
strstrstrstri64i64
"Taro""南""竹田""男"41
"Hanako""南""竹田""女"35
"Saburo""南""竹田""男"22
"Yoshiko""南""竹田""女"44

1.18 問題

数学(math)と国語(reading)の平均点(mean)を作成せよ。

【Rヒント】mutate

【Pythonヒント】with_columns, col, alias

shape: (9, 7)
nameschoolteachergendermathreadingmean
strstrstrstri64i64f64
"Taro""南""竹田""男"412.5
"Hanako""南""竹田""女"354.0
"Saburo""南""竹田""男"222.0
"Yoshiko""南""竹田""女"444.0
"Jiro""南""佐藤""男"354.0
"Sakurako""東""佐藤""女"444.0
"Shiro""東""佐藤""男"513.0
"Matsuko""東""鈴木""女"454.5
"Aiko""東""鈴木""女"544.5

1.19 問題

国語(reading)を100点満点に換算(新カラム名:reading100)せよ。

【Rヒント】mutate

【Pythonヒント】with_columns, col, alias

shape: (9, 7)
nameschoolteachergendermathreadingreading100
strstrstrstri64i64i64
"Taro""南""竹田""男"4120
"Hanako""南""竹田""女"35100
"Saburo""南""竹田""男"2240
"Yoshiko""南""竹田""女"4480
"Jiro""南""佐藤""男"35100
"Sakurako""東""佐藤""女"4480
"Shiro""東""佐藤""男"5120
"Matsuko""東""鈴木""女"45100
"Aiko""東""鈴木""女"5480