{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"#standard libraries\nimport pandas as pd\nimport numpy as np\n\n#visualization tools\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n%matplotlib inline\nsns.set_theme(style=\"whitegrid\") \n\n#scikit-learn \nfrom sklearn.preprocessing import OrdinalEncoder,StandardScaler,OneHotEncoder\nfrom sklearn.model_selection import StratifiedShuffleSplit\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.compose import ColumnTransformer\n\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.tree import DecisionTreeRegressor\n\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.metrics import mean_squared_error\n\n# xgboost\n\nfrom xgboost import XGBRegressor","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# datasetni yuklab df ga yuklab olaman\ndf = pd.read_csv('train_data.csv')\ndf","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# create a column that is the km from source to destination\nsource = df['source_city'].value_counts().index\ndestination = df['destination_city'].value_counts().index\n# Mumbai to 1408 Delhi, Mumbai to Bangalora 981, Mumbai to Kolkata 2051, Mumbai to Hyderabad 710, Mumbai to Chennai 1333\n# Delhi to 1408 Mumbai, Delhi to Bangalora 1740, Delhi to Kolkata 1467, Delhi to Hyderabad 1255, Delhi to Chennai 2194\n# Kolkata to 1467 Delhi, Kolkata to Bangalora 1861, Kolkata to Mumbai 2051, Kolkata to Hyderabad 1180, Kolkata to Chennai 1679\n# Hyderabad to 1255 Delhi, Hyderabad to 1180 Kolkata, Hyderabad to Bangalore 574, Hyderabad to 710 Mumbai, Hyderabad to 2194 Chennai 634\n# Chennai to 2194 Delhi, Chennai to 1679 Kolkata, Chennai to 1333 Mumbai, Chennai to Bangalore 345, Chennai to 634 Hyderabad\n# Bangalore to 345 Hyderabad, Bangalore to Mumbai 981, Bangalore to Kolkata 1861, Bangalore to Delhi 1740, Bangalore to Chennai 345\nkm = []\nfor source, destination in zip(df['source_city'], df['destination_city']):\n    if source == 'Mumbai':\n        if destination == 'Delhi':\n            km.append(1408)\n        elif destination == 'Bangalore':\n            km.append(981)\n        elif destination == 'Kolkata':\n            km.append(2051)\n        elif destination == 'Hyderabad':\n            km.append(710)\n        elif destination == 'Chennai':\n            km.append(1333)\n    elif source == 'Delhi':\n        if destination == 'Mumbai':\n            km.append(1408)\n        elif destination == 'Bangalore':\n            km.append(1740)\n        elif destination == 'Kolkata':\n            km.append(1467)\n        elif destination == 'Hyderabad':\n            km.append(1255)\n        elif destination == 'Chennai':\n            km.append(2194)\n    elif source == 'Kolkata':\n        if destination == 'Mumbai':\n            km.append(2051)\n        elif destination == 'Bangalore':\n            km.append(1861)\n        elif destination == 'Delhi':\n            km.append(1467)\n        elif destination == 'Hyderabad':\n            km.append(1180)\n        elif destination == 'Chennai':\n            km.append(1679)\n    elif source == 'Hyderabad':\n        if destination == 'Mumbai':\n            km.append(710)\n        elif destination == 'Delhi':\n            km.append(1255)\n        elif destination == 'Kolkata':\n            km.append(1180)\n        elif destination == 'Bangalore':\n            km.append(574)\n        elif destination == 'Chennai':\n            km.append(634)\n    elif source == 'Chennai':\n        if destination == 'Mumbai':\n            km.append(1333)\n        elif destination == 'Bangalore':\n            km.append(345)\n        elif destination == 'Kolkata':\n            km.append(1679)\n        elif destination == 'Hyderabad':\n            km.append(634)\n        elif destination == 'Delhi':\n            km.append(2194)\n    elif source == 'Bangalore':\n        if destination == 'Mumbai':\n            km.append(981)\n        elif destination == 'Delhi':\n            km.append(1740)\n        elif destination == 'Kolkata':\n            km.append(1861)\n        elif destination == 'Hyderabad':\n            km.append(574)\n        elif destination == 'Chennai':\n            km.append(345)\ndf['km'] = km\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import model_selection\ndf['kfold'] = 1 # create a kfold column. agar bu columni qo'shmasak kfold bizga float qiymat qaytaradi.\nkf = model_selection.KFold(n_splits=5,shuffle=True,random_state=99) # kfold function is used to split the data into 5 folds\nfor fold,(train_indicies,valid_indicies) in enumerate(kf.split(X=df)): # train_indicies and valid_indicies are the indices of the data. enumerate is used to get the index of the data\n    df.loc[valid_indicies,'kfold'] = fold","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = pd.read_csv('test_data.csv')\n\n# create a column that is the km from source to destination\nsource = df_test['source_city'].value_counts().index\ndestination = df_test['destination_city'].value_counts().index\n\nkm = []\nfor source, destination in zip(df_test['source_city'], df_test['destination_city']):\n    if source == 'Mumbai':\n        if destination == 'Delhi':\n            km.append(1408)\n        elif destination == 'Bangalore':\n            km.append(981)\n        elif destination == 'Kolkata':\n            km.append(2051)\n        elif destination == 'Hyderabad':\n            km.append(710)\n        elif destination == 'Chennai':\n            km.append(1333)\n    elif source == 'Delhi':\n        if destination == 'Mumbai':\n            km.append(1408)\n        elif destination == 'Bangalore':\n            km.append(1740)\n        elif destination == 'Kolkata':\n            km.append(1467)\n        elif destination == 'Hyderabad':\n            km.append(1255)\n        elif destination == 'Chennai':\n            km.append(2194)\n    elif source == 'Kolkata':\n        if destination == 'Mumbai':\n            km.append(2051)\n        elif destination == 'Bangalore':\n            km.append(1861)\n        elif destination == 'Delhi':\n            km.append(1467)\n        elif destination == 'Hyderabad':\n            km.append(1180)\n        elif destination == 'Chennai':\n            km.append(1679)\n    elif source == 'Hyderabad':\n        if destination == 'Mumbai':\n            km.append(710)\n        elif destination == 'Delhi':\n            km.append(1255)\n        elif destination == 'Kolkata':\n            km.append(1180)\n        elif destination == 'Bangalore':\n            km.append(574)\n        elif destination == 'Chennai':\n            km.append(634)\n    elif source == 'Chennai':\n        if destination == 'Mumbai':\n            km.append(1333)\n        elif destination == 'Bangalore':\n            km.append(345)\n        elif destination == 'Kolkata':\n            km.append(1679)\n        elif destination == 'Hyderabad':\n            km.append(634)\n        elif destination == 'Delhi':\n            km.append(2194)\n    elif source == 'Bangalore':\n        if destination == 'Mumbai':\n            km.append(981)\n        elif destination == 'Delhi':\n            km.append(1740)\n        elif destination == 'Kolkata':\n            km.append(1861)\n        elif destination == 'Hyderabad':\n            km.append(574)\n        elif destination == 'Chennai':\n            km.append(345)\ndf_test['km'] = km\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"useful_features = [c for c in df.columns if c not in (\"id\", \"price\", \"kfold\")]\n\n# categoriya ustunlarimiz\nobject_cols = ['airline','flight','source_city','departure_time','stops','arrival_time','destination_city','class','km'] \ndf_test = df_test[useful_features]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_predictions = []\nfor fold in range(5):\n    xtrain =  df[df.kfold != fold].reset_index(drop=True)\n    xvalid = df[df.kfold == fold].reset_index(drop=True)\n    xtest = df_test.copy()\n\n    ytrain = xtrain.price\n    yvalid = xvalid.price\n    \n    xtrain = xtrain[useful_features]\n    xvalid = xvalid[useful_features]\n    \n    ordinal_encoder = OrdinalEncoder(handle_unknown=\"use_encoded_value\", unknown_value=-999)\n    xtrain[object_cols] = ordinal_encoder.fit_transform(xtrain[object_cols])\n    xvalid[object_cols] = ordinal_encoder.transform(xvalid[object_cols])\n    xtest[object_cols] = ordinal_encoder.transform(xtest[object_cols])\n    \n    model = RandomForestRegressor(random_state=fold, n_jobs=4, n_estimators=100)\n    model.fit(xtrain, ytrain)\n    preds_valid = model.predict(xvalid)\n    test_preds = model.predict(xtest)\n    final_predictions.append(test_preds)\n    print(fold, mean_squared_error(yvalid, preds_valid, squared=False))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"baholash = np.mean(np.column_stack(final_predictions), axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub = pd.read_csv('sample_solution.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub.price = baholash\nsample_sub.to_csv(\"submission1.csv\", index=False)\nsample_sub","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}