卒業論文


第2章第1節「学生とゼミ」用コード


In [1]:
%matplotlib inline
from __future__ import division
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import thinkstats2
import thinkplot

In [18]:
data = pd.read_csv("zemi.csv")
data = data[data['junior'] > 0]
data


Out[18]:
id name 12 13 14 15_1 15_2 15_3 all junior ... s7 s8 s9 s10 s11 s12 s13 s14 s15 s16
0 1 aoki 0 0 9 6 5 0 20 11 ... 118 1103 1119 1120 2050 NaN NaN NaN NaN NaN
1 2 ishihara 0 0 9 6 8 0 23 14 ... 31 42 101 139 171 1042 1058 2044 NaN NaN
2 3 itou 0 0 12 13 0 0 25 13 ... 174 109 99 96 36 35 34 NaN NaN NaN
3 4 ueda 0 0 10 13 0 0 23 13 ... 173 1075 1093 2014 2029 2035 2040 NaN NaN NaN
4 5 oohashi 0 1 4 2 9 0 16 11 ... 1009 1034 70 1109 78 NaN NaN NaN NaN NaN
5 6 oomori 1 0 0 1 2 0 4 3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 7 okazaki 0 1 1 10 6 0 18 16 ... 1031 1024 1100 1110 99 169 1013 1028 1085 2047
7 8 onoduka 0 0 18 9 4 0 31 13 ... 158 1033 2025 95 155 1091 1015 NaN NaN NaN
9 10 obinata 0 0 7 5 0 0 12 5 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 11 oyama 0 0 4 1 5 0 10 6 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 12 kasuya 0 0 6 2 10 0 18 12 ... 1052 1054 1055 1076 177 2028 NaN NaN NaN NaN
12 13 katou 0 0 1 1 0 0 2 1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 14 kamiya 0 0 2 1 0 0 3 1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 15 kandori 0 0 13 8 2 0 23 10 ... 126 135 1117 1104 NaN NaN NaN NaN NaN NaN
16 17 kubokawa 0 1 8 4 0 0 13 4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 18 kuwashima 0 0 5 2 1 0 8 3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 19 saguti 0 0 12 12 0 0 24 12 ... 164 1038 1042 1049 1063 1080 NaN NaN NaN NaN
19 20 satou 0 0 5 4 5 0 14 9 ... 2015 2020 2026 NaN NaN NaN NaN NaN NaN NaN
20 21 sawada 1 0 13 8 4 1 27 13 ... 2014 82 170 1030 12 92 1102 NaN NaN NaN
21 22 shibata 0 0 10 7 4 0 21 11 ... 2048 7 96 2005 2043 NaN NaN NaN NaN NaN
22 23 simotu 0 0 5 3 2 0 11 5 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 24 shutou 0 0 5 3 3 0 11 6 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 25 shiroyama 0 0 5 3 1 4 13 8 ... 106 167 NaN NaN NaN NaN NaN NaN NaN NaN
25 26 takahashiaki 0 0 4 3 3 0 10 6 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 27 takahashinobu 0 1 10 10 0 0 21 10 ... 1072 1082 1116 1118 NaN NaN NaN NaN NaN NaN
27 28 takenouchi 0 3 6 1 3 0 13 4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 29 tanimoto 0 0 8 3 2 3 16 8 ... 2032 1021 NaN NaN NaN NaN NaN NaN NaN NaN
29 30 tabuti 0 0 11 11 0 0 22 11 ... 131 141 2003 2007 2013 NaN NaN NaN NaN NaN
30 31 nishimura 0 0 11 9 4 0 24 13 ... 1120 2027 2037 163 1111 2008 2012 NaN NaN NaN
31 32 baba 0 2 7 0 3 7 19 10 ... 1045 1065 1066 2034 NaN NaN NaN NaN NaN NaN
32 33 hayashi 0 1 11 12 0 0 24 12 ... 101 133 136 137 144 171 NaN NaN NaN NaN
33 34 hukuda 0 0 13 8 2 0 23 10 ... 1047 1062 172 1040 NaN NaN NaN NaN NaN NaN
34 35 hujimoto 0 0 8 4 0 0 12 4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
35 36 matui 0 0 6 14 0 0 20 14 ... 161 63 28 129 17 27 163 135 NaN NaN
36 37 matushima 1 0 11 12 4 0 28 16 ... 138 18 1059 148 1092 71 1016 116 2010 28
37 38 miyao 0 0 3 1 4 0 8 5 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
38 39 mochida 0 0 15 11 4 0 30 15 ... 1056 1081 1096 1108 103 111 144 152 158 NaN
39 40 yasaka 0 0 10 3 3 0 16 6 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
41 42 yanagawa 0 0 14 13 0 0 27 13 ... 1027 1101 1116 1115 2001 2021 2051 NaN NaN NaN
42 43 yoshikawa 1 1 15 15 0 0 32 15 ... 1085 56 1070 47 145 1119 75 168 1036 NaN
43 44 yoneyama 0 0 6 3 2 0 11 5 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
44 45 watanabe 0 0 10 6 2 0 18 8 ... 1030 1083 NaN NaN NaN NaN NaN NaN NaN NaN

