1.什么是数据分析
-
是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 让数据最大化。
- 分析用户的消费行为
- 制定促销活动的方案
- 制定促销时间和粒度
- 计算用户的活跃度
- 分析产品的回购力度
- 分析广告点击率
- 决定投放时间
- 制定广告定向人群方案
- 决定相关平台的投放
- 分析用户的消费行为
-
数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动
- 保险公司从大量赔付申请数据中判断哪些为骗保的可能
- 支付宝通过从大量的用户消费记录和行为自动调整花呗的额度
- 短视频平台通过用户的点击和观看行为数据针对性的给用户推送喜欢的视频
2 数据分析实现流程
- 提出问题
- 准备数据
- 分析数据
- 获得结论
- 成果可视化
3 开发环境介绍
- anaconda
- 官网:https://www.anaconda.com/
- 集成环境:集成好了数据分析和机器学习中所需要的全部环境
- 注意:安装目录不可以有中文和特殊符号
- jupyter
- jupyter就是anaconda提供的一个基于浏览器的可视化开发工具
- jupyter的基本使用
- 启动:在终端中录入:jupyter notebook的指令,按下回车
- 新建:
- python3:anaconda中的一个源文件
- cell有两种模式:
- code:编写代码
- markdown:编写笔记
- 快捷键:
- 添加cell:a或者b
- 删除:x
- 修改cell的模式:
- m:修改成markdown模式
- y:修改成code模式
- 执行cell:
- shift+enter
- tab:自动补全
- 代开帮助文档:shift+tab
4 数据分析三剑客
- numpy
- pandas(重点)
- matplotlib
5. numpy模块
- NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。使用NumPy构建多维数组,在此基础上执行的数值运算。
5.1 numpy创建数组
- 使用np.array()创建
import numpy as np
# 创建一维数组
arr = np.array([1,2,3])
# 创建二维数组
arr = np.array([[1,2,3],[4,5,6]])
arr
- 使用np的函数创建
- random系列
# 创建一个 5行6列 数组值在0到100之间的数组
arr = np.random.randint(0,100,size=(5,6))
arr
5.2 numpy的常用属性
- shape: 数组形状
- ndim:维度
- size:元素个数
- dtype 元素类型
5.2 numpy数组的取值操作
- 取值 arr[行,列]
行列之间用逗号隔开
取连续的用 冒号
取多个行 用中括号括起来
arr[1] #取出了numpy数组中的下标为1的行数据
arr[2,1] # 取出第二行第一列的值
arr[[1,3,4]] #取出不连续的多行
arr[0:2] #取出arr数组的连续的两行的数据
arr[:,0:2] #取出arr数组中的前两列
arr[0:2,0:2] #取出前两行的前两列的数据
5.2 numpy数组常用方法
- 改变数组形状
arr #是一个5行6列的二维数组
# 将一个5行6列的二维数组变为 10行2列的二维数组
arr_1 = arr.reshape((10,3))
- 计算函数
- 最大值 最小 平均 方差 …等常见的数学运算 numpy数组都会提供
sum,max,min,mean 平均 ptp() 最大值与最小值的差
arr.max(axis=1): 求每行的最大值
arr.mean(): 求平均
arr.ptp():最大值与最小值的差
- 数组连接
将多个numpy数组进行横向或者纵向的拼接
axis轴向的理解:0:列 1:行
np.concatenate((arr,arr),axis=1)
6. pandas模块
6.1 为什么要学习pandas
- numpy能够帮助我们处理的是数值型的数据,但在数据分析中除了数值型的数据还有非数值型数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除数值型的其他数据。
6.2 pandas中常用的两个类
- Series:一维带索引的数组
- DataFrame
6.3 pandas中常用的方法
- 时间数据类型的转换
pd.to_datetime(col)
7. pandas模块
7.1 创建Series
- 数据源: 字典或者数组
- 数组源为:数组
from pandas import Series
import numpy as np
# 数据源为数组 使用默认索引
s = Series(data=[1,2,3,'four'])
s = Series(data=np.random.randint(0,100,size=(3,)))
# 数据源为数组 指定索引
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
- 数组源为:字典
dic = {
'语文':[100,2],
'数学':99,
'理综':250
}
s = Series(data=dic)
7.2 Series 取值
s[0]:取第一行的值
s.语文:取索引为语文这一行的值
s[0:2]:取0到2行的值
7.3 Series常用属性
s.shape
s.size
s.index #返回索引
s.values #返回值
s.dtype #元素的类型
7.4 Series常用方法以及运算
s = Series(data=np.random.randint(60,100,size=(10,)))
s.head(3) #显示前n个数据
s.tail(3) #显示后n个元素
s.unique() #去重
s.isnull() #用于判断每一个元素是否为空,为空返回True,否则返回False
s.notnull() # 检测现有非缺失的值
s.add(s) # 或者 + # 返回和其他序列或者常数之和 可以指定和行加还是给列加且可以指定每行没列加多少。
s.sub(s) #或者 - # 返回和其他序列或者常数之差
s.mul(s) #或者 * # 返回和其他序列或者常数的乘法
s.div(s) #或者 / # 返回和其他序列或者常数的除法
8. DataFrame模块
8.1 什么是DataFrame
- 类似于数据库的二维表(即每一列都带名称和类型)
8.2 DataFrame 和Series的区别与联系
- 区别:
series: 只是一个一维数据结构,它由index和value组成。
dataframe: 是一个二维结构,除了拥有index和value之外,还拥有column。 - 联系:
dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。
8.3 DataFrame 数据源的构建
- DataFrame可以从很多的数据源构建,比如:数组或者字典创建,结构化文件,外部数据库,hive表
# 数组
df=DataFrame(data=[[1,2,3],[4,5,6],[3,45,3,3]])
df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
#字典
dic = {
'name':['zhangsan','lisi','wanglaowu'],
'salary':[1000,2000,3000]
}
df = DataFrame(data=dic,index=['a','b','c'])
8.4 DataFrame 常用属性
df.values
df.columns
df.index
df.shape
8.5 DataFrame 常用方法以及运算
-
因为DataFrame由多个Series构成, Seriest的常用方法同样适用于DataFrame
-
将某一列设置为行索引: df.set_index()
例子
给李四这一列 +100的两种实现方式
qizhong[‘李四’]=qizhong[‘李四’]+100
qizhong_add100=qizhong.add([0,100],axis=‘columns’)
8.6 DataFrame 取值
# 取单行
h2=df.loc['2001-08-27']
# 取指定范围的行 : 表示范围 左闭右闭
h3=df.loc['2001-08-27':'2001-09-27']
# 取指定行
h4=df.loc[['2001-08-27','2001-09-27']]
# 取单列
h5=df.loc[:,'open']
df['open']
# 取多列不连续
h6=df.loc[:,['open','high']]
h6=df[['open','high']]
# 取连续的列
h7=df.loc[:,'open':'low']