(三)Python数据分析与挖掘实战——数据探索

本文详细介绍了在Python中进行数据探索的过程,包括数据预处理、分布分析(定量与定性)、对比分析、统计量分析(如集中趋势、离散趋势度量)、周期性分析、贡献度分析(帕累托分析)以及相关性分析(如Pearson和Spearman相关系数)。此外,还提及了Pandas库中的主要统计函数和作图函数的应用。
部署运行你感兴趣的模型镜像

这个专栏用来记录我在学习和实践《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,说明两个变量之间几乎没有线性关系。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值