利用Python进行数据分析

一.预备知识

一些重要的Python库:

Numpy

pandas

matplotlib

Scipy

scikit-learn

statsmodels

二.Python语言基础

缩进   import   运算符(is    is not)  

数据类型:数值型    字符串   Bytes  Unicode     时间类型     布尔型      空值(None)

控制流程:if   elif   else     for循环(for...in...)    while循环   pass    range函数    三元表达式

三.内建数据结构,函数和文件

1.数据结构与序列

1.tuple:元组  长度固定,不可改变的序列     用( )或只用逗号表示

2.list:列表    大小和内容都可以变    用[ ]表示

append   insert   remove     extend     sort(直接更改原有的序列)   切片

bisect.bisect        bisect.insort

3.内建的序列函数:enumerate      sorted(返回一个新的序列)     zip    reversed

4.dict:字典    key : value形式       用{ }表示

in    del   pop   update(合并两个dict) get       setdafault       hash

d1.keys      d1.values             

5.set:集合      无序且元素是不重复的,就像是key唯一且没有value的字典      用{ }表示

并集:union、|       交集:intersection、&       差集:difference、-      对称差集(x-y与y-x的并集):symmetric_difference、^

子集:issubset        超集:issuperset

6.list,set和dict推导式

map     嵌套列表表达式

2.函数

1. 命名空间,作用范围,局部函数

2.返回多个值(返回一个tuple)

3.函数是对象

4.匿名函数,lambda函数

5.柯里化(Currying):局部参数应用

6.生成器 Generators

7.错误和异常处理

3.文件以及操作系统

 open   close     read      write      seek      

with  open(path)   as  f :  ...      这种打开方式可以自动关闭文件

四.Numpy基础:数组和向量化计算

1.多维数组对象

np.random.randn       

np.array   np.zeros  np.empty    np.arange     np.arange().reshape()     

arr.dtype    arr.shape   arr.ndim     arr.size

arr.astype(转换类型)     np.string_  

数组间的计算:点对点计算(element-wise)    +      -      *     /     **    >

索引和切片

布尔索引        花式索引

数组转置和轴交换        转置:transpose、arr.T    矩阵乘法:np.dot      swapaxes       

2.通用函数:快速点对点数组函数

np.exp     np.sqrt     np.maximum     np.modf

3.数组导向编程

向量化的数组运算比纯python同等程度的运算要快很多       np.meshgrid

np.where

数学和统计方法:arr.mean     arr.sum    arr.cumsum    arr.cumprod     注意axis    还有std、var、min、max、argmin、argmax等

排序:arr.sort(改变原数组的顺序)      np.sort(生成新的排序后的结果)

单一性和其他集合逻辑:np.unique    np.in1d       还有intersect1d、union1d、in1d、setdiff1d、setxor1d等

4.通过数组来进行文件的输入和输出

Numpy能从磁盘直接加载和存储数据,比如二进制格式的数据:np.save      np.load      np.savez     np.savez_compressed

不常用,更多用pandas来加载数据

5.线性代数

np.dot    np.round

diag、trace、det、eig、inv、pinv、qr、svd、solve、lstsq等

6.伪随机数生成

np.random.seed         np.random.RandomState

np.random.permutation(shuffle、rand、randint、randn、binomial、normal、beta、chisquare、gamma、uniform)

五.开始使用pandas

1.pandas的数据结构

1.Series:伴有index的一维序列      pd.Series

obj.values     obj.index      obj.name     obj.index.name

isnull      notnull    

2.DataFrame:长方形表格      pd.DataFrame

frame.head()       frame.columns      frame.T    frame.columns.name      frame.index.name       frame.values

3.索引对象

2.主要功能

1.重新索引

reindex方法     参数:method(= ffill、bfill)、fill_value、limit等

2.按轴删除记录

drop方法     inplace=True可直接更改原Series或Dataframe

3.索引,选择,过滤

用label(比如Series的index名)来切片的时候,和python不一样的在于,会包括尾节点

