您的位置:首页 > 编程语言 > Python开发

python数据分析2

2017-05-13 10:15 866 查看
数据分析1中记录了我学习Python一些库函数以及常用数据预处理的手段。这一部分将更加详细的介绍数据预处理的相关知识。

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 数据分析