利用Python进行数据分析(上)

非典型女程序员2018-12-05 15:44:14

背景介绍

身边很多的朋友都会经常问我,什么是数据分析?如何学习数据分析?对于这个领域,不管是在校大学生或者很多在职者,都想有一些浅层次或者更深入的了解。在很多大型互联网公司对数据分析师的招聘岗位上,都会提到 Python语言的使用。笔者根据自己在大数据分析领域下的工作经验与积累,与大家分享利用 Python进行数据控制、处理、整理、分析等方面的具体细节和基本要点,在后期会包括基于当前开源的机器学习库,分享如何利用Python玩转大数据分析、建模的案例等。敬请期待吧 ^_^

本系列文章面向具有一定编程基础的读者,包括但不限于工程师、学生以及相关从业人员,希望利用Python进行数据分析,将自己的想法付诸于数据实践及应用。

机器学习当中特征工程扮演着非常重要的角色:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。本文主要介绍如何利用 Python对原始数据进行预处理,为观测特征数值的分布可视化展示做基础,也为后续特征细化加工、特征归一化和分箱等处理及模型建设做指导。

环境搭建

   集成开发环境(IDE)选择推荐:

  • PyCharm

  • VSCode

   Python环境安装(在此不赘述)

  • virtualenv

   重要的Python库安装

  • Pandas

  • NumPy

  • Matplotlib

  • IPython

  • SciPy

数据分析的尖兵利器

  • 文件读写:本地文件读写是数据分析中最常见的操作之一,必须熟练掌握,常见文件读写操作工具类可以使用NumPy或者Pandas,以下是使用NumPy进行最常见的文本文件的读取与写入操作:

  1. import numpy as np

  2. def load_txt_file(filename):

  3.      file = np.loadtxt(filename, int, '#', ',')

  4.      print(file)

  5. def save_txt_file(filename):

  6.      arr1 = np.arange(10)

  7.      arr2, arr3 = arr1 * 2, arr1 * 3

  8.      np.savetxt(filename, (arr1, arr2, arr3), '%s', ',')

  9. if __name__ == '__main__':

  10.      # save file

  11.      save_txt_file('test.txt')

  12.      load_txt_file('test.txt')

运行结果:

  1.  /Users/echo/PycharmProjects/pydemo1/venv/bin/python /Users/echo/PycharmProjects/pydemo1/fileIO.py

  2.  [[ 0  1  2  3  4  5  6  7  8  9]

  3.   [ 0  2  4  6  8 10 12 14 16 18]

  4.   [ 0  3  6  9 12 15 18 21 24 27]]

  5.  Process finished with exit code 0


  • 特征数值处理:缺失数据在大部分数据分析应用中都非常常见,Pandas设计目标之一就是让缺失数据的处理尽量轻松,在很多的数学模型使用之前,对缺失值的处理和填充也是有非常多的讲究,以下将介绍常见缺失值处理的方法:

  • 过滤缺失数据:在Numpy中使用 dropna

  1.    import numpy

  2.    from pandas import Series, DataFrame

  3.    if __name__ == '__main__':

  4.        # 数组过滤

  5.        data = Series([1, numpy.nan, 3, 4])

  6.        print(data.dropna())

  7.        # 对于DataFrame对象,如果使用dropna默认会丢弃任何包含缺失值的行,然而实际情况是只希望丢弃那些字段全空的行或列。

  8.        data1 = DataFrame([

  9.            [0, 1, numpy.nan],

  10.            [numpy.nan, numpy.nan, numpy.nan],

  11.            [2, 3, numpy.nan]])

  12.        print(data1)

  13.        # 过滤行

  14.        print(data1.dropna(how='all'))

  15.        # 过滤列

  16.        print(data1.dropna(axis=1, how='all'))

  17.        #过滤列,再过滤行

  18.        print(data1.dropna(axis=1,how='all').dropna(how='all'))

  1.    /Users/echo/PycharmProjects/pydemo1/venv/bin/python /Users/echo/PycharmProjects/pydemo1/FillNan.py

  2.    0    1.0

  3.    2    3.0

  4.    3    4.0

  5.    dtype: float64

  6.         0    1   2

  7.    0  0.0  1.0 NaN

  8.    1  NaN  NaN NaN

  9.    2  2.0  3.0 NaN

  10.         0    1   2

  11.    0  0.0  1.0 NaN

  12.    2  2.0  3.0 NaN

  13.         0    1

  14.    0  0.0  1.0

  15.    1  NaN  NaN

  16.    2  2.0  3.0

  17.         0    1

  18.    0  0.0  1.0

  19.    2  2.0  3.0

  20.    Process finished with exit code 0


  • 填充:特征工程中对数据缺失值很多时候会结合业务场景来对缺失值进行填充。对于大多数情况而言,fillna方法是主要的函数,来填充需要填充的的数值代替缺失值。

  1.    import numpy

  2.    import pandas

  3.    from pandas import DataFrame

  4.    if __name__ == '__main__':

  5.        df = DataFrame([

  6.            [0, 1, numpy.nan],

  7.            [numpy.nan, numpy.nan, numpy.nan],

  8.            [2, 3, numpy.nan]])

  9.        # 对所有空值统一填充

  10.        print(df.fillna(0))

  11.        # 对不同对列进行填充,第1列空值填充0.5,第4列空值填充-1

  12.        print(df.fillna({0: 0.5, 3: -1}))

文章下部会介绍数据可视化分析的常见方法,如何利用Python展现数据分布,为特征工程中的特征缩放、特征分箱,也涉及商业数据分析中展示数据的方法和注意事项。


Copyright © 古田计算器虚拟社区@2017