python数据分析2

数据分析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 = 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的时候会有列表的序号进行表示。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值