2022/12/31 データ分析備忘〜スポーツのチケット価格の適正化〜
今年はデータ分析コンペの主催者であるSIGNATEの講座復習をしてからコンペに臨むことにします。
今年意識していることはショートカットキーでいかに指の動きを少なくタイピングするかです。例えばdeleteはctr+dとか、これをすることで時間のロスを防げます。
2023/1/1付けで、講座修了しました。特徴量エンジニアリングで、セグメント知識が必要になることがわかった。有名選手が入団した年以降は観客が多くなるので、この年にこの選手が入団しているとか。この辺りは各チームとか年で考えるとかなり時間がかかりそうだし、Jリーグに興味ない私にとっては不利だなと感じています。
でも、この講座をやったことで、pandasの使い方とかメソッドコードの書き方とか色々思い出せた。
複数カラムを抜き出すには、DataFrame[['列名1', '列名2',・・・]]とします。取り出したいカラムをリストで指定する。
data['weather'][data['weather'] == '雪'] = '雨'
pandas.DataFrameのinfo()メソッド
Pythonの組み込み関数len()でpandas.DataFrame
pandas.DataFrameの列数はcolumns属性に対してlen()
print(len(df.columns))
pandas.DataFrameのshape属性で行数と列数をタプル(行数, 列数)で取得
MSEの特徴は、複数の予測対象のうち1つでも大きく予測を外すと、評価関数における評価が大きく悪化します。その為、予測したいタスクにおいて予測を大きく外すことが弊害となるような課題においてRMSEを採用することは良い選択と言えます。
モデルの箱を代入する変数名をlrとし、モデルを表す箱を準備しましょう。
model = LinearRegression()
これはコンストラクタを呼び出している(=初期化メソッド)(=インスタンス化されたときに最初に呼ばれる特別なメソッド)。modelをインスタンス化(=オブジェクト化)する。
インスタンス化することでmodel.メソッド名でメソッドが使えるようになる。
過学習が起きているかの見極め方の1つとしては、学習データと評価データそれぞれの予測精度のギャップを見ることです。過学習では学習データへの予測精度は高いが、評価データへの予測精度が著しく低くなる現象の為、両方の評価値を見ることで、過学習が発生していそうかどうかをある程度推測する事ができます。
カラム名を元に結合するにはmergeを使いましたが、indexを元に結合する際はconcatを使います。
X_trainの下にX_testを結合してtmpというデータフレームにしてください
tmp = pd.concat([X_train,X_test])
元々の変数dataの右にtmpのpredカラムとresカラムをindexを元に結合してdataに再代入してください
data = pd.concat([data,tmp[['pred','res']]],axis=1)
# 空欄を埋めて最後の2節なら1、それ以外なら0であるlast_matchカラムを作成してください
data['last_match'] = 0
data['last_match'][((data['match_num'] == 31) | (data['match_num'] == 32)) & (data['stage'] == 'J1')] = 1
data['last_match'][((data['match_num'] == 41) | (data['match_num'] == 42)) & (data['stage'] == 'J2')] = 1
data['last_match'].value_counts()
# last_matchカラムが作成できたか確認して、last_matchに該当する(1になっている)試合数を変数chkに入力してください。
chk = 80
セレッソ大阪の箱ひげ図はこのように描けます。
sns.boxplot(data=data[data['away'] == 'セレッソ大阪'], x='year', y='y')
X_train.columnsをindexに持ち、lr.coef_をカラムにもつデータフレームはこのように書けます。pd.DataFrame({'係数':lr.coef_},index=X_train.columns)