Python数据分析与挖掘实战总结(一)

简介: Python数据分析与挖掘实战总结

一、Python数据分析工具


image.png


二、数据探索


一、对数据的质量分析


异常值的分析:


1. 简单的统计量分析:查看最大最小值是否在合理范围


2.3δ原则,在正态分布下异常值被定义为一组定值与平均值的距离超过3倍的标准差。


3.箱形图分析:


异常值被定义为小于QL-1.5IQR 或大于QR+1.5IQR  


QL是所有数据的下四分位,QR是所有数据的上四分位。IQR是QR-QL


DataFrame中describe()已经给出了基本的统计



三、数据特征分析



1.可以使用pandas、matplotlib绘制统计图


散点图矩阵可以分析每两个变量的关系。


2.计算相关系数


①Pearson相关系数


②Spearman秩相关系数


③判定系数


使用pandas的corr()计算相关系数

image.png

image.png

绘制条形图和折线图:

image.png




四、数据预处理

缺失:

image.png



五、Python数据分析入门


Python入门

基本命令:

# for 循环
s = 0
for k in range(101):    #1-100
    s = s + k
print s
# 函数
def add2(x):
    return x+2
print add2(1)
def add2(x=0, y=0):
    return [x+2, y+2]   #返回列表
def add3(x, y):
    return x+3, y+3 #双重返回
a,b = add3(1, 2)
# 匿名函数
f = lambda x : x+2  #定义函数f(x)= x+2
g = lambda x, y : x+y   #定义函数g(x,y)= x+y, g(1,2)结果为3
# 数据结构
# a, b是列表
# 列表函数cmp(a, b) len(a) max(a) min(a) sum(a) sorted(a)
# 列表对象方法 a.append(1) a.count(1) a.extend([1,2]) a.index(1) a.insert(2,1) a.pop(1)
b = a       # b是a的别名
b = a[:]    #数据复制
# 列表解析
a = [1, 2, 3]
b = []
for i in a:
    b.append(i+2)
# 等价于
a =[1, 2, 3]
b =[i + 2 for i in a]
# 集合
d = {'today' : 20, "tomorrow" : 30} #创建
d['today']          #访问
# 其他创建方法
dict(['today', 20], ['tomorrow', 30])
dict.fromkeys(['today', 'tomorrow'], 20)
# 集合
s = {1, 2, 2, 4}
s = set([1,2,2,4])      #自动去除多余的值
# 函数式编程 lambda, map, reduce, filter
b = map(lambda x :x+2, a)
b = list(b);
#2.x中不需要,3.x中需要,因为map仅仅创建了一个待运行的命令容器,只有其他函数调用时才返回结果
# map命令将函数逐一运用到map列表的每个元素中,,最后返回一个数组,效率比for循环高一点
# reduce函数用于递归运算
reduce(lambda x, y: x*y, range(1, n+1))
# filter 用于筛选列表中符合条件的元素
b = filter(lambda x :x > 5 and x <8, range(10))
b = list(b)     # 同map
# 导入库
import math
math.sin(1)
import math as m
m.sin(1)
from math import exp as e
e(1)
sin(1)      #出错
from math import *      #直接导入,大量导入会引起命名冲突,不建议
exp(1)
sin(1)
# 导入future特征(2.x)
# 将print变为函数形式,即用print(a)格式输出
from __future__ import print_function
# 3.x中3/2=1.5, 3//2=1;2.x中3/2=1
from __future__ import division


第三方库

安装


Windows中
pip install numpy
或者下载源代码安装
python setup.py install
Pandas默认安装不能读写Excel文件,需要安装xlrd和xlwt库才能支持excel的读写
pip install xlrd
pip install xlwt
StatModel可pip可exe安装,注意,此库依赖于Pandas和patsy
Scikit-Learn是机器学习相关的库,但是不包含人工神经网络
 model.fit()     #训练模型,监督模型fit(X,y),非监督模型fit(X)
 # 监督模型接口
 model.predict(X_new)        #预测新样本
 model.predict_proba(X_new)  #预测概率
 model.score()               #得分越高,fit越好
 # 非监督模型接口
 model.transform()           #从数据中学到新的“基空间”
 model.fit_transform()       #从数据中学到新的基,并按照这组基进行转换
Keras是基于Theano的强化的深度学习库,可用于搭建普通神经网络,各种深度学习模型,如自编码器,循环神经网络,递归神经网络,卷积神经网络。Theano也是一个Python库,能高效实现符号分解,速度快,稳定性好,实现了GPU加速,在密集型数据处理上是CPU的10倍,缺点是门槛太高。Keras的速度在Windows会大打折扣。
Windows下:安装MinGWindows--安装Theano---安装Keras--安装配置CUDA
Gensim用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等,建议在Windows下运行。
Linux中
sudo apt-get install python-numpy
sudo apt-get install python-scipy
sudo apt-get install python-matplotlib
使用
Matplotlib默认字体是英文,如果要使用中文标签,
plt.rcParams['font.sans-serif'] = ['SimHei']
保存作图图像时,负号显示不正常:
plt.rcParams['axes.unicode_minus'] = False


六、数据探索


脏数据:缺失值、异常值、不一致的值、重复数据


异常值分析

简单统计量分析:超出合理范围的值

3sigma原则:若正态分布,异常值定义为偏差超出平均值的三倍标准差;否则,可用远离平均值的多少倍来描述。

箱型图分析:异常值定义为小于Q_L-1.5IQR或者大于Q_U +1.5IQR。Q_L是下四分位数,全部数据有四分之一比他小。Q_U是上四分位数。IQR称为四分位数间距,

