七周成为数据分析师 第七周:Python - CSDN博客

七周成为数据分析师 第六周:统计学 - CSDN博客

七周成为数据分析师 第五周:Mysql - CSDN博客

七周成为数据分析师 第四周:数据可视化 - CSDN博客

七周成为数据分析师 第三周:Excel篇 - CSDN博客

七周成为数据分析师 第二周:业务篇-指标 - CSDN博客

七周成为数据分析师 第二周:业务篇-框架与模型 - CSDN博客

七周成为数据分析师 第一周:数据分析思维 - CSDN博客

1.Python基本功能

  • 利用Python写脚本
  • excel可视化有性能瓶颈,需要Python来实现。
  • 安装(建议Anaconda)

2.Numpy和pandas

(1)numpy

(2)pandas

  • 数据读取:pd.read_csv(默认utf-8)、info、head、tail、top、astype、query、
  • 数据筛选:sort_values、rank、cut、qcut(分位法)、

pandas以类似字典的方式来获取某一列的值,比如df['A'],这会得到df的A列。

如果我们对某一行感兴趣呢?这个时候有两种方法,一种是iloc方法,另一种方法是loc方法。loc是指location的意思,iloc中的i是指integer。这两者的区别如下:

  • loc works on labels in the index.
  • iloc works on the positions in the index (so it only takes integers).

也就是说loc是根据index来索引,那么loc就根据这个index来索引对应的行。iloc并不是根据index来索引,而是根据行号来索引,行号从0开始,逐次加1。

  • 关联:concat和merge:concat是强行耦合,merge,是有共同名,优先表进行耦合

查看:http://blog.csdn.net/zutsoft/article/details/51498026

  • merge函数功能:将两组列数据拼接到一起 

一般的简单调用模式:merge(left, right, how='inner', on=None) 
参数说明:

  • left与right:两个不同的DataFrame。
  • how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner。
  • on : 指的是用于连接的列索引名称。必须存在右右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键。

数据库连接方式说明参考:      SQL的四种连接-左外连接、右外连接、内连接、全连接

举例说明:

举例一(说明:使用重叠列key作为连接键。使用内连接:新的key列中的元素是df2和df1的key列中元素的交集,所以其中没有c键)

df1=DataFrame({'key':['a','b','b'],'data1':range(3)})  
df2=DataFrame({'key':['a','b','c'],'data2':range(3)})  
  
pd.merge(df1,df2)   #没有指定连接键,默认用重叠列名,没有指定连接方式,data1和data2都是 0 1 2
#输出结果是:
   data1 key  data2  
0      0   a      0  
1      1   b      1  
2      2   b      1  

举例二(说明:使用左外连接方式:包括df2和df1的连接键的交集和左表(df2)中的所有连接键,右表(df1)中中没有键值用NaN补充)
pd.merge(df2,df1,how='left')    #通过how,指定连接方式  
输出结果是:
   data2 key  data1  
0      0   a      0  
1      1   b      1  
2      1   b      2  
3      2   c    NaN  
同理可得右外连接方法;另外全外连接取得是两个表中的所有键值,也就是键值元素的并集。
举例三:(说明:多键连接时用on参数指定连接键。下面的一行代码指定key1和key2列为连接键。)

