数据分析Python-2数据探索&数据预处理

数据探索
1.数据质量分析
1.1 缺失值分析:删除delete、插补和不处理。
1.2 异常值分析:简单统计变量、3sigma原则、箱型图分析(与上、下四分位数和四分位数间距有关,在识别异常值方面有一定的优越性)

import pandas as pd
original_data='data/data.xlsx'#原始数据
data=pd.read_excel(original_data,index_col=u'订购日期')#读取数据
data.describe()#交互性,不需print

#-*- coding: utf-8 -*- #画箱线图
import matplotlib.pyplot as plt #画图函数
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
plt.figure()
p=data.boxplot()#画箱线图,直接使用dataframe的方法
p=data.boxplot(return_type='dict') #没有指定p的类型,则会导致不能获取指定的下标
x=p['fliers'][0].get_xdata()
y=p['fliers'][0].get_ydata()
y.sort()

for i in range(len(x)): #用annotate添加注释
   if i>0:
        plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.05-0.8/(y[i]-y[i-1]),y[i]))
    else:
        plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.08,y[i]))

plt.show()

1.3 不一致分析
2. 数据特征分析
2.1 分布分析
(1)定量数据的分布分析:频率分布表、频率分布直方图
(2)定性数据的分布分析:饼图、条形图
2.2 对比分析:指标间的横纵向比较、时间序列的比较分析(绝对、相对数比较)
2.3 统计量分析:集中趋势和离中趋势
(1)集中趋势度量:均值(或截断均值:去掉最大、最小值之后的均值)、中位数、众数
(2)离中趋势度量:极差(=极大值-极小值)、标准差、变异系数、四分位数间距(=上四分位数Qu-下四分位数Ql)

from __future__ import  print_function
import pandas as pd

catering_sale='data/data.xlsx'
data=pd.read_excel(catering_sale,index_col=u'订购日期')#读取数据
data=data[(data[u'成本']>10000)&data[u'成本']<60000]#过滤异常数据
statistics=data.describe()

statistics.loc['range']=statistics.loc['max']-statistics.loc['min']#极差
statistics.loc['var']=statistics.loc['std']/statistics.loc['mean']#变异系数
statistics.loc['dis']=statistics.loc['75%']-statistics.loc['25%']#四分位数间距

print(statistics) 

2.4 周期性分析 :时序图
2.5 贡献度分析:帕累托法则(20/80定律)

#-*- coding: utf-8 -*-
#菜品盈利数据 帕累托图
from __future__ import print_function
import pandas as pd

#初始化参数
dish_profit = '../data/catering_dish_profit.xls' #餐饮菜品盈利数据,上一级目录
data = pd.read_excel(dish_profit, index_col = u'菜品名')
data = data[u'盈利'].copy()
data.sort_values(ascending = False)#默认升序,此为降序,值排序

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure()
data.plot(kind='bar')#图种类:直方图
plt.ylabel(u'盈利(元)')
p = 1.0*data.cumsum()/data.sum()#cumsum:返回给定axis上的累计和
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。
plt.ylabel(u'盈利(比例)')
plt.show()

Error: ‘Series’ object has no attribute ‘sort’
解决:将 data.sort(ascending = False)#默认升序,此为降序,值排序
改为data.sort_values(ascending = False)#默认升序,此为降序,值排序
2.6 相关性分析
(1)直接绘制散点图
(2)绘制散点图矩阵:考察多个变量的相关关系
(3)计算相关系数:
Pearson相关系数:用于分析两个连续变量间的关系(要求连续变量的取值服从正态分布)
Spearman秩相关系数(或等级相关系数):一个变量的相同取值必须有相同的秩次
判定系数:相关系数的平方
3 Python主要数据探索函数
Pandas:数据分析
Matplotlib:数据可视化
3.1 基本统计特征函数:sum、mean、var、std、corr、cov、skew/kurt、describe
3.2 拓展特征统计函数:
cumsum(依次给出前1、2、…、n个数的和)、cumprod(积)、cummax、cummin
计算数据样本的各项指标:rolling_sum()、rolling_mean()、rolling_var()、rolling_std()、rolling_corr()、rolling_cov()、rolling_skew(偏度或三阶矩)、rolling_kurt(峰度或四阶矩)
有些函数是作为DataFrame或Series对象的方法而出现的,如D.cumsum;
而有些函数是属于某一库(如pandas)的函数,如pd.rolling_mean(D,k),每k列计算一次均值,滚动计算。
3.3 统计作图函数
plot():绘制线性二维图、折线图
pie():绘制饼形图
hist():绘制二维条形直方图,可显示数据的分配情形
boxplot():绘制样本数据的箱型图
plot(logy=True):绘制y轴的对数图形
plot(yerr=error):绘制误差条形图
作图前一般加入以下代码:

import matplotlib.pyplot as plt #导入作图库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure(figsize=(7,5))#创建图像区域,指定比例
plt.show()#显示作图结果

饼图:

import matplotlib.pyplot as plt
labels=‘Frogs’,‘Hogs’,‘Dpgs’,‘Logs’#定义标签
sizes=[15,30,45,10]#每一块的比例
colors=[‘yellowgreen’,‘gold’,‘lightskyblue’,‘lightcoral’]#每一块的颜色
explode=(0,0.1,0,0)#突出显示第二块

plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct=’%1.1f%%’,shadow=True,startangle=90)
plt.axis(‘equal’)#显示为圆,避免比例压缩为椭圆
plt.show()
箱型图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.random.randn(1000)#1000个服从正态分布的随机数
D=pd.DataFrame([x,x+1]).T#构造两列的DatFrame
D.plot(kind='box')#调用Series内置的作图方法画图,用kind参数指定箱型图box
plt.show()

误差条形图:

    import matplotlib.pyplot as plt #导入图像库
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
    import numpy as np
    import pandas as pd
    error=np.random.randn(10)#定义误差列
    y=pd.Series(np.sin(np.arange(10)))#均值数据列
    y.plot(yerr=error)#绘制误差图
    plt.show()  

数据预处理:数据清洗、数据集成、数据变换和数据规约。
1 数据清洗:删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等。
1.1 缺失值处理:删除记录、数据插补和不处理。
(未完待续。。。)

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