python数据分析2
2017-05-13 10:15
866 查看
数据分析1中记录了我学习Python一些库函数以及常用数据预处理的手段。这一部分将更加详细的介绍数据预处理的相关知识。
2.1数据清洗
2.2.1缺失值
有3类数据缺失值的处理方法:删除记录,数据插补和不处理。
主要使用拉格朗日插值法和牛顿插值法——使用现成的库函数进行拉格朗日插值。
2.2.2异常值处理
2.2数据变换
主要有函数变换,规范化处理,规范化
2.2.1规范化
使用矩阵对上面3种规范化方法进行处理,代码如下:
2.2.2离散化处理
一些分类算法,特别是一些分类算法(ID3,Apriori算法)要求数据是分类属性属性。
常用算法(离散化方法)
代码如下:
以上分别为等宽法,等频法和一维聚类对数据进行离散化,然后将每一类标记为同一标识,在进行建模。
2.2.3属性构造
需要进行一些简单的函数计算,将数据进行处理。比如有如下的表格:
需要对表格进行如下公式的操作:
结果表格如下:
代码如下:
2.1数据清洗
2.2.1缺失值
有3类数据缺失值的处理方法:删除记录,数据插补和不处理。
主要使用拉格朗日插值法和牛顿插值法——使用现成的库函数进行拉格朗日插值。
#coding:utf-8 import pandas as pd from scipy.interpolate import lagrange inputfile = '/home/xiao/Desktop/analysis/4/catering_sale.xls' outputfile = '/home/xiao/Desktop/analysis/4/sale.xls' data = pd.read_excel(inputfile) data[u'销量'][(data[u'销量']<400) | (data[u'销量']>5000)]=None def ployinterp_column(s,n,k = 5): y = s[list(range(n-k, n))+list(range(n+1, n+1+k))]#k取前5个和后5个 y = y[y.notnull()] return lagrange(y.index, list(y))(n) for i in data.columns: for j in range(len(data)): if (data[i].isnull())[j]: data[i][j] = ployinterp_column(data[i],j) data.to_excel(outputfile)
2.2.2异常值处理
2.2数据变换
主要有函数变换,规范化处理,规范化
2.2.1规范化
使用矩阵对上面3种规范化方法进行处理,代码如下:
#coding:utf-8 from __future__ import print_function import pandas as pd import numpy as np datafile = "/home/xiao/Desktop/analysis/4/normalization_data.xls" outputfile = "/home/xiao/Desktop/analysis/4/test1.xls" data = pd.read_excel(datafile, header = None) print(data) data.to_excel(outputfile) print((data-data.min())/(data.max()-data.min())) data.to_excel(outputfile) print((data-data.mean())/data.std()) data.to_excel(outputfile) print(data/10**np.ceil(np.log10(data.abs().max()))) data.to_excel(outputfile)
2.2.2离散化处理
一些分类算法,特别是一些分类算法(ID3,Apriori算法)要求数据是分类属性属性。
常用算法(离散化方法)
代码如下:
#-*- coding: utf-8 -*- #数据规范化 import pandas as pd datafile = '/home/xiao/Desktop/analysis/4/discretization_data.xls' #参数初始化 data = pd.read_excel(datafile) #读取数据 data = data[u'肝气郁结证型系数'].copy() k = 4 d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3 #等频率离散化 w = [1.0*i/k for i in range(k+1)] w = data.describe(percentiles = w)[4:4+k+1] #使用describe函数自动计算分位数 w[0] = w[0]*(1-1e-10) d2 = pd.cut(data, w, labels = range(k)) from sklearn.cluster import KMeans #引入KMeans kmodel = KMeans(n_clusters = k, n_jobs = 4) #建立模型,n_jobs是并行数,一般等于CPU数较好 kmodel.fit(data.reshape((len(data), 1))) #训练模型 c = pd.DataFrame(kmodel.cluster_centers_)#.sort(0) #输出聚类中心,并且排序(默认是随机序的) w = 4000 pd.rolling_mean(c, 2).iloc[1:] #相邻两项求中点,作为边界点 w = [0] + list(w[0]) + [data.max()] #把首末边界点加上 d3 = pd.cut(data, w, labels = range(k)) def cluster_plot(d, k): #自定义作图函数来显示聚类结果 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.figure(figsize = (8, 3)) for j in range(0, k): plt.plot(data[d==j], [j for i in d[d==j]], 'o') plt.ylim(-0.5, k-0.5) return plt cluster_plot(d1, k).show() cluster_plot(d2, k).show() cluster_plot(d3, k).show()
以上分别为等宽法,等频法和一维聚类对数据进行离散化,然后将每一类标记为同一标识,在进行建模。
2.2.3属性构造
需要进行一些简单的函数计算,将数据进行处理。比如有如下的表格:
需要对表格进行如下公式的操作:
结果表格如下:
代码如下:
#coding:utf-8 import pandas as pd import numpy as np import matplotlib as plt inputfile = '/home/xiao/Desktop/analysis/4/electricity_data.xls' outputfile = '/home/xiao/Desktop/analysis/4/666.xls' data = pd.read_excel(inputfile) data[u'线损率'] = (data[u'供入电量']-data[u'供出电量'])/(data[u'供入电量']) data.to_excel(outputfile, index = False)#true的时候会有列表的序号进行表示。
相关文章推荐
- python-MySQLdb数据超过200万检索过慢的原因分析
- Python数据分析工具包:Pandas
- 利用Python进行数据分析——第一章:重要Python库安装配置
- 实时数据之python操作elasticsearch监控数据插入图表分析
- 用Python进行网络爬虫和数据分析的初次尝试(一)
- python myql类库MySQLdb在数据过量情况下巨慢无比的原因分析
- 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(5) .
- python 购物数据意淫分析(1)
- 【Python数据分析】从Web收集数据小实例
- 用python调用R做数据分析-准备工作
- 分享:Python: 数据分析资源
- python 抓取腾讯微博数据并做简单的分析 .
- python 抓取腾讯微博数据并做简单的分析
- python数据分析
- Python分析处理本机各项数据并以chartdirector图形化展示
- python分析数据的处理过程及总结
- CentOS 6 64bit下,Python数据分析环境搭建
- python数据采集与多线程效率分析
- python&php数据抓取、爬虫分析与中介,有网址案例
- 利用Python进行数据分析——时间序列[十](1) .