{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":90906,"databundleVersionId":10646448,"sourceType":"competition"},{"sourceId":216317351,"sourceType":"kernelVersion"}],"dockerImageVersionId":30822,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"source_file_path = '/kaggle/input/yunbase/Yunbase/baseline.py'\ntarget_file_path = '/kaggle/working/baseline.py'\nwith open(source_file_path, 'r', encoding='utf-8') as file:\n    content = file.read()\nwith open(target_file_path, 'w', encoding='utf-8') as file:\n    file.write(content)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"!pip install -q --requirement /kaggle/input/yunbase/Yunbase/requirements.txt  \\\n--no-index --find-links file:/kaggle/input/yunbase/","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from baseline import Yunbase\nimport pandas as pd#read csv,parquet\nimport numpy as np#for scientific computation of matrices\nimport warnings#avoid some negligible errors\n#The filterwarnings () method is used to set warning filters, which can control the output method and level of warning information.\nwarnings.filterwarnings('ignore')\n\nimport random#provide some function to generate random_seed.\n#set random seed,to make sure model can be recurrented.\ndef seed_everything(seed):\n    np.random.seed(seed)#numpy's random seed\n    random.seed(seed)#python built-in random seed\nseed_everything(seed=2025)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df=pd.read_csv(\"/kaggle/input/delaware-student-discipline-dataset/student_discipline.csv\")\ndf=df.sort_values(['School Year','School Code'])\n#nunique=1或者SubGroup都是其他列的信息.\nnunique_cols=['Geography','SubGroup']\ndf.drop(nunique_cols,axis=1,inplace=True)\n\ndf['Gender_Male']=(df['Gender']=='Male').astype(np.int8)+(df['Gender']=='All Students').astype(np.int8)\ndf['Gender_Female']=(df['Gender']=='Female').astype(np.int8)+(df['Gender']=='All Students').astype(np.int8)\ndf.drop(['Gender'],axis=1,inplace=True)\n\ndf['Rowstatus']=(df['Rowstatus']=='REDACTED').astype(np.int8)\n\n\ndf['Grade']=df['Grade'].map({'Kindergarten':0,'10th Grade':10, '5th Grade':5, '12th Grade':12,\n       '6th Grade':6,'4th Grade':4, '9th Grade':9, '2nd Grade':2, '3rd Grade':3,\n       '11th Grade':11, '8th Grade':8,'1st Grade':1,'7th Grade':7,'All Students':13,\n         'Pre-Kindergarten':-1,'Early Childhood':-2})\n\ndf.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission=pd.read_csv(\"/kaggle/input/delaware-student-discipline-dataset/sample_submission.csv\")\nsubmission['School Year']=2023\nfeats=df.groupby(['School Year','School Code'])['Race'].count().reset_index().rename(columns={\"Race\":'Target'})\nfeats=pd.concat((feats,submission))\nfeats.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"num_cols=['Gender_Male','Gender_Female','Rowstatus','Grade','Students','Enrollment','PctEnrollment','Incidents','AvgDuration']\nAGGREGATIONS=['min','max','mean','median','std','skew','sum']\nfor col in num_cols:\n    agg_df = df[['School Year','School Code']+[col]].groupby(['School Year','School Code']).agg(AGGREGATIONS)\n    agg_df.columns = ['_'.join(x) for x in agg_df.columns]\n    feats=feats.merge(agg_df,on=['School Year','School Code'],how='left')\n\ntext_cols=['Organization','Race','SpecialDemo','Category']\nfor col in text_cols:\n    df[col]=df[col].fillna('None').astype(str)\n    agg_df=df.groupby(['School Year','School Code'])[col].apply(lambda x:\" \".join(x[:])).reset_index()\n    feats=feats.merge(agg_df,on=['School Year','School Code'],how='left')\n    feats[col]=feats[col].fillna('None')\n\n#用前2年的特征预测下一年,所以需要用的是shift特征.\nfor col in feats.drop(['School Year','School Code'],axis=1).columns:\n    for gap in [1]:\n        feats[col+f\"_shift{gap}\"]=feats.groupby(['School Code'])[col].shift(gap)\n    if col!='Target':\n        feats.drop([col],axis=1,inplace=True)\nfeats.tail()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#2015，2026是没有完整的X,2023是因为是测试集\ntrain=feats[(feats['School Year']>2015)&(feats['School Year']<2023)]\ntest=feats[feats['School Year']==2023].drop(['Target'],axis=1)\ntrain.head()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from  lightgbm import LGBMRegressor\nfrom sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer#word2vec feature\ntext_cols=[col+f\"_shift1\"for col in text_cols]\nword2vec_models=[]\nfor t_col in text_cols:\n    word2vec_models.append(  \\\n        (TfidfVectorizer(analyzer='word',max_features=150,ngram_range=(2,4)),t_col,'tfidf1')  \\\n        )\n    word2vec_models.append(  \\\n        (TfidfVectorizer(analyzer='char',max_features=150,ngram_range=(3,5)),t_col,'tfidf')  \\\n        )\n\nyunbase=Yunbase(num_folds=5,\n                  models=[(LGBMRegressor(boosting_type='gbdt',n_estimators=256,\n                                         importance_type='gain',random_state=2025,\n                                         num_leaves=64),'lgb'),\n                         ],\n                  FE=None,\n                  seed=2025,\n                  objective='regression',\n                  metric='rmsle',\n                  word2vec_models=word2vec_models,\n                  group_col='School Year',\n                  target_col='Target',\n                  early_stop=1000,\n                  one_hot_max=25,\n                  use_high_corr_feat=False,\n                  plot_feature_importance=True,\n               )\nyunbase.fit(train)\ntest_preds=yunbase.predict(test)\n\nyunbase.submit(\"/kaggle/input/delaware-student-discipline-dataset/sample_submission.csv\",save_name='yunbase2134',test_preds=test_preds)","metadata":{"trusted":true,"_kg_hide-output":true},"outputs":[],"execution_count":null}]}