数据分析
数据预处理
在这个数据分析过程中,缺失的数据会进一步分为三个部分,一是当数据为0时,二是当数据为空时,三是当数据带有特殊符号,如“-”时。
对于不同的数据缺失情况,本次分析将采用不同的处理方法:
1.对于数值为0的情况,需要进行实际分析,并返回原始数据,以确定数据为0时是否具有实际意义。如果没有,将其作为缺失值删除。
2.如果数据为空,如果该特征的缺失数据小于10%,将根据该特征的重要性进行综合判断。如果字段重要性较低,考虑直接删除;如果该字段的重要性较高,则使用插值或数据平均值来填充。
3.鉴于数据是一种特殊的符号,需要结合原始数据来判断数据是否缺失或异常。如果它是一个丢失的值,它将作为1操作处理。如果是异常值,将进行异常值处理,具体的异常值处理过程将在下面描述。
综合表:
XXX=pd.merge(XX,XX,how='left ',on='user_id ')
失踪率是:
total=df.isnull()。总和()。sort_values(升序=False)
百分比=df.isnull()。sum()/df.isnull()。count())。sort_values(升序=False)
missing _ data=PD . concat([合计,百分比],轴=1,键=['合计','百分比'])
missing_data.head(50)
XXX . apply(lambda x : sum(x . is null())/len(x))
缺失率可视化:
将missingno作为msno导入
%matplotlib内联
msno.matrix(XXX)
msno.bar(XXX)
删除XX中具有空值的行
XXX=XXX.dropna(轴=0,子集=['XX'])
填充空值
df1.fillna(0,inplace=True)
2.dffillna(方法=' pad') #用以前的值填充。
df2.fillna(方法='bfill ',极限=2,轴=1)
使用pandas_profiling生成各个领域的详细报告:
导入熊猫_简介
熊猫_侧写。简档报告(XXX)
相关热图:
msno .热图(XXX)
两个变量的无效相关范围是从-1(如果一个变量出现,另一个肯定不出现)到0(如果一个变量出现或不出现,对彼此没有影响)到1(如果一个变量出现,另一个肯定出现)。
数据缺失或缺失对相关性没有意义,所以图中没有相关性。在图中,大于-1和小于1表示强正相关和负相关,但因为有少量脏数据,所以不是绝对的。在处理数据时,需要注意其中的一些例外。
观察两个变量之间的相关性很方便,但是当数据集变大时,这个结论的可解释性就会变差。
msno .树木图(XXX)
树形图使用scipy提供的层次聚类算法,通过变量的无效相关性(根据二进制距离度量)将变量相互添加。在树的每一步中,变量根据哪个组合最小化剩余聚类的距离来划分。变量集的单调,它们的总距离越接近零,它们的平均距离越接近零。
距离为0的变量可以相互预测。当一个变量被填充时,另一个总是空的或填充的,或者两者都是空的。
叶子的高度显示了预测误差的频率。
异常值:
图,ax=plt .子图(1,1,figsize=(8,5))
df.boxplot(列='Volume ',ax=ax)
plt.show()
s=df[
'Volume']
print(s.describe())
df_= df.copy()
mean1 = df['Volume'].quantile(q=0.25)#下四分位差
mean2 = df['Volume'].quantile(q=0.75)#上四分位差
mean3 = mean2-mean1#中位差
topnum2 = mean2+1.5*mean3
bottomnum2 = mean2-1.5*mean3
print("正常值的范围:",topnum2,bottomnum2)
print("是否存在超出正常范围的值:",any(df['Volume']topnum2))
print("是否存在小于正常范围的值:",any(df['Volume']bottomnum2))
import matplotlib.pyplot as plt
plt.boxplot(x=df['Volume'])
plt.show()
replace_value1=df['Volume'][df['Volume']topnum2].max()
df.loc[df['Volume']topnum2,'Volume']=replace_value1
replace_value2=df['Volume'][df['Volume']bottomnum2].min()
df.loc[df['Volume']bottomnum2,'Volume']=replace_value2
综合模型
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
from matplotlib import rcParams
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.neural_network import MLPRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import ExtraTreeRegressor
from pylab import mpl
import sklearn as sns
from scipy.stats import norm
from scipy import stats
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import BaggingRegressor
x1=df1.loc[:,df1.columns!='总价']
y1=df1.loc[:,'总价']
x_dum=pd.get_dummies(x1)
scale_x=StandardScaler()
x2=scale_x.fit_transform(x_dum)
scale_y=StandardScaler()
y1=np.array(y1).reshape(-1,1)
y2=scale_y.fit_transform(y1)
y2=y2.ravel()
y_log=np.log(y)
x3_train,x3_test,y3_train,y3_test = train_test_split(x_dum,y_log,test_size = 0.3,random_state = 1)
from xgboost import XGBRegressor
models=[DecisionTreeRegressor(),RandomForestRegressor(),GradientBoostingRegressor(),BaggingRegressor()]
models_str=['DecisionTree', ' XGBoost','RandomForest' , ' GradientBoost',' Bagging']
score_adapt=[]
ypred=np.zeros(x3_test.shape[0],)
for name, model in zip(models_str, models) :
print('开始训练模型:'+name+'平滑处理')
model=model#平熠处理=logy
model.fit (x3_train,y3_train)
y_pred=model.predict(x3_test)
score=model.score(x3_test,y3_test)
ypred_original=np.e**y_pred
ypred_original=ypred_original*0.2
ypred+=ypred_original
score_adapt. append(str(score)[:5])
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/100414.html