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()


目录
相关文章
|
19天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
21天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
53 4
|
20天前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
26 1
|
21天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
35 1
|
16天前
|
数据采集 存储 数据处理
探索Python中的异步编程:从基础到实战
【10月更文挑战第39天】在编程世界中,时间就是效率的代名词。Python的异步编程特性,如同给程序穿上了一双翅膀,让它们在执行任务时飞得更高、更快。本文将带你领略Python异步编程的魅力,从理解其背后的原理到掌握实际应用的技巧,我们不仅会讨论理论基础,还会通过实际代码示例,展示如何利用这些知识来提升你的程序性能。准备好让你的Python代码“起飞”了吗?让我们开始这场异步编程的旅程!
31 0
|
20天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
4月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
86 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
197 4
|
4月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
87 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
22天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。