df[val]   loc   iloc  ix

4.整数索引

5.算数和数据对齐

pandas的一个有用的feature就是,不同index的object之间的算术计算,如果两个object相加,但他们各自的index并不相同,最后结果得到的index是这两个index的合集(并集),一个object有另一个object没有的index运算后对应的值为缺失值NAN

df1.add(df2,fill_value=0)将NAN值填充为0

6.函数应用和映射

apply      map    applymap

7.排序

sort_index     sort_values      默认是升序,通过参数ascending=False可设置为降序

rank方法     参数:ascending、method(=average、min、max、first、dense)、axis等

8.有重复label的轴索引

index的is_unique特性能告诉我们object的index中是否有重复值:obj.index.is_unique

3.汇总和描述性统计

mean、sum等方法有个skipna参数,除非整个切片全是NA,否则我们可以用skipna来跳过计算NA

idxmin   idxmax    describe   count   min   max   argmin   argmax   quantile  sum  mean  median  mad   prod   var   std   skew    kurt   cumsum   cummin   cummax    cumprod    diff( df.diff() = df - df.shift() )   pct_change 

1.相关性和协方差

corr     cov     corrwith

2.唯一值,值计数,会员   

unique    value_counts    isin    match 

七.数据清洗和准备           

1.处理缺失数据

1.过滤/删除缺失值

dropna    参数:how(=all、any)、thresh(要求留下的数据至少有thresh个非NAN)等

2.填补缺失值

fillna   调用fillna的时候设置好一个值来替换缺失值    参数:value、inplace、method(=ffill、bfill)、axis、limit

2.数据变换

1.删除重复值

duplicated、drop_duplicateds     参数keep='last'能保留最后一次观测到的数值组合

2.用函数和映射来转换数据

3.替换值   

replace   参数:inplace

4.重命名Axis Indexes

rename  参数:inplace

5.离散化和装箱

cut方法       cats=pd.cut(ages,bins)         cats.codes       cats.categories     pd.value_counts(cats)

可以自己设定哪一边是闭区间(right=False)       

如果只是给出了bin的数量来cut,而不是自己设定每个bin的范围,cut会根据最大值和最小值来计算等长的bins,参数precision=2表示bins精确到小数点后两位

qcut方法

6.检测和过滤异常值

np.sign

7.排列和随机采样

np.random.permutation:打乱原顺序,随机排序

df.take      df.sample(有参数replace)

8.计算指示器/假变量

3.字符串处理

1.字符串对象方法

split    strip   rstrip   lstrip    join   index    find   rfind   count    replace    endswith   startswith    lower    upper   casefold    ljust   rjust

2.正则表达式

import  re

findall    finditer    search   match       

推荐使用 python 的 r 前缀r'  ',就不用考虑转义的问题了

re.compile(有参数flags=re.IGNORECASE)          sub     groups    split

将匹配结果分组:在正则表达式中加括号

3.pandas中的字符串向量化函数

cat   contains   extract   get   isalnum    isalpha    isdecimal     isdigit    islower    isupper    len     isnumeric     pad    center    repeat     tile   slice    

八.数据加工:Join,Combine and Reshape  

1.分层索引

在一个轴(axis)上有多个index levels(索引层级)

MultiIndex :levels   labels    names 

具有分层索引的Series可以通过data.unstack()变为Dataframe,相反的操作是stack:data.unstack().stack() 

1.重排序和层级排序:swaplevel     sort_index    

2.按层级来归纳统计数据

3.利用DataFrame的列来索引:set_index(参数:drop)      reset_index

2.合并数据集

pandas中合并数据集的几种方法:

①pandas.merge:按一个或多个key把DataFrame中的行连接起来,和SQL及其他关系型数据库中的join操作相似

②pandas.concat:在一个axis上,串联或堆叠(stack)多个对象     

③combine_first实例方法:能拼接相互之间有重复的数据,并用一个对象里的值填满缺失值

