目录
第一章 数据分析简介
1-1、数据分析流程
A 数据获取
B 探索分析与可视化(报表)
C 预处理理论(去除脏数据)
D 分析建模
E 模型评估
其中,CDE 为数据建模与挖掘 【核心内容】
1-2、前置知识
前置知识:Python3,Python数据分析-基础技术篇;数学;
编译环境:Python3.6+,Pycharm,Anaconda
1-3、数据分析概述
数据分析的含义与目标:统计分析方法,提取有用信息,并进行总结与概括的过程
1-4、使用Python进行数据分析
开发效率高、运行速度慢、胶水语言(比如嵌入C语言配合使用)
1-5、数据分析学习方法
A 重视理论
B 勤于查阅
C 身体力行
D 联系实际
第二章 数据获取
2-1、数据获取手段
A 数据仓库
B 监测与抓取
C 填写、日志、埋点
D 计算
2-2、数据仓库(DW)
1、概念:数据载体,业务数据汇总处理
(1)全部事实的记录
(2)部分维度与数据的整理(数据集市-DM)
2、数据库 VS 仓库
(1)数据库面向业务存储(保证高并发、快速读写、数据结构精简),仓库面向主题存储(主题:较高层次上对分析对象数据的一个完整并且一直的描述,比如购买图书发展的多维度存储信息)
(2)数据库针对应用(OLTP,联机事务处理),仓库针对分析(OLAP,联机数据处理)
(3)数据库组织规范,仓库可能冗余,相对变化大,数据量大
2-3、监测与抓取
1、直接解析网页、接口、文件的信息
2、Python常用工具:
urllib、urllib2、requests、scrapy
PhantomJS、beautifulSoup、Xpath(lxml)
2-4、填写、日志、埋点
1、用户填写信息
2、APP或网页埋点(特定流程的信息记录点)
3、操作日志:文件、汇总到数据仓库
2-5、计算
通过已有数据计算生成衍生数据,例如:统计报表某些项目
2-6、数据学习网站
1、数据竞赛网站(Kaggle & 阿里云-天池)
2、数据集网站(ImageNet / Open Images)
3、各领域统计数据(统计局、政府机构、公司财报等)
第三章 单因子探索分析
3-1 数据案例介绍
HR.csv
import pandas as pd
df = pd.read_csv("./data/HR.csv") # 读取csv文件
df.head(10) # 读取前10条数据
3-2 集中趋势、离中趋势
集中趋势:均值、中位数与分位数、众数
离中趋势:标准差、方差
数据分布:偏态与峰态、正太分布与三大分布
抽样理论:抽样误差、抽样精度
四分位数计算方法,n 是数列的数量
Q1的位置=(n+1)* 0.25
Q2的位置=(n+1)* 0.5
Q3的位置=(n+1)* 0.75
3-3 数据分布:偏态与峰度
偏态系数与峰态系数
均值偏大(对比中位数):正偏
正态分布与三大分布(卡方分布、T分布、F分布)
标准正态分布:均值为0,方差为1
卡方分布:几个标准正态分布的平方和满足一个分布,这个分布就是卡方分布
T分布:正态分布的一个随机变量除以一个服从卡方分布的变量
F分布:两个卡方分布的比构成的
3-4 抽样理论
抽样误差与精度
3-5 代码实例
以下代码由Python Console (Pycharm) 实现, 也可用Anacoda 或 Jupyter and the future of IPython — IPython 编程
注: 红色代码为代码实现, 黑色为控制台提示信息或者代码执行结果
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (Intel)] on win32
>>> import pandas as pd
>>> df = pd.read_csv('./data/HR.csv') # 读取csv文件
>>> df
satisfaction_level last_evaluation ... department salary
0 0.38 0.53 ... sales low
1 0.80 0.86 ... sales medium
2 0.11 0.88 ... sales medium
3 0.72 0.87 ... sales low
4 0.37 0.52 ... sales low
5 0.41 0.50 ... sales low
6 0.10 0.77 ... sales low
7 0.92 0.85 ... sales low
8 0.89 1.00 ... sales low
9 0.42 0.53 ... sales low
10 0.45 0.54 ... sales low
11 0.11 0.81 ... sales low
12 0.84 0.92 ... sales low
13 0.41 0.55 ... sales low
14 0.36 0.56 ... sales low
15 0.38 0.54 ... sales low
16 0.45 0.47 ... sales low
17 0.78 0.99 ... sales low
18 0.45 0.51 ... sales low
19 0.76 0.89 ... sales low
20 0.11 0.83 ... sales low
21 0.38 0.55 ... sales low
22 0.09 0.95 ... sales low
23 0.46 0.57 ... sales low
24 0.40 0.53 ... sales low
25 0.89 0.92 ... sales low
26 0.82 0.87 ... sales low
27 0.40 0.49 ... sales low
28 0.41 0.46 ... accounting low
29 0.38 0.50 ... accounting low
... ... ... ... ...
14972 0.11 0.97 ... accounting medium
14973 0.36 0.52 ... accounting medium
14974 0.36 0.54 ... accounting medium
14975 0.10 0.79 ... hr medium
14976 0.40 0.47 ... hr medium
14977 0.81 0.85 ... hr medium
14978 0.40 0.47 ... hr medium
14979 0.09 0.93 ... technical medium
14980 0.76 0.89 ... technical high
14981 0.73 0.93 ... technical low
14982 0.38 0.49 ... technical medium
14983 0.72 0.84 ... technical medium
14984 0.40 0.56 ... technical medium
14985 0.91 0.99 ... technical medium
14986 0.85 0.85 ... technical low
14987 0.90 0.70 ... technical low
14988 0.46 0.55 ... technical low
14989 0.43 0.57 ... technical low
14990 0.89 0.88 ... support low
14991 0.09 0.81 ... support low
14992 0.40 0.48 ... support low
14993 0.76 0.83 ... support low
14994 0.40 0.57 ... support low
14995 0.37 0.48 ... support low
14996 0.37 0.53 ... support low
14997 0.11 0.96 ... support low
14998 0.37 0.52 ... support low
14999 NaN 0.52 ... support low
15000 NaN 999999.00 ... sale low
15001 0.70 0.40 ... sale nme
[15002 rows x 10 columns]
>>> type(df) # 检测 df 的类型
<class 'pandas.core.frame.DataFrame'>
>>> type(df['satisfaction_level'])
<class 'pandas.core.series.Series'>
>>> df.mean() # 求均值
satisfaction_level 0.612839
last_evaluation 67.373732
number_project 3.802693
average_monthly_hours 201.041728
time_spend_company 3.498067
Work_accident 0.144581
left 0.238235
promotion_last_5years 0.021264
dtype: float64
>>> df.median() # 求中位数
satisfaction_level 0.64
last_evaluation 0.72
number_project 4.00
average_monthly_hours 200.00
time_spend_company 3.00
Work_accident 0.00
left 0.00
promotion_last_5years 0.00
dtype: float64
>>> df.quantile(q=0.25) # 四分位数
satisfaction_level 0.44
last_evaluation 0.56
number_project 3.00
average_monthly_hours 156.00
time_spend_company 3.00
Work_accident 0.00
left 0.00
promotion_last_5years 0.00
Name: 0.25, dtype: float64
>>> df['satisfaction_level'].quantile(q=0.25)
0.44
>>> df['satisfaction_level'].quantile(q=0.5)
0.64
>>> df['satisfaction_level'].quantile(q=0.75)
0.82
>>> df.mode() # 众数
satisfaction_level last_evaluation ... department salary
0 0.1 0.55 ... sales low
1 NaN NaN ... NaN NaN
[2 rows x 10 columns]
>>> df['department'].mode()
0 sales
dtype: object
>>> type(df['department'].mode())
<class 'pandas.core.series.Series'>
>>> df.sum() # 求和
satisfaction_level 9192.59
last_evaluation 1.01074e+06
number_project 57048
average_monthly_hours 3016028
time_spend_company 52478
Work_accident 2169
left 3574
promotion_last_5years 319
department salessalessalessalessalessalessalessalessaless...
salary lowmediummediumlowlowlowlowlowlowlowlowlowlowl...
dtype: object
>>> df['satisfaction_level'].sum()
9192.59
>>> df['satisfaction_level'].std() # 标准差
0.24862338135944925
>>> df['satisfaction_level'].var() # 方差
0.061813585758606134
>>> df['satisfaction_level'].skew() # 偏态系数
-0.47643761717258093
>>> df['satisfaction_level'].kurt() # 峰态系数
-0.6706959323886252
参考资料