Python 数据分析初阶

某一列数据计算

data['column_name'].value_counts()

以之前找到的一个前辈的数据为例子,首先我们要获取文件

import pandas as pd
data = pd.read_excel('xxxx.xls')

这里可以单独查看其中的内容 data['nick'],计算其中的大小则使用 data['nick'].value_counts()

同样的情况,我们可以增加分组并获取对应的数据

data1 = data['score'].groupby(data['city']) data1.mean()

这种情况下可以类比为SQL语句:

select avg(score) from data group by city

这样的数据看起来不是特别让人喜欢,这个时间我们可以给他排个序:

data1.mean().sort_values(ascending=False)

现在看起来好多了,但是有点多了,我们只想看前几条记录:

data1.mean().sort_values(ascending=False).head(3)

可惜了,好多城市我都没听过,我只想看直辖市的数据

data2 = data.loc[(data['city'].isin(['北京','天津','重庆','上海']))]

但是这样还是不特别好看,我们可以再按城市看一下,评分有多少

data2['score'].groupby(data2['city']).mean()

数据表信息查看

df.shape: 维度查看 df.info(): 数据表基本信息,包括围度、列名、数据格式、所占空间 df.dtypes: 每一列的数据格式 df['b'].dtype: 某一列的格式 df.isnull(): 是否空值 df.['b'].unique(): 查看某一列的唯一值 df.values: 查看数据表的值 df.columns: 查看列名 df.head(): 查看默认的前 10 行数据 df.tail(): 查看默认的后 10 行数据

数据表清洗

df.fillna(value=0): 用数字 0 填充空值 df['pr'].fillna(df['pr'].mean()): 用列 pr 的平均值对 na 进行填充 df['city']=df['city'].map(str.strip): 清除 city 字段的字符空格 df['city']=df['city'].str.lower(): 大小写转换 df['pr'].astype('int'): 更改数据的格式 df.rename(columns={'category': 'category-size'}): 更改列名 df['city'].drop_duplicates(): 删除后出现的重复值 df['city'].drop_duplicates(keep='last'): 删除先出现的重复值 df['city'].replace('sh', 'shanghai'): 数据替换

数据预处理

  • 数据表合并

    df_inner = pd.merge(df, df1, how='inner')  # 匹配合并,交集
    df_left = pd.merge(df, df1, how='left')  # 左联表
    df_right = pd.merge(df, df1, how='right')  # 右联表
    df_outer = pd.merge(df, df1, how='outer')  # 并集
    
  • 设置索引列

    df.set_index('id')
    
  • 按照特定列的值排序

    df.sort_values(by=['age'])
    
  • 按照索引列排序

    df.sort_index()
    
  • 如果 pr 列的值大于 3000 , group 列显示 hight , 否则显示 low

    df['group'] = np.where(df['pr'] > 3000, 'hight', 'low')
    
  • 对复合多个条件的数据进行分级标记

    df.loc[(df['city'] == 'beijing') & (df['pr'] >= 4000), 'sign'] = 1
    
  • 对 category 字段的值依次进行分列,并创建数据表,索引值 df 的索引列,列名称为 category 和 size

    pd.DataFrame((x.split('-')
        for x in df['category']), index=df.index, columns=['category', 'size'])
    

数据提取

loc: 函数按标签值进行提取 iloc: 按位置进行提取 ix: 可以同时按标签和位置进行提取

具体的使用见下:

df.loc[3]: 按索引提取单行的数值 df.iloc[0:5]: 按索引提取区域行数据值 df.reset_index(): 重设索引 df=df.set_index('date'): 设置 date 为索引 df[:'2013']: 提取 2013 之前的所有数据 df.iloc[:3,:2]: 从 0 位置开始,前三行,前两列,这里的数据不同去是索引的标签名称,而是数据所有的位置 df.iloc[[0,2,5],[4,5]]: 提取第 0、2、5 行,第 4、5 列的数据 df.ix[:'2013',:4]: 提取 2013 之前,前四列数据 df['city'].isin(['beijing']): 判断 city 的值是否为北京 df.loc[df['city'].isin(['beijing','shanghai'])]: 判断 city 列里是否包含 beijing 和 shanghai ,然后将符合条件的数据提取出来 pd.DataFrame(category.str[:3]): 提取前三个字符,并生成数据表

