这个专栏用来记录我在学习和实践《Python数据分析与挖掘实战》一书时的一些知识点总结和代码实现。
文章目录
数据
catering_sale.xls
catering_dish_profit.xls
catering_sale_all.xls
脚本
abnormal_check.py
#-*- coding: utf-8 -*-
import pandas as pd
catering_sale = '../data/catering_sale.xls' # 餐饮数据
data = pd.read_excel(catering_sale, index_col=u'日期') # 读取数据,指定“日期”列为索引列
import matplotlib.pyplot as plt # 导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure() # 建立图像
p = data.boxplot(return_type='dict') # 画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() # 从小到大排序,该方法直接改变原对象
# 用annotate添加注释
# 其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
# 以下参数都是经过调试的,需要具体问题具体调试。
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() # 展示箱线图
statistics_analyze.py
#-*- coding: utf-8 -*-
# 餐饮销量数据统计量分析
from __future__ import print_function
import pandas as pd
catering_sale = '../data/catering_sale.xls' # 餐饮数据
data = pd.read_excel(catering_sale, index_col=u'日期') # 读取数据,指定“日期”列为索引列
data = data[(data[u'销量'] > 400) & (data[u'销量'] < 5000)] # 过滤异常数据
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)
dish_pareto.py
#-*- 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(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()
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()
correlation_analyze
#-*- coding: utf-8 -*-
# 餐饮销量数据相关性分析
from __future__ import print_function
import pandas as pd
catering_sale = '../data/catering_sale_all.xls' # 餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col=u'日期') # 读取数据,指定“日期”列为索引列
print(type(data))
print(data.corr()) # 相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()[u'百合酱蒸凤爪'] # 只显示“百合酱蒸凤爪”与其他菜式的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) # 计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数
数据特征分析
分布分析
定量数据的分布分析
求极差
确定组距和组数
决定分点
列出频率分布表
绘制频率分布直方图
定性数据的分布分析
用变量的分布类型来分组,采用饼图或条形图来描述定性变量的分布(简单来说就是构成)。
对比分析
- 绝对数比较
- 相对数比较
| 名称 | 描述 |
|---|---|
| 结构相对数 | 某一个数值列占总体的比例 |
| 比例相对数 | 同一总体内不同部分的数值进行对比 |
| 比较相对数 | 同一时期两个性质相同的指标进行对比(横向对比)(说明同类现象在不同空间条件下的数量对比关系) |
| 强度相对数 | 两个性质不同但有一定练习的总量指标进行对比(说明现象的强度、密度和普遍程度) |
| 计划完成程度相对数 | 某一个时期的实际完成数和计划数对比(达成情况) |
| 动态相对数 | 同一现象在不同时期的指标数值进行对比(纵向对比) |
统计量分析
集中趋势度量
均值
中位数
众数
离散趋势度量
极差
标准差
变异系数(标准差相对于均值的离中趋势)
四分位距
Pandas主要统计函数
- 基础
| 方法名 | 函数功能 |
|---|---|
| sum() | |
| mean() | |
| var() | 方差 |
| std() | 标准差 |
| corr() | 相关系数矩阵,可以指定method参数(method=‘pearson’, method=‘kendall’, method=‘spearman’) |
| cov() | 协方差矩阵 |
| skew() | 偏度 |
| kurt() | 峰度 |
| describe() | 直接给出一组统计量。可以指定percentiles参数,如 percentiles=[0.2,0.4,0.6,0.8] |
- 累积统计特征函数
| 方法名 | 函数功能 |
|---|---|
| cumsum() | 依次给出前1、2、… 、n个数的和,是作为DateFrame或Series对象的方法,如 df[‘col1’].cumsum() |
| cumprod() | 依次给出前1、2、… 、n个数的积 |
| cummax() | 依次给出前1、2、… 、n个数的最大值 |
| cummin() | 依次给出前1、2、… 、n个数的最小值 |
| rolling_sum() | 是作为pandas的函数,如 pd.rolling_sum(df, 2),依次对相邻两项求和 |
| rolling_mean() | |
| rolling_var() | |
| rolling_std() | |
| rolling_corr() | |
| rolling_cov() | |
| rolling_skew() | |
| rolling_kurt() |
Pandas的主要作图函数
| 作图函数名 | 作图函数功能 | 所属工具箱 |
|---|---|---|
| plot() | 绘制线性二维图,折线图 | Matplotlib/Pandas(Pandas里可以指定kind='pie’这样) |
| pie() | 饼图 | Matplotlib/Pandas |
| hist() | 直方图 | Matplotlib/Pandas |
| boxplot() | 箱线图 | Pandas |
plot(logy=True) | 绘制y轴的对数图形 | Pandas |
plot(yerr=error) | 绘制误差条形图 | Pandas |
周期性分析
年度周期趋势
季节性周期趋势
月度周期趋势
周度周期趋势
天、小时的周期趋势
贡献度分析(帕累托分析)
中心思想是二八定律,80%利润常常来自于20%最畅销的产品。
相关性分析
Pearson和Spearman相关系数
- 两个变量之间的相关性有以下几种:

散点图矩阵(连续变量两两绘制散点图)
相关系数
- Pearson相关系数(要求连续变量的取值服从正态分布)
- Spearman(秩)相关系数(也叫等级相关系数。适合于不服从正态分布的变量、分类或等级变量之间的关联性)
只要两个变量具有严格单调的函数关系,那么它们就是完全Spearman相关的。这与Pearson相关不同,Pearson相关只有在变量具有线性关系时才是完全相关的。
判定系数
判定系数是相关系数的平方,用R^2表示。用来衡量回归方程对y的解释程度。
判定系数的取值范围:[0, 1]。
R^2越接近1,说明x和y之间的相关性越强;
R^2越接近于0,说明两个变量之间几乎没有线性关系。
本文详细介绍了在Python中进行数据探索的过程,包括数据预处理、分布分析(定量与定性)、对比分析、统计量分析(如集中趋势、离散趋势度量)、周期性分析、贡献度分析(帕累托分析)以及相关性分析(如Pearson和Spearman相关系数)。此外,还提及了Pandas库中的主要统计函数和作图函数的应用。
534

被折叠的 条评论
为什么被折叠?



