本课程共七个章节,课程地址:7周成为数据分析师(完结)_哔哩哔哩_bilibili

  1. 数据分析思维
  2. 业务知识
  3. Excel
  4. 数据可视化
  5. SQL
  6. 统计学
  7. Python

第七周:Python(P86-P143)

  1. Python的数据科学环境(P86)
  2. Python基础(P87-P97)
  3. 数据分析常用包:Numpy和Pandas(P98-P112)
  4. Python连接数据库(P113-P114)
  5. 数据分析案例(P115-P124)
  6. 数据可视化:Matplotlib和Seaborn(P125-P138)
  7. 数据分析平台(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

method参数默认值为 average
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

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周成为数据分析师相关推荐

  1. python 课程设计题目_数据分析师能力培养:业务与技术的完美结合

    课程名称:数据分析师能力培养:业务与技术的完美结合 课程须知: 本课程为<数据分析师八大能力培养>的免费课程,精品课程请前往: 课程特色: 从真实数据分析工作场景出发,训练实战能力 领导从 ...

  2. python数据分析前景如何_数据分析师的前景怎么样?

    数据分析师已经存在多年了.但是,对该职业的需求在2020年再次成为头条新闻.接下来,我将带领大家了解为什么,并帮助分析一下数据分析行业在2020年的发展情况. 一.数据分析师的需求猛增,前景一片大好! ...

  3. 女生学python工作累吗_数据分析师女生做累么 工资一般多少

    数据分析师女生做累么,工资一般多少,小编整理了相关信息,希望会对大家有所帮助! 数据分析师女生做累不累 女生还是很适合做数据分析的,数据分析师因为敲的代码少,相比起天天敲代码的职业更适合女生一些,没那 ...

  4. python数据分析就业前景_数据分析师找工作的秘诀,从读懂招聘 JD 开始

    JD(job description缩写),在招聘中,最常用到的意思是岗位介绍和工作职责描述. JD让无数求职者头痛,数据分析师更是其中的头疼之最.这份工作门槛尚可,薪资不错,行业发展前景好,因此吸引 ...

  5. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...

  6. python频次统计图_数据分析师如何自力更生统计用户行为频次?

    不懂数据分析的 growth hacker 不是好运营.近日我想要统计我家产品 xue.cn 用户的编程自学行为的频次,且在不给技术开发部门带来任何新需求的情况下自力更生.那么,我该如何定义并统计这个 ...

  7. 阿里数据分析师面试准备二:对阿里数据分析师岗位的理解

    欢迎访问我的个人博客: sky的技术小屋 为了准备面试,对阿里公司.技术做了大致了解,分析了下数据分析师在阿里的用武之地. UED 如何在互联网的大数据时代,将用研传统研究方法(问卷.访谈.测试等)与 ...

  8. 来篇鸡汤文吧,教你如何七周内从小菜鸟成长为一名合格的数据分析师

    这是一份入门到熟练的指南,并不包含数据挖掘等高阶内容.可也足够让产品和运营们获得进步. 第一周:Excel学习掌握 如果Excel玩的顺溜,你可以略过这一周.不过介于我入行时也不会vlookup,所以 ...

  9. 如何7周成为数据分析师

    |沙龙精选自公众号秦路(ID:tracykanc) 写这个系列,是希望在当初知乎某一个回答的基础上,单独完善出针对互联网产品和运营们的教程.不论对数据分析或数据运营,我都希望它是一篇足够好的教材. 得 ...

最新文章

  1. 深入探讨:视觉的目的是什么?
  2. Exchenge2007用户设置邮件转发到外网地址
  3. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
  4. 计算机等级考试计算机基础知识pdf,计算机基础知识与应用能力等级考试.pdf
  5. objective-c 加号 减号 - +
  6. 泛型:工作原理及其重要性
  7. python控制命令行光标位置_python实现cli命令行的进度条光标滚动显示效果
  8. jsp医院管理系统_Thymeleaf+SpringBoot+SpringDataJPA实现的中小医院信息管理系统
  9. P3899-[湖南集训]谈笑风生【主席树】
  10. 新基建与智慧城市相遇 会碰撞出什么样的“火花”?
  11. phpcmsV9 视频解决方案 - 第三方托管
  12. mogileFS分布式文件存储解决方案
  13. 微信帝国进化史:一个通讯工具如何在八年内制霸互联网?
  14. linux 安装onos 记录
  15. 【百度地图API】如何制作孪生姐妹地图?
  16. numpy构建卷积网络
  17. 太厉害了MySQL总结的太全面了
  18. linux安装过程中的硬盘分区工具是,Linux硬盘分区管理工具
  19. html 多选框获取值数组,前端获取checkbox复选框的值 通过数组形式传递
  20. 全外显子捕获测序的杂交和封闭原理

热门文章

  1. MSSQL数据库提示附加数据库错误: 823的修复方法
  2. 深圳云计算培训:带你在Linux的世界翱翔
  3. 脱离鼠标的编辑神器--vi/vim
  4. 2012服务器系统设置权限,设置windows server 2012文件夹权限
  5. 计算机科学技术作文200,科技改变生活作文200字(精选7篇)
  6. 无需Root手机导出系统 so库
  7. web文件上传下载原理浅析
  8. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟
  9. python与排版设计欣赏_设计师如何整理高逼格作品集?
  10. 海思 hisi SDK中视频层号和通道号的理解