数据分析第五天--开始数据分析

什么是数据分析

之前我们讲了pandas中的序列和数据框、数据的导入导出、数据处理这几部分,完成这些之后我们就获得了比较干净的,最符合我们期望的数据,接下来我们就可以进行数据分析了。那什么是数据分析呢?先大概讲讲它的概念。

数据分析: 数据分析是指用适当的分析方法及工具,对我们收集来的数据进行分析,提取有用的价值信息,最终形成有效的结论。一般我们拿到数据不是直接就开始敲代码分析,而是先想想分析的思路,先查看数据的内容,确定好合适的分析方法,再根据确定的分析方法去构造模型最终完成分析。
比如:对于一些预测的回归问题,我们就不能盲目的用分类的模型去解决;对于不同类别的数据我们应该用有监督的分类还是无监督的聚类等等(因为我比较喜欢机器学习的方法所以常常都是用机器学习去解决问题)
知道了数据分析大致的概念,就再来讲讲它的分析方法

数据分析的分析方法

一般的数据分析方法有下面这几种,一般就是对比,细分和预测

数据分析的作用基本方法数据分析方法
现状分析对比对比分析 描述性分析 分组分析 结构分析 分布分析 交叉分析 RFM分析 矩阵分析 综合评价分析
原因分析细分结构分解法 因素分解法 漏斗图分解法
预测分析预测相关分析 回归分析 时间序列

知道了大致的分析方法,就要详细的了解每一种分析方法的内容

1.对比分析

所有的东西都有共性特征和个性特征,比如男性都会有喉结这是男生的共性特征,而每一位男生的DNA不同,这就是每个人的个性特征。
对比分析:是指将两个及两个以上的数据进行比较,分析它们的差异,从而找到变化的规律。对比分析可以直观的看出事物某方面的变化,还可以准确的量化变化的值。

指标和维度

我们需要对指标从不同维度进行分析比较才能得出有效的结论

  • 指标
    指标是指用于衡量事物发展程度的单位或方法,也可以叫做度量。例如:人口数量,GDP,收入等等
    而指标也可以分为绝对指标和相对指标,比如我们统计到的真实数量就是一种绝对指标,经过计算得到的利润率,人均收入,人均GDP就是相对指标。
    我们最常用的QQ模型,就是从数量和质量去进行对比分析。
  • 维度
    维度是事物的某种特征,也就是我们的分析角度,比如:用户类型,地区,时间等

进行对比分析时要注意维度一致性和指标单位的一致性。

2.描述性分析

描述性分析就是运用制表、分类、图形以及计算概括性数据来描述数据特征的各项活动。
在pandas中,可以使用describe函数进行描述性统计
它的参数就是要计算的百分位数,一般用默认的就可以啦
会把统计的内容以序列的形式返回。

import pandas as pd

#导入数据
data=pd.read_csv('/home/digits/桌面/描述性分析.csv',encoding='utf-8')
#查看一下导入的数据内容
print(data)

#对sales列进行描述性分析
sales_res=data.sales.describe()
data.sales.describe()

print("sales列的描述性分析结果为:")
for i in sales_res:
    print(i)

#找到sales列升序排序中最接近某个值的数,例如排序在30%的数
print(data.sales.quantile(0.3,interpolation='nearest'))

在这里插入图片描述
因为今天是临时有事来实验室,没带自己电脑只能用实验室的电脑了。

3.分组分析

分组分析法,是根据分组字段,将分析对象划分为不同的部分,以对比分析各组之间的差异性的一种分析方法。
它主要有两类,定性分组和定量分组。
定性分组:按事物的固有属性划分,如性别、学历、地区等属性
定量分析:也可以叫数值分组,根据分析目的将数值型数据进行等距或者非等距的分组。
在pandas中,对数据进行分组需要使用groupby和agg函数组合
groupby(by,as_index=True)[columns].agg(funs)
by:分组列的列名
as_index:分组的列是否作为索引列
columns:统计列的列名
funs:count(计数)、mean(均值)、std(方差)、sum(求和)、max、min

import pandas as pd

#导入数据
data=pd.read_csv('D:/分组分析.csv',encoding='GBK')

#按照性别列进行分组,对年龄列进行均值统计
new=data.groupby(by=['gender'])['age'].agg('mean')

在这里插入图片描述

4.结构分析

结构分析是在分组的基础上计算各组成部分所占的比重,从而分析总体的组成特征

#按照性别列进行分组,对年龄列进行计数统计
ga=data.groupby(by=['gender'])['age'].agg('count')
ga_count=ga/ga.sum()

在这里插入图片描述

5.交叉分析

交叉分析法通常用于两个或两个以上分组变量之间的关系,以交叉表的形式,进行变量间关系的对比分析。
在pandas中一般用pivot_table函数进行交叉分析
pivot_table(values,index,columns,aggfunc=‘mean’,fill_value=None)
values:数据透视表中的值
index:数据透视表中的行
columns:数据透视表中的列
aggfunc:统计函数,默认为mean
fill_value:NA值的统一替换,默认缺失值为None

import pandas as pd

