データの読み込み

In [ ]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
In [ ]:
#pandasをインポート
import pandas as pd

# DataSample.xlsx の読み込み
df = pd.read_excel('/content/drive/My Drive/Colab Notebooks/DataSample.xlsx')

df
Out[ ]:
ID Gender GPA Attendance Japanese English Mathematics Prefecture
0 1 M 1.355 0.58 64.0 7.0 35.0 長崎県
1 2 F 1.847 0.65 NaN NaN NaN 福岡県
2 3 M 3.261 0.96 62.0 63.0 30.0 福岡県
3 4 M 2.320 0.93 58.0 56.0 45.0 福岡県
4 5 F 0.000 0.30 70.0 26.0 40.0 福岡県
... ... ... ... ... ... ... ... ...
516 517 M 2.419 0.83 70.0 85.0 NaN 熊本県
517 518 M 1.716 0.84 62.0 12.0 NaN 福岡県
518 519 M 1.629 0.88 42.0 16.0 NaN 福岡県
519 520 M 1.490 0.78 56.0 NaN NaN 福岡県
520 521 M 2.378 0.92 54.0 19.0 40.0 福岡県

521 rows × 8 columns

In [ ]:
# データフレームの基本情報
print('行数・列数:', df.shape)
print('項目名:', df.columns)
print('各列のデータ型:\n', df.dtypes)
行数・列数: (521, 8)
項目名: Index(['ID', 'Gender', 'GPA', 'Attendance', 'Japanese', 'English',
       'Mathematics', 'Prefecture'],
      dtype='object')
各列のデータ型:
 ID               int64
Gender          object
GPA            float64
Attendance     float64
Japanese       float64
English        float64
Mathematics    float64
Prefecture      object
dtype: object
In [ ]:
# ID のデータ型を数値から文字列に変換
df['ID'] =  df['ID'].astype(str)
In [ ]:
# 要約統計量を表示
df.describe()
Out[ ]:
GPA Attendance Japanese English Mathematics
count 521.000000 521.000000 495.000000 493.000000 217.000000
mean 1.977735 0.805451 55.557576 38.880325 39.451613
std 0.766971 0.129656 13.800495 25.320544 21.797866
min 0.000000 0.200000 19.000000 0.000000 0.000000
25% 1.400000 0.730000 46.000000 19.000000 20.000000
50% 1.909000 0.830000 56.000000 37.000000 40.000000
75% 2.471000 0.900000 66.000000 57.000000 55.000000
max 3.786000 0.990000 88.000000 98.000000 100.000000

データの前処理・抽出・基本統計

In [ ]:
# 欠損値の確認
df.isnull().sum()
Out[ ]:
ID               0
Gender           0
GPA              0
Attendance       0
Japanese        26
English         28
Mathematics    304
Prefecture       0
dtype: int64
In [ ]:
# 欠損値を含む行を削除
df = df.dropna(how='any')
# 状態の確認
print(df.shape)
df.isnull().sum()
(216, 8)
Out[ ]:
ID             0
Gender         0
GPA            0
Attendance     0
Japanese       0
English        0
Mathematics    0
Prefecture     0
dtype: int64
In [ ]:
# 福岡県の行のみ抽出1
df_pref_fukuoka = df[ df['Prefecture'] == '福岡県' ]
df_pref_fukuoka
Out[ ]:
ID Gender GPA Attendance Japanese English Mathematics Prefecture
2 3 M 3.261 0.96 62.0 63.0 30.0 福岡県
3 4 M 2.320 0.93 58.0 56.0 45.0 福岡県
4 5 F 0.000 0.30 70.0 26.0 40.0 福岡県
8 9 M 3.700 0.97 78.0 91.0 65.0 福岡県
10 11 F 3.167 0.82 68.0 77.0 50.0 福岡県
... ... ... ... ... ... ... ... ...
500 501 M 1.792 0.80 72.0 3.0 15.0 福岡県
502 503 M 2.417 0.86 74.0 56.0 10.0 福岡県
509 510 M 1.375 0.84 36.0 5.0 20.0 福岡県
513 514 M 1.950 0.76 78.0 1.0 90.0 福岡県
520 521 M 2.378 0.92 54.0 19.0 40.0 福岡県

