python数据分析期末报告(python数据分析期末报告1500)
可以让你快速用Python进行数据分析的10个小技巧
一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可以节省时间,还可能挽救“生命”。
一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器。所以,这里有一些小提示和小技巧,有些可能是新的,但我相信在下一个数据分析项目中会让你非常方便。
Pandas中数据框数据的Profiling过程
Profiling(分析器)是一个帮助我们理解数据的过程,而Pandas Profiling是一个Python包,它可以简单快速地对Pandas 的数据框数据进行 探索 性数据分析。
Pandas中df.describe()和df.info()函数可以实现EDA过程第一步。但是,它们只提供了对数据非常基本的概述,对于大型数据集没有太大帮助。 而Pandas中的Profiling功能简单通过一行代码就能显示大量信息,且在交互式HTML报告中也是如此。
对于给定的数据集,Pandas中的profiling包计算了以下统计信息:
由Pandas Profiling包计算出的统计信息包括直方图、众数、相关系数、分位数、描述统计量、其他信息——类型、单一变量值、缺失值等。
安装
用pip安装或者用conda安装
pip install pandas-profiling
conda install -c anaconda pandas-profiling
用法
下面代码是用很久以前的泰坦尼克数据集来演示多功能Python分析器的结果。
#importing the necessary packages
import pandas as pd
import pandas_profiling
df = pd.read_csv('titanic/train.csv')
pandas_profiling.ProfileReport(df)
一行代码就能实现在Jupyter Notebook中显示完整的数据分析报告,该报告非常详细,且包含了必要的图表信息。
还可以使用以下代码将报告导出到交互式HTML文件中。
profile = pandas_profiling.ProfileReport(df)
profile.to_file(outputfile="Titanic data profiling.html")
Pandas实现交互式作图
Pandas有一个内置的.plot()函数作为DataFrame类的一部分。但是,使用此功能呈现的可视化不是交互式的,这使得它没那么吸引人。同样,使用pandas.DataFrame.plot()函数绘制图表也不能实现交互。 如果我们需要在不对代码进行重大修改的情况下用Pandas绘制交互式图表怎么办呢?这个时候就可以用Cufflinks库来实现。
Cufflinks库可以将有强大功能的plotly和拥有灵活性的pandas结合在一起,非常便于绘图。下面就来看在pandas中如何安装和使用Cufflinks库。
安装
pip install plotly
# Plotly is a pre-requisite before installing cufflinks
pip install cufflinks
用法
#importing Pandas
import pandas as pd
#importing plotly and cufflinks in offline mode
import cufflinks as cf
import plotly.offline
cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)
是时候展示泰坦尼克号数据集的魔力了。
df.iplot()
df.iplot() vs df.plot()
右侧的可视化显示了静态图表,而左侧图表是交互式的,更详细,并且所有这些在语法上都没有任何重大更改。
Magic命令
Magic命令是Jupyter notebook中的一组便捷功能,旨在解决标准数据分析中的一些常见问题。使用命令%lsmagic可以看到所有的可用命令。
所有可用的Magic命令列表
Magic命令有两种:行magic命令(line magics),以单个%字符为前缀,在单行输入操作;单元magic命令(cell magics),以双%%字符为前缀,可以在多行输入操作。如果设置为1,则不用键入%即可调用Magic函数。
接下来看一些在常见数据分析任务中可能用到的命令:
% pastebin
%pastebin将代码上传到Pastebin并返回url。Pastebin是一个在线内容托管服务,可以存储纯文本,如源代码片段,然后通过url可以与其他人共享。事实上,Github gist也类似于pastebin,只是有版本控制。
在file.py文件中写一个包含以下内容的python脚本,并试着运行看看结果。
#file.py
def foo(x):
return x
在Jupyter Notebook中使用%pastebin生成一个pastebin url。
%matplotlib notebook
函数用于在Jupyter notebook中呈现静态matplotlib图。用notebook替换inline,可以轻松获得可缩放和可调整大小的绘图。但记得这个函数要在导入matplotlib库之前调用。
%run
用%run函数在notebook中运行一个python脚本试试。
%run file.py
%%writefile
%% writefile是将单元格内容写入文件中。以下代码将脚本写入名为foo.py的文件并保存在当前目录中。
%%latex
%%latex函数将单元格内容以LaTeX形式呈现。此函数对于在单元格中编写数学公式和方程很有用。
查找并解决错误
交互式调试器也是一个神奇的功能,我把它单独定义了一类。如果在运行代码单元时出现异常,请在新行中键入%debug并运行它。 这将打开一个交互式调试环境,它能直接定位到发生异常的位置。还可以检查程序中分配的变量值,并在此处执行操作。退出调试器单击q即可。
Printing也有小技巧
如果您想生成美观的数据结构,pprint是首选。它在打印字典数据或JSON数据时特别有用。接下来看一个使用print和pprint来显示输出的示例。
让你的笔记脱颖而出
我们可以在您的Jupyter notebook中使用警示框/注释框来突出显示重要内容或其他需要突出的内容。注释的颜色取决于指定的警报类型。只需在需要突出显示的单元格中添加以下任一代码或所有代码即可。
蓝色警示框:信息提示
p class="alert alert-block alert-info"
bTip:/b Use blue boxes (alert-info) for tips and notes.
If it’s a note, you don’t have to include the word “Note”.
/p
黄色警示框:警告
p class="alert alert-block alert-warning"
bExample:/b Yellow Boxes are generally used to include additional examples or mathematical formulas.
/p
绿色警示框:成功
p class="alert alert-block alert-success"
Use green box only when necessary like to display links to related content.
/p
红色警示框:高危
p class="alert alert-block alert-danger"
It is good to avoid red boxes but can be used to alert users to not delete some important part of code etc.
/p
打印单元格所有代码的输出结果
假如有一个Jupyter Notebook的单元格,其中包含以下代码行:
In [1]: 10+5
11+6
Out [1]: 17
单元格的正常属性是只打印最后一个输出,而对于其他输出,我们需要添加print()函数。然而通过在notebook顶部添加以下代码段可以一次打印所有输出。
添加代码后所有的输出结果就会一个接一个地打印出来。
In [1]: 10+5
11+6
12+7
Out [1]: 15
Out [1]: 17
Out [1]: 19
恢复原始设置:
InteractiveShell.ast_node_interactivity = "last_expr"
使用'i'选项运行python脚本
从命令行运行python脚本的典型方法是:python hello.py。但是,如果在运行相同的脚本时添加-i,例如python -i hello.py,就能提供更多优势。接下来看看结果如何。
首先,即使程序结束,python也不会退出解释器。因此,我们可以检查变量的值和程序中定义的函数的正确性。
其次,我们可以轻松地调用python调试器,因为我们仍然在解释器中:
import pdb
pdb.pm()
这能定位异常发生的位置,然后我们可以处理异常代码。
自动评论代码
Ctrl / Cmd + /自动注释单元格中的选定行,再次命中组合将取消注释相同的代码行。
删除容易恢复难
你有没有意外删除过Jupyter notebook中的单元格?如果答案是肯定的,那么可以掌握这个撤消删除操作的快捷方式。
如果您删除了单元格的内容,可以通过按CTRL / CMD + Z轻松恢复它。
如果需要恢复整个已删除的单元格,请按ESC + Z或EDIT撤消删除单元格。
结论
在本文中,我列出了使用Python和Jupyter notebook时收集的一些小提示。我相信它们会对你有用,能让你有所收获,从而实现轻松编码!
Python数据分析案例-药品数据分析案例
最近学习了python数据分析的一些基础知识,有numpy,pandas,matplotlib等,找了一个药品数据分析的小项目练一下手。
数据分析的步骤一般可以分为6个:
1,明确分析的目的
2,数据准备
3,数据清洗
4,数据分析
5,数据可视化
6,分析报告
数据分析的目的:
通过对朝阳区医院的药品销售数据的分析,了解朝阳医院的患者的月均消费次数,月均消费金额、客单价以及消费趋势、需求量前几位的药品等。
数据准备
数据是存在Excel中的,可以使用pandas的Excel文件读取函数将数据读取到内存中,这里需要注意的是文件名和Excel中的sheet页的名字。读取完数据后可以对数据进行预览和查看一些基本信息。
通过数据的基本信息可以看出来,总行数6578,但是社保卡号只有6576,其他行只有6577行,说明存在缺失值,这些将在数据清洗中进行处理。
数据清洗
数据清洗过程一般包括:选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序及异常值处理等。
(1)选择子集
在我们获取到的数据中,可能数据量非常庞大,并不是每一列都有价值都需要分析,这时候就需要从整个数据中选取合适的子集进行分析,这样就可以提高效率。但是这个案例数据列较少,可以忽略这一步。
(2)列名重命名
在数据分析过程中,有些列名和数据容易混淆或产生歧义,不利于数据分析,这时候需要把列名换成容易理解的名称,可以采用rename函数实现:
(3)缺失数据处理
通过查看基本信息可以推测“社保卡号”这列存在缺失值,如果不处理这些缺失值会干扰后面的数据分析结果。缺失数据常用的处理方式有:删除缺失值,一般用于少量缺失值,对整体数据影响不大的情况;平均值填充,对于数值型常用;算法填充等。在本次案例中缺失值商量很少,直接使用dropna函数删除缺失数据。
(4)数据类型转换
在导入数据时为了防止导入不进来,会强制所有数据都是object类型,但实际数据分析过程中“销售数量”,“应收金额”,“实收金额”,这些列需要浮点型(float)数据,“销售时间”需要改成时间格式,因此需要对数据类型进行转换,可以使用astype()函数。
(5)异常值处理
查看数据的描述统计信息:我们可以看到最小值出现了负数,原因是销售数量的值为负数,需要将销售数量小于0的数据剔除掉。
数据分析及可视化
这里涉及到的数据可视化的部分并不多所以将数据分析和可视化结合起来,数据分析之前我们应该确定分析的指标。
(1)指标1:月均消费次数 ? 计算:月均消费次数 = 总消费次数 / 月份数
(2)指标2:月均消费金额 ? 计算:月均消费金额 = 总消费金额 / 月份数
(3)指标3:客单价? 计算:客单价 = 总消费金额 / 总消费次数
(4)指标4:消费趋势
每天的消费金额分布情况:一横轴为时间,纵轴为实收金额画散点图。
结论:从散点图可以看出,每天消费金额在500以下的占绝大多数,个别天存在消费金额很大的情况。
月消费金额变化趋势,将销售时间按月聚合分组,然后求出分组后的累计金额,画出折线图。
结论:1月,4月,5月,6月的消费金额变化不大,基本持平,2月和3月金额较低,可能是受春节假期影响,部分外来居民回家了,7月份最低是因为数据不全造成的。
药品销售情况分析,对“商品名称”和“销售数量”这两列数据进行聚合为Series形式,方便后面统计。
结论:对于销售量排在前几位的药品,医院应该时刻关注,保证药品不会短缺而影响患者。
如何写数据分析报告
相信很多数据分析师在写数据分析报告的时候也会遇到一些困惑,因为我最近也在写一个报告,在这里就梳理一下如何写数据分析报告
数据分析报告是数据分析师常见的工具,写好一份数据分析报告,不但能够清楚描述问题,洞察数据并且提出一些有思考的举措,也很能反映出一个数据分析师的思维和用数据讲故事的能力,网上虽然也有很多关于写好数据分析报告的文章,但是大部分都是偏重于理论,具体实践的很少,我就在这里做一个汇总,希望能帮助一些朋友,以期抛砖引玉
--------分割线--------正式开始--------
一份好的数据分析报告离不开两部分:数据部分和分析部分。巧妇难为无米之炊,数据之于数据分析师就好像食材之于巧妇,数据的重要性可见一斑,分析部分是数据分析师将数据做成报告的最重要一步,是最体现一个数据分析师功底的部分,也是拉开差距的部分,下面就针对两部分分别进行阐述
一. 数据部分
数据部分最重要的就是数据质量,数据质量的好坏直接决定一份数据分析报告的好坏,如果报告中某一个数据被质疑,会直接影响这份数据分析报告的可信度,本章说一说跟数据有关的一些内容
1.数据的质量
1.1数据类型
数据类型比较好理解,就是数据以什么样的类型存储的,不同的数据类型有不同的使用方法,因此在处理数据之前,必须要先了解数据类型,常见的数据类型有(这里只说一些常见的数据类型):
整数型
int :用于存储整数,存储从-2的31次方到2的31次方之间的所有正负整数,每个INT类型的数据按4 个字节存储
bigint :用于存储大整数,存储从-2的63次方到2的63次方之间的所有正负整数,每个BIGINT 类型的数据占用8个字节的存储空间
smallint :用于存储小整数,存储从-2的15次方到2的15次方之间的所有正负整数。每个SMALLINT 类型的数据占用2 个字节的存储空间
浮点型
real :存储的数据可精确到第7 位小数,其范围为从-3.40E -38 到3.40E +38。 每个REAL类型的数据占用4 个字节的存储空间
float :存储的数据可精确到第15? 位小数,其范围为从-1.79E -308 到1.79E +308。 每个FLOAT 类型的数据占用8 个字节的存储空间。? FLOAT数据类型可写为FLOAT[ n ]的形式。n 指定FLOAT 数据的精度。n 为1到15 之间的整数值。当n 取1 到7? 时,实际上是定义了一个REAL 类型的数据,系统用4 个字节存储它;当n 取8 到15 时,系统认为其是FLOAT 类型,用8 个字节存储它
字符型
char : 数据类型的定义形式为CHAR[ (n) ],n 表示所有字符所占的存储空间,n? 的取值为1 到8000, 即可容纳8000 个ANSI 字符。若不指定n 值,则系统默认值为1。? 若输入数据的字符数小于n,则系统自动在其后添加空格来填满设定好的空间。若输入的数据过长,将会截掉其超出部分
nchar : 它与CHAR 类型相似。不同的是NCHAR数据类型n 的取值为1 到4000。 因为NCHAR 类型采用UNICODE? 标准字符集(CharacterSet)。 UNICODE 标准规定每个字符占用两个字节的存储空间,所以它比非UNICODE? 标准的数据类型多占用一倍的存储空间。使用UNICODE? 标准的好处是因其使用两个字节做存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文、德文等,而不会出现编码冲突
varchar :VARCHAR数据类型的定义形式为VARCHAR? [ (n) ]。 它与CHAR 类型相似,n 的取值也为1 到8000,? 若输入的数据过长,将会截掉其超出部分。不同的是,VARCHAR数据类型具有变动长度的特性,因为VARCHAR数据类型的存储长度为实际数值长度,若输入数据的字符数小于n? ,则系统不会在其后添加空格来填满设定好的空间。一般情况下,由于CHAR 数据类型长度固定,因此它比VARCHAR 类型的处理速度快
时间和日期型
date :‘2018-01-17’
time :‘10:14:00’
timestamp :‘2018-01-17 10:14:00.45’
以上就是常用的数据类型,如果有其他的数据类型没有说到,可以去网上搜一下,都比较好理解
1.2噪音数据
因为网上有非常多的关于噪音数据的解释,都非常专业,我就不在这里做过多的详细解释了,我们只探讨从sql取出数据的时候有一些异常值的处理办法:
null
一般跑过sql的朋友肯定会发现,在跑出来的数据中会有null的情况,这个时候需要对null进行替换,如果是计算用,就把null替换成0,这个步骤可以在sql里面完成,也可以在excel里面完成
极大值
极大值会影响数据的计算结果,一般会进行处理,要么替换成除极大值以外的最大值,要么直接弃用
作为分母的0
如果0作为分母,在excel里会出现#DIV/0,这个时候可以直接把结果替换,或者在sql里面直接进行替换,用case……when……就可以替换
1.3数据的口径
数据的口径很重要,根据经验看,大部分的数据出现问题是口径造成的,数据的口径一定要跟业务的口径一致,拿留存率举例:
留存率是周期比率型指标,一般在计算留存率的时候需要确定 留存周期 和 活跃判定的口径
留存周期:留存周期通俗来讲就是指用户在多长时间范围内活跃,并在下一个周期内仍然活跃,这里的多长时间就是指留存周期
活跃判定:指怎么判定一个用户活跃,可以是启动App,可以是登陆,也可以是完成了一次其他特定行为,这个主要依照业务需求而定
实际计算:
周留存率的计算
分子:本周活跃 且 上周也活跃的用户数
分母:上周活跃的用户数
2.可能会用到的工具
在处理数据的过程中可以用很多工具,在这里就介绍一些比较常见的工具,大家耳熟能详,学起来也不是特变难
2.1提取数据
mysql
hivesql
两者的查询语句有相似的地方也有不同的地方,主要看自己所在公司的数据存储情况
2.2数据处理
python:一般写个脚本做一些机械的操作(我目前是这么用),也可以用来做计算
mysql:在查询的时候可以进行处理
excel:数据量比较小的时候,可以在excel上简单处理
2.3数据可视化
python:可以用来做一些词云图
Tableau:可视化一些图表,可以和sql结合着用
excel:做一些简单的图表,实际上数据处理的好的话,一般用excel就足够了
二. 分析部分
在处理了数据以后就要开始进行报告的撰写,写报告会涉及到几个部分的工作,这里分别进行介绍一下:
1.报告结构
一篇数据分析报告的结构是十分重要的,一个好的结构能够将他人带入到你的报告中,让他人更好的明白你的意图,减少信息传递之间的丢失,同时你的思维也主要展现在结构上,这就意味着在写数据分析报告前,一定好想清楚数据分析报告的结构,当然这里说的报告结构即包括整个报告的结构,也包括每一个章节的结构,这里就放到一起说了
1.1 总 - 分 - 总(多用在整体结构)
我们在读一本书的时候,打开目录,会发现整部书的结构一般包括:
前言
第一篇
第二篇
……
第n篇
结尾
这就是典型的总 - 分 - 总结构,是最常见的结构,如果是对一个专题进行分析,用这种形式是非常好的,举个例子:
某电商App近一个月内的销售额出现下滑,让你针对这个问题进行一次专题分析
分析思路:拿到这个问题,我们很容易想到的是,销售额出现下滑出现的原因有两个,一个是付费用户数减少了,另一个是付费用户的人均付费金额减少了,这两个原因属于并列的原因,不存在递进关系,也就是说付费用户数减少了与人均付费金额减少并不存在因果关系,没有什么相关性,因此需要对两个原因共同分析,最后输出结论和提升建议,分析完以后,会发现总
- 分 - 总结构很适合这样的分析,所以列出以下提纲
问题描述
销售额近一个月下降多少?绝对值,环比,同比数据
原因假设:付费用户数下降/人均付费金额下降
付费用户数下降分析
付费用户数降幅是多少?绝对值,环比,同比数据
定位下降人群:是整体下降还是某一群体用户数下降
这里就涉及到用户分群,用户分群的方法有很多,涉及到用户价值的分群常见的就是RFM模型,将分完群的用户进行数据对比,看看上个月付费用户的结构占比跟本月有什么不同,当然用户分群的方法也不止这一个,还有按照会员等级分群(主要用会员等级进行用户分群),按照活跃程度(新用户/留存用户/回流用户),按照消费习惯(一般用户表里面都会有用户的标签,标识这个用户的消费习惯,表示这个用户更喜欢购买哪一类的商品),不管用什么分群方法,都需要纵向对比,也就是这个月和上个月付费人群的对比
原因分析:
如果是付费用户整体下降(这种是大家都不想看到的现象,欣慰大盘数据的驱动需要投入大量的资源,也有可能是自然波动),考虑可能的原因主要有:用户整体流失,比如用户流失到竟对;或者本月有什么特殊情况,影响到了整体的用户活跃;或者是从活动维度去观察,是不是活动的力度减小,影响了用户付费的欲望
如果是某一个用户群体下降:考虑的原因可能有商品品类的影响,是不是某一类商品在平台没有上架,或者某一类商品涨价;或者这一类用户受到了哪些影响,一般可以从属性和行为角度去分析
提出策略:
针对分析出的原因提出可落地的策略(策略一定要落地,要具体,比如如果你提出一条策略是:提升新注册用户数,那么等于没说,老板多数会diss你,但是你如果说,通过减少注册时填写的非必要字段,如年龄/职业,来简化注册流程,挺升注册转化率,进而提升新注册用户数,那感觉是不一样的)
人均付费金额下降分析
人均付费金额的降幅是多少?绝对值,环比,同比数据
定位原因
人均付费金额下降可能的原因主要有:订单数量下降;每个订单包含的商品数的下降/某一个品类购买数下降
提出策略:针对分析出的原因提出可落地的策略
总结问题
明确造成销售额下降的原因到底是什么(定性以后,记得一定要量化,不量化会被diss)
提出有针对性的建议
如何预防再次发生
1.2 递进(可用于整体结构和章节内部结构)
这种结构适合对一个问题进行探索,就像上一个例子中,我们针对每一个可能原因进行分析的时候,就是采用的这种分析方法,这种分析结构特别适合对一个小问题进行深入的探索分析,层层递进,深挖原因,这里在举一个例子:
某一个App的新注册用户数环比上个月减少,需要你做一个深入的分析,找到原因,提供改进策略
分析思路:新注册用户数的的影响因素是一个典型的漏斗结构,也是一个典型的单向性用户旅程,画一张图就能说明白:
如图所示,影响注册用户数的原因全部标注在漏斗里面,但是注册全流程这个漏斗只能看个大概流失,所以我们会对某一步进行细化,这张图上,我们对用户从启动到注册成功进行细化,细化到用户行为,这样能够提出一些产品上的改进意见,这个时候,如果想要提升新注册用户数,只需要针对每一步流失原因进行分析,找到提升策略就可以了,基本上是所见即所得的分析
比如:我们想对提交注册信息到注册成功这一步进行优化,那么首先我们要找到用户注册失败的原因有什么,一般有:
用户已注册
密码格式不合规
系统错误
未勾选《隐私协议》
在提出建议的时候,只要针对以上原因提出具体改进意见就可以了
1.3并列结构(多用于整体结构)
这种结构一般遇到的情况不多,常见的有对不同的校区进行经营分析/对不同品类的商品进行售卖分析,基本都是以描述型分析为主,因为分析的主体是并列关系,所以只需要每个主体就行单独分析就好,基本采用的分析思路是一样的
1.4因果结构(多用于章节内部结构)
这种结构一般用在复盘分析报告中,复盘是常见的数据分析报告类型之一,也是很多公司比较重视的一个报告,比如双十一复盘/新手活动复盘等等, 以电商某一次大促复盘为例 ,这里直接写结构:
总体描述:
本次大促整体数据表现,整体活动节奏的介绍;销售额是多少,同比提升多少;利润情况;参与用户有多少,同比提升多少;卖出商品有多少,同比提升多少;各个子活动的贡献是多少
子活动1的效果分析
子活动1的简介,作用,发力点
子活动1的贡献是什么,对于直接提升结果指标或者间接提升指标有哪些贡献
子活动1的成本是什么?投入产出比是多少?
子活动2的效果分析
子活动x的效果分析
最后汇总,提出优化建议
2.分析方法
讲完了整体结构,我们就该进入到具体分析的过程里面,这里的分析方法,主要想说说怎么去针对不同的数据进行分析,也就是说怎么通过数据看出问题,这里介绍常用的5种分析方法,但是有一句话非常重要,想写这节的最前面: 数据分析师一定要懂业务,在分析之前最好能把问题定位个大概,再去捞数,再去分析,否则每天会沉浸在漫无目的取数中,我认为一个数据分析师最重要的能力是要懂业务,从数据的角度看业务,才能驱动业务
2.1 对比分析
横向对比
横向对比就是把一个指标按照不同维度拆分,去对比不同维度的变化,举个简单的例子来说就是:
昨天的DAU增长了30%,那么把DAU进行拆分,可以拆分成以下三种方式:
DAU=新注册用户数+留存用户数+回流用户数
DAU=北京活跃用户数+河北活跃用户数+山东活跃用户数+……
DAU=北京活跃用户数+河北的活跃用户数+……
? ? ? ? ? ? ? ? =北京的新增用户数+北京的留存用户数+北京的回流用户数+河北的新增用户数+河北的留存用户数+河北的回流用户数+……
这里留一个疑问,怎么去选择优先下钻的维度?想明白以后分析的效率就会有很大提升
纵向对比
在进行完横向对比以后,就要开始进行纵向对比,纵向对比主要是在时间维度上,还拿上一个例子来说,我们按照第一种方式进行横向对比以后,就要纵向对比,见下表:
2.2分布分析
分布分析一般是应用的场景比如用累计消费金额去分组/按照用户一个月活跃天数去分组,这些场景都有两个共性的特征:
属性值都是数值类型,或者日期类型
属性值非常多,比如累计消费金额可能从1-90000中间任意一个数字,也就是属性值非常多,没办法用每一个属性值去单独分析,因此需要分组
还是上图说明:
2.3交叉分析
交叉分析一般指多维度交叉,或者不同指标之间的交叉
多维度交叉其实有点类似对比分析的第三类分类方法,这里不在赘述了,还是那个图,但是在实际分析中的作用其实很是强大,具体如何应用就需要大家举一反三啦,仔细看看这张图,可以换成哪些分析场景下的哪些场景的交叉分析:
不同指标交叉一般用在分析变化趋势中,或者寻找相关因素的时候,上图:
这样既能看绝对值的变化,又能一目了然的看出变化趋势,如果不同指标之间呈现一定的相关性,那就是相当完美了
2.4漏斗分析
漏斗分析模型比较好理解了,一般在行为分析中常用到,直接上图吧:
是不是有点眼熟?漏斗分析一般分析应用在分析用户使用某项业务时,经过一系列步骤转化的效果,因为用户会沿着产品设计的路径到达最终目标事件,在分析每一步转化的时候会用到这个模型
2.5矩阵分析
矩阵分析是一个不错的分析模型,主要用在分类上面,常见的有用户分类、产品分类等,比如像常见的RFM模型是一个三维矩阵,有八个象限,上两个图看看:
矩阵分析其实不难理解,但是涉及到一个比较关键的问题,就是临界点怎么选择,通俗来说就是第一象限和第二象限的临界值是多少,有的是0,有的不是0,举个例子:
我想用活跃度和累计消费金额对1万个用户进行分群,使用矩阵分析
我建好了这个二维矩阵,我第一件事就是先要确定原点的坐标值,也就是说用户的累计消费金额大于x,就会出现在第一/四象限,如果小于x,就会出现在第二/三象限,想确定这个值需要一定的方法,会用到一些分类算法,这个可以去网上查一些关于分类的教程,有很多,后续我会写一盘文章来介绍分类,这里就不细讲了
以上就是数据分析最重要的两个模块,当然在实际操作中还有很多需要思考的地方,太细节的东西不太能够面面俱到,这里留给大家去思考的空间,比如:
数据分析报告怎么讲成一个故事,比如背景-现状-原因-策略-预期结果-复盘结果?
每一页PPT怎么排版会让你的数据分析报告可读性更高?
如果你的数据分析报告不采用上述的结构,还能用哪些结构?
怎么让你的数据分析报告显得更高大上?
可以留言交流哦
Python数据分析(八):农粮组织数据集探索性分析(EDA)
这里我们用 FAO(Food and Agriculture Organization) 组织提供的数据集,练习一下如何利用python进行探索性数据分析。
我们先导入需要用到的包
接下来,加载数据集
看一下数据量,
看一下数据的信息,
我们先来看一下variable,variable_full这两列的信息,
看一下统计了多少国家,
看一下有多少个时间周期,
看一下时间周期有哪些,
我们看一下某一列某个指标的缺失值的个数,比如variable是total_area时缺失值的个数,
我们通过几个维度来进行数据的分析:
我们按照上面的处理继续,现在我们想统计一下对于一个时间周期来说,不同国家在这个周期内的变化情况,
我们也可以按照国家分类,查看某个国家在不同时期的变化,
我们还可以根据属性,查看不同国家在不同周期内的变化情况,
我们还可以给定国家和指标,查看这个国家在这个指标上的变化情况,
我们还有region(区域)没有查看,我们来看一下:
通过上图可以看出,区域太多,不便于观察,我们可以将一些区域进行合并。减少区域数量有助于模型评估,可以创建一个字典来查找新的,更简单的区域(亚洲,北美洲,南美洲,大洋洲)
我们来看一下数据变化,
紧接着上面的数据处理,我们重新导入一下包,这次有一些新包,
我们看一下水资源的情况,
通过上图可以看出只有一小部分国家报告了可利用的水资源总量,这些国家中只有极少数国家拥有最近一段时间的数据,我们将删除变量,因为这么少的数据点会导致很多问题。
接下来我们看一下全国降雨指数,
全国降雨在2002年以后不再报到,所以我们也删除这个数据,
我们单独拿出一个洲来进行分析,举例南美洲,我们来看一下数据的完整性,
我们也可以指定不同的指标,
接下来,我们使用 pandas_profiling 来对单变量以及多变量之间的关系进行统计一下,
这里我们要计算的是,比如
我们按照 rural_pop 从小到大进行排序,发现的确有几个国家的农村人口是负数,
人口数目是不可能小于0,所以这说明数据有问题,存在脏数据,如果做分析预测时,要注意将这些脏数据处理一下。
接下来我们看一下偏度,我们规定,
正态分布的偏度应为零,负偏度表示左偏,正偏表示右偏。
偏度计算完后,我们计算一下峰度, 峰度也是一个正态分布,峰度不能为负,只能是正数 ,越大说明越陡峭,
接下来我们看一下,如果数据分布非常不均匀该怎么办呢,
上图是2013-2017年国家总人数的分布,通过上图我们发现,人口量少于200000(不考虑单位)的国家非常多,人口大于1200000的国家非常少,如果我们需要建模的话,这种数据我们是不能要的。这个时候我们应该怎么办呢?
通常,遇到这种情况,使用 log变换 将其变为正常。 对数变换 是数据变换的一种常用方式,数据变换的目的在于使数据的呈现方式接近我们所希望的前提假设,从而更好的进行统计推断。
接下来,我们用log转换一下,并看一下它的偏度和峰值,
可以看出偏度下降了很多,减少了倾斜。
可以发现峰度也下降了,接下来我们看一下经过log转换后的数据分布,
虽然数据还有一些偏度,但是明显好了很多,呈现的分布也比较标准。
首先我们先来看一下美国的人口总数随时间的变化,
接下来,我们查看北美洲每个国家人口总数随着时间的变化,
这个时候我们发现,一些国家由于人口数量本身就少,所以整个图像显示的不明显,我们可以改变一下参照指标,那我们通过什么标准化?我们可以选择一个国家的最小、平均、中位数、最大值...或任何其他位置。那我们选择最小值,这样我们就能看到每个国家的起始人口上的增长。
我们也可以用热度图来展示,用颜色的深浅来比较大小关系,
接下来我们分析一下水资源的分布情况,
我们可以进行一下log转换,
我们用热度图画一下,
连续值可以画成散点图,方便观看,
我们来看一下随着季节变化,人均GDP的变化情况,
相关程度:
相关度量两个变量之间的线性关系的强度,我们可以用相关性来识别变量。
现在我们单独拿出来一个指标分析是什么因素与人均GDP的变化有关系,正相关就是积极影响,负相关就是消极影响。
当我们在画图的时候也可以考虑一下利用bined设置一下区间,比如说连续值我们可以分成几个区间进行分析,这里我们以人均GDP的数量来进行分析,我们可以将人均GDP的数据映射到不同的区间,比如人均GDP比较低,比较落后的国家,以及人均GDP比较高,比较发达的国家,这个也是我们经常需要的操作,
做一下log变换,这里是25个bin
我们指定一下分割的标准,
我们还可以看一下人均GDP较低,落后国家的内部数据,下面我们看一下内部数据分布情况,用boxplot进行画图,
对于这部分的分布,我们还可以统计看一下其他指标,如下图所示,我们还可以看一下洪水的统计信息,
python数据分析:共享单车项目数据分析报告
本次项目运用Python的matplotlib、pandas工具对数据进行可视化分析,并使用Powerpoint工具制作描述性分析报告。
附:数据源
提取码:h9jx