数据分析与挖掘之数据清洗(缺失值、异常值)

一般情况下PIP出现ReadTimeoutError都是因为被GFW给墙了,所以一般遇到这种问题,我们可以选择国内的镜像来解决问题。

在Windows下:C:\Users\下新建pip文件夹,在创建pip.ini文件,拷贝下面代码进去,保存。

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

其实就是把python的源换成了清华源,应该能解决问题。

建议安装pymysql  和 phpStudy

现在开始数据清洗实战

#导入数据
import pymysql
import numpy as npy
import pandas as pda
import matplotlib.pylab as pyl
conn=pymysql.connect(host="127.0.0.1",user="root",password="root",db="csdn")
sql="select * from hexun"
data=pda.read_sql(sql,conn)
print(data.describe())
#数据清洗

'''''''''缺失值处理'''''''''''
#处理缺失值缺①(类别型)
data.isnull().sum()  #返回每列包含的缺失值的个数
data.dropna()#直接删除含有缺失值的行
data.dropna(axis = 1)#直接删除含有缺失值的列
data.dropna(how = 'all')#只删除全是缺失值的行
data.dropna(thresh = 4)#保留至少有4个缺失值的行
data.dropna(subset = ['C'])#删除含有缺失值的特定的列
#处理缺失值缺②(数值型)  data.fillna(0, inplace = True)  在原DataFrame中修改
data.fillna(0):用0填充
data.fillna(method='pad'):用前一个数值填充
data.fillna(df2.mean()):用该列均值填充
#2.1  Imputer均值填充缺失值
from sklearn.preprocessing import Imputer
imr = Imputer(missing_values='NaN', strategy='mean', axis=0)#均值填充缺失值
imr = imr.fit(df)
imputed_data = imr.transform(df.values)

#处理缺失值缺③  0置空循环填充
print(len(data)) #整行为空也会计数,count则不计空值
#空值→中位数插值法
x=0
data["hits"][(data["hits"]==0)]=None  #hits为0设置为空值
for i in data.columns:  #列循环
                for j in range(len(data)):
                                if(data[i].isnull())[j]:
                                                data[i][j]="2"  #空值设置为中位数
                                                x+=1
print(x)  #缺失处理数


'''''''''异常值处理'''''''''''
pyl.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签  
pyl.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
#散点图(横轴为点击量,纵轴为评论数)
data2=data.T
hits=data2.values[3]  #得到点击量
comt=data2.values[4]#得到评论数
pyl.plot(hits,comt,'*r')
pyl.title("点评比")
pyl.xlabel("点击量")
pyl.ylabel("评论数")
pyl.show()
#点击量异常>30000,评论数异常>230
line=len(data.values)
columns=len(data.values[0])
da=data.values
for i in range(0,line):
                for j in range(0,columns):
                                if(da[i][3]>30000):  #点击量异常处理
                                                print(da[i][j])   #输出异常所有信息
                                                da[i][j]=36   #修改异常值为中位数/平均数
                                if(da[i][4]>230):  #评论数异常处理
                                                print(da[i][j])   #输出异常所有信息
                                                da[i][j]=2   #修改异常值为均值
                
da2=da.T  #处理完成图
hits=da2[3]
comt=da2[4]
pyl.plot(hits,comt,'*c')
pyl.show



''''''''''''分布分析''''''''''''
hitsmax=da2[3].max()
hitsmin=da2[3].min()
comtmax=da2[4].max()
comtmin=da2[4].min()
#极差:最大-最小
hitsrg=hitsmax-hitsmin
comtrg=comtmax-comtmin
#组距:极差/组数
hitsdst=hitsrg/12
comtdst=comtrg/12
#画出点击量的直方图
hitssty=npy.arange(hitsmin,hitsmax,hitsdst)  #最大,最小,组距
pyl.hist(da2[3],hitssty)
pyl.show()
#画出评论的直方图
comtsty=npy.arange(comtmin,comtmax,comtdst)  #最大,最小,组距
pyl.hist(da2[4],comtsty)
pyl.show()









             


 

你可能感兴趣的:(数据分析,数据挖掘)