【第七周:Python(二)】7周成为数据分析师
本课程共七个章节,课程地址:7周成为数据分析师(完结)_哔哩哔哩_bilibili
- 数据分析思维
- 业务知识
- Excel
- 数据可视化
- SQL
- 统计学
- Python
第七周:Python(P86-P143)
- Python的数据科学环境(P86)
- Python基础(P87-P97)
- 数据分析常用包:Numpy和Pandas(P98-P112)
- Python连接数据库(P113-P114)
- 数据分析案例(P115-P124)
- 数据可视化:Matplotlib和Seaborn(P125-P138)
- 数据分析平台(P139-P143)
目录(P103-P112)
第七周:Python(P86-P143)
三、数据分析常用包:Numpy和Pandas(P98-P112)
(四)pandas高阶(P103开始)
(五)pandas筛选
(六)pandas聚合(类似SQL中的group by)
(七)pandas多表关联
(八)pandas多重索引
(九)pandas预处理函数
(十)pandas apply
(十一)pandas 数据透视
三、数据分析常用包:Numpy和Pandas(P98-P112)
(四)pandas高阶(P103开始)
1. 读csv文件
import pandas as pd# sep="\t"表示分隔符为\t,默认为,
# names=list("abcdefg")表示列名设置为abcdefg,此时原本的列名会变成第一行数据df = pd.read_csv("dataAnalyst.csv", encoding="gbk", sep="\t", names=list("abcdefg"))
df
- 若只想预览前n行数据:
df.head(n) # n默认为5
- 若只想预览最后n行数据:
df.tail(n) # n默认为5
2. 更改某一列的数据类型
- 如把 top列 的数据类型从 int64 改为object(字符串)
df.top = df.top.astype('str')
3. 增加一列
df['avg_2'] = (df.bottom + df.top)/2
4. 查找符合要求的数据
- 平均薪资 > 15的那些岗位所在的城市
df.query('avg>15').city
- 平均薪资 > 15且在上海的岗位
df[(df.city=="上海")&(df.avg>15)]
5. 行列转置
df.T
(五)pandas筛选
1. 排序
- 按值进行排序
# 根据平均薪资排序(默认升序)
df.sort_values(by='avg')# 写法2
df.avg.sort_values()# 降序
df.sort_values(by='avg', ascending=False)# 多条件排序
df.sort_values(['avg','city'], ascending=False)
- 按索引进行排序
df.sort_index()
- 排名
df['rank'] = df.avg.rank(ascending=False) # 降序后,avg越高,rank越前,符合正常认知
df
df['rank'] = df.avg.rank(ascending=False,method='min')
df
method还有 max、first(不考虑并列情况,值一样时按index排序)等
2. 重复值检测
- 查看总共有多少个唯一值
df.city.unique()
- 对唯一值出现次数进行计数
df.workYear.value_counts()
3. 描述性统计
df.describe()
- 只想对某一列做描述性统计
df.avg.describe()
- 直接对 DataFrame 进行 count、max、min、sum、mean、median、std(标准差)、var(方差) 等也可以
df.count()
4. 累加
df['cumsum'] = df.avg.cumsum()
5. 分桶(必须是pd.cut(),而不是df.cut())
- 均匀分
df['bins'] = pd.cut(df.avg, bins=4, labels=list('abcd'),include_lowest=True) # 把avg均匀地四等分
- 人工划分区间
df['bins'] = pd.cut(df.avg, bins=[0,5,10,20,30,100],labels=['0-5','5-10','10-20','20-30','30-100'])
- pd.qcut() 按分位数划分
(六)pandas聚合(类似SQL中的group by)
df.groupby(by = 'city').count() # count()不对空值进行计数
1. 单字段聚合
- 统计不同城市平均薪资的最大值
df.groupby(by='city').avg.max()
- 统计每个城市有多少元素
for k in df.groupby(by='city'):print(k[0],len(k[1]))
- 统计不同城市最大薪资与最小薪资的差值
for k,v in df.groupby(by='city'): # k为city,v为每个city下的DataFrameprint(k,max(v.avg)-min(v.avg))
2. 多字段聚合(多重索引)
- 不同城市下不同工作年限的平均薪资的平均值
df.groupby(by=['city','workYear']).mean()
(七)pandas多表关联
两张表:position_gbk.csv 和 company_utf.csv
pandas里有三种关联的方法:
- concat:字段全部合并,数据全部堆叠,没有默认为NaN(类似于SQL中的union)
- join:根据索引
- merge:根据具体某一列
1. merge()
position.merge(right=company, how='inner', on='companyId')
df.merge(right= , how= , on= , left_on= , right_on= )
- right:要和哪张表关联
- how:关联方式(inner默认、left、right)
- on:具体通过哪几列进行join(会自动只保留一列)
- left_on & right_on:两张表没有共同字段,连接两表时,左表的字段名和右表的字段名(都会保留)
更改字段名称:
- rename()
- columns()
将 company 表的 companyId 改为 id:
col = list(company.columns)
col[0] = 'id'
company.columns = col
此时联立两表:
position.merge(right=company, how='inner', left_on='companyId', right_on='id')
注:若是 pd.merge(),pd.merge(left=, right= , how= , on= , left_on= , right_on= )
2. join()
company.join(position)
3. concat()
pd.concat([company,position]) # 上下拼接pd.concat([company,position],axis=1) # 左右拼接
应用场景:所有月份的销售明细(字段相同)拼接
(八)pandas多重索引
position = pd.read_csv('position_gbk.csv',encoding='gbk')position.groupby(by = ['city','education']).mean()
position.groupby(by = ['city','education']).mean().reset_index()
1. Series格式的索引
2. DataFrame格式的索引
3. 不借助 group by 怎么设置多重索引?
position.sort_values(by=['city','education']).set_index(['city','education'])
(九)pandas预处理函数
1. 文本函数
position = pd.read_csv('position_gbk.csv',encoding='gbk')position.positionLables.str.count('分析师') # 统计“分析师”出现次数position.positionLables.str.find('数据') # “数据”一词的出现位置,-1表示未出现
去掉外面的 [ ]:
position.positionLables.str[1:-1]
再去掉双引号:
position.positionLables.str[1:-1].str.replace("'","")
2. 空值
import numpy as npposition = pd.read_csv('position_gbk.csv',encoding='gbk')
position.loc[position.city == '深圳','city'] = np.NaN # 把“深圳”全部替换为NaN
对空值进行填充:
position = position.fillna('abc')# 写法2
position.city = position.city.fillna('abc')
删除NaN:
position.dropna() # 删除所有有空值的行position.dropna(axis=1) # 删除所有有空值的列
3. 重复值
- 过滤出重复数据
position[position.duplicated()]
- 删除重复数据
s.drop_duplicates()
(十)pandas apply
- 把一个自定义函数应用到所有行/列中
- 既可以针对Series,又可以针对DataFrame
1. 在 avg 列后面加上 k
position.avg.astype('str') + 'k'# 写法2:
position.avg.apply(lambda x:str(x)+'k') # 匿名函数# 写法3:
def func(x):return str(x)+'k'
position.avg.apply(func)
position.apply(func, axis=)
- axis=0:应用函数对所有列
- axis=1:应用函数对所有行
2. 将 avg 列根据 20 划分档次
def func():if x.avg>20:return '20+k'else:return '0-20k'positon.apply(func, axis=1) # 逐行# 写法2
def func(x):if x>20:return '20+k'else:return '0-20k'position.apply(lambda x:func(x.avg), axis=1)
3. 将 avg 列平方
position.avg.apply(lambda x:x*x)
4. apply与聚合函数
注:position.groupby('city') 之后,每个 city 都形成一个DataFrame
position.sort_values('avg',ascending=False)[:5] # 降序
求出不同城市下薪资排名前五的岗位:
def func(x):r = x.sort_values('avg', ascending=False)return r[:5]position.groupby('city').apply(func)
求出不同城市下薪资排名前n的岗位:
def func(x,n):r = x.sort_values('avg', ascending=False)return r[:n]position.groupby('city').apply(func,n=3)
变为升序:
def func(x,n, asc=False):r = x.sort_values('avg', ascending=asc)return r[:n]position.groupby('city').apply(func,n=3,asc=True)
5. agg()函数(不涉及形状变化)
position.groupby('city').agg(sum)# 平均值是 .agg('mean'),等价于 .mean()# 也可以同时运用多个函数 .agg(['sum','mean'])# 也可以使用自定义函数 .agg(lambda x:max(x)-min(x))
(十一)pandas 数据透视
position.pivot_table(values= , index= , columns= , aggfunc= , fill value= , margins= , dropna= )
- aggfunc 默认为 'mean'
- margins 默认为 False,即在下面加一个汇总项
- dropna 默认为 True,即砍掉空值
position.pivot_table(index='city', columns='workYear', values='avg')# 支持多重索引,如:index=['city','education'],values=['top','avg']
position.pivot_table(index = ['city','education'],columns = 'workYear',values = ['top','avg'],aggfunc = [np.mean, np.sum])
对上表可以进行不断地切片:
position.pivot_table(index = ['city','education'],columns = 'workYear',values = ['top','avg'],aggfunc = [np.mean, np.sum])['mean']['avg'].loc['上海']
对 avg 求平均,对 top 求和:
position.pivot_table(index = ['city','education'],columns = 'workYear',values = ['top','avg'],aggfunc = {'avg':np.mean,'top':np.sum}) # 字典的形式
输出为csv:
.reset_index().to_csv('test.csv')
【第七周:Python(二)】7周成为数据分析师相关推荐
- python 课程设计题目_数据分析师能力培养:业务与技术的完美结合
课程名称:数据分析师能力培养:业务与技术的完美结合 课程须知: 本课程为<数据分析师八大能力培养>的免费课程,精品课程请前往: 课程特色: 从真实数据分析工作场景出发,训练实战能力 领导从 ...
- python数据分析前景如何_数据分析师的前景怎么样?
数据分析师已经存在多年了.但是,对该职业的需求在2020年再次成为头条新闻.接下来,我将带领大家了解为什么,并帮助分析一下数据分析行业在2020年的发展情况. 一.数据分析师的需求猛增,前景一片大好! ...
- 女生学python工作累吗_数据分析师女生做累么 工资一般多少
数据分析师女生做累么,工资一般多少,小编整理了相关信息,希望会对大家有所帮助! 数据分析师女生做累不累 女生还是很适合做数据分析的,数据分析师因为敲的代码少,相比起天天敲代码的职业更适合女生一些,没那 ...
- python数据分析就业前景_数据分析师找工作的秘诀,从读懂招聘 JD 开始
JD(job description缩写),在招聘中,最常用到的意思是岗位介绍和工作职责描述. JD让无数求职者头痛,数据分析师更是其中的头疼之最.这份工作门槛尚可,薪资不错,行业发展前景好,因此吸引 ...
- TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...
- python频次统计图_数据分析师如何自力更生统计用户行为频次?
不懂数据分析的 growth hacker 不是好运营.近日我想要统计我家产品 xue.cn 用户的编程自学行为的频次,且在不给技术开发部门带来任何新需求的情况下自力更生.那么,我该如何定义并统计这个 ...
- 阿里数据分析师面试准备二:对阿里数据分析师岗位的理解
欢迎访问我的个人博客: sky的技术小屋 为了准备面试,对阿里公司.技术做了大致了解,分析了下数据分析师在阿里的用武之地. UED 如何在互联网的大数据时代,将用研传统研究方法(问卷.访谈.测试等)与 ...
- 来篇鸡汤文吧,教你如何七周内从小菜鸟成长为一名合格的数据分析师
这是一份入门到熟练的指南,并不包含数据挖掘等高阶内容.可也足够让产品和运营们获得进步. 第一周:Excel学习掌握 如果Excel玩的顺溜,你可以略过这一周.不过介于我入行时也不会vlookup,所以 ...
- 如何7周成为数据分析师
|沙龙精选自公众号秦路(ID:tracykanc) 写这个系列,是希望在当初知乎某一个回答的基础上,单独完善出针对互联网产品和运营们的教程.不论对数据分析或数据运营,我都希望它是一篇足够好的教材. 得 ...
最新文章
- 深入探讨:视觉的目的是什么?
- Exchenge2007用户设置邮件转发到外网地址
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
- 计算机等级考试计算机基础知识pdf,计算机基础知识与应用能力等级考试.pdf
- objective-c 加号 减号 - +
- 泛型:工作原理及其重要性
- python控制命令行光标位置_python实现cli命令行的进度条光标滚动显示效果
- jsp医院管理系统_Thymeleaf+SpringBoot+SpringDataJPA实现的中小医院信息管理系统
- P3899-[湖南集训]谈笑风生【主席树】
- 新基建与智慧城市相遇 会碰撞出什么样的“火花”?
- phpcmsV9 视频解决方案 - 第三方托管
- mogileFS分布式文件存储解决方案
- 微信帝国进化史:一个通讯工具如何在八年内制霸互联网?
- linux 安装onos 记录
- 【百度地图API】如何制作孪生姐妹地图?
- numpy构建卷积网络
- 太厉害了MySQL总结的太全面了
- linux安装过程中的硬盘分区工具是,Linux硬盘分区管理工具
- html 多选框获取值数组,前端获取checkbox复选框的值 通过数组形式传递
- 全外显子捕获测序的杂交和封闭原理