【Task1】
Rパッケージdplyrを用いて、以下の設問の表示結果と同じになるように、
Rチャンクを挿入しコーディングせよ。
要約統計量を計算するときはsummarize()関数を使う。
【Task2】
Pythonパッケージpolarsを用いて、以下の設問の表示結果と同じになるように、
Pythonチャンクを挿入しコーディングせよ。
積集合は(論理式1) & (論理式2)のようにする(括弧が必要)。
例)カラムAで値が1,カラムBで値が2の積集合: (pl.col(“A”) == 1) &
(pl.col(“B”) == 2)
要約統計量を計算するときはselect(), group_by().agg()関数を使う。
データを次に示す。
d <- data.frame(
name = c("太郎", "花子", "三郎", "良子", "次郎", "桜子", "四郎", "松子", "愛子"),
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) )
library(DT)
datatable(d)
library(data.table)
fwrite(d, file = "highschool.csv", sep = ",")
import polars as pl
#df = pl.DataFrame(r.d)
df = pl.read_csv("highschool.csv")
データのカラム名を取得せよ。
【Rヒント】names
## [1] "name" "school" "teacher" "gender" "math" "reading"
【Pythonヒント】names
## ['name', 'school', 'teacher', 'gender', 'math', 'reading']
学生(name)と数学(math)のデータを取得せよ。
【Rヒント】select
## name math
## 1 太郎 4
## 2 花子 3
## 3 三郎 2
## 4 良子 4
## 5 次郎 3
## 6 桜子 4
## 7 四郎 5
## 8 松子 4
## 9 愛子 5
【Pythonヒント】select
name | math |
---|---|
str | i64 |
"太郎" | 4 |
"花子" | 3 |
"三郎" | 2 |
"良子" | 4 |
"次郎" | 3 |
"桜子" | 4 |
"四郎" | 5 |
"松子" | 4 |
"愛子" | 5 |
性別(gender)以外のデータを取得せよ。
【Rヒント】select
## name school teacher math reading
## 1 太郎 南 竹田 4 1
## 2 花子 南 竹田 3 5
## 3 三郎 南 竹田 2 2
## 4 良子 南 竹田 4 4
## 5 次郎 南 佐藤 3 5
## 6 桜子 東 佐藤 4 4
## 7 四郎 東 佐藤 5 1
## 8 松子 東 鈴木 4 5
## 9 愛子 東 鈴木 5 4
【Pythonヒント】drop
name | school | teacher | math | reading |
---|---|---|---|---|
str | str | str | i64 | i64 |
"太郎" | "南" | "竹田" | 4 | 1 |
"花子" | "南" | "竹田" | 3 | 5 |
"三郎" | "南" | "竹田" | 2 | 2 |
"良子" | "南" | "竹田" | 4 | 4 |
"次郎" | "南" | "佐藤" | 3 | 5 |
"桜子" | "東" | "佐藤" | 4 | 4 |
"四郎" | "東" | "佐藤" | 5 | 1 |
"松子" | "東" | "鈴木" | 4 | 5 |
"愛子" | "東" | "鈴木" | 5 | 4 |
3~6番目のレコードを取得せよ。
【Rヒント】slice
## name school teacher gender math reading
## 1 三郎 南 竹田 男 2 2
## 2 良子 南 竹田 女 4 4
## 3 次郎 南 佐藤 男 3 5
## 4 桜子 東 佐藤 女 4 4
【Pythonヒント】[:]
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 |
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
3, 5, 9番目のレコードを取得せよ。
【Rヒント】slice
## name school teacher gender math reading
## 1 三郎 南 竹田 男 2 2
## 2 次郎 南 佐藤 男 3 5
## 3 愛子 東 鈴木 女 5 4
【Pythonヒント】[[, , ]]
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 |
名前がアルファベット順になるようにレコードをソートせよ。
【Rヒント】arrange
## name school teacher gender math reading
## 1 三郎 南 竹田 男 2 2
## 2 四郎 東 佐藤 男 5 1
## 3 太郎 南 竹田 男 4 1
## 4 愛子 東 鈴木 女 5 4
## 5 松子 東 鈴木 女 4 5
## 6 桜子 東 佐藤 女 4 4
## 7 次郎 南 佐藤 男 3 5
## 8 良子 南 竹田 女 4 4
## 9 花子 南 竹田 女 3 5
【Pythonヒント】sort
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 |
"松子" | "東" | "鈴木" | "女" | 4 | 5 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"花子" | "南" | "竹田" | "女" | 3 | 5 |
数学の点数を高い方から低い順(降順: descending order)になるようにソートせよ。
【Rヒント】arrange, desc
## name school teacher gender math reading
## 1 四郎 東 佐藤 男 5 1
## 2 愛子 東 鈴木 女 5 4
## 3 太郎 南 竹田 男 4 1
## 4 良子 南 竹田 女 4 4
## 5 桜子 東 佐藤 女 4 4
## 6 松子 東 鈴木 女 4 5
## 7 花子 南 竹田 女 3 5
## 8 次郎 南 佐藤 男 3 5
## 9 三郎 南 竹田 男 2 2
【Pythonヒント】sort, descending
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 |
"松子" | "東" | "鈴木" | "女" | 4 | 5 |
"花子" | "南" | "竹田" | "女" | 3 | 5 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
数学、国語の点数を高い方から低い順(降順: descending order)になるようにソートせよ。 なお、数学の順位を最優先とする。
【Rヒント】arrange, desc
## name school teacher gender math reading
## 1 愛子 東 鈴木 女 5 4
## 2 四郎 東 佐藤 男 5 1
## 3 松子 東 鈴木 女 4 5
## 4 良子 南 竹田 女 4 4
## 5 桜子 東 佐藤 女 4 4
## 6 太郎 南 竹田 男 4 1
## 7 花子 南 竹田 女 3 5
## 8 次郎 南 佐藤 男 3 5
## 9 三郎 南 竹田 男 2 2
【Pythonヒント】sort, descending, [, ]
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 |
"松子" | "東" | "鈴木" | "女" | 4 | 5 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 |
"花子" | "南" | "竹田" | "女" | 3 | 5 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
名前(name)と国語(reading)の列のみを抽出せよ。
【Rヒント】select
## name reading
## 1 太郎 1
## 2 花子 5
## 3 三郎 2
## 4 良子 4
## 5 次郎 5
## 6 桜子 4
## 7 四郎 1
## 8 松子 5
## 9 愛子 4
【Pythonヒント】select, [, ]
name | reading |
---|---|
str | i64 |
"太郎" | 1 |
"花子" | 5 |
"三郎" | 2 |
"良子" | 4 |
"次郎" | 5 |
"桜子" | 4 |
"四郎" | 1 |
"松子" | 5 |
"愛子" | 4 |
数学(math)の平均値を計算せよ。
【Rヒント】mean
## [1] 3.777778
【Pythonヒント】mean
## 3.7777777777777777
先生(teacher)ごとに数学(math)の平均値を計算せよ。
【Rヒント】group_by, summarize, mean
## # A tibble: 3 × 2
## teacher math_mean
## <chr> <dbl>
## 1 佐藤 4
## 2 竹田 3.25
## 3 鈴木 4.5
【Pythonヒント】group_by, agg, mean, alias
teacher | math_mean |
---|---|
str | f64 |
"鈴木" | 4.5 |
"竹田" | 3.25 |
"佐藤" | 4.0 |
先生(teacher)ごとの学生数を計算せよ。
【Rヒント】group_by, summarize, n
## # A tibble: 3 × 2
## teacher n
## <chr> <int>
## 1 佐藤 3
## 2 竹田 4
## 3 鈴木 2
【Pyhonヒント】group_by, agg, len
teacher | len |
---|---|
str | u32 |
"佐藤" | 3 |
"竹田" | 4 |
"鈴木" | 2 |
カウント関数を使用して, 先生(teacher)ごとの学生数を計算せよ。
【Rヒント】count
## teacher n
## 1 佐藤 3
## 2 竹田 4
## 3 鈴木 2
【Pythonヒント】value_counts
teacher | count |
---|---|
str | u32 |
"佐藤" | 3 |
"竹田" | 4 |
"鈴木" | 2 |
count関数を使用して, 先生(teacher)ごとの男女別学生数を計算せよ。
【Rヒント】count
## teacher gender n
## 1 佐藤 女 1
## 2 佐藤 男 2
## 3 竹田 女 2
## 4 竹田 男 2
## 5 鈴木 女 2
【Pythonヒント】group_by, agg, len
teacher | gender | len |
---|---|---|
str | str | u32 |
"佐藤" | "女" | 1 |
"竹田" | "男" | 2 |
"竹田" | "女" | 2 |
"佐藤" | "男" | 2 |
"鈴木" | "女" | 2 |
女子の数学(math)と国語(reading)の点数を取得せよ。
【Rヒント】filter, select
## name gender math reading
## 1 花子 女 3 5
## 2 良子 女 4 4
## 3 桜子 女 4 4
## 4 松子 女 4 5
## 5 愛子 女 5 4
【Pythonヒント】 filter, col, select
name | gender | math | reading |
---|---|---|---|
str | str | i64 | i64 |
"花子" | "女" | 3 | 5 |
"良子" | "女" | 4 | 4 |
"桜子" | "女" | 4 | 4 |
"松子" | "女" | 4 | 5 |
"愛子" | "女" | 5 | 4 |
南高校の男子の国語(reading)の点数を取得せよ。
【Rヒント】filter
## name school teacher gender math reading
## 1 太郎 南 竹田 男 4 1
## 2 三郎 南 竹田 男 2 2
## 3 次郎 南 佐藤 男 3 5
【Pythonヒント】filter, col, () & ()
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
学生数が3名以上の先生(teacher)のデータを取得せよ。
【Rヒント】group_by, filter, n():行数取得関数
## # A tibble: 7 × 6
## # Groups: teacher [2]
## name school teacher gender math reading
## <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 太郎 南 竹田 男 4 1
## 2 花子 南 竹田 女 3 5
## 3 三郎 南 竹田 男 2 2
## 4 良子 南 竹田 女 4 4
## 5 次郎 南 佐藤 男 3 5
## 6 桜子 東 佐藤 女 4 4
## 7 四郎 東 佐藤 男 5 1
【Pythonヒント】(難)2文で実行。group_by, agg, filter, col, select, is_in
name | school | teacher | gender | math | reading |
---|---|---|---|---|---|
str | str | str | str | i64 | i64 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 |
"花子" | "南" | "竹田" | "女" | 3 | 5 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 |
"良子" | "南" | "竹田" | "女" | 4 | 4 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 |
数学(math)と国語(reading)の合計点(total)を作成せよ。
【Rヒント】mutate
## name school teacher gender math reading total
## 1 太郎 南 竹田 男 4 1 5
## 2 花子 南 竹田 女 3 5 8
## 3 三郎 南 竹田 男 2 2 4
## 4 良子 南 竹田 女 4 4 8
## 5 次郎 南 佐藤 男 3 5 8
## 6 桜子 東 佐藤 女 4 4 8
## 7 四郎 東 佐藤 男 5 1 6
## 8 松子 東 鈴木 女 4 5 9
## 9 愛子 東 鈴木 女 5 4 9
【Pythonヒント】with_columns, col, alias
name | school | teacher | gender | math | reading | total |
---|---|---|---|---|---|---|
str | str | str | str | i64 | i64 | i64 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 | 5 |
"花子" | "南" | "竹田" | "女" | 3 | 5 | 8 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 | 4 |
"良子" | "南" | "竹田" | "女" | 4 | 4 | 8 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 | 8 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 | 8 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 | 6 |
"松子" | "東" | "鈴木" | "女" | 4 | 5 | 9 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 | 9 |
数学(math)を100点満点に換算(新カラム名:math100)せよ。
【Rヒント】mutate
## name school teacher gender math reading math100
## 1 太郎 南 竹田 男 4 1 80
## 2 花子 南 竹田 女 3 5 60
## 3 三郎 南 竹田 男 2 2 40
## 4 良子 南 竹田 女 4 4 80
## 5 次郎 南 佐藤 男 3 5 60
## 6 桜子 東 佐藤 女 4 4 80
## 7 四郎 東 佐藤 男 5 1 100
## 8 松子 東 鈴木 女 4 5 80
## 9 愛子 東 鈴木 女 5 4 100
【Pythonヒント】with_columns, col, alias
name | school | teacher | gender | math | reading | math100 |
---|---|---|---|---|---|---|
str | str | str | str | i64 | i64 | i64 |
"太郎" | "南" | "竹田" | "男" | 4 | 1 | 80 |
"花子" | "南" | "竹田" | "女" | 3 | 5 | 60 |
"三郎" | "南" | "竹田" | "男" | 2 | 2 | 40 |
"良子" | "南" | "竹田" | "女" | 4 | 4 | 80 |
"次郎" | "南" | "佐藤" | "男" | 3 | 5 | 60 |
"桜子" | "東" | "佐藤" | "女" | 4 | 4 | 80 |
"四郎" | "東" | "佐藤" | "男" | 5 | 1 | 100 |
"松子" | "東" | "鈴木" | "女" | 4 | 5 | 80 |
"愛子" | "東" | "鈴木" | "女" | 5 | 4 | 100 |
映画「Star Wars」の登場人物(人・ロボット)のデータを用いて,設問に答えよ。
starwars |> select(-films) |> as.data.frame() -> d
datatable(d)
fwrite(d, file = "starwars.csv", sep = ",")
人間(Human)は何人いるか示せ。
【Rヒント】filter, count
## [1] "name" "height" "mass" "hair_color" "skin_color"
## [6] "eye_color" "birth_year" "sex" "gender" "homeworld"
## [11] "species" "vehicles" "starships"
## n
## 1 35
【Pythonヒント】filter, col, select, count
## ['name', 'height', 'mass', 'hair_color', 'skin_color', 'eye_color', 'birth_year', 'sex', 'gender', 'homeworld', 'species', 'vehicles', 'starships']
species |
---|
u32 |
35 |
人間の男女は,それぞれ何人いるか示せ。
gendar:性別,feminine:女性的,masculine:男性的
【Rヒント】filter, group_by, count
## # A tibble: 2 × 2
## # Groups: gender [2]
## gender n
## <chr> <int>
## 1 feminine 9
## 2 masculine 26
【Pythonヒント】filter, col, group_by, len
gender | len |
---|---|
str | u32 |
"feminine" | 9 |
"masculine" | 26 |
どの惑星(homeworld)出身が多いか,1位と2位を示せ。
【Rヒント】count, slice_max
## homeworld n
## 1 Naboo 11
## 2 Tatooine 10
## 3 <NA> 10
【Pythonヒント】group_by, len, top_k
homeworld | len |
---|---|
str | u32 |
"Naboo" | 11 |
"Tatooine" | 10 |
null | 10 |
惑星(homeworld)Nabooから来た,目(eye_color)がオレンジ色(orange)をした 宇宙人の身長(height)の平均を示せ。
【Rヒント】filter, summarize, mean
## mean(height)
## 1 208.6667
【Pythonヒント】filter, () & (), select, mean
height |
---|
f64 |
208.666667 |
ロボット(Droid)全体について,身長の最頻値,平均値,標準偏差を示せ。
【Rヒント】filter, summarize, median, mean, sd, na.rm = T(NAを除くオプション)
## meadin mean sd
## 1 97 131.2 49.14977
【Pythonヒント】filter, col, select([, , ]), median, mean, std, alias
median | mean | std |
---|---|---|
f64 | f64 | f64 |
97.0 | 131.2 | 49.149771 |
数値データのカラムだけを抽出し,年齢(birth_year)上位5までのレコードを表示せよ。
【ヒント】where(is.numeric), slice_max
## height mass birth_year
## 1 66 17 896
## 2 175 1358 600
## 3 228 112 200
## 4 167 75 112
## 5 193 80 102
【Pythonヒント】select, col, drop_nulls, top_k, nulls_last import polars.selectors as cs, numeric
height | mass | birth_year |
---|---|---|
i64 | f64 | f64 |
66 | 17.0 | 896.0 |
175 | 1358.0 | 600.0 |
228 | 112.0 | 200.0 |
167 | 75.0 | 112.0 |
193 | 80.0 | 102.0 |
数値データのカラムだけを抽出し,NA(not
available)を含むレコードを削除し, 相関表(相関行列)を求めよ。
【ヒント】where(is.numeric), na.omit, cor
## height mass birth_year
## height 1.0000000 0.1016533 -0.4135510
## mass 0.1016533 1.0000000 0.4781391
## birth_year -0.4135510 0.4781391 1.0000000
【Pythonヒント】select, col, drop_nulls, top_k import polars.selectors as cs
height | mass | birth_year |
---|---|---|
f64 | f64 | f64 |
1.0 | 0.101653 | -0.413551 |
0.101653 | 1.0 | 0.478139 |
-0.413551 | 0.478139 | 1.0 |
文字列データのカラムだけを抽出し,名前をアルファベット順に並べ,
先頭の4名のレコードを表示せよ。
【ヒント】select, where(is.character), arrange, head
## name hair_color skin_color eye_color sex gender homeworld
## 1 Ackbar none brown mottle orange male masculine Mon Cala
## 2 Adi Gallia none dark blue female feminine Coruscant
## 3 Anakin Skywalker blond fair blue male masculine Tatooine
## 4 Arvel Crynyd brown fair brown male masculine <NA>
## species
## 1 Mon Calamari
## 2 Tholothian
## 3 Human
## 4 Human
【Pythonヒント】select, sort, head import polars.selectors as cs string
name | hair_color | skin_color | eye_color | sex | gender | homeworld | species | vehicles | starships |
---|---|---|---|---|---|---|---|---|---|
str | str | str | str | str | str | str | str | str | str |
"Ackbar" | "none" | "brown mottle" | "orange" | "male" | "masculine" | "Mon Cala" | "Mon Calamari" | null | null |
"Adi Gallia" | "none" | "dark" | "blue" | "female" | "feminine" | "Coruscant" | "Tholothian" | null | null |
"Anakin Skywalk… | "blond" | "fair" | "blue" | "male" | "masculine" | "Tatooine" | "Human" | "Zephyr-G swoop… | "Naboo fighter|… |
"Arvel Crynyd" | "brown" | "fair" | "brown" | "male" | "masculine" | null | "Human" | null | "A-wing" |