#导入数据
data=pd.read_csv('D:/交叉分析.csv',encoding='utf-8')

#设置年龄分段的阈值
bins=[0,20,30,40,100]

#设置年龄分段的标签
age=['20岁及以下','21岁到30岁','31岁到40岁','41岁以上']

#生成年龄分层列
data['年龄分层']=pd.cut(data.年龄,bins,labels=age)

#进行交叉统计,行为年龄分层,列为性别,对用户ID进行计数统计
result=data.pivot_table(values='用户ID',index='年龄分层',columns='性别',aggfunc='count')

在这里插入图片描述

6.RFM分析

RFM主要用于商家分析客户,根据用户的活跃程度和交易金额进行客户价值细分的一种客户细分方法。由R近度、F频度、M额度构成,近度是指最近一次交易的时间间隔,频度是最近交易的频率大小,额度是交易的金额。
所以就希望找到F,M较高而R较低的客户,那就能保证短期内会再次有大金额的交易。在计算中我们把F,M大的值赋予较高的分值,R较小的值赋予较高的分值,以此计算总分值,找到高质量用户。

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 23:33:08 2019

@author: ysj
"""
import pandas as pd
from datetime import datetime

#导入数据
data=pd.read_csv('D:/RFM分析.csv',encoding='utf-8')

#将交易日期处理为日期数据类型
data['DealDateTime']=pd.to_datetime(data.DealDateTime,format='%Y/%m/%d')

#求交易日期到现在的时间间隔
data['交易时间间隔']=datetime.now()-data['DealDateTime']

#计算RFM的三个参数值
#从时间距离中获取天数
data['交易时间间隔']=data['交易时间间隔'].dt.days

#统计每个用户距离现在有多久没消费,找出最小的最近消费距离
R_agg=data.groupby(by=['CustomerID'],as_index=False)['交易时间间隔'].agg('min')

#统计每个用户交易的总次数
F_agg=data.groupby(by=['CustomerID'],as_index=False)['OrderID'].agg('count')

#统计每个用户交易的总额
M_agg=data.groupby(by=['CustomerID'],as_index=False)['Sales'].agg('sum')

#将结果整合为新的数据框
agg=R_agg.merge(F_agg).merge(M_agg)
agg.columns=['CustomerID','RecencyAgg','FrequencyAgg','MonetaryAgg']#更改列名


#计算R统计量得分,R_s
#根据用户最近消费距离列,按升序排序
#得到排在0,20%,40%,60%,80%,1的数据点
bins=agg.RecencyAgg.quantile(q=[0,0.2,0.4,0.6,0.8,1],interpolation='nearest')
bins[0]=0
#将用户的R值按降序排列
rlabels=[5,4,3,2,1]
R_s=pd.cut(agg.RecencyAgg,bins,labels=rlabels)


#计算F统计量的得分,F_s
#根据用户消费频率升序排序
#得到排在0,20%,40%,60%,80%,1的数据点
bins=agg.FrequencyAgg.quantile(q=[0,0.2,0.4,0.6,0.8,1],interpolation='nearest')
bins[0]=0
#将用户的F值按升序排序
flabels=[1,2,3,4,5]
F_s=pd.cut(agg.FrequencyAgg,bins,labels=flabels)


#计算M统计量的得分,M_s
#根据用户消费总额升序排序
bins=agg.MonetaryAgg.quantile(q=[0,0.2,0.4,0.6,0.8,1],interpolation='nearest')
bins[0]=0
#将用户的M值按升序排序
mlabels=[1,2,3,4,5]
M_s=pd.cut(agg.MonetaryAgg,bins,labels=mlabels)

#将三项得分加入agg中
agg['R_s']=R_s
agg['F_s']=F_s
agg['M_s']=M_s


#计算各行数据的RFM值
agg['RFM']=100*R_s.astype(int)+10*F_s.astype(int)+1*M_s.astype(int)
#将RFM这一列升序排列分为8个等级
#求出排在0,12.5%,25%,37.5%,50%,62.5%,75%,87.5%,1的数据
bins=agg.RFM.quantile(q=[0,0.125,0.25,0.375,0.5,0.625,0.75,0.875,1],interpolation='nearest')
bins[0]=0
rfmlabels=[1,2,3,4,5,6,7,8]
agg['等级']=pd.cut(agg.RFM,bins,labels=rfmlabels)


#对等级分组,按照客户的ID进行计数统计,结果保存到num中
num=agg.groupby(by='等级')['CustomerID'].agg('count')

在这里插入图片描述

小结

今天有个同学恰好返校,晚上去接他回来很晚了,所以还有矩阵分析,相关分析和回归分析没有写,只能明天再写了。另外,淘宝爬虫做好了,登陆后能成功自动的爬取数据,大部分的代码发现和有一篇博客很像,我就不重复贴出来了,有兴趣的可以去看https://blog.csdn.net/weixin_45019310/article/details/90573541
爬取的结果还不错,如图
在这里插入图片描述
等数据分析差不多写完准备开始搞搞flask,因为最近的项目要求就是写写flask的cms,就这样吧,晚安。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shelgi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值