IQR=Q_U-Q_L
  #-*- 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() #画箱线图,直接使用DataFrame的方法
  x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
  y = p['fliers'][0].get_ydata()
  y.sort() #从小到大排序,该方法直接改变原对象
  #用annotate添加注释
  #其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
  #以下参数都是经过调试的,需要具体问题具体调试。
  #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() #展示箱线图


分布分析

定量数据的分布分析:求极差(max-min),决定组距和组数,决定分点,列出频率分布表,绘制频率分布直方图。


定性数据的分布分析:饼图或条形图


对比分析

统计量分析

集中趋势度量:均值、中位数、众数


离中趋势度量:极差、标准差、变异系数、四份位数间距


变异系数为:s表示标准差,x表示均值



#-*- 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() #保存基本统计量
  print(statistics)
  print("--------------")
  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)
周期性分析
贡献度分析
又称帕累托分析,原理是帕累托法则,即20/80定律,同样的投入放在不同的地方会产生不同的收益。
  #-*- coding: utf-8 -*-
  #菜品盈利数据 帕累托图
  from __future__ import print_function
  import pandas as pd
  #初始化参数
  dish_profit = '../data/catering_dish_profit.xls' #餐饮菜品盈利数据,菜品ID,菜品名 盈利
  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()


相关性分析

途径:绘制散点图、散点图矩阵、计算相关系数


Pearson相关系数:要求连续变量的取值服从正态分布。

image.png

相关系数r的取值范围[-1, 1]


Spearman相关系数:不服从正态分布的变量、分类或等级变量之间的关联性可用该系数,也称等级相关系数。

image.png

对两个变量分别按照从小到大的顺序排序,得到的顺序就是秩。R_i表示x_i的秩次,Q_i表示y_i的秩次。


判定系数:相关系数的平方,用来解释回归方程对y的解释程度。


#-*- 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'日期') #读取数据,指定“日期”列为索引列
data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数
数据探索函数
方法名 函数功能
D.sum() 按列计算总和
D.mean()  计算算数平均
D.var() 方差
D.std() 标准差
D.corr(method = ' pearson') Spearman(Pearson)相关系数矩阵
D.cov() 协方差矩阵
D.skew()  偏度(三阶矩)
D.kurt()  峰度(四阶距)
D.describe()  给出样本的基础描述
D = pd.DataFrame([range(1,8), range(2, 9)])
D.corr(method = 'spearman')     #计算相关系数矩阵
S1 = D.loc[0]   #提取第一行
S2 = D.loc[1]   #提取第二行
S1.corr(S2, method = 'pearson') #计算S1S2的相关系数
D = pd.DataFrame(np.random.randn(6, 5))     #产生6x5的表格
print D.cov()
print D[0].cov(D[1])  #计算第一列和第二列的方差
print D.skew()      #D是DataFrame或者Series
print D.describe()
方法名 函数功能
cumsum()  依次给出前1-n个数的和
cumprod() 依次给出前1-n个数的积
cummax()  依次给出前1-n个数的最大值
cummin()  依次给出前1-n个数的最小值
方法名 函数功能
rolling_sum() 按列计算数据样本的总和
rolling_mean()  算数平均数
rolling_var() 方差
rolling_std() 标准差
rolling_corr()  相关系数矩阵
rolling_cov() 协方差
rolling_skew()  偏度
rolling_kurt()  峰度
D = pd.Series(range(0,20))
print D.cumsum()
print pd.rolling_sum(D, 2)    #依次对相邻两项求和
方法名 函数功能
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()                  #显示作图结果
  ############################################################################################
  x = np.linspace(0, 2*np.pi, 50)
  y = np.sin(x)
  plt.plot(x, y, 'bp--')       #蓝色带星虚线plt.show()
  ############################################################################################
  labels = 'Frogs', 'Hogs', 'Dogs', '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()
  ############################################################################################
  x = np.random.randn(1000)       #1000个服从正态分布的随机数
  plt.hist(x, 10)                 #分成10组
  plt.show()
  ############################################################################################
  plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
  plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
  x = np.exp(np.arange(20))       #原始数据
  plt.subplot(121)
  plt.plot(range(0,20), x, label = u"原始数据图")
  plt.legend()
  plt.subplot(122)
  plt.semilogy(range(0,20), x, label = u"对数数据图")
  plt.legend()
  plt.show()
  ############################################################################################
  plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
  plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
  error = np.random.random(10)        #定义误差条例
  y = pd.Series(np.sin(np.arange(10)))
  y.plot(yerr = error)
  plt.show()


目录
相关文章
|
4天前
|
算法 Python
请解释Python中的关联规则挖掘以及如何使用Sklearn库实现它。
使用Python的mlxtend库,可以通过Apriori算法进行关联规则挖掘。首先导入TransactionEncoder和apriori等模块,然后准备数据集(如购买行为列表)。对数据集编码并转换后,应用Apriori算法找到频繁项集(设置最小支持度)。最后,生成关联规则并计算置信度(设定最小置信度阈值)。通过调整这些参数可以优化结果。
25 9
|
4天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
2天前
|
机器学习/深度学习 算法 Python
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
21 4
|
2天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
6 0
|
4天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
6天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
7天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
12 1
|
7天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title(&#39;简单折线图&#39;) plt.xlabel(&#39;X轴&#39;) plt.ylabel(&#39;Y轴&#39;) plt.show() ```
12 1
|
7天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
13 1
|
机器学习/深度学习 算法 Python
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
23 0