42 rows × 29 columns


In [3]:
# summary statistics
data['junior'].describe()


Out[3]:
count    42.000000
mean      9.166667
std       4.247907
min       1.000000
25%       5.250000
50%      10.000000
75%      13.000000
max      16.000000
Name: junior, dtype: float64

In [4]:
# histgram
junior = thinkstats2.Hist(np.asarray(data['junior']))
thinkplot.PrePlot(1)
thinkplot.Hist(junior, label='Juniors')
thinkplot.Config(xlabel='The num of juniors', ylabel='Freq', loc=2, axis=[0, 17, 0, 7])



In [21]:
# separate seminar from lecture
semi = data[data['zemi']==1]
lec = data[data['zemi']==0]

In [22]:
# summary statistics of 'seminar'
semi['junior'].describe()


Out[22]:
count    35.000000
mean      9.657143
std       3.925354
min       3.000000
25%       6.000000
50%      10.000000
75%      13.000000
max      16.000000
Name: junior, dtype: float64

In [24]:
# histgram of 'seminar'
semi_hist = thinkstats2.Hist(np.asarray(semi['junior']))
thinkplot.PrePlot(2)
thinkplot.Hist(semi_hist, label='seminar')
thinkplot.Config(xlabel='The number of juniors', ylabel='Freq', loc=2, axis=[0, 17, 0, 5])
plt.savefig("zemi.png")



In [8]:
semi_cmf = thinkstats2.Cdf(np.asarray(semi['junior']))
thinkplot.PrePlot(2)
thinkplot.Cdf(semi_cmf, label='seminar')
thinkplot.Config(title='The number of juniors in each seminar', xlabel='The num of juniors', ylabel='Freq', loc=2, axis=[0, 17, 0, 1])



In [20]:
junior = []
double = []
single = []
for i in np.asarray(data[['s1','s2','s3','s4','s5','s6','s7','s8','s9','s10','s11','s12','s13','s14','s15','s16']], dtype=int).reshape(16*42).tolist():
    if i >=0:
        junior.append(i)
hist = thinkstats2.Hist(junior)
for val, freq in hist.Items():
    if freq == 2:
        double.append(val)
    elif freq == 1:
        single.append(val)
    else:
        print('ERROR')
        print(val)
        print(freq)
print('Capa' ,str(len(junior)))
print('Single', len(single))
print('Double', len(double))
print('None', 345-len(single)-len(double))
print('All', len(single)+len(double))


ERROR
2050
4
ERROR
12
4
('Capa', '385')
('Single', 227)
('Double', 75)
('None', 43)
('All', 302)

In [17]:
len(np.asarray(data[['s1','s2','s3','s4','s5','s6','s7','s8','s9','s10','s11','s12','s13','s14','s15','s16']], dtype=int))


Out[17]:
42