分析数据, 缺失值处理 ,去重处理, 噪音处理
看了charlotte的博客分析数据, 缺失值处理 学习总结,很受用,如是将她的画图的部分代码添加完整,可以运行,这样学起来更直观.
1.分析数据
在实际项目中,当我们确定需求后就会去找相应的数据,拿到数据后,首先要对数据进行描述性统计分析,查看哪些数据是不合理的,也可以知道数据的基本情况,可以通过作图的方式了解数据的质量,有无异常点,有无噪音等,常见的作图方法有:
#绘制直方图
通过作图的方式了解数据的质量,有无异常点,有无噪音等
import matplotlib.pyplot as plt
#fig=plt.figure(4)
pay =(11,19,14,22,14,28,13,81,12,43,11,16,31,16,23.42,22,26,17,22,13,27,180,16,43,82,14,11,51,76,28,66,29,14,14,65,37,16,37,35,39,27,14,17,13,38,28,40,85,32,25,26,16,12,54,40,18,27,16,14,33,29,77,50,19,34)
print(pay)
rects = plt.bar(left = pay,height = pay,width = 1,align="center",yerr=2)
#plt.title('pe')
plt.show()
#绘制箱型图
import matplotlib.pyplot as plt
import pandas as pd
df=pd.DataFrame()
df["nianxin"] =[11,19,14,22,14,28,13,81,12,43,11,16,31,16,23.42,22,26,17,22,13,27,180,16,43,82,14,11,51,76,28,66,29,14,14,65,37,16,37,35,39,27,14,17,13,38,28,40,85,32,25,26,16,12,54,40,18,27,16,14,33,29,77,50,19,34]
plt.boxplot(x=df.values,labels=df.columns,whis=1.5)
plt.show()
#绘制点图
import matplotlib.pyplot as plt
pay =(11,19,14,22,14,28,13,81,12,43,11,16,31,16,23.42,22,26,17,22,13,27,180,16,43,82,14,11,51,76,28,66,29,14,14,65,37,16,37,35,39,27,14,17,13,38,28,40,85,32,25,26,16,12,54,40,18,27,16,14,33,29,77,50,19,34)
print(pay)
plt.plot(pay,pay,'ro')
plt.show()
#绘制散点图
import matplotlib.pyplot as plt
plt.figure()
plt.scatter([1,2,3],[1,2,3],s=40,c='r',alpha=0.5)
plt.grid(True)
plt.show()
#绘制箱型图
import matplotlib.pyplot as plt
import pandas as pd
df=pd.DataFrame()
df["英语"]=[76,90,97,71,70,93,86,83,78,85,81]
df["经济数学"]=[65,95,51,74,78,63,91,82,75,71,55]
df["西方经济学"]=[93,81,76,88,66,79,83,92,78,86,78]
df["计算机应用基础"]=[85,78,81,95,70,67,82,72,80,81,77]
print(df)
plt.boxplot(x=df.values,labels=df.columns,whis=1.5)
plt.show()
python中也包含了大量的统计命令,其中主要的统计特征函数如下:sum(),mean(),var(),std(),corr,cov(),skew()
2 缺失值处理
直接删除 直接赋予0值或者某一个特殊的值 对于不同的数据场景应该采取不同的策略,首先应该判断缺失值的分布情况
import scipy as sp
import pandas as pd
df =pd.read_csv("data/GOOG.csv", index_col=0)
print(df.shape)
print('isnull:')
print(df.isnull().sum(axis=1)) #计算每row中NaN值的数量
print(df.isnull().sum(axis=1).tolist())
# df.fillna(0) #use 0 replace nan
# df.fillna(method='pad')#use qianyige shu replace nan
# df.fillna(df.mean())#user pingjunshu replace nan
# df.fillna(df.mean()['Open':'High'])
#print(df[:10])
#print(df['Open'])
3.异常值处理
异常值我们通常也称为“离群点”。在讲分析数据时,我们举了个例子说明如何发现离群点,除了画图(画图其实并不常用,因为数据量多时不好画图,而且慢),还有很多其他方法:
1.简单的统计分析
拿到数据后可以对数据进行一个简单的描述性统计分析,譬如最大最小值可以用来判断这个变量的取值是否超过了合理的范围,如客户的年龄为-20岁或200岁,显然是不合常理的,为异常值。
python中可以直接用pandas的describe()
处理方法:
1.删除异常值----明显看出是异常且数量较少可以直接删除
2.不处理---如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则最好不要用,如基于距离计算的一些算法,包括kmeans,knn之类的。
3.平均值替代----损失信息小,简单高效。
4.视为缺失值----可以按照处理缺失值的方法来处理
四.去重处理
DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行 df.duplicated()
df.drop_duplicates方法用于返回一个移除了重复行的DataFrame
#duplicated和drop_duplicates默认保留的是第一个出现的值组合。传入take_last=True则保留最后一个:
data.drop_duplicates(['v1','v2'],take_last = True)
list:
list0=['b','c', 'd','b','c','a','a']
方法1:使用set()
list1=sorted(set(list0),key=list0.index)
print( list1)
方法2:使用 {}.fromkeys().keys()
list2={}.fromkeys(list0).keys() 11 print(list2)
5 噪音处理
噪音,是被测量变量的随机误差或方差.将一个变量看成了另一个变量;
一些实用的数据处理小工具
去掉文件中多余的空行
如何判断文件的编码格式
文件编码格式转换,gbk与utf-8之间的转换