美文网首页《利用Python进行数据分析》 第二版
《利用Python进行数据分析》14.1 从Bitly获取1.U

《利用Python进行数据分析》14.1 从Bitly获取1.U

作者: CCC考研 | 来源:发表于2018-12-28 10:01 被阅读57次

    第十四章 数据分析示例

    接下来本章为大家讲解一些数据分析示例

    :本章示例数据集可在附带的GitHub仓库(http://github.com/wesm/pydata-book)中找到


    14.1 从Bitly获取1.USA.gov数据

           2011年,短网址服务商Bitly(https://bitly.com/)与美国政府网站USA.gov(https://www. usa.gov/)合作,提供从以.gov或.mil结尾的短网址的用户收集的匿名数据。2011年,可以下载的文本文件提供实时供稿和小时快照。在撰写本书时(2017年)此服务已关闭,但我们保留了一个数据文件作为本书的示例。

           在每小时快照的情况下,每个文件中的每一行都包含一种通用形式的web数据,称为JSON,它是JavaScript Object Notation的简写。

           Python拥有用于将JSON字符串转换为Python字典对象的内置和第三方库。

    示例:只读取文件的第一行,然后在我们下载的示例文件的每一行中使用json模块及其loads函数(见图14-1)

    图14-1:读取

    :对象records现在是一个Python字典的列表。


    14.1.1 纯Python时区计数

           假设我们想要找到数据集中最常出现的时区(tz字段)。有很多方法可以实现这一点。

    1.首先,我们使用列表再次提取时区列表(见图14-2)

    图14-2:提取时区列表

    2.按时区生成计数(仅使用Python标准库)

    计数方法之一:在遍历时区时使用字典来存储计数(见图14-3)

    图14-3:遍历时区时使用字典来存储计数

    3.做一些字典技巧以获取前十的时区和它们的计数(见图14-4、14-5)

    图14-4:获取前十的时区 图14-5:简化

    14.1.2 使用pandas进行时区计数

    1.根据原始的记录集合生成DataFrame非常简单,只需要把记录的列表传递给pandas. DataFrame(见图14-6)

    图14-6:生成DataFrame

    2.frame的输出显示的是概要视图,用于展示大型DataFrame对象。对于Series,我们可以使用value_counts方法。(见图14-7)

    图14-7:value_counts方法

    3.清理数据

           使用matplotlib对这些数据可视化时,可以进行一些清理工作,以便为记录中的未知和缺失的时区数据填入替代值。我们用fillna方法替换缺失值,并为空字符串使用布尔数组索引。(见图14-8)

    图14-8:清理数据

    4.可视化

            使用seaborn包(http://seaborn.pydata.org/)来绘制一个水平柱状图(见图14-9)

    图14-9:1.usa.gov样本数据的时区TOP计数

    5.a列包含了执行网址缩短的浏览器、设备或应用的信息(见图14-10)

    图14-10:a列信息

    6.分离字符串中的第一个标记(粗略地对应于浏览器功能),并对用户行为进行另一个概括,解析这些“代理”字符串中的所有感兴趣的信息(见图14-11)

    图14-11:解析

    :(1)Series.str.split(pat=None,n=-1,expand=False)

    Split strings around given separator/delimiter.

    (2)DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

    Remove missing values.

    7.将时区计数多的时区记录分解为Windows和非Windows用户。

           作为简化,如果字符串’Windows’在代理字符串中,我们就认为用户在Windows上。(见图14-12)

    图14-12:记录分解

    8.使用size分组计数

          与value_counts函数类似,分组计数可以使用size计算。然后可以使用unstack对计算结果进行重塑 (见图14-13)

    图14-13:使用size分组计数

    9.选出总体计数最高的时区

           要实现这个功能,首先在agg_counts中根据行的计数构造了一个间接索引数组

           然后使用take方法按顺序选出行,之后再对最后10行进行切片(最大的10个值)。(见图14-14)

    图14-14:选出总体计数最高的时区

    补充: pandas有一个便捷的方法叫作nlargest,可以做同样的事情(见图14-15)

    图14-15:nlargest方法

          绘制条形图(可视化)绘制一个堆积条形图(见图14-16)

    图14-16:按是否是Windows用户划分的最高计数时区

          该图不容易看到较小组中的Windows用户的相对百分比,因此让我们将组百分比归一化为1,然后重新绘图(见图14-17)

    图14-17:按是否是Windows用户划分的最高计数时区百分比

    :更有效的归一化算法(见图14-18)

    图14-18:更有效的归一化方法

    :(1)numpy.argsort(a,axis=-1,kind='quicksort',order=None)

    Returns the indices that would sort an array.

    (2)Series.argsort(axis=0,kind='quicksort',order=None)

     Overrides ndarray.argsort. Argsorts the value, omitting NA/null values, and places the result in the same locations as the non-NA values

    (3)DataFrame.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill='')

    For DataFrame with multi-level index, return new DataFrame with labeling information in the columns under the index names, defaulting to ‘level_0’, ‘level_1’, etc. if any are None. For a standard index, the index name will be used (if set), otherwise a default ‘index’ or ‘level_0’ (if ‘index’ is already taken) will be used.

    相关文章

      网友评论

        本文标题:《利用Python进行数据分析》14.1 从Bitly获取1.U

        本文链接:https://www.haomeiwen.com/subject/cudykqtx.html