{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 学業成績の分析"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
" in English or the language of your choice.\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n",
"Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 警告メッセージを非表示\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"授業の成績(優秀良可不可)とGP(Grade Point)を使った成績の分析を行う。成績表のコピーは神戸大学の「うりぼーネット」を用いる例を考えるが、Web上で成績表が表示されるのであればコードを少し修正するだけで分析が行えるであろう。"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## データの読み込み"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### 学生"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"「うりぼー」→ 成績修得情報 → 成績表を選択しコピー"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"#ーーーーー dfに成績表を割り当てる ーーーーー\n",
"\n",
"# df = pd.read_clipboard()\n",
"# df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"#ーーーーー csvに保存 ーーーーー\n",
"\n",
"# df.to_csv('成績表20200708.csv')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"#ーーーーー 保存先のフォルダの確認 ーーーーー\n",
"\n",
"# %pwd"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### 例"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"例のファイルを使う場合。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"hidden": true,
"tags": [
"output_scroll"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" No. | \n",
" 区分 | \n",
" 科目大区分 | \n",
" 科目中区分 | \n",
" 科目ナンバー | \n",
" 科目 | \n",
" 単位数 | \n",
" 修得年度 | \n",
" 修得学期 | \n",
" 評語 | \n",
" 科目GP | \n",
" 合否 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 1 | \n",
" 2020 | \n",
" 前期 | \n",
" 合格 | \n",
" - | \n",
" 合 | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 1 | \n",
" 2020 | \n",
" 前期 | \n",
" 合格 | \n",
" - | \n",
" 合 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 1 | \n",
" 2020 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学A | \n",
" 1 | \n",
" 2020 | \n",
" 後期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学B | \n",
" 1 | \n",
" 2019 | \n",
" 後期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 5 | \n",
" 6 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 1 | \n",
" 2019 | \n",
" 後期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 6 | \n",
" 7 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 7 | \n",
" 8 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" X学 | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 8 | \n",
" 9 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" X学A | \n",
" 1 | \n",
" 2018 | \n",
" 後期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 9 | \n",
" 10 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 後期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 10 | \n",
" 11 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 1 | \n",
" 2018 | \n",
" 後期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 11 | \n",
" 12 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 12 | \n",
" 13 | \n",
" 高度教養科目 | \n",
" 高度教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" X学 | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 13 | \n",
" 14 | \n",
" 高度教養科目 | \n",
" 高度教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" X学 | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 14 | \n",
" 15 | \n",
" 高度教養科目 | \n",
" 高度教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" X学 | \n",
" 1 | \n",
" 2020 | \n",
" 前期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 15 | \n",
" 16 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 2 | \n",
" 2020 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 16 | \n",
" 17 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学A | \n",
" 1 | \n",
" 2020 | \n",
" 後期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 17 | \n",
" 18 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学B | \n",
" 4 | \n",
" 2020 | \n",
" 後期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 18 | \n",
" 19 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 1 | \n",
" 2019 | \n",
" 後期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 19 | \n",
" 20 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 20 | \n",
" 21 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" X学 | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 21 | \n",
" 22 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" X学A | \n",
" 2 | \n",
" 2019 | \n",
" 後期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 22 | \n",
" 23 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" X学B | \n",
" 2 | \n",
" 2018 | \n",
" 後期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 23 | \n",
" 24 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 2 | \n",
" 2018 | \n",
" 後期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 24 | \n",
" 25 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 2 | \n",
" 2018 | \n",
" 後期 | \n",
" 良 | \n",
" 3 | \n",
" 合 | \n",
"
\n",
" \n",
" 25 | \n",
" 26 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 取消 | \n",
" - | \n",
" NaN | \n",
"
\n",
" \n",
" 26 | \n",
" 27 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 不可 | \n",
" 0 | \n",
" NaN | \n",
"
\n",
" \n",
" 27 | \n",
" 28 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 不可 | \n",
" * | \n",
" 否 | \n",
"
\n",
" \n",
" 28 | \n",
" 29 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 取消 | \n",
" - | \n",
" NaN | \n",
"
\n",
" \n",
" 29 | \n",
" 30 | \n",
" 専門科目 | \n",
" 専門科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2018 | \n",
" 前期 | \n",
" 認定 | \n",
" - | \n",
" 合 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" No. 区分 科目大区分 科目中区分 科目ナンバー 科目 単位数 修得年度 修得学期 評語 科目GP 合否\n",
"0 1 全学共通授業科目 基礎教養科目 NaN U1AA100 XX学 1 2020 前期 合格 - 合\n",
"1 2 全学共通授業科目 基礎教養科目 NaN U1AA100 XX学 1 2020 前期 合格 - 合\n",
"2 3 全学共通授業科目 基礎教養科目 NaN U1AA100 XX学 1 2020 前期 可 2 合\n",
"3 4 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学A 1 2020 後期 秀 4.3 合\n",
"4 5 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学B 1 2019 後期 可 2 合\n",
"5 6 全学共通授業科目 基礎教養科目 NaN U1AD100 X学A 1 2019 後期 優 4 合\n",
"6 7 全学共通授業科目 基礎教養科目 NaN U1AD100 X学B 1 2019 前期 秀 4.3 合\n",
"7 8 全学共通授業科目 基礎教養科目 NaN U1AA100 X学 1 2018 前期 可 2 合\n",
"8 9 全学共通授業科目 基礎教養科目 NaN U1AB100 X学A 1 2018 後期 秀 4.3 合\n",
"9 10 全学共通授業科目 基礎教養科目 NaN U1AB100 X学B 1 2018 後期 可 2 合\n",
"10 11 全学共通授業科目 基礎教養科目 NaN U1AD100 X学A 1 2018 後期 優 4 合\n",
"11 12 全学共通授業科目 基礎教養科目 NaN U1AD100 X学B 1 2019 前期 秀 4.3 合\n",
"12 13 高度教養科目 高度教養科目 NaN U1AA100 X学 1 2019 前期 可 2 合\n",
"13 14 高度教養科目 高度教養科目 NaN U1AA100 X学 1 2019 前期 可 2 合\n",
"14 15 高度教養科目 高度教養科目 NaN U1AA100 X学 1 2020 前期 優 4 合\n",
"15 16 専門科目 専門科目 NaN U1AA100 XX学 2 2020 前期 可 2 合\n",
"16 17 専門科目 専門科目 NaN U1AB100 XX学A 1 2020 後期 秀 4.3 合\n",
"17 18 専門科目 専門科目 NaN U1AB100 XX学B 4 2020 後期 可 2 合\n",
"18 19 専門科目 専門科目 NaN U1AD100 X学A 1 2019 後期 優 4 合\n",
"19 20 専門科目 専門科目 NaN U1AD100 X学B 1 2019 前期 秀 4.3 合\n",
"20 21 専門科目 専門科目 NaN U1AA100 X学 1 2019 前期 可 2 合\n",
"21 22 専門科目 専門科目 NaN U1AB100 X学A 2 2019 後期 秀 4.3 合\n",
"22 23 専門科目 専門科目 NaN U1AB100 X学B 2 2018 後期 可 2 合\n",
"23 24 専門科目 専門科目 NaN U1AD100 X学A 2 2018 後期 優 4 合\n",
"24 25 専門科目 専門科目 NaN U1AD100 X学A 2 2018 後期 良 3 合\n",
"25 26 専門科目 専門科目 NaN U1AD100 X学B 1 2018 前期 取消 - NaN\n",
"26 27 専門科目 専門科目 NaN U1AD100 X学B 1 2018 前期 不可 0 NaN\n",
"27 28 専門科目 専門科目 NaN U1AD100 X学B 1 2018 前期 不可 * 否\n",
"28 29 専門科目 専門科目 NaN U1AD100 X学B 1 2018 前期 取消 - NaN\n",
"29 30 専門科目 専門科目 NaN U1AD100 X学B 1 2018 前期 認定 - 合"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('https://raw.githubusercontent.com/Haruyama-KobeU/Py4Basics/master/data/data_for_mark.csv')\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## 列の内容の確認"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"ステップ1:列のラベルの表示"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['No.', '区分', '科目大区分', '科目中区分', '科目ナンバー', '科目', '単位数', '修得年度', '修得学期',\n",
" '評語', '科目GP', '合否'],\n",
" dtype='object')"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"col = df.columns\n",
"col"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No.\n",
"区分\n",
"科目大区分\n",
"科目中区分\n",
"科目ナンバー\n",
"科目\n",
"単位数\n",
"修得年度\n",
"修得学期\n",
"評語\n",
"科目GP\n",
"合否\n"
]
}
],
"source": [
"for c in col:\n",
" print(c)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"ステップ2:それぞれの列の要素の種類を表示方法"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"array(['全学共通授業科目', '高度教養科目', '専門科目'], dtype=object)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['区分'].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"スッテプ3:スッテプ1と2を同時に"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"区分 ['全学共通授業科目' '高度教養科目' '専門科目']\n",
"科目大区分 ['基礎教養科目' '高度教養科目' '専門科目']\n",
"科目中区分 [nan]\n",
"科目ナンバー ['U1AA100' 'U1AB100' 'U1AD100']\n",
"科目 ['XX学' 'XX学A' 'XX学B' 'X学A' 'X学B' 'X学']\n",
"単位数 [1 2 4]\n",
"修得年度 [2020 2019 2018]\n",
"修得学期 ['前期' '後期']\n",
"評語 ['合格' '可' '秀' '優' '良' '取消' '不可' '認定']\n",
"科目GP ['-' '2' '4.3' '4' '3' '0' '*']\n",
"合否 ['合' nan '否']\n"
]
}
],
"source": [
"for c in col[1:]: # Noの列を除外\n",
" x = df[c].unique()\n",
" print(c, x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## `DataFrame`の作成"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"cond1 = ( df['区分']=='全学共通授業科目' )\n",
"cond2 = ( df['区分']=='高度教養科目' )\n",
"cond1or2 = ( cond1 | cond2)\n",
"cond3 = ( df['区分']=='専門科目' )\n",
"\n",
"df_other = df.loc[cond1or2,:]\n",
"df_econ = df.loc[cond3,:]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"(30, 15, 15)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df),len(df_other),len(df_econ)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"全角文字を使わない方法"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"array(['全学共通授業科目', '高度教養科目', '専門科目'], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"kubun = df.loc[:,col[1]]\n",
"\n",
"kubun_arr = kubun.unique()\n",
"kubun_arr"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"cond1 = ( kubun==kubun_arr[0] )\n",
"cond2 = ( kubun==kubun_arr[1] )\n",
"cond1or2 = ( cond1 | cond2)\n",
"cond3 = ( kubun==kubun_arr[2] )\n",
"\n",
"df_other = df.loc[cond1or2,:]\n",
"df_econ = df.loc[cond3,:]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"(30, 15, 15)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df),len(df_other),len(df_econ)"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## 全科目"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### `f-string`"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`f-string`を使うと文字列の`{}`の中の変数を評価して表示することが可能となる。"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"私は春山ゼミに所属しています。\n"
]
}
],
"source": [
"x='春山'\n",
"print(f'私は{x}ゼミに所属しています。')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"合計は6です。\n"
]
}
],
"source": [
"l = [1,2,3]\n",
"print(f'合計は{sum(l)}です。')"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"### 優・秀・良・可・不可などの数"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"#### 簡単な方法"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`value_counts()`を使うと簡単になる。"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 10\n",
"秀 7\n",
"優 5\n",
"合格 2\n",
"取消 2\n",
"不可 2\n",
"良 1\n",
"認定 1\n",
"Name: 評語, dtype: int64"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:,'評語'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"#### 表示を整理したい場合"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"評語の種類"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"array(['合格', '可', '秀', '優', '良', '取消', '不可', '認定'], dtype=object)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = df.loc[:,'評語'].unique()\n",
"m"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"['秀', '優', '良', '可', '合格', '認定', '不可', '取消']"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mark = [m[2],m[3],m[4],m[1],m[0],m[-1],m[-2],m[-3]]\n",
"mark"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀\n",
"優\n",
"良\n",
"可\n",
"合格\n",
"認定\n",
"不可\n",
"取消\n",
"------- \n",
"合計\n"
]
}
],
"source": [
"for m in mark:\n",
" print(m)\n",
"\n",
"print('-'*7,'\\n合計')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"[7, 5, 1, 10, 2, 1, 2, 2]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" no = len(df0)\n",
" lst.append(no)\n",
"\n",
"lst"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 7\n",
"優 5\n",
"良 1\n",
"可 10\n",
"合格 2\n",
"認定 1\n",
"不可 2\n",
"取消 2\n",
"------- \n",
"合計 30\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" no = len(df0)\n",
" lst.append(no)\n",
" \n",
" print(m, no)\n",
"\n",
"print('-'*7,'\\n合計',sum(lst))"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### 優・秀・良・可・不可などの%"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"#### 簡単な方法"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 33.3\n",
"秀 23.3\n",
"優 16.7\n",
"合格 6.7\n",
"取消 6.7\n",
"不可 6.7\n",
"良 3.3\n",
"認定 3.3\n",
"Name: 評語, dtype: float64"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" 100*df.loc[:,'評語'].value_counts(normalize=True)\n",
").round(1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"#### 表示を整理したい場合"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"%だけを表示する。"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"[23.333333333333332,\n",
" 16.666666666666668,\n",
" 3.3333333333333335,\n",
" 33.333333333333336,\n",
" 6.666666666666667,\n",
" 3.3333333333333335,\n",
" 6.666666666666667,\n",
" 6.666666666666667]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df)\n",
" lst.append(percent)\n",
"\n",
"lst"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"%と評語も表示する。"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀: 23.333333333333332\n",
"優: 16.666666666666668\n",
"良: 3.3333333333333335\n",
"可: 33.333333333333336\n",
"合格: 6.666666666666667\n",
"認定: 3.3333333333333335\n",
"不可: 6.666666666666667\n",
"取消: 6.666666666666667\n",
"------------------------------ \n",
"合計: 100.00000000000001\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
"\n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df)\n",
" lst.append(percent)\n",
" \n",
" print(f'{m}: {percent}')\n",
" \n",
"print('-'*30,f'\\n合計: {sum(lst)}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"小数点の表示を調整する。"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 23.3\n",
"優 16.7\n",
"良 3.3\n",
"可 33.3\n",
"合格 6.7\n",
"認定 3.3\n",
"不可 6.7\n",
"取消 6.7\n",
"---------- \n",
"合計: 100\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
"\n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df)\n",
" lst.append(percent)\n",
"\n",
" print(f'{m} {percent:.1f}') # 小数点第ー位まで表示\n",
" \n",
"print('-'*10,f'\\n合計: {sum(lst):.0f}') # 小数点は表示しない"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`%`を追加し,表示も揃える。"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 23.3\n",
"優 16.7\n",
"良 3.3\n",
"可 33.3\n",
"合格 6.7\n",
"認定 3.3\n",
"不可 6.7\n",
"取消 6.7\n",
"---------- \n",
"合計: 100\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
"\n",
" cond = ( df['評語']==m )\n",
" df0 = df.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df)\n",
" lst.append(percent)\n",
"\n",
" print(f'{m:\\u3000<2}{percent:>5.1f}') # ここを修正\n",
" \n",
"print('-'*10,f'\\n合計: {sum(lst):.0f}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"ここで「秀」など全角を使っているので`\\u3000`が必要となる。"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## 全学共通授業科目"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### 数"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 6\n",
"秀 4\n",
"優 3\n",
"合格 2\n",
"Name: 評語, dtype: int64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_other.loc[:,'評語'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 4\n",
"優 3\n",
"良 0\n",
"可 6\n",
"合格 2\n",
"認定 0\n",
"不可 0\n",
"取消 0\n",
"---------- \n",
"合計 15\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df_other['評語']==m )\n",
" df0 = df_other.loc[cond,:]\n",
" no = len(df0)\n",
" lst.append(no)\n",
" \n",
" print(m,no)\n",
" \n",
"print('-'*10,f'\\n合計 {sum(lst)}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"### 割合"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 40.0\n",
"秀 26.7\n",
"優 20.0\n",
"合格 13.3\n",
"Name: 評語, dtype: float64"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" 100 * df_other.loc[:,'評語'].value_counts(normalize=True)\n",
").round(1)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 26.7\n",
"優 20.0\n",
"良 0.0\n",
"可 40.0\n",
"合格 13.3\n",
"認定 0.0\n",
"不可 0.0\n",
"取消 0.0\n",
"---------- \n",
"合計 100\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df_other['評語']==m )\n",
" df0 = df_other.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df_other)\n",
" lst.append(percent)\n",
" \n",
" print(f'{m} {percent:.1f}')\n",
" \n",
"print('-'*10,f'\\n合計 {sum(lst):.0f}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"## 専門科目"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 4\n",
"秀 3\n",
"優 2\n",
"取消 2\n",
"不可 2\n",
"良 1\n",
"認定 1\n",
"Name: 評語, dtype: int64"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_econ.loc[:,'評語'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 3\n",
"優 2\n",
"良 1\n",
"可 4\n",
"合格 0\n",
"認定 1\n",
"不可 2\n",
"取消 2\n",
"---------- \n",
"合計 15\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df_econ['評語']==m )\n",
" df0 = df_econ.loc[cond,:]\n",
" no = len(df0)\n",
" lst.append(no)\n",
" \n",
" print(m,no)\n",
" \n",
"print('-'*10,f'\\n合計 {sum(lst)}')"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"可 26.7\n",
"秀 20.0\n",
"優 13.3\n",
"取消 13.3\n",
"不可 13.3\n",
"良 6.7\n",
"認定 6.7\n",
"Name: 評語, dtype: float64"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" 100 * df_econ.loc[:,'評語'].value_counts(normalize=True)\n",
").round(1)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"hidden": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"秀 20.0\n",
"優 13.3\n",
"良 6.7\n",
"可 26.7\n",
"合格 0.0\n",
"認定 6.7\n",
"不可 13.3\n",
"取消 13.3\n",
"---------- \n",
"合計 100\n"
]
}
],
"source": [
"lst = []\n",
"\n",
"for m in mark:\n",
" \n",
" cond = ( df_econ['評語']==m )\n",
" df0 = df_econ.loc[cond,:]\n",
" percent = 100 * len(df0) / len(df_econ)\n",
" lst.append(percent)\n",
" \n",
" print(f'{m} {percent:.1f}')\n",
" \n",
"print('-'*10, f'\\n合計 {sum(lst):.0f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## GPAの推移"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"### 「科目GP」で記号がある行の削除"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"科目GPの要素の種類"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"array(['-', '2', '4.3', '4', '3', '0', '*'], dtype=object)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:,'科目GP'].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"全て文字列となっているので,`-`と`*`の記号が含まれない行だけから構成される`DataFrame`を作成する。\n",
"\n",
"後で「科目GP」のデータ型を変更する際に警告がでないようにメソッド`.copy()`を使い`DataFrame`のコピーを作成する。"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"hidden": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" No. | \n",
" 区分 | \n",
" 科目大区分 | \n",
" 科目中区分 | \n",
" 科目ナンバー | \n",
" 科目 | \n",
" 単位数 | \n",
" 修得年度 | \n",
" 修得学期 | \n",
" 評語 | \n",
" 科目GP | \n",
" 合否 | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" 3 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 1 | \n",
" 2020 | \n",
" 前期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学A | \n",
" 1 | \n",
" 2020 | \n",
" 後期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学B | \n",
" 1 | \n",
" 2019 | \n",
" 後期 | \n",
" 可 | \n",
" 2 | \n",
" 合 | \n",
"
\n",
" \n",
" 5 | \n",
" 6 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 1 | \n",
" 2019 | \n",
" 後期 | \n",
" 優 | \n",
" 4 | \n",
" 合 | \n",
"
\n",
" \n",
" 6 | \n",
" 7 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2019 | \n",
" 前期 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" No. 区分 科目大区分 科目中区分 科目ナンバー 科目 単位数 修得年度 修得学期 評語 科目GP 合否\n",
"2 3 全学共通授業科目 基礎教養科目 NaN U1AA100 XX学 1 2020 前期 可 2 合\n",
"3 4 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学A 1 2020 後期 秀 4.3 合\n",
"4 5 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学B 1 2019 後期 可 2 合\n",
"5 6 全学共通授業科目 基礎教養科目 NaN U1AD100 X学A 1 2019 後期 優 4 合\n",
"6 7 全学共通授業科目 基礎教養科目 NaN U1AD100 X学B 1 2019 前期 秀 4.3 合"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa = df.query(\"科目GP not in ['-', '*']\").copy()\n",
"gpa.head()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"array(['2', '4.3', '4', '3', '0'], dtype=object)"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa['科目GP'].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"データ型は`object`(文字列)のままである。\n",
"\n",
"属性`.dtypes`を使って確認することもできる。"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('O')"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa['科目GP'].dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`O`は`object`。"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"### 「科目GP」を浮動小数点に変更"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"科目GPは`object`(文字列)となっているので,メソッド`astype()`を使って`float`に変換する。"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"gpa['科目GP'] = gpa['科目GP'].astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"hidden": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"No. int64\n",
"区分 object\n",
"科目大区分 object\n",
"科目中区分 float64\n",
"科目ナンバー object\n",
"科目 object\n",
"単位数 int64\n",
"修得年度 int64\n",
"修得学期 object\n",
"評語 object\n",
"科目GP float64\n",
"合否 object\n",
"dtype: object"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true
},
"source": [
"### 図示:毎年"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"#### `groupby`"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`groupby`は`DataFrame`や`Series`をグループ化し,グループ内の計算を簡単に行うことができる便利なメソッドである。「修得年度」でグループ化し,平均を計算する。"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"hidden": true
},
"outputs": [],
"source": [
"two_vars = ['単位数','科目GP']"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 単位数 | \n",
" 科目GP | \n",
"
\n",
" \n",
" 修得年度 | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2018 | \n",
" 1.375000 | \n",
" 2.6625 | \n",
"
\n",
" \n",
" 2019 | \n",
" 1.100000 | \n",
" 3.3200 | \n",
"
\n",
" \n",
" 2020 | \n",
" 1.666667 | \n",
" 3.1000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 単位数 科目GP\n",
"修得年度 \n",
"2018 1.375000 2.6625\n",
"2019 1.100000 3.3200\n",
"2020 1.666667 3.1000"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa_grouped = gpa.groupby('修得年度')\n",
"gpa_mean = gpa_grouped[two_vars].mean()\n",
"gpa_mean"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"* `gpa_grouped`は`DetaFrame`ではないので注意しよう。\n",
"* `gpa_grouped`には`median()`,`std()`,`var()`,`min()`,`max()`などが使える。その他の属性・メソッドを確認。"
]
},
{
"cell_type": "markdown",
"metadata": {
"heading_collapsed": true,
"hidden": true
},
"source": [
"#### 図示"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"方法1:横軸に文字列を使う"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`gpa_mean.index`を確認する。"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([2018, 2019, 2020], dtype='int64', name='修得年度')"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa_mean.index"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"これを使い横軸に使う文字列を作成する。"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"hidden": true,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"['2018', '2019', '2020']"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yr = [str(i) for i in gpa_mean.index]\n",
"yr"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"hidden": true,
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(yr,gpa_mean['科目GP'], 'o-')\n",
"pass"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"方法2:`plt.xticks()`を使って"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"横軸を調整するために,`gpa_mean`のインデックスを確認。"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([2018, 2019, 2020], dtype='int64', name='修得年度')"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yr = gpa_mean.index\n",
"yr"
]
},
{
"cell_type": "markdown",
"metadata": {
"hidden": true
},
"source": [
"`xticks()`を使って横軸の表示を指定する。"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"hidden": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABDKUlEQVR4nO3de1jTdf/H8dc4DZBtispBQUUxFRXKM4rH1DT11jLr7qBZWmoeOtlBO9jpF5aakhrZ3fmglqfSUvIIaopnAVERFQU5KuiGIINtn98fE4oEZTD23eH1uK5d1w18t713d4093XsbMiGEABEREZFEnKQegIiIiBwbY4SIiIgkxRghIiIiSTFGiIiISFKMESIiIpIUY4SIiIgkxRghIiIiSTFGiIiISFIuUg9QEwaDAVlZWVAoFJDJZFKPQ0RERDUghEBhYSGaNWsGJ6fqn/+wiRjJyspCYGCg1GMQERFRLWRkZCAgIKDan9tEjCgUCgDGG6NUKiWehoiIiGpCo9EgMDCw4nG8OjYRI+WrGaVSyRghIiKyMXd6iQVfwEpERESSYowQERGRpBgjREREJCnGCBEREUmKMUJERESSYowQERGRpBgjREREJCnGCBEREUnKJj70jIjsk94gcDCtAHmFJfBRuKNHkDecnfj3p4gcDWOEiCQRcyIb7246iWx1ScX3/FXumDcqBMM6+Us4GRFZGtc0RGRxMSeyMe3Ho5VCBABy1CWY9uNRxJzIlmgyIpICY4SILEpvEHh300mIKn5W/r13N52E3lDVEURkjxgjRGRRB9MKbnlG5J8EgGx1CQ6mFVhuKCKSFGOEiCwqr7D6EKnNcURk+xgjRGRRPgr3Gh3XuIFbPU9CRNaCMUJEFtUjyBt+yjsHyRsbkrDuyCXo9AYLTEVEUmKMEJFFOTvJENG2SZU/K/+EES+5Cy4W3MDLaxIw+JM4rGWUENk1xggRWdT5y9exKSELAKB0r/xRR34qd3z+RBccmHsvXh/eHt4N3HAhvxiz1yTg3k/isOZwBqOEyA7JhBBW//45jUYDlUoFtVoNpVIp9ThEVEt6g8C4z/fhaPo1RAQ3wbdPdcehC1er/QTWIq0OP8ZfxIrd51FQVAoAaNnYEzMGBuOBe5rDxZn/niKyZjV9/GaMEJHFfLH7HD7cfBpechfEvNAXAY08a3S+8ij5Yvd55N+MkhbenpgxyBglrowSIqtU08dvk+7B0dHRCA0NhVKphFKpRHh4OLZs2VLt8Xv37kWfPn3QuHFjeHh4oH379li8eLEpV0lEduJs3nUs3HoGAPDmiA41DhEAaCB3wZT+bbDntYGYe397NG7ghvSCYry6NhGDFsXil0MZKOP6hshmmfTMyKZNm+Ds7Izg4GAAwHfffYcFCxbg2LFj6Nix4y3HHzt2DKdPn0ZoaCgaNGiAvXv3YsqUKVi8eDGeffbZGg/JZ0aIbJtOb8DYz/cjIeMa+t3VFN891R0yWe3/IF5xqQ4/xadjxe5zuHLd+ExJoLcHZg5siwe68JkSImthsTWNt7c3FixYgEmTJtXo+AcffBANGjTADz/8UOPrYIwQ2bbo2HP4KOY0FO4u2PpiP/irPMxyudVFyYyBwXiwSwCjhEhi9bKm+Se9Xo/Vq1ejqKgI4eHhNTrPsWPHsG/fPvTv3/+2x2m1Wmg0mkonIrJNZ3ILsXibcT3z1sgQs4UIAHi6ueCZfq2x59VBeHNEBzTxckNGwQ28ti4JAxfGYvXBdK5viGyAyTGSlJQELy8vyOVyTJ06FRs2bEBISMhtzxMQEAC5XI5u3bph+vTpmDx58m2Pj4yMhEqlqjgFBgaaOiYRWQGd3oDZaxJQqjdgYLumGNc1oF6ux8PNGZP7/jNK5Lh09QZeX2+MklUH01GqY5QQWSuT1zSlpaVIT0/HtWvXsG7dOnz55ZeIi4u7bZCkpaXh+vXriI+Px+uvv45ly5bh0UcfrfZ4rVYLrVZb8bVGo0FgYCDXNEQ2Zvmus1jwZwqU7i7Y+mJ/+Klq9lHwdXWjVI+VB9MRHXsOV64bf5c0b+iBGYOCMbZLANxcuL4hsgSLvWZk8ODBaNOmDVasWFGj4z/44AP88MMPSElJqfF18DUjRLbndI4Go5buRZle4JOHw/Bgl/p5VuR2yqPk87hzuFz4d5RMHxiMh7oySojqW72/ZqScEKLSsxjmPp6IbE+Z3oCXf0lAmV5gcAcfPHBPc0nm8HBzxqSIIOx5dSDeHhmCpgo5Mq/dwNwNxvXNTwcucn1DZAVc7nzI3+bOnYvhw4cjMDAQhYWFWL16NWJjYxETEwMAmDNnDjIzM/H9998DAJYvX44WLVqgffv2AIyfO7Jw4ULMnDnTzDeDiKzJZ7vOITlLA5WHKz58oHOd3sZrDu6uzng6IgiP9WyBVTfXN5nXbuCNDSfw2a5zeG5gG4zrGshnSogkYlKM5ObmYvz48cjOzoZKpUJoaChiYmIwZMgQAEB2djbS09MrjjcYDJgzZw7S0tLg4uKCNm3aYP78+ZgyZYp5bwURWY3kLDWW7kwFALw3uiN8avAXei3F3dUZT/UJwqM9bo2S5TvP4rmBwRjXLQByF2epRyVyKPw4eCIym1KdAaOX/4VT2Rrc19EXnz/RVfJnRW6npEyP1QfT8VnsOeTdfE1JM5U7pg0MxsOMEqI649+mISKL+2TbGXy6IxWNPF2x9cX+aKqQSz1SjZSU6fHzoQx8FnsWuRpjlPir3PEco4SoThgjRGRRJzLVGL38L+gNAksfvQejwppJPZLJyqMkOvYccjQlAG5GyYA2eLh7IKOEyESMESKyGK1Oj9HL/sLpnELc39kPyx/rYtXrmTspKdPjl8MZ+GzX31Hip3THcwPb4OFugXB3ZZQQ1QRjhIgsZuGfKVi26ywaN3DD1hf7obGXbaxn7qSkTI81hzOwnFFCVCuMESKyiISMa3gweh/0BoHox7tgeGd/qUcyO61Oj18OZeCz2HPIVhujxFcpx3MDgvFId0YJUXUYI0RU70rK9Bi1dC9S865jZKg/lj3WReqR6pVWp8cvhy/hs11nK0XJtP5t8N8eLRglRP/CGCGievdRzGlEx55DEy83bH2xP7wbuEk9kkVodXqsuRklWYwSomoxRoioXh1Lv4qx0ftgEMDnT3TFsE5+Uo9kcVVFiY9CjmkD2uBRRgkRY4SI6k9JmR4jPt2Dc5eLMObuZljy33ukHklSWp0ea49cwvKdf0dJU4XxmZLHejJKyHExRoio3ny4+RS+2H0eTRVybHuxHxp6OsZ65k5KdQZjlOw6i8xrNwAYo2Rq/zZ4nFFCDogxQkT14sjFAjz0+X4IAXw5oRsGh/hKPZLVKdUZsO7oJSzbySghx8YYISKzu1Gqx/2f7kHalSI82KU5Pnn4bqlHsmpVRUkTLzmm9m+Nx3u2hIcbo4TsG2OEiMzu/d9P4qu9afBVyrH1hf5QebpKPZJNKNUZsP7oJSzbdRaXrjJKyHEwRojIrA6mFeCRL4zrmW8mdsfA9j5Sj2RzyvTGKFm6859R4nZzfcMoIfvDGCEisyku1WF41B5czC/GuK4BWDAuTOqRbFp1UTKlXxs83qsFPN1cJJ6QyDwYI0RkNu9sTMa3+y7AX+WOmBf6QeXB9Yw5lOkN2HA0E0t3pSKj4O8oebZfazzRqyWjhGweY4SIzCL+fD7++0U8AOC7p3ug/11NJZ7I/pTpDdhwLBPLdp5FekExAKBxAzdM6c8oIdvGGCGiOivS6jAsajcyCm7g0R6BiHwwVOqR7Fp1UfJsv9YYH84oIdvDGCGiOnvr1xP4If4imjf0QMwLfaFw53rGEsr0Bvx6LBPLdp3FxXxjlHiXR0mvlmggZ5SQbWCMEFGd7Dt7BY99eQAA8OOknoho20TiiRyPTm/Ar8ezsHRnKqOEbBJjhIhq7bpWh/sW70bmtRt4vGcL/N8DnaUeyaGVR8mynam48I8oeaZva0wIZ5SQ9WKMEFGtzd2QhJUH0hHQyAMxL/SDFx/srIJOb8BvN58pKY+SRp6ueKZfa0wIb8X/TmR1GCNEVCu7z1zGhK8PAgBWPtMTvdtwPWNtdHoDNiZkYenOs0i7UgSAUULWiTFCRCbTlJRh2OLdyFKX4Mnwlnh3dCepR6LbqCpKGnq64pm+rfFkb0YJSY8xQkQme31dIlYfykALb0/EvNCXbyW1ETq9AZsSs7B0x1mc/1eUTAhvyXdBkWQYI0RkktiUPEz85hAA4Odne6Fn68YST0Sm0hsENiVk4dMdqZWiZHJEEJ7s3YpRQhbHGCGiGlPfKMN9i3cjR1OCp/q0wrxRHaUeiepAbxD4PTELUTtScf6yMUpUHq54pi+jhCyLMUJENTZ7TQLWHrmEVo09seX5fvzrsXaiuiiZHBGEiX0YJVT/GCNEVCM7T+fi6W8PQyYD1kwJR7dW3lKPRGZWHiWf7kjFuX9EyaSbUaJklFA9YYwQ0R2pi8swZHEc8gq1mBwRhDdHhkg9EtUjvUHgj6RsfLojFWfzrgMAlO4umNy3NaOE6gVjhIju6KWfj2P9sUy0btIAm5/vC3dXrmccQXVRMimiNZ6KYJSQ+TBGiOi2tibn4NkfjsBJBqyd1htdWjSSeiSyML1BYPPNKEn9R5Q8HRGEp/oEQeXBKKG6YYwQUbWuFpViyOLduHJdiyn9W2PO8A5Sj0QSMhgENp/IRtT2v6NE4e6CSYwSqiPGCBFV6/nVx/Db8SwE+3jh95kRXM8QgL+j5NMdqTiT+3eUPN0nCE9HMErIdIwRIqpSzIlsTP3xKJxkwPrn+uDuwIZSj0RWxmAQ2HIiB1E7zvwdJXIXPBURhEl9gqDyZJRQzTBGiOgW+de1GLp4N/KLSvHcgDZ4dVh7qUciK2YwCMQk5yBqeypScgsBMErINIwRIrrF9JVH8UdiNu7y9cKmmRGQu3A9Q3dWHiWf7kjF6Zx/REmfVng6IggNPd0knpCsFWOEiCr5IzEb01cehbOTDL8+1wedA1RSj0Q2xmAQ+DM5B1H/iBKvm1EyiVFCVWCMEFGFKzfXMwVFpZg5KBgvD20n9UhkwwwGga0nc7BkO6OEbo8xQkQAACEEnvvpKLacyEF7PwU2zoiAm4uT1GORHTBGSS6WbD9TKUom9jZGSaMGjBJHV9PHb5N+I0VHRyM0NBRKpRJKpRLh4eHYsmVLtcevX78eQ4YMQdOmTSuO//PPP025SiKqo02J2dhyIgcuTjIsHBfGECGzcXKSYVgnP2ye1RefP9EVHfyVuK7VYdmus4j4aCcW/HkaV4tKpR6TbIBJv5UCAgIwf/58HD58GIcPH8agQYMwevRoJCcnV3n87t27MWTIEGzevBlHjhzBwIEDMWrUKBw7dswswxPR7eUVluDt304AAGYMCkan5nydCJlfeZT8MTMCK8Z3RYi/EkWleizfdQ4RH+3ExzGnUcAooduo85rG29sbCxYswKRJk2p0fMeOHfHII4/g7bffrvF1cE1DZDohBJ794Qi2ncxFiL8Sv83oA1dnPitC9U8IgW0nc7FkeypOZmsAAA3cnPFk71aY3Lc1vLm+cRg1ffx2qe0V6PV6rFmzBkVFRQgPD6/ReQwGAwoLC+Htffs/Ua7VaqHVaiu+1mg0tR2TyGH9djwL207mwtXZuJ5hiJClyGQyDO3ohyEhvpWi5LPYc/h23wU82bsVnmGU0D+Y/NspKSkJXl5ekMvlmDp1KjZs2ICQkJr92fFFixahqKgIDz/88G2Pi4yMhEqlqjgFBgaaOiaRQ8vVlGDeRuP6dNagtghpxmcUyfLKo+SPWRH434Ru6NhMieJSPaJjjeub+VtOI/+69s4XRHbP5DVNaWkp0tPTce3aNaxbtw5ffvkl4uLi7hgkq1atwuTJk/Hbb79h8ODBtz22qmdGAgMDuaYhqgEhBCZ/dxg7Tuehc3MV1j/Xm8+KkFUQQmDHqTws2XEGJzKNz3h7ujljQngrPNM3CI295BJPSOZmsbf2Dh48GG3atMGKFSuqPebnn3/GU089hTVr1mDEiBEmXwdfM0JUc+uOXMLLaxLg5uyETTMj0M5PIfVIRJWUR0nUjlQkZaoBGKNkfHhLPNu3NaPEjtTLW3urIoSo9CzGv61atQoTJ07EypUraxUiRFRzOeoSvLPJuJ55fnBbhghZJZlMhsEhvtg4ow++erIbOjdXobhUjxVx5xHx0S5Ebj6FK1zfOBSTXsA6d+5cDB8+HIGBgSgsLMTq1asRGxuLmJgYAMCcOXOQmZmJ77//HoAxRCZMmICoqCj06tULOTk5AAAPDw+oVHyLIZE5CSHw+vpEFJboEBagwpR+raUeiei2ZDIZ7u3gi0HtfbArJQ9Ltqci8ZIaK3afx/f7L2JCeEs80681mvCZErtn0jMjubm5GD9+PNq1a4d7770XBw4cQExMDIYMGQIAyM7ORnp6esXxK1asgE6nw/Tp0+Hv719xev755817K4gIaw5fQmzKZbi5OGHhuDC48HUiZCNkMhkGtffFb9P74OuJ3RAWoMKNMj1W7D6Pvh/twod8psTu8ePgiexA1rUbuG/xbhRqdZgzvD2m9G8j9UhEtSaEQGzKZSzZfgYJl4yvKfFwdcYTvVrg2X5t0FTBZ0psBf82DZGDEEJgwtcHsSf1Cu5p0RBrp/aGs5NM6rGI6kwIgdgzl7FkeyoSMq4BANxdnTC+V0tGiY1gjBA5iFUH0zFnfRLkLk7Y/HxftGnqJfVIRGZVHiVR21Nx/B9R8kTPlni2f2v4KNylHZCqxRghcgCXrhbjvsW7UVSqx5sjOmByX75oleyXEAJxN58pKY8SuYsTnujVElMYJVaJMUJk54QQeOKrA/jrbD66tWyEn6eEcz1DDkEIgd2pV7Bk+xkcS78GgFFirRgjRHbux/iLePPXE3B3dcKW5/shqEkDqUcisighBPakXsHif0XJ4z1bYmr/1vBRMkqkxhghsmMZBcW4b8luFJfq8fbIEDwdEST1SESSKY+SJdvP4Og/ouSxni0wrX8bRomEGCNEdspgEHjsy3jEny9Aj1beWP1sLzhxPUMEIQT2nr2CJdtTceTiVQCMEqkxRojs1Hf7LmDexmR4uDoj5oW+aNmY6xmifxJC4K+z+Vi8/UxFlLi5OOGxHi0wbUAb+DJKLIYxQmSHLuYXYdiSPbhRpsd7oztiQngrqUcislrlUbJk+xkc/leUTO3fBn4qRkl9Y4wQ2RmDQeC/X8Tj4IUC9GrtjZWTuZ4hqgkhBPadM0bJoQt/R8mj3QMxbUAwo6QeMUaI7MzXe9Pw3u8n4enmjD9f6IdAb0+pRyKyKUII7D9nXN9URImzEx7twSipL4wRIjty/vJ13P/pHpSUGfDBmE54oldLqUcislnlUbJkeyoOXigAYIyS//YIxLQBbeCv8pB4QvvBGCGyE3qDwMMr9uPIxauICG6CHyb1gEzG9QxRXQkhsP/8zShJ+ztKHulujJJmDRkldcUYIbITX+45jw/+OAUvuQtiXuiLgEZczxCZW/n6hlFiXowRIjtwNu86Rny6B1qdAZEPdsajPVpIPRKRXdt/84WuB/4RJQ93D8BzA4IZJbXAGCGycXqDwNjofTiecQ192zbB909zPUNkKfvP5SNqxxnEnzdGiauzDA93C8RzA4PRnFFSY4wRIhv3edw5zN9yGgq5C/58sR//VUYkgfjz+Yjanor95/MBMEpMxRghsmGpuYUYsXQvSnUGfPxQKB7uFij1SEQO7cD5fETtSMW+c39HybhugXhuQBu+jus2GCNENkqnN2Bs9D4kXFJjYLum+Hpid65niKxEVVHyUNdATB/IKKkKY4TIRi3fdRYL/kyBwt0F217szw9iIrJCB9MKELXjDP46yyi5HcYIkQ06naPBqKV7UaYXWDQuDGO7Bkg9EhHdxqELBYjanoq9Z68AAFycZBjXzfjuG35KMmOEyOaU6Q144LO/cCJTg8EdfPC/Cd24niGyEVVFyUNdAzB9oGNHCWOEyMYs3ZGKRdvOQOXhim0v9oMP/8w5kc05fKEAUTtSsSeVUQIwRohsysksDUYvN65nljxyN8bc01zqkYioDo5cLMCS7ZWjZGwXY5S0aOw4UcIYIbIRpToDxiz/CyezNRga4osV47tyPUNkJ/4dJc5OMozt0hwzBrZ1iChhjBDZiMXbziBqRyoaebpi64v90VQhl3okIjKzIxevImpHKnafuQzAGCUP3tMcMwYFo2XjBhJPV38YI0Q24ESmGmOW/wWdQWDpo/dgVFgzqUcionp0NP0qoranIs5BooQxQmTlSnUG/GfZXpzOKcTwTn747PEuXM8QOYiqouSBe5pjxsBgtGpiP1HCGCGycou2pmDpzrPwbuCGrS/2QxMvrmeIHM2xdOP6Jjbl7ygZc3dzzBxkH1HCGCGyYomXruGBz/ZBbxBY/lgXjAj1l3okIpLQ8YxriNp+BrvsLEoYI0RWSqvTY9TSvTiTex0jQ/2x7LEuUo9ERFbi31HiJAPG3NMcMwe1RZANRgljhMhKfRxzGp/FnkMTLzdsfbE/vBu4ST0SEVmZhIxriNqRip2n8wDcjJK7jS90bd3US+Lpao4xQmSFjmdcw4Of/QWDAD5/oiuGdfKTeiQismIJGdfw6Y5U7LDRKGGMEFmZkjI9Rny6B+cuF2H03c0Q9d97pB6JiGxE4iVjlGw/9XeUjL4ZJW2sOEoYI0RWJnLzKazYfR5NFXJsfaEfGnE9Q0QmSrqkRtSOM5Wi5D9hzTDz3rZWGSWMESIrcuTiVYz7fB8MAvjfhG4YEuIr9UhEZMOMUZKK7adyAfwdJTMGtUWwj/VECWOEyEqUlOlxf9QenL9ShAfvaY5PHrlb6pGIyE6cyDRGybaTxiiRlT9TYiVRwhghshIf/H4SX+5Ng49Cjm0v9ofK01XqkYjIzlQVJaNCm2HWvcEI9lFINhdjhMgKHLpQgIdX7IcQwNcTu2FQe65niKj+nMhU49MdqdhqJVHCGCGS2I1SPYZH7caF/GKM6xqABePCpB6JiBxEcpYxSv5M/jtKRoY2w6xBwWjr+3eU6A0CB9MKkFdYAh+FO3oEecPZyXx/I6umj99OplxodHQ0QkNDoVQqoVQqER4eji1btlR7fHZ2Nh577DG0a9cOTk5OeOGFF0y5OiKb9vGfp3Ehvxh+Sne8OTJE6nGIyIF0bKbCivHd8MesCNzX0RdCAJsSsjB0yW7MWHkUZ3ILEXMiGxEf7cSj/4vH86uP49H/xSPio52IOZFt8XlNipGAgADMnz8fhw8fxuHDhzFo0CCMHj0aycnJVR6v1WrRtGlTvPHGGwgL478KyXHEn8/HN39dAADMH9sZKg++ToSILK88SjbP6othHf0gBPB7YjaGLt6NqT8eRba6pNLxOeoSTPvxqMWDpM5rGm9vbyxYsACTJk267XEDBgzA3XffjSVLlph8HVzTkC0p0uowPGoP0guK8d/ugZg/NlTqkYiIAACnsjWI2n4GMTfXN1WRAfBTuWPva4PqvLKplzXNP+n1eqxevRpFRUUIDw+v7cVUSavVQqPRVDoR2YqPYk4jvaAYzVTueGNEB6nHISKq0MFfiSd7B932GAEgW12Cg2kFlhkKtYiRpKQkeHl5QS6XY+rUqdiwYQNCQsy7D4+MjIRKpao4BQYGmvXyierLvnNX8P3+iwCAjx8Kg8Kd6xkisi55hSV3PsiE48zB5Bhp164djh8/jvj4eEybNg1PPvkkTp48adah5syZA7VaXXHKyMgw6+UT1YfrWh1eXZsIAHisZwtEtG0i8URERLfyUbib9ThzcDH1DG5ubggODgYAdOvWDYcOHUJUVBRWrFhhtqHkcjnkcrnZLo/IEiI3n8KlqzfQvKEH5t7P9QwRWaceQd7wV7kjR12Cql40Wv6akR5B3habqdavGSknhIBWqzXHLEQ2a2/qFfx0IB0AsOChUHjJTe58IiKLcHaSYd4o48sr/v3y1PKv540KMevnjdyJSb8x586di+HDhyMwMBCFhYVYvXo1YmNjERMTA8C4XsnMzMT3339fcZ7jx48DAK5fv47Lly/j+PHjcHNzM/vrTIikUlhShtfWGdczE8Jboncw1zNEZN2GdfJH9BNd8O6mk5Xe3uuncse8USEY1snfovOYFCO5ubkYP348srOzoVKpEBoaipiYGAwZMgSA8UPO0tPTK53nnnvuqfjfR44cwcqVK9GyZUtcuHCh7tMTWYEPN59C5rUbCPT2wGvD2ks9DhFRjQzr5I8hIX71+gmsNcWPgyeqg7gzl/Hk1wcBAKuf7YVerRtLPBERkfWo988ZIXJ0mpIyvH5zPTOxdyuGCBFRLTFGiGrpg9+Nu9ZWjT3x6rB2Uo9DRGSzGCNEtbDrdB5+OXwJMhmwYFwYPN347hkiotpijBCZSF1chtfXG9czT/cJQvdWlnsvPhGRPWKMEJno3d+TkavRonWTBpg9lOsZIqK6YowQmWD7yVysP5oJp5vrGQ83Z6lHIiKyeYwRohq6VlyKORuSAADP9G2Nri0bSTwREZF9YIwQ1dA7G5NxuVCLNk0b4MUhd0k9DhGR3WCMENVAzIkc/Ho8C04yYOG4MLi7cj1DRGQujBGiOygoKsWbvxrXM1P6t8E9LbieISIyJ8YI0R3M25iMK9dLcZevF14Y3FbqcYiI7A5jhOg2NidlY1NCFpydZFg4LgxyF65niIjMjTFCVI0r17V489cTAIBp/dsgNKChtAMREdkpxghRFYQQeOvXEygoKkV7PwVm3hss9UhERHaLMUJUhd8Ts7HlRA5cuJ4hIqp3jBGif7lcqMXbvxnXM9MHBqNTc5XEExER2TfGCNE/CCHw5q9JuFpchg7+SkwfyPUMEVF9Y4wQ/cPGhCz8mZwLFycZFo0Lg5sL7yJERPWNv2mJbsrTlODt35IBALPubYuQZkqJJyIicgyMESIY1zNzNyRBfaMMnZorMW1AG6lHIiJyGIwRIgAbjmVi+6k8uDrLsGjc3XB15l2DiMhS+BuXHF6OugTvbDSuZ14YfBfa+SkknoiIyLEwRsihCSEwZ30iNCU6hAaoMKVfa6lHIiJyOIwRcmhrj1zCrpTLcHN2wqJxYXDheoaIyOL4m5ccVrb6Bt7bdBIA8NLQu9DWl+sZIiIpMEbIIQkh8Nq6JBRqdbg7sCGe6cv1DBGRVBgj5JB+PpSB3Wcuw83FCQvHhcHZSSb1SEREDosxQg4n89oNfPDHKQDAK0PbIdjHS+KJiIgcG2OEHIoQAq+tTcR1rQ5dWzbC0xFBUo9EROTwGCPkUFYeTMfes1fg7uqEBQ+Fcj1DRGQFGCPkMDIKivF/5euZ+9qjdVOuZ4iIrAFjhByCwSDw6tpEFJfq0aOVN57q3UrqkYiI6CbGCDmEnw5cxP7z+fBwdcbHD4XCiesZIiKrwRghu5eeX4wPN58GALw+vD1aNWkg8URERPRPjBGyawaDwOy1CbhRpkev1t4Y36ul1CMREdG/MEbIrn23/wIOphXA080ZH48N43qGiMgKMUbIbqVdKcJHMcb1zJz7O6BFY0+JJyIioqowRsgu6Q0Cr6xJQEmZAX2CG+PxHi2kHomIiKrBGCG79M1faTh88SoauDnjo7F89wwRkTVjjJDdOXf5Ohb8mQIAeGNECAIacT1DRGTNTIqR6OhohIaGQqlUQqlUIjw8HFu2bLnteeLi4tC1a1e4u7ujdevW+Pzzz+s0MNHtlK9ntDoD+rZtgkd7BEo9EhER3YFJMRIQEID58+fj8OHDOHz4MAYNGoTRo0cjOTm5yuPT0tJw//33o2/fvjh27Bjmzp2LWbNmYd26dWYZnujfvtp7HkfTr0Ehd8FHY0Mhk3E9Q0Rk7WRCCFGXC/D29saCBQswadKkW3722muvYePGjTh16lTF96ZOnYqEhATs37+/xteh0WigUqmgVquhVCrrMi7ZsbN5hbj/070o1Rnw8dhQPNydz4oQEUmppo/ftX7NiF6vx+rVq1FUVITw8PAqj9m/fz+GDh1a6Xv33XcfDh8+jLKysmovW6vVQqPRVDoR3Y5Ob8DLaxJRqjNgQLumGNctQOqRiIiohkyOkaSkJHh5eUEul2Pq1KnYsGEDQkJCqjw2JycHvr6+lb7n6+sLnU6HK1euVHsdkZGRUKlUFafAQP4Ll27viz3nkZBxDQp3F0Q+2JnrGSIiG2JyjLRr1w7Hjx9HfHw8pk2bhieffBInT56s9vh/PyiUb4Vu92AxZ84cqNXqilNGRoapY5IDOZNbiCXbUgEA80Z1hL/KQ+KJiIjIFC6mnsHNzQ3BwcEAgG7duuHQoUOIiorCihUrbjnWz88POTk5lb6Xl5cHFxcXNG7cuNrrkMvlkMvlpo5GDqhMb8DLvySgVG/Ave19MLZLc6lHIiIiE9X5c0aEENBqtVX+LDw8HNu2bav0va1bt6Jbt25wdXWt61UTYUXcOSRlqqHycMWHXM8QEdkkk2Jk7ty52LNnDy5cuICkpCS88cYbiI2NxeOPPw7AuF6ZMGFCxfFTp07FxYsX8dJLL+HUqVP4+uuv8dVXX2H27NnmvRXkkE5laxC1w7ieeec/IfBVuks8ERER1YZJa5rc3FyMHz8e2dnZUKlUCA0NRUxMDIYMGQIAyM7ORnp6esXxQUFB2Lx5M1588UUsX74czZo1w6effoqxY8ea91aQwynTGzB7TQLK9AJDQnwx5m6uZ4iIbFWdP2fEEvg5I/RvUdtTsXj7GTT0dMXWF/vBR8FnRYiIrE29f84IkVSSs9RYutO4nnlvdCeGCBGRjWOMkE0p1RnfPaMzCAzr6IdRof5Sj0RERHXEGCGbsmxnKk7nFMK7gRs+eKAT3z1DRGQHGCNkM05kqrE89hwA4P3RndDEi59FQ0RkDxgjZBO0Oj1e/iUBeoPAiFB/jOB6hojIbjBGyCZ8uiMVKbmFaOLlhvdHd5J6HCIiMiPGCFm9hIxriL65nvlgTCd4N3CTeCIiIjInxghZtZIyPV5ekwCDAP4T1gzDOnE9Q0RkbxgjZNWWbE/F2bzraOIlx7v/6Sj1OEREVA8YI2S1jqZfxRe7jeuZDx/ohEZczxAR2SXGCFmlkjI9Zt9czzxwT3MM7egn9UhERFRPGCNklRZtTcH5y0XwUcgxb1SI1OMQEVE9YoyQ1TlysQBf7k0DAEQ+2BkNPbmeISKyZ4wRsio3SvWYvSYRQgAPdQ3AvR18pR6JiIjqGWOErMqCP1OQdqUIfkp3vDWS6xkiIkfAGCGrcTCtAN/su7meGdsZKg9XiSciIiJLYIyQVSgu1eGVtQkQAnikWyAGtvOReiQiIrIQxghZhY9jUnAxvxjNVO54Y2QHqcchIiILYoyQ5Pafy8e3+y4AAD56KBRKd65niIgcCWOEJFWkNa5nAODRHi3Qt21TiSciIiJLY4yQpCK3nMKlqzfQvKEH3hjB9QwRkSNijJBk/jp7BT/GpwMAPn4oFF5yF4knIiIiKTBGSBKFJWV4dW0iAGB8r5boE9xE4omIiEgqjBGSxIebTyPz2g0Eenvg9eHtpR6HiIgkxBghi9t95jJWHby5nhkbhgZczxAROTTGCFmUpqQMr68zrmcm9m6F8DaNJZ6IiIikxhghi/q/308hS12Clo098eqwdlKPQ0REVoAxQhazKyUPPx/OgEwGLHgoDJ5uXM8QERFjhCxEXfz3euap3kHoEeQt8URERGQtGCNkEe/9fhK5Gi2CmjTAK/dxPUNERH9jjFC923EqF+uOXoJMBiwcFwoPN2epRyIiIivCGKF6da24FHPWJwEAnunbGl1bcj1DRESVMUaoXr276STyCrVo07QBXhpyl9TjEBGRFWKMUL3ZmpyDDccy4SQDFo4Lg7sr1zNERHQrxgjVi6tFpZi74QQA4Nl+bXBPi0YST0RERNaKMUL1Yt7GZFy5rkVbHy+8MLit1OMQEZEVY4yQ2W1JysbGhCw4O8m4niEiojtijJBZ5V/X4s1fjeuZaf3bICywobQDERGR1WOMkFm9vTEZ+UWlaOerwMx7g6Ueh4iIbABjhMzm98Qs/JGYDWcnGRY9HAa5C9czRER0ZybFSGRkJLp37w6FQgEfHx+MGTMGKSkpdzzf8uXL0aFDB3h4eKBdu3b4/vvvaz0wWafLhVq8dXM9M31gMDo1V0k8ERER2QqTYiQuLg7Tp09HfHw8tm3bBp1Oh6FDh6KoqKja80RHR2POnDl45513kJycjHfffRfTp0/Hpk2b6jw8WQchBN78NQlXi8vQwV+JGQO5niEiopqTCSFEbc98+fJl+Pj4IC4uDv369avymN69e6NPnz5YsGBBxfdeeOEFHD58GHv37q3R9Wg0GqhUKqjVaiiVytqOS/Xkt+OZeH71cbg4yfDbjD7o2IzPihARUc0fv13qciVqtRoA4O1d/d8b0Wq1cHd3r/Q9Dw8PHDx4EGVlZXB1da3yPFqttuJrjUZTlzGpHuUVlmDexmQAwMxBbRkiRERkslq/gFUIgZdeegkRERHo1KlTtcfdd999+PLLL3HkyBEIIXD48GF8/fXXKCsrw5UrV6o8T2RkJFQqVcUpMDCwtmNSPRJC4I0NJ3CtuAwdmynx3MA2Uo9EREQ2qNYxMmPGDCQmJmLVqlW3Pe6tt97C8OHD0atXL7i6umL06NGYOHEiAMDZuep3W8yZMwdqtbrilJGRUdsxqR79ejwT207mwtXZ+O4ZV2e+OYuIiExXq0ePmTNnYuPGjdi1axcCAgJue6yHhwe+/vprFBcX48KFC0hPT0erVq2gUCjQpEmTKs8jl8uhVCornci65GpKMO8343rmhcF3ob0f/xsREVHtmPSaESEEZs6ciQ0bNiA2NhZBQUE1Pq+rq2tFuKxevRojR46EkxP/JW2LhBCYuz4JmhIdQgNUmNKvtdQjERGRDTMpRqZPn46VK1fit99+g0KhQE5ODgBApVLBw8MDgHHFkpmZWfFZImfOnMHBgwfRs2dPXL16FZ988glOnDiB7777zsw3hSxl3dFM7DidBzdnJywcFwYXrmeIiKgOTHoUiY6OhlqtxoABA+Dv719x+vnnnyuOyc7ORnp6esXXer0eixYtQlhYGIYMGYKSkhLs27cPrVq1MtuNIMvJVt/Au5uM65kXh9yFu3wVEk9ERES2rk6fM2Ip/JwR6yCEwMRvDiHuzGXcHdgQa6eG81kRIiKqVk0fv/lIQjX2y+EMxJ25DDcXrmeIiMh8+GhCNZJ57QY++P0UAGD20LsQ7OMl8URERGQvGCN0R0IIvL4uEYVaHbq0aIhJEXz3DBERmQ9jhO5o1cEM7Em9AvnN9Yyzk0zqkYiIyI4wRui2MgqK8X9/nAQAvDqsPVo35XqGiIjMizFC1TIYBF5bl4iiUj26t2qEp3q3knokIiKyQ4wRqtZPB9Ox71w+3F2dsOChMDhxPUNERPWAMUJVSs8vRuRm47tnXh/WHq2aNJB4IiIisleMEbqFwSDwytoEFJfq0TPIGxPCW0k9EhER2THGCN3ih/iLOJBWAE83Z65niIio3jFGqJILV4owf8tpAMCc4e3RorGnxBMREZG9Y4xQhfL1zI0yPXq3aYzHe7aUeiQiInIAjBGq8M2+Czh04SoauDnjo7GhXM8QEZFFMEYIAHD+8nV8HGNcz7wxIgSB3lzPEBGRZTBGCHqDwCtrE6HVGdC3bRM82iNQ6pGIiMiBMEYIX+9Nw5GLV+Eld8H8saGQybieISIiy2GMOLizedexYGsKAOCtkR3QvKGHxBMREZGjYYw4ML1BYPaaBJTqDOh/V1M83I3rGSIisjzGiAP7357zOJ5xDQp3F8wf25nrGSIikgRjxEGl5hbik61nAABvjwyBv4rrGSIikgZjxAHp9Aa8vCYBpXoDBrX3wUNdA6QeiYiIHBhjxAGt2H0eiZfUULq7IPJBrmeIiEhajBEHczpHgyXbjeuZd0d3hK/SXeKJiIjI0TFGHEiZ3oDZaxJQphcY3MEXY+5uLvVIREREjBFHEh17DicyNWjo6YoPH+zE9QwREVkFxoiDSM5S49MdqQCAd//TET4KrmeIiMg6MEYcQKnOgNlrEqEzCAzr6If/hDWTeiQiIqIKjBEHsHzXWZzK1qCRpyveH8P1DBERWRfGiJ07kanG8l1nAQDvj+mEpgq5xBMRERFVxhixY1qdHrPXJEBnEBjR2R8jQ7meISIi68MYsWNLd5zF6ZxCNG7ghvdGd5R6HCIioioxRuxU4qVriI47BwD4YEwnNPbieoaIiKwTY8QOaXV6vPxLAvQGgVFhzTC8s7/UIxEREVWLMWKHlmxPRWredTTxkuO9/3A9Q0RE1o0xYmeOpV/FipvrmQ8f6IRGDdwknoiIiOj2GCN2pKTM+O4ZgwAeuKc5hnb0k3okIiKiO2KM2JHF287g3OUiNFXIMW9UiNTjEBER1QhjxE4cuViAL/acBwBEPtAZDT25niEiItvAGLEDN0r1mL0mEUIAY7sEYHCIr9QjERER1RhjxA4s3JqCtCtF8FXK8TbXM0REZGNMipHIyEh0794dCoUCPj4+GDNmDFJSUu54vp9++glhYWHw9PSEv78/nnrqKeTn59d6aPrboQsF+PqvNADA/LGhUHm4SjwRERGRaUyKkbi4OEyfPh3x8fHYtm0bdDodhg4diqKiomrPs3fvXkyYMAGTJk1CcnIy1qxZg0OHDmHy5Ml1Ht7RFZfq8MqaBAgBPNwtAAPb+Ug9EhERkclcTDk4Jiam0tfffPMNfHx8cOTIEfTr16/K88THx6NVq1aYNWsWACAoKAhTpkzBxx9/XMuRqdzHMSm4kF8Mf5U73hzJ9QwREdmmOr1mRK1WAwC8vb2rPaZ37964dOkSNm/eDCEEcnNzsXbtWowYMaLa82i1Wmg0mkonqiz+fD6+3XcBAPDR2FAo3bmeISIi21TrGBFC4KWXXkJERAQ6depU7XG9e/fGTz/9hEceeQRubm7w8/NDw4YNsXTp0mrPExkZCZVKVXEKDAys7Zh2qUirwytrEwAAj/ZogX53NZV4IiIiotqrdYzMmDEDiYmJWLVq1W2PO3nyJGbNmoW3334bR44cQUxMDNLS0jB16tRqzzNnzhyo1eqKU0ZGRm3HtEsfxZxGRsENNG/ogbn3t5d6HCIiojqRCSGEqWeaOXMmfv31V+zevRtBQUG3PXb8+PEoKSnBmjVrKr63d+9e9O3bF1lZWfD3v/NflNVoNFCpVFCr1VAqlaaOa1f2nb2Cx748AAD4cVJPRLRtIvFEREREVavp47dJz4wIITBjxgysX78eO3fuvGOIAEBxcTGcnCpfjbOzc8XlUc1d1+rwytpEAMATvVowRIiIyC6YFCPTp0/Hjz/+iJUrV0KhUCAnJwc5OTm4ceNGxTFz5szBhAkTKr4eNWoU1q9fj+joaJw/fx5//fUXZs2ahR49eqBZs2bmuyUO4MPNp5B57QYCGnlgzvAOUo9DRERkFia9tTc6OhoAMGDAgErf/+abbzBx4kQAQHZ2NtLT0yt+NnHiRBQWFmLZsmV4+eWX0bBhQwwaNAgfffRR3SZ3MHtSL2PlAeP/rwseCkMDuUn/6YiIiKxWrV4zYmmO/pqRwpIy3Ld4N7LUJXgyvCXeHV39u5eIiIisRb28ZoSk8X9/nEKWugQtvD3x2nC+e4aIiOwLY8TKxabkYfWhDMhkwMJxYfB043qGiIjsC2PEiqlvlOH1dUkAgKd6B6FHUPWfdEtERGSrGCNW7IPfTyJHU4KgJg3wyn3tpB6HiIioXjBGrNTO07lYc+QSZDJgwUOh8HBzlnokIiKiesEYsULq4r/XM5MjgtCtFdczRERkvxgjVujdTcnIK9SiddMGeHko1zNERGTfGCNWZtvJXKw/lgmnm++ecXfleoaIiOwbY8SKXC0qxdwNxvXMM/1ao0uLRhJPREREVP8YI1bknU3JuFyoRbCPF14cfJfU4xAREVkEY8RKxJzIwW/Hs+DsJMMirmeIiMiBMEasQEFRKd781biemdq/NcICG0o7EBERkQUxRqzA27+dwJXrpWjnq8Cse9tKPQ4REZFFMUYk9kdiNn5PzIazkwwLx4VB7sL1DBERORbGiISuXNfird9OAACmD2iDzgEqiSciIiKyPMaIRIQQeOvXEygoKkV7PwVmDOJ6hoiIHBNjRCK/J2Zjy4kcuDjJsOjhMLi58D8FERE5Jj4CSiCvsKRiPTNjUDA6NuN6hoiIHBdjxMKEEHhjwwlcKy5DiL8S0wcGSz0SERGRpBgjFvbb8SxsO5kLV2fjesbVmf8JiIjIsfGR0ILyNCWYtzEZAPD8vW3RwV8p8URERETSY4xYiBACczckQX2jDJ2bqzC1fxupRyIiIrIKjBELWX80E9tP5cHN2QkLx4XBhesZIiIiAIwRi8hRl+CdTcb1zAtD2qKdn0LiiYiIiKwHY6SeCSHw+vpEFJboEBbYEM/2bS31SERERFaFMVLP1hy5hNiUy3BzccKicaFczxAREf0LHxnrUda1G3h/00kAwMtD7kKwD9czRERE/8YYqSdCCLy2LhGFWh3uadEQk7meISIiqhJjpJ6sPpSBPalXIHcxvnvG2Ukm9UhERERWiTFSDy5dLcb//XEKAPDKfe3QpqmXxBMRERFZL8aImZWvZ65rdejWshGe6hMk9UhERERWjTFiZj8dSMdfZ/Ph7uqEBVzPEBER3RFjxIwyCorx4Wbjeua1Ye0R1KSBxBMRERFZP8aImRgMAq+uTURxqR49grzxZHgrqUciIiKyCYwRM/nxwEXsP58PTzdnLHwoDE5czxAREdUIY8QMLuYXIXLzaQDA68Pbo0VjT4knIiIish2MkToyGAReWZOIG2V6hLdujCd6tpR6JCIiIpvCGKmjb/ddwMELBWjg5oyPHwrleoaIiMhEjJE6SLtShI//NK5n5o7ogEBvrmeIiIhMxRipJb1B4JU1CSgpMyAiuAke69FC6pGIiIhskkkxEhkZie7du0OhUMDHxwdjxoxBSkrKbc8zceJEyGSyW04dO3as0+BS++avNBy+eBVechfMH9sZMhnXM0RERLVhUozExcVh+vTpiI+Px7Zt26DT6TB06FAUFRVVe56oqChkZ2dXnDIyMuDt7Y1x48bVeXipnLt8HQv+NEbYmyM6IKAR1zNERES15WLKwTExMZW+/uabb+Dj44MjR46gX79+VZ5HpVJBpVJVfP3rr7/i6tWreOqpp2oxrvT0BoHZaxKg1RnQ766meKR7oNQjERER2TSTYuTf1Go1AMDb27vG5/nqq68wePBgtGxZ/VtgtVottFptxdcajab2Q5rZl3vO41j6NSjcXfAR1zNERER1VusXsAoh8NJLLyEiIgKdOnWq0Xmys7OxZcsWTJ48+bbHRUZGVjyjolKpEBhoHc8+pOYWYtG2MwCAt0aGwF/lIfFEREREtq/WMTJjxgwkJiZi1apVNT7Pt99+i4YNG2LMmDG3PW7OnDlQq9UVp4yMjNqOaTY6vQGz1ySgVGfAwHZNMa5rgNQjERER2YVarWlmzpyJjRs3Yvfu3QgIqNmDshACX3/9NcaPHw83N7fbHiuXyyGXy2szWr1Zsfs8Ei6poXR3QeSDoVzPEBERmYlJMSKEwMyZM7FhwwbExsYiKCioxueNi4vD2bNnMWnSJJOHlFpKTiGitqcCAN75T0f4qdwlnoiIiMh+mLSmmT59On788UesXLkSCoUCOTk5yMnJwY0bNyqOmTNnDiZMmHDLeb/66iv07Nmzxq8vsRZl5esZvQGDO/jggXuaSz0SERGRXTEpRqKjo6FWqzFgwAD4+/tXnH7++eeKY7Kzs5Genl7pfGq1GuvWrbPJZ0U+jz2HpEw1VB6u+PABvnuGiIjI3Exe09zJt99+e8v3VCoViouLTbkqq3AqW4NPdxrXM++N7ggfJdczRERE5sa/TVONMr0BL/+SgDK9wH0dffGfsGZSj0RERGSXGCPVWL7rLE5ma9DI0xUfjOF6hoiIqL4wRqpwIlONZTvPAgDeG90JTRXW9TZjIiIie8IY+ZdSnfHdMzqDwP2d/TAy1F/qkYiIiOwaY+Rflu1MxemcQjRu4Ib3R3fieoaIiKieMUb+IemSGstjzwEAPhjTCY29uJ4hIiKqb4yRm7Q6PV5ecxx6g8DIUH8M78z1DBERkSXU6m/T2AO9QeBgWgHyCkvgo3BH3Jk8nMm9jiZebnhvtG19SiwREZEtc8gYiTmRjXc3nUS2uuSWn30wpjO8G9z+D/kRERGR+ThcjMScyMa0H4+i+s+SvfOnzBIREZH5ONRrRvQGgXc3naw2N2QA3t10EnoDg4SIiMhSHCpGDqYVVLmaKScAZKtLcDCtwHJDEREROTiHipG8wupDpDbHERERUd05VIz4KGr2V3drehwRERHVnUPFSI8gb/ir3FHdZ6rKAPir3NEjyNuSYxERETk0h4oRZycZ5o0KAYBbgqT863mjQuDsxI+AJyIishSHihEAGNbJH9FPdIGfqvIqxk/ljugnumBYJ37yKhERkSU53OeMAMYgGRLiV+kTWHsEefMZESIiIgk4ZIwAxpVNeJvGUo9BRETk8BxuTUNERETWhTFCREREkmKMEBERkaQYI0RERCQpxggRERFJijFCREREkmKMEBERkaQYI0RERCQpxggRERFJyiY+gVUIAQDQaDQST0JEREQ1Vf64Xf44Xh2biJHCwkIAQGBgoMSTEBERkakKCwuhUqmq/blM3ClXrIDBYEBWVhYUCgVkMvP9MTuNRoPAwEBkZGRAqVSa7XKJqOZ4PySSVn3eB4UQKCwsRLNmzeDkVP0rQ2zimREnJycEBATU2+UrlUr+EiSSGO+HRNKqr/vg7Z4RKccXsBIREZGkGCNEREQkKYeOEblcjnnz5kEul0s9CpHD4v2QSFrWcB+0iRewEhERkf1y6GdGiIiISHqMESIiIpIUY4SIiIgkxRghIiIiSdl8jERGRqJ79+5QKBTw8fHBmDFjkJKSUukYIQTeeecdNGvWDB4eHhgwYACSk5MrHfPFF19gwIABUCqVkMlkuHbt2i3XdebMGYwePRpNmjSBUqlEnz59sGvXrvq8eURWz5L3waNHj2LIkCFo2LAhGjdujGeffRbXr1+vz5tHZBPMcT8sKCjAzJkz0a5dO3h6eqJFixaYNWsW1Gp1pcu5evUqxo8fD5VKBZVKhfHjx1d5fzWFzcdIXFwcpk+fjvj4eGzbtg06nQ5Dhw5FUVFRxTEff/wxPvnkEyxbtgyHDh2Cn58fhgwZUvE3bwCguLgYw4YNw9y5c6u9rhEjRkCn02Hnzp04cuQI7r77bowcORI5OTn1ehuJrJml7oNZWVkYPHgwgoODceDAAcTExCA5ORkTJ06s75tIZPXMcT/MyspCVlYWFi5ciKSkJHz77beIiYnBpEmTKl3XY489huPHjyMmJgYxMTE4fvw4xo8fX7cbIOxMXl6eACDi4uKEEEIYDAbh5+cn5s+fX3FMSUmJUKlU4vPPP7/l/Lt27RIAxNWrVyt9//LlywKA2L17d8X3NBqNACC2b99ePzeGyAbV131wxYoVwsfHR+j1+orvHTt2TAAQqamp9XNjiGxUXe+H5X755Rfh5uYmysrKhBBCnDx5UgAQ8fHxFcfs379fABCnT5+u9bw2/8zIv5U/neTt7Q0ASEtLQ05ODoYOHVpxjFwuR//+/bFv374aX27jxo3RoUMHfP/99ygqKoJOp8OKFSvg6+uLrl27mvdGENmw+roParVauLm5VfpjWx4eHgCAvXv3mmN0IrthrvuhWq2GUqmEi4vxT9nt378fKpUKPXv2rDimV69eUKlUJt2f/82uYkQIgZdeegkRERHo1KkTAFSsUHx9fSsd6+vra9J6RSaTYdu2bTh27BgUCgXc3d2xePFixMTEoGHDhma7DUS2rD7vg4MGDUJOTg4WLFiA0tJSXL16tWKlk52dbaZbQGT7zHU/zM/Px/vvv48pU6ZUfC8nJwc+Pj63HOvj41OnlyzYVYzMmDEDiYmJWLVq1S0/k8lklb4WQtzyvdsRQuC5556Dj48P9uzZg4MHD2L06NEYOXIkfxES3VSf98GOHTviu+++w6JFi+Dp6Qk/Pz+0bt0avr6+cHZ2rvPsRPbCHPdDjUaDESNGICQkBPPmzbvtZdzucmrKbmJk5syZ2LhxI3bt2oWAgICK7/v5+QHALcWWl5d3SyHezs6dO/H7779j9erV6NOnD7p06YLPPvsMHh4e+O6778xzI4hsWH3fBwHjC+dycnKQmZmJ/Px8vPPOO7h8+TKCgoLqfgOI7IA57oeFhYUYNmwYvLy8sGHDBri6ula6nNzc3Fuu9/Llyybfn//J5mNECIEZM2Zg/fr12Llz5y2/lIKCguDn54dt27ZVfK+0tBRxcXHo3bt3ja+nuLgYACrtq8u/NhgMdbgFRLbNUvfBf/L19YWXlxd+/vlnuLu7Y8iQIXW6DUS2zlz3Q41Gg6FDh8LNzQ0bN26Eu7t7pcsJDw+HWq3GwYMHK7534MABqNXqWt+fy2+ATZs2bZpQqVQiNjZWZGdnV5yKi4srjpk/f75QqVRi/fr1IikpSTz66KPC399faDSaimOys7PFsWPHxP/+97+Kd80cO3ZM5OfnCyGM76Zp3LixePDBB8Xx48dFSkqKmD17tnB1dRXHjx+3+O0mshaWug8KIcTSpUvFkSNHREpKili2bJnw8PAQUVFRFr29RNbIHPdDjUYjevbsKTp37izOnj1b6XJ0Ol3F5QwbNkyEhoaK/fv3i/3794vOnTuLkSNH1ml+m48RAFWevvnmm4pjDAaDmDdvnvDz8xNyuVz069dPJCUlVbqcefPm3fFyDh06JIYOHSq8vb2FQqEQvXr1Eps3b7bQLSWyTpa8D44fP154e3sLNzc3ERoaKr7//nsL3Uoi62aO+2H52+qrOqWlpVUcl5+fLx5//HGhUCiEQqEQjz/++C1vxTeV7OaNICIiIpKEzb9mhIiIiGwbY4SIiIgkxRghIiIiSTFGiIiISFKMESIiIpIUY4SIiIgkxRghIiIiSTFGiIiISFKMESIiIpIUY4SIiIgkxRghIiIiSTFGiIiISFL/DzCdxw+DsGJGAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot('科目GP', 'o-', data=gpa_mean)\n",
"plt.xticks(yr)\n",
"pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 図示:前期後期毎"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 「修得学期」の英語化"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"「修得学期」の要素が日本語だと警告が出るため,メソッド`.replace()`を使って英語に変換する。`replace()`の引数は辞書で指定する。\n",
"* キー:変更する対象の数値や文字列\n",
"* 値:変更後の数値や文字列"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" No. | \n",
" 区分 | \n",
" 科目大区分 | \n",
" 科目中区分 | \n",
" 科目ナンバー | \n",
" 科目 | \n",
" 単位数 | \n",
" 修得年度 | \n",
" 修得学期 | \n",
" 評語 | \n",
" 科目GP | \n",
" 合否 | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" 3 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AA100 | \n",
" XX学 | \n",
" 1 | \n",
" 2020 | \n",
" 1 | \n",
" 可 | \n",
" 2.0 | \n",
" 合 | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学A | \n",
" 1 | \n",
" 2020 | \n",
" 2 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AB100 | \n",
" XX学B | \n",
" 1 | \n",
" 2019 | \n",
" 2 | \n",
" 可 | \n",
" 2.0 | \n",
" 合 | \n",
"
\n",
" \n",
" 5 | \n",
" 6 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学A | \n",
" 1 | \n",
" 2019 | \n",
" 2 | \n",
" 優 | \n",
" 4.0 | \n",
" 合 | \n",
"
\n",
" \n",
" 6 | \n",
" 7 | \n",
" 全学共通授業科目 | \n",
" 基礎教養科目 | \n",
" NaN | \n",
" U1AD100 | \n",
" X学B | \n",
" 1 | \n",
" 2019 | \n",
" 1 | \n",
" 秀 | \n",
" 4.3 | \n",
" 合 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" No. 区分 科目大区分 科目中区分 科目ナンバー 科目 単位数 修得年度 修得学期 評語 科目GP 合否\n",
"2 3 全学共通授業科目 基礎教養科目 NaN U1AA100 XX学 1 2020 1 可 2.0 合\n",
"3 4 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学A 1 2020 2 秀 4.3 合\n",
"4 5 全学共通授業科目 基礎教養科目 NaN U1AB100 XX学B 1 2019 2 可 2.0 合\n",
"5 6 全学共通授業科目 基礎教養科目 NaN U1AD100 X学A 1 2019 2 優 4.0 合\n",
"6 7 全学共通授業科目 基礎教養科目 NaN U1AD100 X学B 1 2019 1 秀 4.3 合"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa['修得学期'] = gpa['修得学期'].replace({'前期':'1','後期':'2'})\n",
"gpa.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### `groupby`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"「修得年度」と「修得学期」でグループ化する。"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" 単位数 | \n",
" 科目GP | \n",
"
\n",
" \n",
" 修得年度 | \n",
" 修得学期 | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 2018 | \n",
" 1 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.500000 | \n",
" 3.216667 | \n",
"
\n",
" \n",
" 2019 | \n",
" 1 | \n",
" 1.000000 | \n",
" 3.150000 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.250000 | \n",
" 3.575000 | \n",
"
\n",
" \n",
" 2020 | \n",
" 1 | \n",
" 1.333333 | \n",
" 2.666667 | \n",
"
\n",
" \n",
" 2 | \n",
" 2.000000 | \n",
" 3.533333 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 単位数 科目GP\n",
"修得年度 修得学期 \n",
"2018 1 1.000000 1.000000\n",
" 2 1.500000 3.216667\n",
"2019 1 1.000000 3.150000\n",
" 2 1.250000 3.575000\n",
"2020 1 1.333333 2.666667\n",
" 2 2.000000 3.533333"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa_grouped = gpa.groupby(['修得年度','修得学期'])\n",
"gpa_mean = gpa_grouped[two_vars].mean()\n",
"gpa_mean"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 図示"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"横軸に文字列を使う。まず`gpa_mean`のインデックスを確認する。"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MultiIndex([(2018, '1'),\n",
" (2018, '2'),\n",
" (2019, '1'),\n",
" (2019, '2'),\n",
" (2020, '1'),\n",
" (2020, '2')],\n",
" names=['修得年度', '修得学期'])"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gpa_mean.index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"これを使い横軸に使う文字列を作成する。"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['2018-1', '2018-2', '2019-1', '2019-2', '2020-1', '2020-2']"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"yr_half = [str(i[0])+'-'+str(i[1]) for i in gpa_mean.index]\n",
"yr_half"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(yr_half, gpa_mean['科目GP'], marker='o')\n",
"pass"
]
}
],
"metadata": {
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}