import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# グラフをinline表示可能にする
%matplotlib inline
# 解像度を上げてinline表示する
%config InlineBackend.figure_format = 'retina'
# 日本語表示用ライブラリ(matplotlibで日本語を使用したい場合)
import japanize_matplotlib
# excelファイルの直接読み込み(シート名指定)
url = 'https://www.ces-alpha.org/course/file_serve/5650149854412800/class_score.xlsx'
df1 = pd.read_excel(url, sheet_name = 'score')
df1
id | 性別 | 国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|---|---|
0 | 14 | 男 | 71 | 98 | 81 | 91 | 99 |
1 | 2 | 男 | 89 | 98 | 92 | 83 | 66 |
2 | 1 | 女 | 89 | 65 | 85 | 70 | 88 |
3 | 11 | 女 | 89 | 55 | 72 | 92 | 84 |
4 | 18 | 男 | 93 | 87 | 56 | 90 | 64 |
5 | 20 | 女 | 76 | 90 | 65 | 67 | 89 |
6 | 10 | 男 | 44 | 96 | 56 | 89 | 71 |
7 | 4 | 男 | 45 | 96 | 50 | 80 | 67 |
8 | 9 | 女 | 63 | 70 | 82 | 63 | 56 |
9 | 8 | 女 | 81 | 65 | 70 | 45 | 70 |
10 | 6 | 女 | 60 | 73 | 83 | 60 | 53 |
11 | 5 | 男 | 77 | 48 | 67 | 60 | 64 |
12 | 16 | 女 | 67 | 83 | 48 | 57 | 44 |
13 | 3 | 男 | 52 | 45 | 67 | 67 | 67 |
14 | 13 | 女 | 65 | 58 | 62 | 50 | 53 |
15 | 7 | 男 | 44 | 46 | 61 | 56 | 65 |
16 | 15 | 男 | 53 | 62 | 41 | 57 | 55 |
17 | 17 | 男 | 45 | 56 | 30 | 73 | 49 |
18 | 19 | 女 | 42 | 57 | 56 | 33 | 61 |
19 | 12 | 女 | 31 | 37 | 66 | 4 | 50 |
# データサイズの確認
len(df1)
20
# データサイズの確認
df1.shape
(20, 7)
# データ型の確認
df1.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 20 entries, 0 to 19 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 20 non-null int64 1 性別 20 non-null object 2 国語 20 non-null int64 3 数学 20 non-null int64 4 英語 20 non-null int64 5 理科 20 non-null int64 6 社会 20 non-null int64 dtypes: int64(6), object(1) memory usage: 1.2+ KB
# 基本統計量
df1.describe()
id | 国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|---|
count | 20.00000 | 20.000000 | 20.000000 | 20.000000 | 20.000000 | 20.000000 |
mean | 10.50000 | 63.800000 | 69.250000 | 64.500000 | 64.350000 | 65.750000 |
std | 5.91608 | 18.852893 | 19.732087 | 15.659199 | 21.614505 | 14.671401 |
min | 1.00000 | 31.000000 | 37.000000 | 30.000000 | 4.000000 | 44.000000 |
25% | 5.75000 | 45.000000 | 55.750000 | 56.000000 | 56.750000 | 54.500000 |
50% | 10.50000 | 64.000000 | 65.000000 | 65.500000 | 65.000000 | 64.500000 |
75% | 15.25000 | 78.000000 | 87.750000 | 74.250000 | 80.750000 | 70.250000 |
max | 20.00000 | 93.000000 | 98.000000 | 92.000000 | 92.000000 | 99.000000 |
ls d:\Users\Desktop
ドライブ D のボリューム ラベルは data です ボリューム シリアル番号は 5813-7FC2 です d:\Users\Desktop のディレクトリ 2022/05/23 20:03 <DIR> . 2022/05/04 10:49 <DIR> .. 2022/05/11 14:30 17,535 ■_北海道.xlsx 2022/04/26 09:42 1,219,715 2.pdf 2022/05/21 08:16 <DIR> 2022スイングバイ 2022/05/23 20:03 275,738 DSA20220523.ipynb 2022/05/22 18:41 9,197 get_filelist00.ipynb 2022/04/22 15:20 7,098,375 IF202205_deepfake.pdf 2022/05/18 09:54 1,867,370 img012.jpg 2022/05/18 09:54 1,600,821 img013.jpg 2022/05/18 09:54 1,482,217 img014.jpg 2022/05/21 15:41 934 jupyter_notebook.lnk 2021/11/22 14:57 9,488,521 NSW202201_Twitter.pdf 2022/05/04 09:57 <DIR> tmp 2022/03/06 07:06 442,237 お支払い _ Yomogi Software.pdf 2022/05/23 16:24 377 スイングバイコメント.txt 2022/05/01 11:13 69,597 検診データ.pdf 2022/05/18 09:26 19,147 高校別志願実績.xlsx 2022/05/18 09:20 443,962 志願実績高校.pdf 2022/05/21 08:13 <DIR> 週報 2022/05/18 09:29 75,390 初志願者輩出_2022高校.pdf 2022/04/14 10:46 993,883 数理・データサイエンス・AI教育に関する政策動向等について.pdf 2022/05/04 09:00 815 創生学部.lnk 2022/05/04 09:07 <DIR> 退屈なことはPythonに 2022/05/19 16:26 650,532 第2回運営委員会資料.pdf 2022/05/14 09:42 1,170,370 壁掛型遠赤外線暖房機 据付説明書 CHK-C126A DHK-C1216A.pdf 2022/05/04 10:31 <DIR> 北大特別講義 20 個のファイル 26,926,733 バイト 7 個のディレクトリ 199,875,178,496 バイトの空き領域
# 点数のリスト
subjects = [df1['国語'], df1['数学'], df1['理科'], df1['社会'], df1['英語']]
# 外れ値用マーカー設定
flierprops = dict(marker="o", markerfacecolor='orange', markersize=8, markeredgecolor='none')
# 胴体設定
plt.gca().boxplot(subjects,
patch_artist=True,
flierprops = flierprops,
boxprops=dict(facecolor='pink'),
medianprops=dict(color='red', linewidth=1)
)
plt.title('科目別得点分布', fontsize=14)
plt.xlabel('科目', fontsize=12)
plt.ylabel('得点分布', fontsize=12)
plt.xticks([1,2,3,4,5], ('国語', '数学', '理科', '社会', '英語'))
plt.ylim([0,105])
plt.grid(False)
# グラフの保存(各自の環境に応じて保存パスを変えて下さい)
plt.savefig(r'D:\Users\Desktop\boxplot2.png', bbox_inches='tight', dpi=360, transparent=True);
# 相関係数
corr = df1.corr()
corr # id が邪魔
id | 国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|---|
id | 1.000000 | -0.128824 | 0.081831 | -0.549944 | -0.126976 | -0.120972 |
国語 | -0.128824 | 1.000000 | 0.320452 | 0.495971 | 0.490854 | 0.465048 |
数学 | 0.081831 | 0.320452 | 1.000000 | 0.140782 | 0.628032 | 0.344563 |
英語 | -0.549944 | 0.495971 | 0.140782 | 1.000000 | 0.100220 | 0.450963 |
理科 | -0.126976 | 0.490854 | 0.628032 | 0.100220 | 1.000000 | 0.508988 |
社会 | -0.120972 | 0.465048 | 0.344563 | 0.450963 | 0.508988 | 1.000000 |
# 指定列を一時的に削除
df1.drop(['id', '性別'], axis=1, inplace=True) # axis=0 は行、axis=1 は列
df1.tail() # 復活する 恒久的に消すには、 上で axis=1 の後に ,inplace=True を追記
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
15 | 44 | 46 | 61 | 56 | 65 |
16 | 53 | 62 | 41 | 57 | 55 |
17 | 45 | 56 | 30 | 73 | 49 |
18 | 42 | 57 | 56 | 33 | 61 |
19 | 31 | 37 | 66 | 4 | 50 |
#corr = df1.drop(['id', '性別'], axis=1).corr()
corr = df1.corr()
corr
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
国語 | 1.000000 | 0.320452 | 0.495971 | 0.490854 | 0.465048 |
数学 | 0.320452 | 1.000000 | 0.140782 | 0.628032 | 0.344563 |
英語 | 0.495971 | 0.140782 | 1.000000 | 0.100220 | 0.450963 |
理科 | 0.490854 | 0.628032 | 0.100220 | 1.000000 | 0.508988 |
社会 | 0.465048 | 0.344563 | 0.450963 | 0.508988 | 1.000000 |
Excelファイルにして他人と共有したい場合などに使えます。
corr.to_excel(r'd:\Users\Desktop\corr.xlsx')
import seaborn as sns
sns.heatmap(corr, vmax=1, vmin=-1, center=0);
plt.figure(figsize=(5, 5))
p = sns.heatmap(corr, annot=True, fmt='.2f', annot_kws={"fontsize":12}, cmap='RdYlGn', linewidths=2, square=True, cbar=False)
#p.set_title("Plot", fontsize = 20)
#p.set_xlabel("X-axis", fontsize = 18)
#p.set_ylabel("Y-axis", fontsize = 18)
p.set_xticklabels(p.get_xmajorticklabels(), fontsize = 16)
p.set_yticklabels(p.get_ymajorticklabels(), fontsize = 16);
# List of colormap
print(dir(plt.cm))
['Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'ColormapRegistry', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'Mapping', 'MutableMapping', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'ScalarMappable', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', '_DeprecatedCmapDictWrapper', '_LUTSIZE', '__builtin_cmaps', '__builtins__', '__cached__', '__doc__', '__file__', '__getattr__', '__loader__', '__name__', '__package__', '__spec__', '_api', '_cmap_registry', '_colormaps', '_gen_cmap_registry', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cbook', 'cividis', 'cividis_r', 'cmap_d', 'cmaps_listed', 'colors', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'datad', 'flag', 'flag_r', 'get_cmap', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'ma', 'magma', 'magma_r', 'mpl', 'nipy_spectral', 'nipy_spectral_r', 'np', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'register_cmap', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'unregister_cmap', 'viridis', 'viridis_r', 'winter', 'winter_r']
print(df1.describe().index)
print(df1.describe().columns)
Index(['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max'], dtype='object') Index(['国語', '数学', '英語', '理科', '社会'], dtype='object')
df1.describe()
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
count | 20.000000 | 20.000000 | 20.000000 | 20.000000 | 20.000000 |
mean | 63.800000 | 69.250000 | 64.500000 | 64.350000 | 65.750000 |
std | 18.852893 | 19.732087 | 15.659199 | 21.614505 | 14.671401 |
min | 31.000000 | 37.000000 | 30.000000 | 4.000000 | 44.000000 |
25% | 45.000000 | 55.750000 | 56.000000 | 56.750000 | 54.500000 |
50% | 64.000000 | 65.000000 | 65.500000 | 65.000000 | 64.500000 |
75% | 78.000000 | 87.750000 | 74.250000 | 80.750000 | 70.250000 |
max | 93.000000 | 98.000000 | 92.000000 | 92.000000 | 99.000000 |
# 列の抽出
df1.describe()['国語']
count 20.000000 mean 63.800000 std 18.852893 min 31.000000 25% 45.000000 50% 64.000000 75% 78.000000 max 93.000000 Name: 国語, dtype: float64
df1['国語']
0 71 1 89 2 89 3 89 4 93 5 76 6 44 7 45 8 63 9 81 10 60 11 77 12 67 13 52 14 65 15 44 16 53 17 45 18 42 19 31 Name: 国語, dtype: int64
df1.国語
0 71 1 89 2 89 3 89 4 93 5 76 6 44 7 45 8 63 9 81 10 60 11 77 12 67 13 52 14 65 15 44 16 53 17 45 18 42 19 31 Name: 国語, dtype: int64
tmp = df1.describe()
tmp['国語']
count 20.000000 mean 63.800000 std 18.852893 min 31.000000 25% 45.000000 50% 64.000000 75% 78.000000 max 93.000000 Name: 国語, dtype: float64
tmp
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
count | 20.000000 | 20.000000 | 20.000000 | 20.000000 | 20.000000 |
mean | 63.800000 | 69.250000 | 64.500000 | 64.350000 | 65.750000 |
std | 18.852893 | 19.732087 | 15.659199 | 21.614505 | 14.671401 |
min | 31.000000 | 37.000000 | 30.000000 | 4.000000 | 44.000000 |
25% | 45.000000 | 55.750000 | 56.000000 | 56.750000 | 54.500000 |
50% | 64.000000 | 65.000000 | 65.500000 | 65.000000 | 64.500000 |
75% | 78.000000 | 87.750000 | 74.250000 | 80.750000 | 70.250000 |
max | 93.000000 | 98.000000 | 92.000000 | 92.000000 | 99.000000 |
# 行の抽出
tmp.loc['75%']
国語 78.00 数学 87.75 英語 74.25 理科 80.75 社会 70.25 Name: 75%, dtype: float64
# index, column名で指定 (loc)
tmp.loc['75%','英語']
74.25
tmp
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
count | 20.000000 | 20.000000 | 20.000000 | 20.000000 | 20.000000 |
mean | 63.800000 | 69.250000 | 64.500000 | 64.350000 | 65.750000 |
std | 18.852893 | 19.732087 | 15.659199 | 21.614505 | 14.671401 |
min | 31.000000 | 37.000000 | 30.000000 | 4.000000 | 44.000000 |
25% | 45.000000 | 55.750000 | 56.000000 | 56.750000 | 54.500000 |
50% | 64.000000 | 65.000000 | 65.500000 | 65.000000 | 64.500000 |
75% | 78.000000 | 87.750000 | 74.250000 | 80.750000 | 70.250000 |
max | 93.000000 | 98.000000 | 92.000000 | 92.000000 | 99.000000 |
# 番号で指定 (iloc)
tmp.iloc[1, 3]
64.35
# 番号で行指定 (iloc)
tmp.iloc[1,:]
国語 63.80 数学 69.25 英語 64.50 理科 64.35 社会 65.75 Name: mean, dtype: float64
# 番号で列指定 (iloc)
tmp.iloc[:, 3]
count 20.000000 mean 64.350000 std 21.614505 min 4.000000 25% 56.750000 50% 65.000000 75% 80.750000 max 92.000000 Name: 理科, dtype: float64
# 番号で連続する行指定 (iloc)
tmp.iloc[1:3, :]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
mean | 63.800000 | 69.250000 | 64.500000 | 64.350000 | 65.750000 |
std | 18.852893 | 19.732087 | 15.659199 | 21.614505 | 14.671401 |
# 番号で連続する列指定 (iloc)
tmp.iloc[:, 1:4] # 0 は省略可
数学 | 英語 | 理科 | |
---|---|---|---|
count | 20.000000 | 20.000000 | 20.000000 |
mean | 69.250000 | 64.500000 | 64.350000 |
std | 19.732087 | 15.659199 | 21.614505 |
min | 37.000000 | 30.000000 | 4.000000 |
25% | 55.750000 | 56.000000 | 56.750000 |
50% | 65.000000 | 65.500000 | 65.000000 |
75% | 87.750000 | 74.250000 | 80.750000 |
max | 98.000000 | 92.000000 | 92.000000 |
# 番号で連続する列指定 (iloc)
tmp.iloc[:, 3:] # 後ろを省略すると最終列まで
理科 | 社会 | |
---|---|---|
count | 20.000000 | 20.000000 |
mean | 64.350000 | 65.750000 |
std | 21.614505 | 14.671401 |
min | 4.000000 | 44.000000 |
25% | 56.750000 | 54.500000 |
50% | 65.000000 | 64.500000 |
75% | 80.750000 | 70.250000 |
max | 92.000000 | 99.000000 |
df1.head(7)
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
3 | 89 | 55 | 72 | 92 | 84 |
4 | 93 | 87 | 56 | 90 | 64 |
5 | 76 | 90 | 65 | 67 | 89 |
6 | 44 | 96 | 56 | 89 | 71 |
# 国語合格者
ja_pass = df1['国語'] >= 60
ja_pass
0 True 1 True 2 True 3 True 4 True 5 True 6 False 7 False 8 True 9 True 10 True 11 True 12 True 13 False 14 True 15 False 16 False 17 False 18 False 19 False Name: 国語, dtype: bool
df1[ja_pass]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
3 | 89 | 55 | 72 | 92 | 84 |
4 | 93 | 87 | 56 | 90 | 64 |
5 | 76 | 90 | 65 | 67 | 89 |
8 | 63 | 70 | 82 | 63 | 56 |
9 | 81 | 65 | 70 | 45 | 70 |
10 | 60 | 73 | 83 | 60 | 53 |
11 | 77 | 48 | 67 | 60 | 64 |
12 | 67 | 83 | 48 | 57 | 44 |
14 | 65 | 58 | 62 | 50 | 53 |
ma_pass = df1['数学'] >= 60
en_pass = df1['英語'] >= 60
sc_pass = df1['理科'] >= 60
so_pass = df1['社会'] >= 60
# 全科目合格者
df1[ja_pass & ma_pass & en_pass & sc_pass & so_pass]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
5 | 76 | 90 | 65 | 67 | 89 |
# 英数国は合格で、理または社何れかの合格者
df1[ja_pass & ma_pass & en_pass & (sc_pass | so_pass)]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
5 | 76 | 90 | 65 | 67 | 89 |
8 | 63 | 70 | 82 | 63 | 56 |
9 | 81 | 65 | 70 | 45 | 70 |
10 | 60 | 73 | 83 | 60 | 53 |
df1['数学'] >= 90
0 True 1 True 2 False 3 False 4 False 5 True 6 True 7 True 8 False 9 False 10 False 11 False 12 False 13 False 14 False 15 False 16 False 17 False 18 False 19 False Name: 数学, dtype: bool
# 数学「秀」
df1[ df1['数学'] >= 90 ]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
5 | 76 | 90 | 65 | 67 | 89 |
6 | 44 | 96 | 56 | 89 | 71 |
7 | 45 | 96 | 50 | 80 | 67 |
# 国語「秀」 or 英語「秀」
df1[ (df1['国語'] >= 90) | (df1['英語'] >= 90) ]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
1 | 89 | 98 | 92 | 83 | 66 |
4 | 93 | 87 | 56 | 90 | 64 |
df1['国語'].mean()
63.8
df1['数学'].median()
65.0
# 国語:平均点以上 かつ 数学:中央値以上
df1[ (df1['国語'] >= df1['国語'].mean()) & (df1['数学'] >= df1['数学'].median()) ]
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
4 | 93 | 87 | 56 | 90 | 64 |
5 | 76 | 90 | 65 | 67 | 89 |
9 | 81 | 65 | 70 | 45 | 70 |
12 | 67 | 83 | 48 | 57 | 44 |
df1
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
3 | 89 | 55 | 72 | 92 | 84 |
4 | 93 | 87 | 56 | 90 | 64 |
5 | 76 | 90 | 65 | 67 | 89 |
6 | 44 | 96 | 56 | 89 | 71 |
7 | 45 | 96 | 50 | 80 | 67 |
8 | 63 | 70 | 82 | 63 | 56 |
9 | 81 | 65 | 70 | 45 | 70 |
10 | 60 | 73 | 83 | 60 | 53 |
11 | 77 | 48 | 67 | 60 | 64 |
12 | 67 | 83 | 48 | 57 | 44 |
13 | 52 | 45 | 67 | 67 | 67 |
14 | 65 | 58 | 62 | 50 | 53 |
15 | 44 | 46 | 61 | 56 | 65 |
16 | 53 | 62 | 41 | 57 | 55 |
17 | 45 | 56 | 30 | 73 | 49 |
18 | 42 | 57 | 56 | 33 | 61 |
19 | 31 | 37 | 66 | 4 | 50 |
# 英語点数でソート(降順)
df_en = df1.sort_values('英語', ascending = False)
df_en
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
10 | 60 | 73 | 83 | 60 | 53 |
8 | 63 | 70 | 82 | 63 | 56 |
0 | 71 | 98 | 81 | 91 | 99 |
3 | 89 | 55 | 72 | 92 | 84 |
9 | 81 | 65 | 70 | 45 | 70 |
11 | 77 | 48 | 67 | 60 | 64 |
13 | 52 | 45 | 67 | 67 | 67 |
19 | 31 | 37 | 66 | 4 | 50 |
5 | 76 | 90 | 65 | 67 | 89 |
14 | 65 | 58 | 62 | 50 | 53 |
15 | 44 | 46 | 61 | 56 | 65 |
6 | 44 | 96 | 56 | 89 | 71 |
4 | 93 | 87 | 56 | 90 | 64 |
18 | 42 | 57 | 56 | 33 | 61 |
7 | 45 | 96 | 50 | 80 | 67 |
12 | 67 | 83 | 48 | 57 | 44 |
16 | 53 | 62 | 41 | 57 | 55 |
17 | 45 | 56 | 30 | 73 | 49 |
df_en.columns
Index(['国語', '数学', '英語', '理科', '社会'], dtype='object')
# 列の並べ替え(一時的な表示)
df_en.reindex(['英語', '国語', '数学', '理科', '社会'], axis=1).head() # axis=0 は行、axis=1 は列
英語 | 国語 | 数学 | 理科 | 社会 | |
---|---|---|---|---|---|
1 | 92 | 89 | 98 | 83 | 66 |
2 | 85 | 89 | 65 | 70 | 88 |
10 | 83 | 60 | 73 | 60 | 53 |
8 | 82 | 63 | 70 | 63 | 56 |
0 | 81 | 71 | 98 | 91 | 99 |
df_en2 = df_en.reindex(['英語', '国語', '数学', '理科', '社会'], axis=1)
df_en2
英語 | 国語 | 数学 | 理科 | 社会 | |
---|---|---|---|---|---|
1 | 92 | 89 | 98 | 83 | 66 |
2 | 85 | 89 | 65 | 70 | 88 |
10 | 83 | 60 | 73 | 60 | 53 |
8 | 82 | 63 | 70 | 63 | 56 |
0 | 81 | 71 | 98 | 91 | 99 |
3 | 72 | 89 | 55 | 92 | 84 |
9 | 70 | 81 | 65 | 45 | 70 |
11 | 67 | 77 | 48 | 60 | 64 |
13 | 67 | 52 | 45 | 67 | 67 |
19 | 66 | 31 | 37 | 4 | 50 |
5 | 65 | 76 | 90 | 67 | 89 |
14 | 62 | 65 | 58 | 50 | 53 |
15 | 61 | 44 | 46 | 56 | 65 |
6 | 56 | 44 | 96 | 89 | 71 |
4 | 56 | 93 | 87 | 90 | 64 |
18 | 56 | 42 | 57 | 33 | 61 |
7 | 50 | 45 | 96 | 80 | 67 |
12 | 48 | 67 | 83 | 57 | 44 |
16 | 41 | 53 | 62 | 57 | 55 |
17 | 30 | 45 | 56 | 73 | 49 |
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | |
---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 |
1 | 89 | 98 | 92 | 83 | 66 |
2 | 89 | 65 | 85 | 70 | 88 |
3 | 89 | 55 | 72 | 92 | 84 |
4 | 93 | 87 | 56 | 90 | 64 |
# 新しい列を追加
df1['合計'] = 0
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | 合計 | |
---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 0 |
1 | 89 | 98 | 92 | 83 | 66 | 0 |
2 | 89 | 65 | 85 | 70 | 88 | 0 |
3 | 89 | 55 | 72 | 92 | 84 | 0 |
4 | 93 | 87 | 56 | 90 | 64 | 0 |
# 新しい列を追加
df1['合計'] = df1['国語'] + df1['英語']
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | 合計 | |
---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 152 |
1 | 89 | 98 | 92 | 83 | 66 | 181 |
2 | 89 | 65 | 85 | 70 | 88 | 174 |
3 | 89 | 55 | 72 | 92 | 84 | 161 |
4 | 93 | 87 | 56 | 90 | 64 | 149 |
# 新しい列を追加
df1.iloc[:, 2:6]
英語 | 理科 | 社会 | 合計 | |
---|---|---|---|---|
0 | 81 | 91 | 99 | 152 |
1 | 92 | 83 | 66 | 181 |
2 | 85 | 70 | 88 | 174 |
3 | 72 | 92 | 84 | 161 |
4 | 56 | 90 | 64 | 149 |
5 | 65 | 67 | 89 | 141 |
6 | 56 | 89 | 71 | 100 |
7 | 50 | 80 | 67 | 95 |
8 | 82 | 63 | 56 | 145 |
9 | 70 | 45 | 70 | 151 |
10 | 83 | 60 | 53 | 143 |
11 | 67 | 60 | 64 | 144 |
12 | 48 | 57 | 44 | 115 |
13 | 67 | 67 | 67 | 119 |
14 | 62 | 50 | 53 | 127 |
15 | 61 | 56 | 65 | 105 |
16 | 41 | 57 | 55 | 94 |
17 | 30 | 73 | 49 | 75 |
18 | 56 | 33 | 61 | 98 |
19 | 66 | 4 | 50 | 97 |
# 新しい列を追加
total = df1.iloc[:, 2:6].sum(axis=1)
total
0 423 1 422 2 417 3 409 4 359 5 362 6 316 7 292 8 346 9 336 10 339 11 335 12 264 13 320 14 292 15 287 16 247 17 227 18 248 19 217 dtype: int64
df1['合計'] = total
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | 合計 | |
---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 423 |
1 | 89 | 98 | 92 | 83 | 66 | 422 |
2 | 89 | 65 | 85 | 70 | 88 | 417 |
3 | 89 | 55 | 72 | 92 | 84 | 409 |
4 | 93 | 87 | 56 | 90 | 64 | 359 |
df1.iloc[:, 0:5].sum(axis=1)
0 440 1 428 2 397 3 392 4 390 5 387 6 356 7 338 8 334 9 331 10 329 11 316 12 299 13 298 14 288 15 272 16 268 17 253 18 249 19 188 dtype: int64
df1['total'] = df1.iloc[:, 0:5].sum(axis=1)
df1
国語 | 数学 | 英語 | 理科 | 社会 | 合計 | total | |
---|---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 423 | 440 |
1 | 89 | 98 | 92 | 83 | 66 | 422 | 428 |
2 | 89 | 65 | 85 | 70 | 88 | 417 | 397 |
3 | 89 | 55 | 72 | 92 | 84 | 409 | 392 |
4 | 93 | 87 | 56 | 90 | 64 | 359 | 390 |
5 | 76 | 90 | 65 | 67 | 89 | 362 | 387 |
6 | 44 | 96 | 56 | 89 | 71 | 316 | 356 |
7 | 45 | 96 | 50 | 80 | 67 | 292 | 338 |
8 | 63 | 70 | 82 | 63 | 56 | 346 | 334 |
9 | 81 | 65 | 70 | 45 | 70 | 336 | 331 |
10 | 60 | 73 | 83 | 60 | 53 | 339 | 329 |
11 | 77 | 48 | 67 | 60 | 64 | 335 | 316 |
12 | 67 | 83 | 48 | 57 | 44 | 264 | 299 |
13 | 52 | 45 | 67 | 67 | 67 | 320 | 298 |
14 | 65 | 58 | 62 | 50 | 53 | 292 | 288 |
15 | 44 | 46 | 61 | 56 | 65 | 287 | 272 |
16 | 53 | 62 | 41 | 57 | 55 | 247 | 268 |
17 | 45 | 56 | 30 | 73 | 49 | 227 | 253 |
18 | 42 | 57 | 56 | 33 | 61 | 248 | 249 |
19 | 31 | 37 | 66 | 4 | 50 | 217 | 188 |
# 列同士の演算
df1['new'] = df1['国語'] / df1['理科']
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | 合計 | total | new | |
---|---|---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 423 | 440 | 0.780220 |
1 | 89 | 98 | 92 | 83 | 66 | 422 | 428 | 1.072289 |
2 | 89 | 65 | 85 | 70 | 88 | 417 | 397 | 1.271429 |
3 | 89 | 55 | 72 | 92 | 84 | 409 | 392 | 0.967391 |
4 | 93 | 87 | 56 | 90 | 64 | 359 | 390 | 1.033333 |
# 列の削除
df1.drop(['合計'], axis=1, inplace=True) # inplace=True で上書きする
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | total | new | |
---|---|---|---|---|---|---|---|
0 | 71 | 98 | 81 | 91 | 99 | 440 | 0.780220 |
1 | 89 | 98 | 92 | 83 | 66 | 428 | 1.072289 |
2 | 89 | 65 | 85 | 70 | 88 | 397 | 1.271429 |
3 | 89 | 55 | 72 | 92 | 84 | 392 | 0.967391 |
4 | 93 | 87 | 56 | 90 | 64 | 390 | 1.033333 |
apply: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
map: https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html
assign: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html
# 関数の復習
def myfunc(x):
return x ** 2 # 入力 x の2乗を返す
myfunc(10)
100
# dataframeの列を入力する
df1['国語'] = df1['国語'].apply(myfunc)
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | total | new | |
---|---|---|---|---|---|---|---|
0 | 5041 | 98 | 81 | 91 | 99 | 440 | 0.780220 |
1 | 7921 | 98 | 92 | 83 | 66 | 428 | 1.072289 |
2 | 7921 | 65 | 85 | 70 | 88 | 397 | 1.271429 |
3 | 7921 | 55 | 72 | 92 | 84 | 392 | 0.967391 |
4 | 8649 | 87 | 56 | 90 | 64 | 390 | 1.033333 |
# dataframeの列を入力する
df1['理科'] = df1['理科'].map(myfunc)
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | total | new | |
---|---|---|---|---|---|---|---|
0 | 5041 | 98 | 81 | 8281 | 99 | 440 | 0.780220 |
1 | 7921 | 98 | 92 | 6889 | 66 | 428 | 1.072289 |
2 | 7921 | 65 | 85 | 4900 | 88 | 397 | 1.271429 |
3 | 7921 | 55 | 72 | 8464 | 84 | 392 | 0.967391 |
4 | 8649 | 87 | 56 | 8100 | 64 | 390 | 1.033333 |
# dataframe の列を入力する
df1['英語'] = df1['英語'].apply(lambda x: x * 10)
df1.head()
国語 | 数学 | 英語 | 理科 | 社会 | total | new | |
---|---|---|---|---|---|---|---|
0 | 5041 | 98 | 810 | 8281 | 99 | 440 | 0.780220 |
1 | 7921 | 98 | 920 | 6889 | 66 | 428 | 1.072289 |
2 | 7921 | 65 | 850 | 4900 | 88 | 397 | 1.271429 |
3 | 7921 | 55 | 720 | 8464 | 84 | 392 | 0.967391 |
4 | 8649 | 87 | 560 | 8100 | 64 | 390 | 1.033333 |