pd.merge(df1,df2,on=['key1','key2'] 

  • 多重索引

 

  • 文本函数:

 pandas的DataFrame,有时需要处理一些字符串类型列,运用Series.str列内置方法很方便。

1.one hot 独热编码,get_dummies

series=data['列名'].str.get_dummies(sep=',')

实现DataFrame中列有多值,且想把这列one hot下

2.切分字符串,split()

series=data['列名'].str.split(',')

把DataFrame列中字符串以','分隔开,每个元素分开后存入一个列表里

series=data['列名'].str.split(',',expand=True)

参数expand,这个参数取True时,会把切割出来的内容当做一列,产生多列。

series=data['列名'].str.split(',',expand=True)[0]

可以只要第一列。

3.替换,replace()

series=data['列名'].str.replace(',','-')

用‘-’代替‘,’

4.是否包含表达式,contains()

series=data['列名'].str.contains('we')

返回的是布尔值series

5.查找所有符合正则表达式的字符findall()

series=data['列名'].str.findall("[a-z]")

以数组的形式返回

6.计算字符串的长度,len()

series=data['列名'].str.len()

7.去除前后的空白字符,strip()

series=data['列名'].str.strip()

rstrip() 去除后面的空白字符

lstrip() 去除前面的空白字符

8.isalnum() 是否全部是数字和字母组成

isalpha() 是否全部是字母

isdigit() 是否全部都是数字

isspace() 是否空格

islower() 是否全部小写

isupper() 是否全部大写

istitle() 是否只有首字母为大写,其他字母为小写

  • 去重:

(1)pd.dropna()去除所有还有空值的行

(2)fillna()  填充 

(3)填充空值,None需要用np.nan,c语言形式的控制;

(4)数据去重可以使用duplicated()和drop_duplicates()两个方法。
DataFrame.duplicated(subset = None,keep =‘first’ )返回boolean Series表示重复行
参数
:    
subset:列标签或标签序列,可选,仅考虑用于标识重复项的某些列,默认情况下使用所有列
keep:{‘first’,‘last’,False},默认’first’。

first:标记重复,True除了第一次出现。
last:标记重复,True除了最后一次出现。
错误:将所有重复项标记为True。

# 删除 dataframe 重复数据

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
subset : 用来指定特定的列,默认所有列;
keep : {‘first’, ‘last’, False}, 删除重复项并保留第一次出现的项;
inplace : boolean, 是直接在原来数据上修改还是保留一个副本,默认为False ;

  • 聚合 apply

apply函数是`pandas`里面所有函数中自由度最高的函数,将func里面的函数运用到daraframe,速度很快。

该函数如下:

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
参数:

函数 : 要应用于每个列或行的函数。

axis : {0或'index',1或'columns'},默认为0

应用函数的轴:

  • 0或'index':将函数应用于每列。
  • 1或'columns':将函数应用于每一行。

广播 : 布尔,可选

仅与聚合函数相关:

  • FalseNone:返回一个长度为索引长度或列数的系列(基于 轴参数)
  • True :结果将广播到框架的原始形状,原始索引和列将被保留。

自版本0.23.0后不推荐使用:此参数将在将来的版本中删除,替换为result_type ='broadcast'。

raw : bool,默认为False

  • False :将每行或每列作为Series传递给函数。
  • True:传递的函数将接收ndarray对象。如果您只是应用NumPy减少功能,这将获得更好的性能。

reduce : bool或None,默认为None

尝试应用减少程序。如果DataFrame为空,则apply将使用reduce来确定结果应该是Series还是DataFrame。如果reduce=None(默认值),则应通过在空系列上调用func来猜测apply的返回值(注意:猜测时,func引发的异常将被忽略)。如果将始终返回Series,并且 始终返回DataFrame。reduce=Truereduce=False

自版本0.23.0后不推荐使用:此参数将在将来的版本中删除,替换为result_type='reduce'

result_type : {'expand','reduce','broadcast',None},默认无

这些只在axis=1(列)时起作用:

  • 'expand':类似列表的结果将变为列。
  • 'reduce':尽可能返回系列,而不是扩展类似列表的结果。这与'expand'相反。
  • 'broadcast':结果将广播到DataFrame的原始形状,原始索引和列将被保留。

默认行为(无)取决于应用函数的返回值:类似列表的结果将作为一系列结果返回。但是,如果apply函数返回一个Series,则它们将扩展为列。

版本0.23.0中的新功能。

args : 元组

除了数组/系列之外,传递给func的位置参数。

** kwds

其他关键字参数作为关键字参数传递给 func。

该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

 

DataFrame.pivot_table(values = None,index = None,columns = None,aggfunc ='mean',fill_value = None,margin = False,dropna = True,margins_name ='All' )[source]

创建一个电子表格样式的数据透视表作为DataFrame。数据透视表中的级别将存储在结果DataFrame的索引和列上的MultiIndex对象(层次索引)中。

参数:

values : 要聚合的列,可选

index : 列,Grouper,数组或前一个列表

如果传递数组,则它必须与数据的长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表索引上分组的键。如果传递数组,则它的使用方式与列值相同。

columns : 列,Grouper,数组或前一个列表

如果传递数组,则它必须与数据的长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表列上分组的键。如果传递数组,则它的使用方式与列值相同。

aggfunc : function,function of list,dict,default numpy.mean

如果传递的函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)如果传递dict,则键是要聚合的列,值是函数或函数列表

fill_value : 标量,默认无

用于替换缺失值的值

margin : boolean,默认为False

添加所有行/列(例如,对于小计/总计),汇总项;

dropna : 布尔值,默认为True

不包括条目全部为NaN的列

margins_name : string,默认为'All'

当margin为True时,将包含总计的行/列的名称。

返回:

table : DataFrame

pandas.pivot_table()

  1. 创建简单的数据透视表
  2. 增加一个行维度(index)
  3. 增加一个值变量(value)
  4. 更改数值汇总方式
  5. 增加数值汇总方式
  6. 增加一个列维度(columns)
  7. 增加多个列维度 
  8. 增加数据汇总值
  • python连接数据库:(略)可以看看我的全栈工程师笔记

3.数据可视化

pandas可视化:import pandas as np

matplotlib : import matplot.pyplt as plt

一层一层添加

Seaborn可视化

概率:

  • distplot 概率分布图
  • kdeplot 概率密度图
  • jointplot 联合密度图
  • pairplot 多变量图

分类:

线性:

  • Implot 回归图
  • heatmap 热图

4.案例实战分析

一份有关销售数据的简单数据分析报告 :https://www.kesci.com/apps/home/project/5aa687afcbc87e3f21332885

5.数据分析平台

本次使用的是Python中的superset库,基于web的数据分析平台。

严重提示:安装这个库一定要新建一个虚拟环境后再进行pip安装,不然会使得依赖库和Anaconda中的部分库冲突,使得原环境的库无法正常调用

使用逻辑:

  1. 先加载数据库或者数据文件
  2. 写好sql语法,进行一定编辑数据集。
  3. 在silces里面对于数据集,进行一个个图的绘画与调整
  4. Dashboard里进行最后图表的汇合。

注:个人觉得如果不是专业的数据分析师比如我是PM,还是不建议看这么深,到4就可以了!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