0%

每周导学-第六周-数据分析过程

Build a dream and the dream will build you.

Hi,同学们,上一阶段我们学习了Python的基础知识,简单了解了Python数据分析的关键库——Pandas,并且通过项目二的实战,相信大家也一定信心满满的准备学习更多的Pandas知识了吧!那么从今天开始未来的四周内,我们将会对Pandas进行更细致的学习,大家加油吧!

本周开始,我们就进入到了项目三(P3)阶段,本阶段总共包含四周,在这一个月内,我们要对数据分析入门进行学习,学习数据分析思维,掌握Python数据分析及可视化方法,并使用所学知识完成项目三:探索数据集,尝试着自己完成整个数据分析的流程,得到一些饶有兴趣的结论,你一定会非常有成就感哒!那么以下便是这四周的学习安排:

时间 学习重点 对应课程
第1周 数据分析过程-1 数据分析过程&案例研究-1
第2周 数据分析过程-2 案例研究-1&案例研究-2
第3周 完成项目 项目:探索数据集
第4周 项目修改与通过 修改项目、查缺补漏、休息调整

!!看这里!!:在P3课程里面安排了SQL的高阶课程,但是因为在项目三中并不会涉及到SQL知识,所以为了保证大家学习的连贯性,在完成前两周的课程之后,就开始项目。至于!!SQL的高阶知识,大家可以放在课程通关后进行选修!!;

本阶段可能是个挑战,请一定要保持自信,请一定要坚持学习和总结,如果遇到任何课程问题请参照如下顺序进行解决:

饭要一口一口吃,路要一步一步走,大家不要被任务吓到,跟着导学一步一步来,肯定没问题哒!那我们开始吧!

注:本着按需知情原则,所涉及的知识点都是在数据分析过程中必须的、常用的,而不是最全面的,想要更丰富,那就需要你们课下再进一步的学习和探索!

本周目标

  • 学习课程中数据分析过程中的全部和案例研究1的部分内容,了解数据分析过程,熟练掌握Pandas在数据分析中的应用。

学习计划

时间 学习资源 学习内容
周二 微信群 - 每周导学 预览每周导学
周三、周四 Udacity - Classroom 数据分析过程&案例研究-1
周五 微信/Classin - 1V1 课程难点
周六 Classin - 优达日 本周学习总结、答疑
周日 笔记本 总结沉淀
周一 自主学习 查漏补缺

本周知识清单

前期准备&拓展

  • 课程概述给出的链接很重要,希望大家能抽空都看一看,尤其是最后的书Python for Data Analysis,目前已经出了第二版,可以戳下载链接进行下载。
  • 关于设置编程环境,本章已经不是建议了,而是要求,如果你还没有完成本地环境的配置,请戳:配置Anaconda和Jupyter Notebook

数据分析流程

数据分析不是从上至下一蹴而就的过程,而是需要你不断迭代、重复、完善,最终得到结论的过程。

提出问题

  • 数据集中的各个变量之间的相关性如何?是否存在某些联系?

  • 变量的统计结果会揭示什么?

  • 根据现有掌握的数据,能否对未来走势进行预测?

  • 根据你想了解的问题,去收集数据,再对问题进行修缮,如此迭代,获取更全面的数据,提出更一阵见血的问题。

