【CASE】芝加哥犯罪率数据集(CatBoostClassifier)

参考:top 2% based on CatBoostClassifier

导入库与数据

import numpy as np
import pandas as pd
pd.set_option("display.max_columns", None)
from sklearn.preprocessing import LabelEncoder, OrdinalEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.base import clone
from sklearn.model_selection import StratifiedKFold, train_test_split
from sklearn.metrics import log_loss
from sklearn.decomposition import PCA
from sklearn.mixture import GaussianMixture
import catboost
import gensim

data_train = pd.read_csv("C:\\Users\\Nihil\\Documents\\pythonlearn\\data\\kaggle\\sf-crime\\train.csv")
data_test = pd.read_csv("C:\\Users\\Nihil\\Documents\\pythonlearn\\data\\kaggle\\sf-crime\\test.csv")

特征处理

def transformTimeDataset(dataset):
    dataset['Dates'] = pd.to_datetime(dataset['Dates'])
    dataset['Date'] = dataset['Dates'].dt.date
    dataset['n_days'] = (dataset['Date']-dataset['Date'].min()).apply(lambda x:x.days)
    dataset['Year'] = dataset['Dates'].dt.year
    dataset['DayOfWeek'] = dataset['Dates'].dt.dayofweek
    dataset['WeekOfYear'] = dataset['Dates'].dt.weekofyear
    dataset['Month'] = dataset['Dates'].dt.month
    dataset['Hour'] = dataset['Dates'].dt.hour
    return dataset
data_train = transformTimeDataset(data_train)
data_test = transformTimeDataset(data_test)
def transformdGeoDataset(dataset):
    dataset['Block'] = dataset['Address'].str.contains('block', case=False)
    dataset['Block'] = dataset['Block'].map(lambda x: 1 if x == True else 0)
    dataset = pd.get_dummies(data=dataset, columns=['PdDistrict'], drop_first=True)
    return dataset
data_train = transformdGeoDataset(data_train)
data_test = transformdGeoDataset(data_test)
data_train = data_train.drop(["Descript", "Resolution","Address","Dates","Date"], axis = 1)
data_test = data_test.drop(["Address","Dates","Date"], axis = 1)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data_train.Category = le.fit_transform(data_train.Category)

设置特征与目标

X = data_train.drop("Category",axis=1)
y = data_train['Category']
print(X.head())
     DayOfWeek    X          Y       n_days  Year  WeekOfYear  Month  Hour  Block  PdDistrict_CENTRAL  PdDistrict_INGLESIDE  PdDistrict_MISSION  PdDistrict_NORTHERN  PdDistrict_PARK  PdDistrict_RICHMOND  PdDistrict_SOUTHERN  PdDistrict_TARAVAL  PdDistrict_TENDERLOIN
0          2 -122.425892  37.774599    4510  2015          20      5    23      0                   0                     0                   0                    1                0                    0                    0                   0                      0
1          2 -122.425892  37.774599    4510  2015          20      5    23      0                   0                     0                   0                    1                0                    0                    0                   0                      0
2          2 -122.424363  37.800414    4510  2015          20      5    23      0                   0                     0                   0                    1                0                    0                    0                   0                      0
3          2 -122.426995  37.800873    4510  2015          20      5    23      1                   0                     0                   0                    1                0                    0                    0                   0                      0
4          2 -122.438738  37.771541    4510  2015          20      5    23      1                   0                     0                   0                    0                1                    0                    0                   0                      0

先把处理的数据封装起来输出(节省时间)

data_train = pd.DataFrame(data_train)
data_train.to_csv("C:\\Users\\Nihil\\Documents\\pythonlearn\\data\\Results\\Crimedatatrain.csv")

重新导入


                
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值