179 rows × 8 columns

In [ ]:
# 福岡県の行のみ抽出2( query() )
df_pref_fukuoka2 = df.query( " Prefecture == '福岡県'  ")
df_pref_fukuoka2
Out[ ]:
ID Gender GPA Attendance Japanese English Mathematics Prefecture
2 3 M 3.261 0.96 62.0 63.0 30.0 福岡県
3 4 M 2.320 0.93 58.0 56.0 45.0 福岡県
4 5 F 0.000 0.30 70.0 26.0 40.0 福岡県
8 9 M 3.700 0.97 78.0 91.0 65.0 福岡県
10 11 F 3.167 0.82 68.0 77.0 50.0 福岡県
... ... ... ... ... ... ... ... ...
500 501 M 1.792 0.80 72.0 3.0 15.0 福岡県
502 503 M 2.417 0.86 74.0 56.0 10.0 福岡県
509 510 M 1.375 0.84 36.0 5.0 20.0 福岡県
513 514 M 1.950 0.76 78.0 1.0 90.0 福岡県
520 521 M 2.378 0.92 54.0 19.0 40.0 福岡県

179 rows × 8 columns

In [ ]:
# 福岡のデータをGPAの順で並べ替え( sort() 降順 )
df_pref_fukuoka_gpa_sort = df_pref_fukuoka.sort_values('GPA', ascending=False )
df_pref_fukuoka_gpa_sort.head()
Out[ ]:
ID Gender GPA Attendance Japanese English Mathematics Prefecture
360 361 M 3.786 0.91 70.0 65.0 70.0 福岡県
8 9 M 3.700 0.97 78.0 91.0 65.0 福岡県
358 359 F 3.625 0.92 56.0 65.0 45.0 福岡県
422 423 F 3.571 0.99 74.0 81.0 60.0 福岡県
281 282 M 3.542 0.98 60.0 47.0 55.0 福岡県
In [ ]:
# 出身県別のデータ件数( value_counts() )
df_pref_counts = df['Prefecture'].value_counts()
df_pref_counts
Out[ ]:
福岡県    179
長崎県     16
佐賀県     11
熊本県     10
Name: Prefecture, dtype: int64
In [ ]:
# 出身県別の平均
df_pref_mean = df.groupby('Prefecture').mean()
df_pref_mean
Out[ ]:
GPA Attendance Japanese English Mathematics
Prefecture
佐賀県 1.931091 0.774545 55.000000 40.818182 41.363636
熊本県 2.468700 0.848000 57.800000 51.600000 47.000000
福岡県 2.136196 0.813687 57.620112 44.815642 38.189944
長崎県 2.249437 0.826250 57.937500 37.062500 49.375000
In [ ]:
# クロス集計 出身県別の男女の数
cross_table = pd.crosstab( df['Prefecture'] , df['Gender'] )
cross_table
Out[ ]:
Gender F M
Prefecture
佐賀県 1 10
熊本県 3 7
福岡県 34 145
長崎県 2 14
In [ ]:
# クロス集計 正規化
cross_table_n = pd.crosstab( df['Prefecture'] , df['Gender'] , normalize='index' )
cross_table_n
Out[ ]:
Gender F M
Prefecture
佐賀県 0.090909 0.909091
熊本県 0.300000 0.700000
福岡県 0.189944 0.810056
長崎県 0.125000 0.875000
In [ ]:
# 相関係数を表示
print(df.corr())
                  GPA  Attendance  Japanese   English  Mathematics
GPA          1.000000    0.761032  0.239548  0.472655     0.309402
Attendance   0.761032    1.000000 -0.022475  0.159457     0.143857
Japanese     0.239548   -0.022475  1.000000  0.547091     0.397572
English      0.472655    0.159457  0.547091  1.000000     0.479791
Mathematics  0.309402    0.143857  0.397572  0.479791     1.000000
  • 出席率とGPAには、高い相関(0.761)があることがわかります。
  • 国語・英語・数学のうち、GPAと最も相関が高いのが「英語(0.473)」です。