- 数据分析实战
-
- 数据准备
-
- 数据类型
- 数据结构
-
- Series
- DataFrame数据框
- 向量化运算
- 数据处理
-
- 数据导入
-
- 导入CSV文件
- 导入文本文件
- 导入Excel文件
- 数据导出
-
- 导出文本文件
- 重复值处理
- 缺失值处理
- 空格值处理
- 字段抽取
- 字段拆分
- 记录抽取
- 随机抽样
- 记录合并
- 字段合并
- 字段匹配
- 简单计算
- 数据标准化
- 数据分组
- 时间处理
- 时间抽取
- 虚拟变量 dummy variables
- 数据分析
-
- 基本统计
- 分组分析
- 分布分析
- 交叉分析
- 结构分析
- 相关分析
- RFM分析
- 矩阵分析
- 数据可视化
-
- 散点图scatter
- 折线图
- 饼图
- 柱形图
- 直方图
- 地图
- 热力地图
数据分析实战
使用适当的分析方法,对收集的数据进行分析,总结规律,提取有价值的信息,形成有效结论的过程。
基础分析方法:
对比分析、分组分析、结构分析、分布分析、交叉分析、矩阵分析等方法。
高级分析方法:
回归分析、聚类分析、决策树、神经网络、因子分析、时间序列分析等方法。
数据分析的作用:
- 现状分析:日报、月报等
- 原因分析:专题分析
- 预测分析:年度计划制定时分析
- 现状分析:日报、月报等
- 原因分析:专题分析
- 预测分析:年度计划制定时分析
数据分析流程:
数据准备
数据类型
- Logical,逻辑型,布尔型
-
- 两种取值:True、False
- 运算规则:与(&)、或(|)、非(not)
- Numerical,数值型
-
- 实数
- 运算规则:加、减、乘、除、取整(//)、求余(%)、乘方(**)
- Character,字符型
数据结构
相互之间存在一种或多种关系的数据类型的集合。
Pandas中两种常用的数据结构:
- Series
- DataFrame
Series
用于存储一行或一列的数据,以及与之相关的索引的集合。
DataFrame数据框
用于存储多行和多列的数据集合
可与Excel类比
Series、DataFrame参考印象笔记《Python数据分析与展示》
向量化运算
向量化计算是一种特殊的并行计算方式,可以在同一时间执行多次操作,通常是对不同的数据执行同样的一个或一批指令,或者说把指令用于一个数据/向量。
numpy中ndarray中的相关操作,即为向量化运算。
原则:
- 尽可能避免显示的
for
循环 - 过早的优化是魔鬼
数据处理
数据导入
导入CSV文件
使用pandas库中read_csv
函数导入CSV文件
from pandas import read_csvread_csv(file,encoding)
- 导入中文时,encoding=’utf-8’
numpy库中用
loadtxt
导入CSV文件。
导入文本文件
使用pandas库中read_table
函数导入普通文本文件。
语法:
from pandas import read_tableread_table(file,names=[列名1,列名2,……],sep="",encoding,……)
如果存在中文路径,在read_table参数中增加engine=‘python‘
参数。
导入Excel文件
使用read_excel
函数导入Excel文件。
from pandas import read_excelread_excel(fileName,sheetname,names)
数据导出
导出文本文件
**to_csv**函数:
to_csv(filePath,sep=",",index=True,header=True)
![Alt text](./1499088638638.png)
重复值处理
数据结构中,行相同的数据只保留一行。 找出重复位置:
dIndex=df.duplicated()
根据某些列,找出重复位置:
dIndex=df.duplicated(‘id‘)dIndex=df.duplicated([‘id‘,‘key‘])
提取重复数据
df[dIndex]
默认根据所有列,删除:
newdf=df.drop_duplicates()
指定某一列,删除:
newdf=df.drop_duplicates(‘id‘)
缺失值处理
**三种措施:**
- 数据补齐:
df.fillna(‘value‘)
- 删除对应缺失行:
df.dropna()
- 不处理
读取文件时,通过指定值作为缺失值。如‘缺失值’代表缺失值:
df=pd.read_csv(r‘D:\data.csv‘,na_values=[‘缺失值‘])
空格值处理
strip()函数
- lstrip():Left,左边空格
- rstrip():Right,右边空格
- strip():两边空格
字段抽取
根据已知列数据的开始和结束为止,抽取出新的列。
字段抽取函数:slice(start,stop)
。
例如:提取‘ABC1234’中的数字等。
df[‘列名‘].str.slice(0,3)
字段拆分
类似于Excel中的分列。
分割函数:df.str.split(sep,n,expand=False)
- sep:用于分割的字符串
- n:分割为多少列
- expand:是否展开为数据框,默认FALSE
返回值:
- 如果expand为True,返回值为DataFrame
- 如果expand为FALSE,返回值为Series
记录抽取
根据一定的条件,对数据进行抽取。
类似于Excel中的过滤。
记录抽取函数:dataframe[condition]
- condition:过滤条件。
注意:comments为列名。
随机抽样
随机抽样函数:
data.sample(n,frac,replace=False)
- n:按个数抽样
- frac:按百分比抽样
- replace:是否可放回抽样,默认FALSE不可放回。
分层抽样:
按照某一列进行分组,用
data.groupby(‘class‘)
.其实就是对data数据进行按照class列进行分组,返回一个字典。
typicalNDict:1组抽2个,2组抽4个,3组抽6个。
记录合并
将两个结构相同的DataFrame,合并成一个DataFrame。
函数:pd.concat([df1,df2,……])
numpy中,用concatenate()函数。
字段合并
字段拆分的逆操作。用“+”号。
必须是str型数据:
df.astype(str)
字段匹配
根据各表共有的关键字段,把各表所需的记录一一对应起来。
表的合并.
字段匹配函数:
merge(x,y,left_on,right_on,how)
- x,y:待匹配df
- left_on:第一个df用于匹配的列
- right_on:第二个df用于匹配的列
- how:
-
- ‘left’:左连接,即使连接不上,保留左边没连接(匹配)上的部分
- ‘right’:右连接,即使连接不上,保留右边没连接(匹配)上的部分
- ’outer’:外连接,都保留。
简单计算
data[‘total‘]=data.price*data.num
数据标准化
无量纲化
0-1标准化
data[‘scale‘]=round(dta.score-data.score.min()/(data.score.max()-data.score.min()),2)
数据分组
根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间进行研究。——分档
函数:
cut(series,bins,right=True,labels=NULL)
- bins:分组的划分数组
- right:分组的时候,右边是否闭合
- labels:分组的自定义标签
时间处理
时间转换:将字符型的时间格式数据转换为时间型数据。
时间转换函数:
datatime=pd.to_datatime(dataString,format)
时间格式化:将时间型数据按照指定格式转换为字符型数据。
时间格式化函数:
dateTimeFormat=datetime.dt.strftime(format)
时间属性抽取:从日期格式里抽取需要的部分,如月、日。
抽取语法:
datetime.dt.property
时间抽取
根据一定的条件,对时间格式的数据进行抽取。
- 根据索引进行抽取
-
- DataFrame.ix[start:end]
- DataFrame.ix[dates]
- 根据时间列进行抽取
-
- DataFrame[condition]
注意:df.ix[]:通过行号或行标签索引。
虚拟变量 dummy variables
虚拟变量,也叫哑变量和离散特征编码,可用来表示分类变量、非数量因素可能产生的影响。
- 离散特征取值之间有大小意义:尺寸(L,M)
-
pd.Series.map(dict)
- 离散特征取值之间无大小意义:颜色(R,G)
-
pd.get_dummies()
具体:
pd.get_dummies(data,prefix=None,prefix_sep=‘_‘,dummy_na=False,columns=None,drop_first=False)
数据分析
基本统计
描述性统计分析函数:describe()
,一次性求得基本情况。
另外,还可用下表统计函数:
还有:
- 累计求和:cumsum
- 最大值最小值所在位置:argmin()、argmax()
- 百分位数:quantile()
分组分析
根据分组字段,将分析对象划分成不同的部分,以进行对比分析各组之间的差异性。
常用统计指标:计数、求和、平均值。
分组统计函数:
分布分析
将数据等距或者不等距的分组,进行研究各组分布规律。
交叉分析
分析两个或两个以上分组变量之间的关系,以交叉表的形式进行。
交叉计数函数(透视表):
pivot_table(values,index,columns,aggfunc,fill_value)
结构分析
在分组及交叉的基础上,计算各组成部分所占比重,进而分析总体的内部特征。
外运算:
内运算:
相关分析
研究两个或两个以上随机变量之间相互依存关系的方向和密切程度。
- 线性相关
- 非线性相关
线性相关关系主要采用皮尔逊(Pearson)相关系数r来度量连续变量之间线性相关强度。
相关分析函数:
DataFrame.corr()
:计算每个列两两之间的相关度,返回DataFrame。Series.corr(other)
:计算该序列与传入列之间的相关度,返回一个数值,即相关度。
RFM分析
根据客户活跃程度和交易金额贡献,进行客户价值分析。
RFM分析过程:
矩阵分析
根据事物(产品、服务等)的两个重要属性(指标)作为分析依据,进行关联分析(象限分析)。
数据可视化
散点图scatter
plot(x,y,‘.‘,color=(r,g,b))
折线图
plt(x,y,style,color,linewith)
饼图
plt.pie(x,labels,colors,explode,autopct)
柱形图
bar(left,height,width,color)barh(left,height,width,color)
直方图
hist(x,color,bins,cumulative=False)
地图
地图绘制步骤:
- 获取地图对象,获取每个区域的名字以及顺序;
- 在每个区域的名字和顺序后面,加上需要展示的数据及经纬度;
- 根据数据大小,设置每个区域展示颜色(0,1)。
- 根据颜色进行填充
- 根据经纬度进行标注地图的名字
需要安装Basemap库.