数据挖掘笔记0.5.221

读取数据

  1. 常用的参数是encoding和error_bad_lines
  2. 如果读取的是没有header,需要置地你给header为None,且使用name加上header
  3. 根据读取数据的不同情况使用参数
  4. 如果读取数据报错,使用error_bad_lines没效果的话,尝试skiprows=1
  5. encoding的取值范围可能是:gbk、utf-8、gb2132等.
  6. 读取数据文件,如果数据文件放在带有中文字符的路径,read_csv 方法需要指定参树engine=‘python’
test=pd.read_csv("adult.test",error_bad_lines=False,header=None,names=headers,sep=",\s",na_values=["?"],skiprows=1,encoding="utf-8")
  1. read_csv读取txt文件,如果txt是从csv中拷贝下来的,需要加分割符号
df=pd.read_csv("data.txt",encoding="utf-8",sep="\t")

理解数据

  1. 关于describe
    raw.describe(include=“O”) 会计算离散型变量的统计特征
    raw.describe(include=“all”) 把数值型和离散型特征的统计都进行显示
  2. 显示每一个特征的图
    如果是object使用countplot,如果是数值型的使用distplot
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(50,50))
for i,col in enumerate(raw.columns):
    print(i,col,len(raw.columns))
    tuNumber=len(raw.columns)
    ax=plt.subplot(5,3,i+1)
    ax.set_title(col)
    
    if raw[col].dtypes == "object":
        sns.countplot(data=raw,y=col)
    else:
        sns.distplot(raw[col])
  1. 观察特征与目标特征的直方图
sns.distplot(rawdata_con[rawdata_con["predclass"]==1]["age-hours"],kde_kws={"label":">50"},label=">50")
sns.distplot(rawdata_con[rawdata_con["predclass"]==0]["age-hours"],kde_kws={"label":">50"},label="<50")

数据处理

  1. 更改DataFrame的columns名
rawdata.columns=headers
  1. 缺失值的处理
    2.1 使用missiongno的matrix和bar可以用图的方式查看确实数
import missingno as msn
msn.matrix(raw)
msn.bar(raw,sort="ascending")

2.2 使用isnull().sum()/allcount计算缺失值
2.3 缺失值处理方法
删除和填充,其中填充方式有

方法一. df[‘Age’] = df[‘Age’].fillna(np.mean(df[‘Age’])或者f[‘Embarked’].fillna(‘S’,inplace=True)
方法二. 使用impute的SimpleImputer实例化,然后fit_transform填充

from sklearn.impute import SimpleImputer

si=SimpleImputer(strategy="most_frequent")

xafter=si.fit_transform(x)

xafter=pd.DataFrame(xafter,columns=["sepal length (cm)","sepal width (cm)","petal length (cm)","petal width (cm)"])

xafter
  1. 离散化约定
    dataset_bin = pd.DataFrame() # 包含所有离散化后的值
    dataset_con = pd.DataFrame() # 包含所有未离散化的值
  2. 字符串处理的时候需要关注空格,最好使用如下方法
rawdata.loc[rawdata["predclass"].str.strip()=="<=50K.","predclass"]=0
  1. 对dataframe中的列进行条件过滤
    如找到predclass为0的age
rawdata_con[rawdata_con["predclass"]==0]["age"]
  1. 数据集中workclass为private的行改成xx
rawdata.loc[rawdata["workclass"].str.strip()=="Private","workclass"]="xx"而不能用成
rawdata[rawdata["workclass"].str.strip()=="Private"]="xx"
  1. 离散编码和标签编码
离散
collist=rawdata_bin.columns.tolist()
collist.remove("predclass")
rawdata_bin_dr=pd.get_dummies(rawdata_bin,columns=collist)
rawdata_bin_dr


标签
from sklearn.preprocessing import LabelEncoder

le=LabelEncoder()

rawdata_con=rawdata_con.astype(str)

rawdata_con_lr=rawdata_con.apply(le.fit_transform)

rawdata_con_lr
  1. 关于dropna
    8.1 how的值为all,how的值为any
    8.2 指定某列的控制
df.dropna(subset=['sepal width (cm)'])

8.3 删除大于几个缺失值的行

df.dropna(thresh=2)

8.4 删除含有缺失值的列

df.dropna(axis='columns')
  1. 拆分数据
    先拆分x和y
    按比例拆分
    对xtrain和xtest做标准化

建模

  1. 逻辑回归 随机选择最优
    有几个需要关注的参数:
    rd.cv_results_[“params”],rd.cv_results_[“mean_test_score’”],rd.cv_results_[“std_test_score’”],
# 模型,逻辑回归  (随机选择最优参数)
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV
import warnings
warnings.filterwarnings("ignore")

param_dist = {'penalty': ['l2',"l1"],
 'class_weight': [None, 'balanced'],
 'C': np.logspace(-20, 20, 10000),
 'intercept_scaling': np.logspace(-20, 20,
10000)}


lg=LogisticRegression()

rd=RandomizedSearchCV(lg,n_jobs=-1,n_iter=10,param_distributions=param_dist)

rd.fit(x_train,y_train)

1.1. 通过建模预测和proba画roc

lgg=LogisticRegression()
model=lgg.fit(x_train,y_train)
y_pre=model.predict(x_test)
probs=model.predict_proba(x_test)[:,1]

from sklearn.metrics import roc_curve,auc
frp,tpr,threshold=roc_curve(y_pre,probs)
roc_auc=auc(frp,tpr)

# 开始画图
plt.plot(frp,tpr,"b", label = 'AUC = %0.2f' % roc_auc)
plt.plot([0,1],[0,1],"r--")
plt.ylabel("true")
plt.xlabel("false")

1.1.1 predict_proba,表示的是返回预测属于某标签的概率

# 进行预测
y_pred=kn.predict([[0.003948,0.512192,0.812621,0.612526,0.721755,0.291876]])
print(y_pred)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值