数据分析——Python内容学习【1】
数据分析——Python内容学习【1】
该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!
简介
2022最新版Python数据分析小白教程
编程环境基础库:
- Python3
- Numpy
- pandas
- matplotlib
- SciPy.org:许多计算方法
- sklearn:许多建模模型
- seaborn
- Keras:神经网络
数据分析概述
- 利用统计分析方法 提取有用信息 总结与概括;
- 用户行为分析、用户画像、商品画像、商品推荐、市场分析
- “数据是未来的核心,未来数据量是区分企业规模大小的标准”;
数据分析流程:
- 狭义数据分析
- 数据获取
- 探索分析与可视化:更直观的认识数据
- 数据建模与挖掘
- 预处理理论
- 分析建模:一个能进行预测的规则系统
- 模型评估
重视理论 + 勤于查阅 + 联系实际 + 解决问题
数据获取
数据获取的常用手段
- 数据仓库(DW):记录业务流程中的细节,汇总处理所有的业务数据;
- 全部事实的记录;
- 部分维度的可用数据 抽取后形成数据集市;
- 检测与抓取
- 传感器检测
- 网络爬虫
- 抓取数据:urllib、 urllib2、 requests、 scrapy
- 解析数据:PhantomJS(渲染后 再解析)、 beautifulSoup、 Xpath
- 填写、日志、埋点
- 埋点:访问访客停留时间、页面查看、跳出率;
- 一般分两种,一种是页面统计,一种是统计操作行为,最终记录与互联网的交互过程,第三方的如友盟统计;
- 日志:一般是文件形式,但为了数据分析最终也要汇总到数据仓库中;
- 也分两种,前端日志和后端日志,前端日志需要终端上传到服务器;
- 计算获得
- 通过数据间接计算得来的,具有实际意义的数据;
数据库VS数据仓库:
- 数据库面向业务存储
- 数据仓库面向主题存储(主题:较高层次上对分析对象数据的一个完整并且一致的描述)
- 数据库面向的是应用(OLTP 联机事务处理)
- 数据仓库面向的是分析(OLAP 联机分析处理)
一些可用的数据学习网站:
- 数据竞赛网站:国外
Kaggle
、国内天池
- 数据集网站:
ImageNet
、Open Images
- 各领域统计数据:统计局、公司财报;
探索性数据分析与可视化
数据和理论基础
基于Anoconda5.1.1 获取相应的Python环境和工具包;
- 测试数据集:
HR.csv
;- 员工满意度(小数
0~1
)、最近一次评价分数(小数0~1
)、参与项目数、平均每月工作时长、工作年限、是否有工作事故(0 1)、最近是否离职(0 1)、近五年是否有晋升(0 1)、所在部分(str)、工资登记(str 高中低);
- 员工满意度(小数
- 使用
Pandas
进行数据预览和处理;
import pandas as pddf = pd.read_csv('HQ.csv', sep="\t") # 支持分隔符的可选参数
df.head(10)
理论铺垫:
- 集中趋势:
- 是对数据聚拢的一种衡量
- 均值:数据相对均衡时
- 中位数:数据存在极大 或 极小时
- 分位数:数据从小到大排序,切分成等份的数据点
- 众数:离散值的集中趋势衡量
- 直方图+分位数的方式 会让数据的展示更加直观
- 是对数据聚拢的一种衡量
- 离中趋势:
- 标准差:每个数减均值的平方和 再除以数据量
- 方差:标准差 再开根号
- 值越大表示数据越离散,值越小表示数据越聚拢;
- 数据分布:
- 偏态与峰态:
- 偏态系数:是对数据平均值偏离状态的一种衡量,简单看均值大于中位数,即正偏,否则为负偏;
- 峰态系数:对数据分布集中强度的衡量,值越大越集中,分布越陡峭;值越小,分布越平缓;
- 正态分布的峰态系数是3,如果一个数据分布的峰态系数与3差距大于2,基本就可以确定它不是正太分布了;
- 正态分布与三大分布
- 标准正态分布:均值0 方差1
- 卡方分布:几个标准正态分布的平方和 满足的分布
t分布
:正态分布的随机变量,除以一个服从卡方分布的变量,经常用来根据小样本来估计呈正态分布且方差未知的总体的均值;f分布
:是由构成两个服从卡方分布的随机变量的比构成的;
- 偏态与峰态:
- 抽样理论:
- 全量检验数据量大,或不太现实时,就需要使用抽样检验;
- 重复抽样(抽完放回)、非重复抽样 (抽完不放回)
- 完全随机抽样、等差距抽样、分类分层抽样(按类别比例)
- 抽样误差
- 抽样精度
- 全量检验数据量大,或不太现实时,就需要使用抽样检验;
四分位数的计算:
- 分成四份,即有三个数据点
Q1=(n+1)*0.25
Q2=(n+1)*0.5
Q3=(n+1)*0.75
直方图+分位数的展示:
import warnings
warnings.filterwarnings('ignore')import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 随机构造一组数据
small_counts = np.random.randint(0, 10000, 200)
stars_counts = np.random.randint(0, 10, 200)
small_counts_log = np.log10(small_counts)biz_df = pd.DataFrame({'review_count':small_counts,'log_review_count':small_counts_log,'stars':stars_counts}
)# 计算4分位数
deciles = biz_df["review_count"].quantile([.25,.5,.75])
#
sns.set_style("whitegrid")
#
fig, ax = plt.subplots()
# 数据量等分10段的直方图
biz_df["review_count"].hist(ax=ax, bins=10)
# 在直方图上画出4分位数
for pos in deciles:# 打印每个分位数的值print('pos', pos)# x轴 纵向划线(红色)handle = plt.axvline(pos, color="r")# 加上图例ax.legend([handle], ['deciles'], fontsize=14)
# ax.set_yscale('log')
# ax.set_xscale('log')
ax.tick_params(labelsize=14)
ax.set_xlabel("Review Count", fontsize=14)
ax.set_ylabel("Occurence", fontsize=14)
fig.show()# or 对比展示直方图
fig, (ax1, ax2) = plt.subplots(2,1)
biz_df["review_count"].hist(ax=ax1, bins=10)
ax1.tick_params(labelsize=14)
ax1.set_xlabel("review_count", fontsize=14)
ax1.set_ylabel("Occurrence", fontsize=14)biz_df["log_review_count"].hist(ax=ax2, bins=10)
ax2.tick_params(labelsize=14)
ax2.set_xlabel('log10(review_count)', fontsize=14)
ax2.set_ylabel('Occurrence', fontsize=14)fig.show()
标准差与正态分布:
- 对于一个正态分布,数据落在-1倍标准差与+1倍标准差之间的概率是69%;
- 数据落在-1.96倍标准差与+1.96倍标准差之间的概率是95%;
- 数据落在-2.58倍标准差与+2.58倍标准差之间的概率是99%;
抽样误差的计算:
是抽样 就会有误差,重复抽样和不重复抽样的误差是不一致的公式1:重复抽样误差计算 = (总体方差/抽样数量)^(1/2)
公式2:不重复抽样误差计算 = (总体方差 / 抽样数量 * (总体数量 - 抽样数量) / (总体数量 - 1))^(1/2)
当抽样数n = 总体数量N时 就没有误差了;某些情况,还需要在控制的误差水平之内确定抽样数量:有如下两个公式公式3:重复抽样数量n = 数据覆盖概率为α时均值加减标准差的倍数Z * 总体方差 / 受控制的方差
公式4:非重复抽样数量n = 总体的数量N * 数据覆盖概率为α时均值加减标准差的倍数Z * 总体方差 / (总体的数量N * 受控制的方差 + 数据覆盖概率为α时均值加减标准差的倍数Z * 总体方差)举例:
鱼塘不同区域抽样150条鱼 草鱼123 平均2公斤 标准差0.75公斤,在保证95.45%的概率下,估计草鱼每条平均重量?解:
由于是在不同区域网到的鱼,可认为这是一个重复抽样,代入公式1:误差 = 0.75/(123^(1/2)) = 0.07公斤,95%的概率就是均值上下两倍误差的范围,对应的就是Z= 2,即 2-0.07*Z ~ 2+0.07*Z问:
如前所述,这里貌似是将误差等价于了标准差。。。举例:
草鱼总量1000,标准差0.75公斤,在保证95.45%的概率误差不超过0.05公斤,需要捞几条草鱼?解:
这是一个不放回的抽样,代入公式4:概率α为95.45时的倍率Z是2总体方差为 0.75*0.75N是总体数量1000受控的方差是0.05*0.05即:
n = 1000 * 2 * 0.75*0.75 / (1000 * 0.05*0.05 + 2 * 0.75*0.75) = 310条问:
这里与实际视频讲解不符,具体疑问已提交up主,后续待确认;
工具包简介
数据分析工具:
- 数据分析 numpy scipy pandas
- 可视化 matplotlib
- 数据挖掘与建模 sklearn seaborn Keras
关于Pandas请复习《利用Python进行数据分析(第2版)》的学习笔记
,这里仅做常用项举例;
下面是对前文理论铺垫的代码实现:
# 引入pandas
import pandas as pd# DataFrame 和 Series 的操作基本一致,这里用Series进行举例
df = ...# 均值
df['test_a'].mean()# 中位数
df['test_a'].median()# 四分位数的第一个值
df['test_a'].quantile(q=0.25)# 众数(注意其数据类型)
df['test_b'].mode()# 标准差
df['test_a'].std()# 方差
df['test_a'].var()# 求和
df['test_a'].sum()# 偏态系数
df['test_a'].skew()# 峰态系数(注意 参考的是峰态系数为0的正态分布)
df['test_a'].kurt()
几个分布函数:
# 引入scipy的统计包
import scipy.stats as ss# c创建一个正太分布对象
ss.norm
# 查看对象
ss.norm.stats(moments='mvsk') # 会得到四个值 分别是 均值0 方差1 偏态系数0 峰态系数0
#
ss.norm.pdf(0.0) # x为0时 正太分布在纵坐标的值
#
ss.norm.ppf(0.9) # 正太分布的面积(也可以看成积分)是1,当传入0.9时 得到 面积从负无穷开始向正无穷方向累积 到0.9的时候 x的值是多少
#
ss.norm.cdf(2) # 2表示2倍标准差 即从负无穷到两倍标准差的位置 对应的面积(积分值),这里是0.97ss.norm.cdf(2) - ss.norm.cdf(-2) # 值为0.9545 对应的就是数据落在正负两倍标准差之间的概率为95%
# 生成一组符合正太分布的数字
ss.norm.rvs(size=10)# 卡方分布
ss.chi2# t分布
ss.t# f分布
ss.f# 操作同正态分布一致
关于抽样:
import pandas as pdpd.sample(n=10) # 按数量抽样
pd.sample(frac=0.01) # 按百分比抽样pd['test_c'].sample(n=10) # 按数量抽样
pd['test_c'].sample(frac=0.01) # 按百分比抽样
工具包接口较多,随用随查;
数据分类
常用分类方法:
- 定类数据:根据事物离散、无差别属性进行的分类,如性别、名族;
- 定序数据:界定数据大小,但不能测定差值,如收入等级:高中低;
- 定距数据:可以界定数据大小,也可以测定差值,但无绝对零点,即乘除比率等计算是没有意义的,如摄氏温度;
- 定比数据:可以界定数据大小,可测定差值,有绝对零点,相应的乘除结果也就有意义了,如长度 体积 身高 体重;
单属性分析:
- 异常值分析:
- 离散异常值
- 连续异常值
- 常识异常值
- 对比分析:绝对数与相对数,时间、空间、理论维度比较
- 结构分析:各组成部分的分布与规律
- 分布分析:数据分布频率的显示分析
数据分析——Python内容学习【1】相关推荐
- python numpy读取数据_Python数据分析之numpy学习(一)
文|刘顺祥 Python是一门不错的动态语言,其应用的领域非常广泛,如web开发.Linux运维.数据挖掘.机器学习.爬虫.推荐系统等.在学完<廖雪峰Python2.7教程>感觉受益匪浅, ...
- python数据分析培训内容可以_Python数据分析师
阶段一 学完后能达到什么水平? 数据分析师认知篇 说 明:0基础入学,5大进阶之路,8大课程阶段,35+课程,1000+学时, 18大行业经典案例,两大商业项目实战!人工智能是你的终极目标! 课程时长 ...
- python编程大数据分析_大数据分析Python学习技巧
大数据分析Python是任何开发人员都应该知道的重要编程语言.许多程序员使用这种语言来构建网站,创建学习算法以及执行其他重要任务.但是尝试学习大数据分析Python可能会令人感到恐惧,沮丧和困难,尤其 ...
- 学习大数据分析python编程指南
每个人都喜欢Python.如果您打算开始从事数据科学事业,我们可以肯定Python在您心中已经占有特殊的位置.它直观且易于在任何平台上运行,并且具有大量令人惊叹的库和工具.与其他编程语言相比,Pyth ...
- 极客时间·3小时Python 数据分析和可视化 学习笔记
3小时Python 数据分析和可视化 分解问题 数据分析 Python实现 总结经验 01 课程目标 掌握分解问题的能力 学会用Python进行数据处理.分析.展示 总结经验 02 确定目标 问题 ...
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录
- 谁说菜鸟不会数据分析python下载_刻意练习9:《谁说菜鸟不会数据分析python篇》第3章编程基础总计46页学习笔记...
学习计划MyPlan9 主题:<谁说菜鸟不会数据分析python篇>第3章节 编程基础,总计46页. 时间:7.15-7.21 周内完成 各位星友们,在这个星球里每个人都要逼迫自己学习未知 ...
- python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象
Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...
- 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...
最新文章
- gpio pin和pad的区别
- software on macbook pro
- display:inline-block解决文字有间隙问题
- 知识点实用梳理:点对点协议(PPP)、广播信道多址访问、SMTP与POP3、RS232C、协议与端口号
- Andorid之MediaPlayer和AudioTrack播放Audio的区别与联系
- 29 Python - 字符与编码
- android服务器怎么做的,[Android]Android 制作一个HTTP服务器应用
- ubuntu java 1.6 安装,ubuntu 中安装java jdk 1.6
- pip 更改源 pip加速
- java怎么在哪写代码_java把这段代码不写死问题出现在哪儿
- iphone各机型参数对比_现在买哪一款iPhone更“香”?
- java求几何周长面积_JAVA:编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序...
- moment获取几小时前_请问怎么把“多少小时前”精确到“多少小时多少分钟前”...
- 现代软件工程第一次结对编程(黄金点游戏)总结
- HTTP状态码介绍详细
- 关于SVN出现 svn working copy locked的原因及解决方法
- 74ls20设计半加器_数字电子技术实验练习内容
- word中插入公式2010和2016两个版本)
- 心率检测--异常可能
- 公司自动打卡与考勤作弊