数据分析的五步:
(1)提出问题;(2)收集数据;(3)数据处理和清洗;(4)数据分析;(5)可视化,得出结论
提出问题
一个数据分析的过程,其实是从数据中得到结论的过程。但分析的起点并非数据,而是问题!先确定问题是什么,再投入精力从相关的数据中挖掘答案。
一个好的问题,可以帮助理清方向,将精力集中在数据的相关部分,并帮助你得出有洞察力的分析结果。
提出问题之后,就可以从问题入手,确定需要哪些数据,获得进行分析的数据集。也就是数据分析的第二步,“收集数据”。
收集数据
通常情况下,我们想要收集数据,会有4种数据的来源:
1.观测和统计得到的数据
2.问卷和调研得到的数据
3.从数据库中获取的数据
4.从网络爬虫获取的数据
需要根据我们希望获得数据,来判断应该从哪些来源获取。
观测和统计数据
是指经过实地获取的实测数据。这类数据可大可小。
例如:一个商场的客流量。
这是对商场各个出入口的人员进出,按人头统计,汇总的数据,也是实地观测获得的。只是目前会有红外感应装置来获取,不需要人工来数了。
问卷和调研数据
是指通过抽取样本,用问卷或访谈的方式,获取的数据。
有一些需要获取到个人信息、心理感受的数据,我们需要通过询问访谈获得。
从数据库中获取的数据
数据库,可以简单理解为储存数据的一种结构。
我们在计算机、手机上产生的操作行为,被捕捉下来会存储到数据库中。
例如:在电商平台上购买商品记录,会存储在这个电商平台的数据库中。
数据库通过一些工具和SQL语言,可以将数据查询出来,下载成Excel、csv文件,供我们使用。从数据库中查询数据,不是这门课的重点。我们重点来解决的是:数据拿到手后,应该如何使用和分析。
从网络爬虫获取的数据
有时,我们想要获取的数据,并不归属自己所有的数据库。
例如,想要豆瓣的电影评论。
这时就会使用网络爬虫,按照一定规则自动抓取网页信息。组织成我们需要的数据形式。
数据处理和清洗
在收集完问卷数据,开展进一步的分析之前。
Algo对问卷中,填写时长少于5s的问卷数据进行了剔除。
因为填写时长少于5s,大概率是随意填写的,这一部分随便填写的数据,可能会干扰数据的有效性。
这是数据分析的第3步:“数据处理和清洗”。
数据清洗其实有一些很复杂的规则和逻辑,在后面课程中,我们会详细进行学习。
数据分析
数据处理好后,就可以进入“数据分析”的阶段了。
Algo统计了每个选项,使用Python进行初步分析和可视化,每个问题的答案都生成一张柱状图表。
示例:
# 导入模块
import pandas as pd
import matplotlib.pyplot as plt
# 读取文件进行处理
df = pd.read_excel("/Users/survey/数据分析课程调研.xlsx",usecols=[0,3,4,5,6,7,8,9,10,26],skiprows=[1])
df.drop(index = df[df['答题时长']<5].index,inplace = True)
# 对问卷答案进行可视化
plt.figure(1)
plt.subplot2grid((2,3),(0,0),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[2]].isnull()].index)
result1 = df1[list(df.columns)[2]].groupby(df[list(df.columns)[2]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[2])
plt.subplot2grid((2,3),(0,1),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[3]].isnull()].index)
result1 = df1[list(df.columns)[3]].groupby(df[list(df.columns)[3]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[3])
plt.subplot2grid((2,3),(0,2),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[4]].isnull()].index)
result1 = df1[list(df.columns)[4]].groupby(df[list(df.columns)[4]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[4])
plt.subplot2grid((2,3),(1,0),colspan=2,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[5]].isnull()].index)
result1 = df1[list(df.columns)[5]].groupby(df[list(df.columns)[5]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[5])
plt.subplot2grid((2,3),(1,2),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[6]].isnull()].index)
result1 = df1[list(df.columns)[6]].groupby(df[list(df.columns)[6]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[6])
plt.tight_layout()
plt.show()
# 对问题进行可视化
plt.figure(2)
plt.subplot2grid((3,3),(0,0),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[7]].isnull()].index)
result1 = df1[list(df.columns)[7]].groupby(df[list(df.columns)[7]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[7])
data1 = pd.read_excel("/Users/survey/数据分析课程调研.xlsx",usecols=[3,11,12,13,14,15,16],skiprows=1)
data1.drop(index = data1[data1["Unnamed: 3"]<5].index,inplace = True)
data1.drop("Unnamed: 3", axis=1,inplace = True)
data1.drop(index = data1[data1['Excel'].isnull()].index , inplace = True)
plt.subplot2grid((3,3),(0,1),colspan=2,rowspan=1)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(data1.sum().index , data1.sum().values)
plt.title("Q8_您现在进行数据分析,会用到的工具是?(多选)")
plt.subplot2grid((3,3),(1,0),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[8]].isnull()].index)
result1 = df1[list(df.columns)[8]].groupby(df[list(df.columns)[8]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[8])
data2 = pd.read_excel("/Users/survey/数据分析课程调研.xlsx",usecols=[3,17,18,19,20,21],skiprows=1)
data2.drop(index = data2[data2["Unnamed: 3"]<5].index,inplace = True)
data2.drop("Unnamed: 3", axis=1,inplace = True)
data2.drop(index = data2[data2['步骤繁多,重复操作'].isnull()].index , inplace = True)
plt.subplot2grid((3,3),(1,1),colspan=2,rowspan=1)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(data2.sum().index , data2.sum().values)
plt.title("Q9_基于目前的工具进行数据分析,会出现的问题是?(多选)")
plt.subplot2grid((3,3),(2,0),colspan=1,rowspan=1)
df1 = df.drop(index = df[df[list(df.columns)[9]].isnull()].index)
result1 = df1[list(df.columns)[9]].groupby(df[list(df.columns)[9]]).count()
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(result1.index , result1.values)
plt.title(list(df.columns)[9])
data3 = pd.read_excel("/Users/survey/数据分析课程调研.xlsx",usecols=[3,22,23,24,25],skiprows=1)
data3.drop(index = data3[data3["Unnamed: 3"]<5].index,inplace = True)
data3.drop("Unnamed: 3", axis=1,inplace = True)
data3.drop(index = data3[data3['学术目的'].isnull()].index , inplace = True)
plt.subplot2grid((3,3),(2,1),colspan=2,rowspan=1)
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.bar(data3.sum().index , data3.sum().values)
plt.title("Q10_想学习Python数据分析的目的是?")
plt.tight_layout()
plt.show()
产生新疑问:
我们现在的分析仅仅停留在简单读取数据分布的层面,难道这就是数据分析的全部了吗?
当然不是。数据分析,是一个循序渐进的过程。
刚刚进行图表可视化的部分,是数据分析最前置的描述性分析。
是对得到的大量数据资料进行整理和归纳的初步分析方法。目的是找出数据的大致分布状态,进行单个因素分析。
比如,学员是学生还是职场人,对于学习时间和学习目的,可能会有不同的表现。
这些内在规律,是需要进一步深入,尝试进行挖掘的,也就是探索性分析。
探索性分析
探索性数据分析,是指仅有一些非常浅的假设,通过数据分析方法,深入探索数据。
它有三大作用,包括分析现状、分析原因、预测未来。
如果缺失一些基本的数据分析思路,那么面对处理好的数据,也会不知道从何入手。但其实,数据分析的思路非常简单。三大作用分别对应着三个基本思路:对比、细分、预测。
对比
数据的高低,通常需要进行比较,分析它们的差异。
对比可以非常直观地看出变化/差距,并且量化变化/差距是多少。
比如,相同方法调研了《Python办公效率化》的学员。明显对比看,《Python数据分析》课程的学生占比相较更多一些。
另一个常用的对比思路,就是同比和环比。
同比,通常是本期数据和过往的同一期数据的对比。
例如,2020二季度GDP的同比增长,是和2019二季度GDP对比,这就是年同比。可以消除不同季度的季节因素影响。
环比,通常是本期数据和连续周期的上一期数据的对比。
例如,2020二季度全国GDP的环比增长,是和2020一季度对比,这就是环比。可以观测数据连续的变化趋势。
细分
在深入挖掘数据现状,和追溯内部原因的时候。需要在对比的基础上,进行细分分析。
细分,是指将数据划分成不同的部分,从而对比内部各个部分之间异同和关系的思路。
细分分析,可以对比量的直接大小外,还可以对比内部结构。
内部结构中,某个部分的比例越大,说明其重要程度越高,影响越大。
一次探索性分析的过程,通常是从问题出发,不断细分对比,从而发现有洞见和针对性的结论。在单一的维度上,不断向下细分,进行维度下钻。或者,在单一的维度上,不断添加新的维度,进行维度交叉。
可以说,细分是数据分析的本源。
| 细分分析中,还有一种知名的分析方法,叫“杜邦分析法”。 |
预测
数据分析中,预测未来是一个非常重要的问题。数据之间客观上存在互相影响和依存的关系。 挖掘这种数据间的关系,就可以通过一个因素的发展,从而推断另一个因素的发展,这就实现了预测。 |
而预测,往往要通过更复杂的数学模型来实现。一般来说分为三种:
相关性分析,回归分析,时间序列模型。
探索性分析 |
指仅有一些非常浅的假设,通过数据分析方法,深入探索数据。 |
因为图像能更加凸显数据结果,所以,数据分析和可视化往往同时进行。不同的问题,可以根据不同的图像来展现,每种图像各有各的优势。