数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和。

  • 使用与进行筛选

    df.loc[(df['age'] > 25) & (df['city'] == 'beijing'),
        ['id', 'city', 'age', 'category']]
    
  • 使用或进行筛选

    df.loc[(df['age'] > 25) | (df['city'] == 'beijing'), ['id', 'city', 'age']]
    
  • 使用非进行筛选

    df.loc[(df['city'] != 'beijing'), ['id', 'city', 'age']].sort(['id'])
    
  • 筛选后的灵气按 city 列进行计数

    df.loc[(df['city'] != 'beijing'), ['id', 'city', 'age']].sort(
        ['id']).city.count()
    
  • 使用 query 函数进行筛选

    df.query('city' == ['beijing', 'shanghai'])
    
  • 对筛选后的结果按 pr 进行求和

    df.query('city' == ['beijing', 'shanghai']).pr.sum()
    

数据汇总

主要使用 groupby 和 pivote_table 进行处理。

df.groupby('city').count(): 按 city 列分组后进行数据汇总 df.groupby('city')['id'].count(): 按 city 进行分组,然后汇总 id 列的数据 df.groupby(['city','size'])['id'].count(): 对两个字段进行分组汇总,然后进行计算 df.groupby('city')['pr'].agg([len, np.sum,np.mean]): 对 city 进行分组,然后计算 pr 列的大小、总和和平均数

数据统计

数据采样,计算标准差、协方差和相关系数。

  • 简单数据采样

    df.sample(n=3)
    
  • 手动设置采样权重

    weights = [0, 0, 0, 0, 0, 0.5, 0.5]
    df.sample(n=2, weights=weights)
    
  • 采样后不放回

    df.sample(n=6, replace=False) # 如果 replace = True 采样后放回
    
  • 数据表描述性统计

    df.describe().round(2).T  # round 表示显示的小数位数,T 表示转置
    
  • 计算列的标准差

    df['pr'].std()
    
  • 计算两个字段间的协方差

    df['pr'].cov(df['m-point'])
    
  • 计算表中所有字段间的协方差

    df.cov()
    
  • 两个字段间的相关性分析

    df['pr'].corr(df['m-point'])  # 相关系数在 [-1, 1] 之间,接近 -1 为负相关,1 为正相关,0 为不相关
    
  • 数据表的相关性分析

    df.corr()
    
Author
Tags
总结(3) Emacs(2) org mode(4) 年度清单(2) 读书清单(2) 电影清单(2) 电视清单(2) Python(3) 学习计划(1) 子弹笔记(1) 手帐体系(1) 时间管理(1) 时间使用效率(1) 形意拳(1) 知识管理(1) 简历(1) 技能水平(1) 生活(1) 减法生活(1) 阅读(1) 阅读分组(1) org(1) docx(1) markdown(2) cmder(1) 图床(1) jsdelivr(1) github(1) 安卓系统(1) 手动更新手机系统(1) post link(1) post path(1) hexo(2) hugo(2) GitHub Pages(1) travis(1) 自动部署博客(1) presentation(1) gcc(1) g++(1) 默认表格(1) 复杂表格(1) multimd table(1) google adsense(1) evil(1) surround(1) librime(2) emacs-rime(1) liberime(1) dot(1) graphviz(1) use-sub-superscripts(1) ditaa(1) Evil Multiple cursors(1) turn evil mode off(1) modifier keys(1) keymap(1) super(1) hyper(1) install Emacs(1) Mac OS(1) keybinds(1) clocktable(1) coding system(1) image library(1) keybind(1) spacemacs(1) org babel(1) homebrew(1) dd(1) diskutil(1) tmux(1) xcode(1) xcrun(1) node-gyp(1) tar(1) tree(1) pacman(1) plantuml(1) find(1) grep(2) du(1) apt-get(1) apt(1) regex(1) wildcard(1) zsh(1) gdb(1) lsof(1) netstat(1) rebase(2) workflow(1) 工作流(1) .gitignore(1) postbuffer(1) hung up(1) merge(1) cache(1) reset(1) Git(1) command(1) submodule(1) GitHub Pull Request(1) pr(1) Matplotlib(1) beautifusoup(1) 下载小说(1) SOLID(1) Leetcode(2) 透视表(1) read_excel()(1) pandas(1) conda(1) django(1) markdown-deux(1) mysql(1) oracle(1) 模糊查询(1) logging level(1) reflex(1) Field(1) Maven(1) Selenium(1) 下拉框(1) select into(1) insert into select(1) CAST(1) CONVERT(1) timestamp(1) concat(1) concat_ws(1) group_concat(1) union(1) grant privileges(1) 重置 root 密码(1) 报错 10060(1) 清理连接数(1) create user(1) set password(1) exists(1) in(1) markdown-it(1) emoji(1) tasks(1) valine(1) Code 504(1) Hugo(1) theme(1) substring(1) indexOf(1) RegExp(1) 定位节点(1) 正则匹配(1) async(1) 异步请求(1) css(2) layui(1) 滚动条(1) JavaScript(1)