整理数据

  • 收集

    数据库提取?直接下载?网络爬虫?

  • 评估

    这个过程是对数据产生直观印象的过程,你要尝试了解数据集的大小,基本的统计结果,是否存在数据重复?缺失?数据类型是否正确?是否每个变量成一列&每个观察值成一行?数据是否有统计错误?(严重偏离正常值,比如说气温达到70℃等等)…

  • 清理

    对评估出的问题进行逐项排查、清理,直至获取到干净的数据(推荐超级有用且经典的Tidy Data,虽然代码用的是R语言,但代码不就只是工具而已嘛,关键的是思维方法

探索性数据分析

即课程中提到的EDA(Exploratory data analysis ),这是一种分析数据集——尤其是陌生数据集——的方法,具体实施的话可以采用定量、定性的数据分析或者是可视化分析。

这是一个强调迭代的过程,在这个阶段你要不断的对数据进行探索(提问、整理、分析、可视化等等),根据你得到的结果再去丰富你的数据或者完善你的问题,最终得出结论。

这是一个考验耐心和细心的繁琐过程,所以一定要心平气和,保持工作的连贯性。(不做完一套不能睡觉?

得出结论

  • 通过可视化直接得出结论(描述、总结)
  • 统计学(预测,P4阶段会学习)
  • 机器学习算法(主要是用来做预测,课下可以学一学)

传达结果

撰写报告,和别人分享你的研究结果,所以一定要逻辑清晰、结论都要有根有据,让被分享者信服你的结论。

Pandas在数据分析中的应用

准备

  • 导入Pandas包

    1
    import pandas as pd
  • 打开文件

    1
    2
    3
    4
    5
    6
    #打开csv文件
    pd.read_csv('filename')
    #打开excel文件
    pd.read_excel('filename')
    #处理中文字符的tsv文件
    pd.read_csv('filename',sep = '\t',encoding = 'utf-8')

整理数据

  • 查看数据集数据

    1
    2
    3
    4
    5
    6
    #查看前五行
    df.head()
    #查看尾五行
    df.tail()
    #查看随机一行
    df.sample()
  • 查看数据集信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #查看数据集行数和列数
    df.shape
    #查看数据集信息(列名、数据类型、每列的数据量——可以看出数据缺失情况)
    df.info()
    #查看数据集基本统计信息
    df.describe()
    #查看数据集列名
    df.columns
    #查看数据集数据缺失情况
    df.isnull().sum()
    #查看缺失列数据
    df[df['col_name'].isnull()]
    #查看数据集数据重复情况
    sum(df.duplicated())
    #查看重复数据
    df[df.duplicated()]
    #查看某列分类统计情况
    df['col_name'].value_counts()
    #查看某列唯一值
    df['col_name'].unique()
    #查看某列唯一值数量
    df['col_name'].nunique()
    #以某列对数据集进行排序
    df.sort_values(by = 'col_name',ascending = False)#False为由大至小
  • 数据筛选

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #提取某行
    df.iloc[row_index]
    df.loc['row_name']
    #提取某几行
    df.iloc[row_index_1:row_index_2]
    #提取某列
    df['col_name']
    #提取某几列
    df[['col_name_1','col_name_2']]
    #提取某行某列的值
    df.iloc[row_index,col_index]
    df.loc['row_name','col_name']
    #筛选某列中满足某条件的数据
    df[df['col_name'] == value]#等于某值的数据,同理满足所有比较运算符
    df.query('col_name == value')#代码效果同上
    df[(df['col_name_1'] >= value_1) & (df['col_name_2'] != value_2)]#与&,或|
    df.query('(col_name_1 >= value_lower) & (col_name_2 <= value_upper)')
    df.groupby('col_name')#按col_name列进行分组
  • 清理数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #删除某行
    df.drop(['row_name'],inplace = True)#若添加inplace = True,修改后的数据会覆盖原始数据
    #删除某列
    df.drop(['col_name'],axis = 1)
    #缺失值的处理
    df.fillna(mean_value)#替换缺失值
    df.dropna()#删除包含缺失值的行
    df.dropna(axis = 1, how = 'all')#只删除所有数据缺失的列
    #删除重复值
    drop_duplicates(inplace = True)
    #更改某行/列/位置数据
    用iloc或者loc直接替换修改即可
    #更改数据类型
    df['datetime_col'] = pd.to_datetime(df['datetime_col'])
    df['col_name'].astype(str)#还可以是int/float...
    #更改列名
    df.rename(columns={'A':'a', 'C':'c'}, inplace = True)

    如何处理缺失值呢?这就要根据确实数据的情况而定了,是直接删除?还是暴力平均值替换?还是分类之后再用平均值替换?还是用一些什么其他的方法,全靠你去把握了。可以看一看Python Data Science这本书中的Handling Missing Data章节,你肯定会有所收获的。

  • 合并数据(merge、concat、join、append)

    因为这里比较繁琐,而且讲起来会用到很多图表,所以进行单独讲解,链接→每周导学-第六周导学-Pandas数据融合

可视化

我会将Pandas的可视化部分与matplotlib.pyplot的可视化和seaborn/ggplot等可视化包放在下周的导学中。

导出数据

1
2
3
4
#导出csv文件
df.to_csv('filename.csv',index = False)
#导出中文字符的excel文件
df.to_excel('filename.xlsx',index = False,encoding = 'utf-8-sig')

Tip:utf-8与utf-8-sig 两种编码格式区别

项目相关

P3的项目需要你完完整整得过一遍数据分析的过程,所以呢,单独的某一个数据集肯定满足不了大家,贴心的Udacity给大家准备了几个数据集备选,戳数据集预览,挑一个自己感兴趣的先~