《对比Excel,轻松学python数据分析》学习笔记

对比Excel,轻松学python数据分析

    • 数据分析基础
    • python基础
    • 获取数据源
    • 数据预处理
    • 数据选择
    • 数值操作
    • 数据运算
    • 时间序列
    • 数据透视表
    • 多表拼接
    • 结果导出
    • 数据可视化

数据分析基础

对于缺失数据,如果缺失比例高于30%,那么我们会选择放弃这个 指标,即做删除处理。而对于缺失比例低于30%的指标,我们一般进行 填充处理,即使用0、均值或者众数等进行填充

python基础

  • 当用find查找某一字符是否存在于 某个字符串中时,如果存在则返回该字符的具体位置,如果不存在则返 回-1

  • strip()函数,该函数用来移除字符串首尾的 指定字符,默认移除字符串首尾的空格或换行符

  • 将列表B合并到列表A中,用到的方法是A.extend(B),将列表A合并 到列表B中,用到的方法是B.extend(A)

  • index获取值出现的位置,就是看该值位于列表中的哪里。

  • pop()函数是根据列表中的位置进行删除,也就是删除指定位置的值。

  • remove()函数是根据列表中的元素进行删除,也就是删除某一元素

  • 列表生成式

num=[1,2,3,4,5]
[i**2 for i in num]
  • map函数, map(function,agrs),表示对序列 args 中的每 个值进行function操作,最终得到一个结果序列.map函数生成的结果序列不会直接把全部结果显示出来,要想获取 到结果需要for循环遍历取出来。也可以使用list方法,将结果值生成一 个列表
a=map(lambda x,y:x+y,[1,2,3],[3,2,1])
a
<map at 0x1b0260d29b0>
for i in a:
    print(i)
4
4
4    
b=list(map(lambda x,y:x+y,[1,2,3],[3,2,1]))
b
[4,4,4]
  • 模块导入
import module_name   #直接导入具体模块名
from modulel import module2   #从一个较大的模块中导入较小的模块
  • pandas
    如果只是传入一个列表不指定数据标签,那么Series会默认使用从0 开始的数做数据标签
import pandas as pd
S1=pd.Seriess(["a","b","c","d"])
S1
0  a
1  b
2  c
3  d

获取数据源

  • 从excel
pd.read_excel('file_path',sheet_name='**',index_col=n,header=0)  
#index_col表示用.xlsx文件中的第几列做行索引,从0开始计数。 
#header参数值默认为 0,即用第一行作为列索引;输入0和None是不一样的
#也可以是其他行,只需要传入具体的那一 行即可;
#usecols参数来指定要导入的列,可以输入一个列表[0,2]
  • 从csv
pd.read_csv('file_path',sep='',nrows=n,encoding='',engine='python',parse_dates=['时间'])
#sep为分割符号
#nrows为读取前几行
#Python用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是 UTF-8。
#如果是CSV UTF-8(逗号分隔)(*.csv)格式的文件,那么导入时就需 要加encoding参数
#如果是CSV(逗号分隔) (*.csv)格式的文件,那么在导入的时候就需 要把编码格式更改为gbk,如果使用UTF-8就会报错
#如果文件名含中文,需要通过engine进行消除错误
#parse_dates参数表示将数据解析为时间格式
  • 从txt
pd.read_table('file_path',sep='')
  • 从mysql
import pandas as pd
import pymysql
conn = pymysql.connect(
    host='localhost', 
    user='root', 
    passwd='123456',         #账户密码
    db='py-sql',             #库的名称
    charset='utf8')
df = pd.read_sql('select * from ch4ex9',conn)
df
  • 查看数据行、列数 shape()
  • 查看前几行 head()
  • 查看数据类型及有无缺失值 info()
  • 获取所有数值类型字段的均值等 describe()

数据预处理

  • 缺失值查找
    Excel:Ctrl+G 定位条件查找
    python:isnull()
  • 缺失值删除
    Excel:Ctrl+G 定位条件查找
    python:dropna(how=‘all’/any) 如果想删除空白行,只要给dropna()方法传入一个参数how = all即可,这样就会只删除那些全为空值的行,不全为空值的行就不会被删除
  • 缺失值填充
    Excel:Ctrl+Enter
    python:fillna() 也可以按不同列填充,只要在 fillna()方法的括号 中指明列名即可
  • 重复值处理
    Excel:数据–删除重复值
    python:
drop_duplicates(subset=‘列名',keep='last')	
#默认保留第一个(行)值,根据subset这一列进行删除,
#也可以多列['列名','列名'],通过传入参数keep进行设置,
#参数 keep默认值是first,即保留第一个值;也可以是last,
#保留最后一个值; 还可以是False,即把重复值全部删除
  • 数据类型转化
    Excel:选中这一列,然后 在数字菜单栏中通过下拉菜单选择你要转换的目标类型即可实现
    python:astype()
  • 添加索引
    excel:直接传入
    python:
df.columns=['col1','col2','col3']     #列索引
df.index=[1,2,3,4]      #行索引
  • 更改索引
    excel:直接修改
    python:set_index()
  • 重命名索引列
    excel:直接修改
    python:
df.rename(columns={'订单编号':'新订单编号',.....})   #列索引更改
df.rename(index={'1':'一',.....})                  #列索引更改
  • 重置索引(常用于数据分组、数据透视表中)
    python:《对比Excel,轻松学python数据分析》学习笔记_第1张图片

数据选择

  • 筛选异常值
    excel:筛选
    python:
df[df['name']<20&df['name2']>50]
  • 行列交叉
    excel:鼠标拖拽
    python:
    普通索引+普通索引《对比Excel,轻松学python数据分析》学习笔记_第2张图片

位置索引+位置索引《对比Excel,轻松学python数据分析》学习笔记_第3张图片

布尔索引+普通索引《对比Excel,轻松学python数据分析》学习笔记_第4张图片

切片索引+切片索引 《对比Excel,轻松学python数据分析》学习笔记_第5张图片

  • 如果是普通索引,就直接传入行或列名,用loc方 法即可;
  • 如果是切片索引,也就是传入行或列的位置区间,要用 iloc 方法
  • 如果是切片索引+普通索引,也就是行(列)用切片索引,列 (行)用普通索引,这种交叉索引要用ix方法
  • 《对比Excel,轻松学python数据分析》学习笔记_第6张图片

数值操作

  • 数值替换
    一对一替换
    excel:查找和选择>替换选项
    python:replace(A,B) 表示将A替换成B
    多对一替换
    excel:if函数进行替换
    python:replace([A,B],C)表示将A、B替换成C
    多对多替换
    excel:多个if函数嵌套
    python:replace({“A”:“a”,“B”:“b”}表示用a 替换A,用b替换B
  • 数值排序
    按一列排序
    excel:排序和筛选–升序/降序
    python:
sort_values(by='col_name',ascending=True/False)
sort_values(by='col_name',ascending=True/False,na_position='first'/last)
#将缺失值显示在第一位或最后一位

按多列排序
excel:《对比Excel,轻松学python数据分析》学习笔记_第7张图片
python:在这里插入图片描述

  • 数值排名
    excel:
    RANK.AVG(number,ref,order) :RANK.AVG(number,ref,order) number表示待排名的数值,ref表示一整列数值的范围,order用来 指明降序还是升序排名。当待排名的数值有重复值时,返回重复值的平 均排名。
    RANK.EQ(number,ref,order):RANK.EQ 的参数值与 RANK.AVG 的意思一样。当待排名的数值 有重复值时, RANK.EQ返回重复值的最佳排名
    python:
    rank(method=’‘)
  • 数值删除
    列删除
    excel:右键直接删除
    python:drop([‘col_name’,‘col_name’],axis=1) 在drop方法后的括号中直接传入待删除列的列名,需要加一个参数 axis,并让其参数值等于1,表示删除列
    行删除
    excel:
    python:drop([‘index_name’,‘index_name’],axis=0)
  • 数值计数
    excel:countif()
    python:value_counts() normalize = True参数可以查看不同值出现的占比
  • 查看唯一值
    excel:删除重复项,剩下的就是唯一值
    python:unique()
  • 数值查找
    excel:查找与选择
    python:isin()
    《对比Excel,轻松学python数据分析》学习笔记_第8张图片
  • 区间切分
    excel:if函数
    python:cut和qcut()《对比Excel,轻松学python数据分析》学习笔记_第9张图片
    《对比Excel,轻松学python数据分析》学习笔记_第10张图片
  • 插入新的列
    excel:右键插入
    python:insert()
#在第三列插入列名为name的一列
df.insert(2,'name',[data1,data2...])
  • 转置
    excel:复制–右键—选择性粘贴—行列转换
    python:df.T

  • 重塑
    把数据从表格型数据转换到树形数据的过程叫重塑,unstack可以重新转换回来《对比Excel,轻松学python数据分析》学习笔记_第11张图片

  • 宽表转长表
    《对比Excel,轻松学python数据分析》学习笔记_第12张图片
    《对比Excel,轻松学python数据分析》学习笔记_第13张图片melt中的id_vars参数用于指明宽表转换到长表时保持不变的列, var_name参数表示原来的列索引转化为“行索引”以后对应的列名, value_name表示新索引对应的值的列名。 注意,这里的“行索引”是有双引号的,它并非实际行索引,只是类 似实际的行索引。

  • 长表转宽表 (数据透视表)
    《对比Excel,轻松学python数据分析》学习笔记_第14张图片

  • apply与applymap的区别
    函数apply()和applymap()都需要与匿名函 数lambda结合使用
    map()函数是对一个序列中的所有元素执行相同的函数操作
    apply()函数主要用于对DataFrame中的某一column或row中的元素执 行相同的函数操作
    applymap()函数用于对DataFrame中的每一个元素执行相同的函数操作

数据运算

  • 汇总运算(可加axis)
    count()非空数值的个数
    sum
    mean
    max
    min
    median 中位数
    mode 众数
    var 方差
    std 标准差
    quantile 分位数(025/0.5/0.75)
    corr() 相关型运算

时间序列

  • 返回周几 :datatime.now.weekeday()+1,+1是因为python是从0开始计数

  • 返回周数:isocalendar()

  • 日期格式:助strftime()函数可以自定义时间和日期的格式

  • 字符串类型和时间序列类型互换:str(),parse()
    《对比Excel,轻松学python数据分析》学习笔记_第15张图片

  • 时间索引
    《对比Excel,轻松学python数据分析》学习笔记_第16张图片
    时间索引也可以用布尔索引,如

df[df['成交时间']>datetime(2018,9,9)]
  • 时间运算
    timedelta
    date offset

数据透视表

  • 数据分组
    excel:
    Excel 中有数据分组这个功能,但是在使用这个功能以前要先对键 进行排序(你要按照哪一列进行分组,那么键就是这一列),升序或降 序都可以。键值排序完成后,选中待分组区域,然后依次单击菜单栏中的数据 >分类汇总即可。分类字段、汇总方式都可以根据需求选择。汇总方式 就是对分组后的数据进行什么样的运算
    python:
    groupby(‘列名’).aggregate([‘count’,‘sum’]) aggregate的第一个神奇之处在于,一次可以使用多种汇总方式,第二个在于可以修改列名,如 groupby(‘列名’).aggregate({name1:‘count’,name2:‘sum’})
  • 数据透视表
    python:pivot_table()
    《对比Excel,轻松学python数据分析》学习笔记_第17张图片
    合计列的名称默认为All,可以通过设置参数margins_name的值进行修改
    可以通过设置参数 fill_value 的值对缺失值 进行填充
    为了便于分析与处理,我们一般会对数据透视表的结果重置索引, 利用的方法同样是reset_index()

多表拼接

  • 横向
    excel:vlookup
    python:merge(),可以加上on,表示在哪一列的基础上进行合并,即公共列
df1
   名次  姓名   学号   成绩  
0   1   小张    100   650   
1   2   小王    101   600   
2   3   小李    102   578   
3   4   小赵    103   550   
df2
Out[6]:
    学号  班级
0  100  一班
1  101  一班
2  102  二班
3  103  三班
pd.merge(df1,df2)
Out[7]:
   名次  姓名   学号   成绩  班级
0   1    小张  100     650  一班
1   2    小王  101     600  一班
2   3    小李  102     578  二班
3   4    小赵  103     550  三班

当两个表中没有公共列时,这里指的是实际值一样,但列名不同, 否则就无法连接了。这个时候要分别指定左表和右表的连接键,使用的 参数分别是left_on和rigth_on, left_on用来指明左表用作连接键的列名, right_on用来指明右表用作连接键的列名。
left_index 和 right_index,left_index 用来控制左表的索引,right_index用来控制右表的索引,还可以把索引列和普通列混用
how=‘’,left、right、inner、outer
重复的列名,只需要修改参数 suffixes的值 即可,默认为["_x","_y"]

  • 纵向
    excel:复制粘贴
    python:
    concat([df1,df2]) concat()方法默认保留原表的索引,可以通过设置参数ignore_index的值,让其等于True,这样就会 生成一组新的索引,而不保留原表的索引 重复值可以通过concat().drop_duplicates()处理

结果导出

  • python:
pd.to_excel(excel_writer='file_path',            #路径和文件名
            sheet_name='',                       #表名称
            index=True/False,                    #显示索引列
            columns=['col_name1','col_name2'...],#选择要导出的列
            encoding='utf-8',                    #编码
            na_rep=0,                            #缺失值填充为0
            inf_rep=0)                           #无穷值填充为0

pd.to_csv(path_or_buf='file_path',            #路径和文件名
            sheet_name='',                       #表名称
            index=True/False,                    #显示索引列
            columns=['col_name1','col_name2'...],#选择要导出的列
            encoding='utf-8-sig',                    #编码
            na_rep=0,                            #缺失值填充为0
            sep=',')                             #分隔符
  • 将文件导出到多个sheet《对比Excel,轻松学python数据分析》学习笔记_第18张图片

数据可视化

《对比Excel,轻松学python数据分析》学习笔记_第19张图片

  • 建立坐标轴
    在默认设置下 matplotlib 做出来的图表不是很清晰,这个时候可以 将图表设置成矢量图格式显示,这样看起来就会很清晰了,因此要在上 面的代码块中加一行代码:
%config InlineBackend.figure_format='svg'
fig=plt.figure(figsize=(10,8))  #设置画布
p1=fig.add_subplot(3,4,1)      #设置三行四列的坐标轴(要在画布的基础上)
plt.subplot2gri((2,2),(0,0))   #建立坐标系时不需要先建立画布,表示两行两列,并在(0,0)的位置进行画图
plt.subplt(3,4,1)              #设置三行四列的坐标轴(无需在画布的基础上)
plt.subplts(2,2)  

plt.subplots函数也是plt库的一个函数,它与subplot2grid函数和 subplot函数的不同之处是subplot2grid函数和subplot函数每次只返回一个坐标系,而subplots函数一次可以返回多个坐标系。
上面代码表示将图表的整个区域分成2行2列,并将4个坐标系全部返回

  • 设置坐标轴
plt.xlabel('x轴名称',labelpad=10)   #给参数labelpad传入 具体的距离数
  • 设置坐标轴刻度
plt.xticks(['1月份','2月份','3月份',....])
#有的时候为了数据安全不会把 x/y 轴的数值具体显示出来,
#这个时候只需要给xticks、yticks传入一个空列表就可以把x/y轴的数值隐藏起来

除了xticks、yticks方法,还可以使用plt库中tick_params函数对轴刻 度线进行设置《对比Excel,轻松学python数据分析》学习笔记_第20张图片

  • 设置坐标轴范围
    坐标轴刻度范围就是设置坐标轴的最大值和最小值,把图表中x轴 的刻度范围设置为0-10,y轴的刻度范围设置为0-8000
plt.xlim(0,10)
plt.ylim(0,8000)
  • 坐标轴显示设置
plt.axis('off')
  • 网格线
plt.grid(b=True,axis='x')    #只打开x轴的网格线
#还可以linestyle、linewidth
  • 图例
 plt.legend(loc=)
  • 标题
 plt.title(s='name',loc=)
  • 数据标签
plt.text(x,y,str,ha,va,fontsize)   

《对比Excel,轻松学python数据分析》学习笔记_第21张图片
plt.text函数只是针对坐标轴中的具体某一点(x,y)显示数值str,要想 对整个图表显示数据标签,需要利用for进行遍历在这里插入图片描述

  • 图表注释
plt.annotate(s,xy=,xytext,arrowprops=())

《对比Excel,轻松学python数据分析》学习笔记_第22张图片

  • 数据表(在图表基础上再添加一个表格)《对比Excel,轻松学python数据分析》学习笔记_第23张图片
    《对比Excel,轻松学python数据分析》学习笔记_第24张图片
    《对比Excel,轻松学python数据分析》学习笔记_第25张图片
  • 保存图片
plt.savefig('file_path')

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