1.merge:参数有on、left_on、right_on、how(默认是内连接inner,还有outer、left和right)、suffixes、left_index、right_index等

2.DataFrame有一个join实例,可以直接用index来合并:比如left1.join(right1)     默认为左连接     参数有on、how等    可以连接多个DataFrame

3.concat:参数有axis、join、join_axes、keys、names、ignore_index等

4.combine_first: np.where

3.整形和旋转

对多层级索引进行整形

把“长”格式旋转为“宽”格式:pivot

把“宽”格式旋转为“长”格式:melt

九.绘图和可视化

1.简单的matplotlib API入门

导入:import matplotlib.pyplot as plt

plt.plot(x,y,format_string,**kwargs)函数细节:https://blog.csdn.net/u014539580/article/details/78207537

fig = plt.figure()

ax = fig.add_subplot(2,2,1)  # 共4幅图(2*2),选中第一幅(索引分别为1 2 3 4)

或者写成fig,axes = plt.subplot(2,3,sharex=True,sharey=True),然后使用axes[0,1]来索引第一幅图

使用sharex=True和sharey=True来指定不同subplot有相同的x和y轴,令坐标轴的范围相同,这就能让我们在同一范围内进行数据之间的比较。

plt.subplots_adjust(wspace=0,hspace=0):控制图与图之间的间隔,令间隔为0

通常只有一幅图时写成fig.add_subplot(1,1,1)

在plot函数的format_string参数中,包括了颜色字符,风格字符(样式)和标记物类型,比如可以简单表示为'ko--',即黑色、实心圈标记和破折线,但必须按照颜色,标记物类型,样式这样的顺序来表示在一起。

plt.legend():显示图例       函数细节:https://blog.csdn.net/you_are_my_dream/article/details/53440964

常用方法:ax.get_xlim()     ax.set_xlim()     ax.set_xticks()     ax.set_xticklabels()     ax.set_title()     ax.set_xlabel()    有set...就有对应的get...

文本:ax.text()     注释:ax.annotate(参数arrowprops可以设置箭头)

将图形添加到subplot中:rect = plt.Rectangle(...)   circ = plt.Circle(...)     ax.add_patch(rect)      ax.add_patch(circ)   

把图保存为文件:plt.savefig('figpath.svg')   保存的文件类型通过文件名后缀来指定,默认为png    有dpi、bbox_inches等参数 

2.用pandas和seaborn绘图

seabron通常用来做一些统计图形,导入seaborn会改变matplotlib默认的颜色和绘图样式,提高可读性和美感,即使不适用seaborn的API,也可以利用seaborn来提高可视化的效果。

Series和DataFrame各自都有plot属性,用来做一些比较基本的绘图类型。默认,plot()会绘制线图,df.plot()等同于df.plot.line()

根据DataFrame数据作出的线图,会把DataFrame的每一列画出一条线,所有的线会在同一个或不同的subplot中(设置参数subplots=True则不同的线会画在不同的subplot中)

条形图:df.plot.bar(垂直的条形图)    df.plot.barh(水平的条形图)

对于DataFrame,条形图会把每一行作为一个组画出来

设定参数stacked=True,能让条形图堆叠起来显示数据

seaborn通过sns.barplot绘制条形图,并且图中会显示置信区间(默认为95%),并且hue参数能让我们把某一列的数据分开

柱状图:df.plot.hist     bins参数

密度图:df.plot.density    核密度估计

seaborn通过sns.distplot绘制柱状图和密度图(同一张图上)

散点图(点图):散点图对于检查二维数据之间的关系是非常有用的

对数差分:np.log(data).diff().dropna()

seaborn的regplot方法,产生一个散点图并拟合一条回归线

seaborn的pairplot方法,可以把每一个参数的柱状图或密度估计画在对角线上

多面网格和类别数据:seaborn的factorplot方法   通过col参数对类别数据分别显示    

通过设定参数kind='box',可以绘制箱线图(能够展示中位数、分位数和离群点)

你可能感兴趣的:(python,数据分析)