豆瓣评价:Python数据分析与挖掘实战
作者: 张良均 / 王路 / 谭立云 / 苏剑林
出版社: 机械工业出版社
数据探索有助于选择合适的数据预处理和建模方法,甚至可以完成一些通常有数据挖掘解决的问题
数据预处理的前提
数据质量分析的主要任务是检察院数据是否有脏数据:
脏数据内容:
缺失值主要包括记录的确实和记录中某个字段信息的缺失
缺失值产生的原因
缺失值的影响
缺失值的分析
异常值分析师检验数据是否有录入错误以及含有不合理的数据。
异常值是指样本中的个别值,其数据明显偏离其他的观测值。异常值也称为离散点,异常值的分析也称为离散点分析。
pandas中只需要读入数据后,使用describe()函数就可以查看数据的基本情况
例如:
import pandas as pd
catering_sale = 'catering_sale.xls' # 销售数据
# 读取数据,制定‘日期'列为索引列
data = pd.read_excel(catering_sale,index_col = u'日期')
data.head()
#describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)
data.describe()
# 制作箱线图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
catering_sale = './catering_sale.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
print(data.describe())
# 使用盒图来展示数据
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置
plt.rcParams['axes.unicode_minus'] = False #负号显示
# 画箱线图
plt.figure(figsize=(10,5))
p = data.boxplot(return_type='dict') # 数据转为箱线图的字典格式
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
# 添加注释, xy指定标注数据,xytext指定标注的位置(所以需要特殊处理)
for i in range(len(x)):
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.定量数据的分布分析
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
catering_sale = './catering_sale.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
data = data[(data[u'销量'] > 400) & (data[u'销量'] < 5000)] #过滤异常值
statistics = data.describe()[u'销量'] #保存基本统计量
statistics['range'] = statistics['max'] - statistics['min'] #极差
statistics['var'] = statistics['std'] / statistics['mean'] #变异系数
statistics['dis'] = statistics['75%'] - statistics['25%'] #四分位间距
print(statistics)
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
catering_sale = './catering_dish_profit.xls'
data = pd.read_excel(catering_sale, index_col=u'菜品名')
data = data[u'盈利'].copy() #浅拷贝
data.sort_values(ascending=False)
plt.figure()
data.plot(kind='bar')
plt.ylabel(u'盈利(元)')
p = 1.0 * data.cumsum() / data.sum()
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()
分析连续型变量之间的线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关性分析。
1.直接绘制散点图:判断两个变量相关性
餐饮销售数据相关性分析
代码:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
catering_sale = './catering_sale_all.xls'
data = pd.read_excel(catering_sale, index_col=u'日期')
data.corr()
#data.corr()[u'百合酱蒸凤爪']
#data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺'])