您的位置:太阳娱乐 > 每日更新 > 有的人认为两者没有区别,DataFrame既有行索引也

有的人认为两者没有区别,DataFrame既有行索引也

发布时间:2019-11-13 17:18编辑:每日更新浏览(173)

    原标题:数据科学入门的5个技巧

    Pandas数据处理

    很多人问我数据科学和数据分析的最大区别是什么。有的人认为两者没有区别,有的人则认为两者千差万别。我认为,尽管两者确实存在很多不同之处,但最大的不同在于数据科学严格遵循结构化、一步一步的操作过程,保证了分析结果的可靠性。

    1.导入库

    1 import numpy as np
    2 import pandas as pd
    3 import matplotlib.pyplot as plt
    

    和其他科学研究一样,这些过程必须被严格执行,否则分析结果将不可靠。再直白一点,对于外行的数据科学家,严格遵循这些过程将能够快速获得准确结果。反之,如果没有清晰的路线图,则分析结果很难得到保证。

    2.导入json文件

    pandas的read_json方法将其转化为DataFrame格式

    DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同值的类型(数值,字符串,布尔值等);DataFrame既有行索引也有列索引,也可以看做是Series组成的字典(共用一个索引),和其他类似的数据结构比, DataFrame中面向行和面向列的操作基本上是平衡的;

    DataFrame中的数据其实是以一个或多个二维块存放的(而不是列表、字典等一维数据结构), 虽然是以二维结构保存数据,但是仍然合一轻松地将其表示为更高维度的数据(层次化索引的表格型结构,这是pandas中许多高级数据处理功能的关键要素)

    df = pd.read_json('/Users/zhaoluyang/Desktop/Python_全国JSON.json')
    

    3.查看当前表的信息

    1 df.index#查看行索引信息
    2 df.columns#查看列信息
    3 df.head()#默认查看前5行元素,括号内可任意指定数字。
    4 df.tail()#默认指定最后5行元素,同样可指定数字。
    5 df.info()#查看表整体信息。
    6 df[['ZL_Job_id','工作地点']].head()#查看df表中'ZL_Job_id'和'工作地点'两列前5个元素。
    

    图片 1

     

     可以看见,总共有18326个行索引(18326行),15列columns分别为ZL_Job_id、公司名称、公司链接...

    图片 2

    4.简单的数据规整

    经过第3步查看发现导入的表中ZL_Job_id一列是乱序版的,并没有按照1、2、3...的次序排列。 看了下json原文件发现也是乱序的,但是为了看起来美观和统一,我需要把此列按正常序号排列, 然后将此列作为列索引。(因为这一列在mysql里就是我手动添加做索引来用的) 此时大致需要几个步骤:

    1.将df中系统自动添加的索引替换成列ZL_Job_id。

    2.将原来的‘ZL_Job_id’列删除。

    3.给新的索引列排序。(也可以对数据列排序df.sort_values([‘ZL_Job_id’]))

     

    1 df.index=df['ZL_Job_id']
    2 del(df['ZL_Job_id'])
    3 df1 = df.sort_index()#直接df.sort_index()可返回索引的结果,但之后df还是原来的结构
    4 df1[['职位名称','工作地点']].head()
    

    图片 3

    虽然这些步骤更多是写给业余分析师的指引,但它们同样是数据科学家,甚至更严格的商业分析和学术分析的基础。每一位数据科学家都理解这些步骤的重要意义,会在实践过程中严格遵守它们。

    5.常用的函数示例

    #qw表示在df表中column=工作经验的列中,【工作经验==不限】的次数

    qw = df['工作经验'][df['工作经验']=='不限'].value_counts()
    

    #直接用value_counts()统计工作经验字段各个值出现的次数,并画图展示。PS:查询结果是Series形式(<class 'pandas.core.series.Series'>)

    df['工作经验'].value_counts().plot()
    

    一些有用的函数

    unique()、describe()、groupby()、zip()

    df['Names'].unique()
    

     

    结果:array(['Mary', 'Jessica', 'Bob', 'John', 'Mel'], dtype=object)

    df['Names'].describe()
    

     

    结果:
    count 1000
    unique 5
    top Bob
    freq 206
    Name: Names, dtype: object

    BabyDataSet = list(zip(names,births))
    BabyDataSet
    

     

    结果:[('Bob', 968), ('Jessica', 155), ('Mary', 77), ('John', 578), ('Mel', 973)]

     

    5个步骤概览

    数据科学的5个必备步骤分别是:

    (1)提出有意思的问题;

    (2)获取数据;

    (3)探索数据;

    (4)数据建模;

    (5)可视化和分享结果。

    首先,我们从宏观上了解以上5个步骤。

    1.1.1 提出有意思的问题

    这是我最喜欢的一步。作为一个创业者,我经常问自己(和他人)很多有意思的问题。我像对待头脑风暴会议一样对待这一步。现在开始写下问题,不要关心回答这些问题所需的数据是否存在。这样做的原因有两个。

    第一,你不会希望在没有找到数据之前,就被自己的偏见影响。第二,获取数据可能涉及公开渠道和私有渠道,因此不会轻松和显而易见。

    你可能想到一个问题,然后自言自语说:“我打赌没有这样的数据可以帮到我们!”然后就将它从问题列表中删除。千万不要这样做,把它留在你的问题列表中!

    1.1.2 获取数据

    一旦你确定了需要关注的问题,接下来就需要全力收集回答上述问题所需要的数据。正如之前所说,数据可能来自多个数据源,所以这一步非常具有挑战性。

    1.1.3 探索数据

    一旦得到数据,我们将使用第2章学习的知识,将数据归类到不同的数据类型。这是数据科学5个步骤中最关键的一步。当这一步骤完成时,分析师通常已经花费了数小时学习相关的领域知识,利用代码或其他工具处理和探索数据,对数据蕴含的价值有了更好的认识。

    1.1.4 数据建模

    这一步涉及统计学和机器学习模型的应用。我们不仅仅选择模型,还通过在模型中植入数学指标,对模型效果进行评价。

    1.1.5 可视化和分享结果

    毫无疑问,可视化和分享结果是最重要的一步。分析结果也许看起来非常明显和简单,但将其总结为他人易于理解的形式比看起来困难得多。我们将通过一些案例,演示糟糕的分享和改善后的效果。

    本文将重点关注第(3)、(4)、(5)步。

    为什么本书跳过了第(1)、(2)步?

    虽然前两步对数据科学整个过程是非常必要的,但它们通常先于统计模型和程序处理。本书的后面章节将介绍不同的数据收集方法,在此之前,我们更加关注数据科学过程中“科学”的部分。所以,我们先从探索数据开始。

    探索数据

    数据探索的过程并不简单。它涉及识别数据类型、转换数据类型、使用代码系统性提高数据质量为模型做准备的能力。为了更好地演示和讲解数据探索的艺术,我将使用Python的Pandas包,对几个不同的数据集进行探索。在此过程中,我们将看到多种数据处理技巧。

    当我们接触新数据集时,有5个基本问题需要回答。请牢记,这些问题并不是数据科学的起点和终点,它们是我们面对新数据集时需要遵循的基本原则。

    1.2.1 数据探索的基本问题

    每当接触新数据集时,不论你是否熟悉它,在初次进行分析前回答以下问题都非常有必要。

    ● 数据是有组织格式的,还是无组织格式的?

    我们需要确认数据是否是行列结构。大部分情况下,我们处理的数据都是结构化数据。本书中,超过90%的例子都是结构化数据。尽管如此,在我们进行更深入的数据分析之前,还是要弄清楚这个最基本的问题。

    根据经验,如果数据是无组织格式的,我们需要将其转换为有组织的行列结构。在本书前面的例子中,我们通过对文本中词语计数的方式将其转换为行列结构。

    ● 每一行代表什么?

    一旦我们弄清楚了数据的组织形式,得到了行列结构的数据集,接下来就需要弄清楚每一行代表的意思。这一步通常不需要花费多少时间,却大有裨益。

    ● 每一列代表什么?

    我们需要识别每一列的数据层次、定性/定量属性等。分类结果可能随着分析的不断深入而改变,但越早开始这一步越好。

    ● 是否有缺失值?

    数据并不完美。很多时候,人工或机械的错误将导致数据缺失。当这种错误发生时,作为数据科学家,我们需要决定如何处理这些错误。

    ● 是否需要对某些列进行数据转换?

    我们可能需要对某些列进行数据转换,当然,这取决于该列的数据层次和定性/定量属性。比如,为了使用统计模型和机器学习模型,数据集中的每一列都需要是数值型的。我们可以使用Python对数据集进行转换。

    自始至终,我们的核心问题是:我们能从前期的推理统计中得到哪些信息?我们希望对数据的理解比初次接触时更深。

    好了,我们已经介绍了很多内容,下面看一些具体的例子。

    1.2.2 数据集1:Yelp点评数据

    我们使用的第1个数据集来自点评网站Yelp的公开数据,数据集中所有的身份识别信息已经被删除。首先读取数据,如下所示。

    import pandas as pd

    yelp_raw_data = pd.read_csv("yelp.csv")

    yelp_raw_data.head()

    上述代码的作用是:

    ● 导入Pandas包,并缩写为pd。

    ● 读取文件yelp.csv,并命名为yelp_raw_data。

    ● 查看数据的表头(仅前几行),如图3.1所示。​

    图片 4

    ​图3.1 数据的表头

    问题1:数据是有组织格式的,还是无组织格式的?

    ● 数据源是非常好的行列结构,我们可以认为它是有组织格式的。

    问题2:每一行代表什么?

    ● 很明显,每一行代表一条用户的评价。我们还会查看每一行和每一列的数据类型。我们使用DataFrame的shape方法查看数据集的大小,如下所示。

    yelp_raw_data.shape

    # (10000, 10)

    ● 结果显示,数据集有10 000行和10列。换言之,数据集有10 000个观测值和10个观测特征。

    问题3:每一列代表什么?

    请注意,数据集有10列。

    ● business_id:本列看起来是每条评价对应的交易的唯一识别码。本列是定类尺度,因为识别码没有天然的顺序。

    ● date:本列是每条评价的提交日期。请注意,它只精确到了年、月和日。虽然时间通常被认为是连续数据,但本列应该被视为离散数据。本列属于定序尺度,因为日期有天然的顺序。

    ● review_id: 本列看起来是每条评价的唯一识别码。本列同样属于定类尺度,因为识别码没有天然的顺序。

    ● stars:本列看起来(别担心,我们随后会对它进行深入的分析)是评价者给每一个餐馆的最终评分。本列是有次序的定性数据,因此属于定序尺度。

    ● text:本列看起来是用户撰写的评价。对于大部分文本数据,我们将其归为定类尺度。

    ● type:本列前5行均为“review”,我们猜测它是标记每行是否为“review”的列,也就是说很可能存在不是“review”的行。我们随后将进行更深入的分析。本列属于定类尺度。

    ● user_id:本列是每个提交评价的用户的唯一识别码。和其他唯一识别码一样,本列也属于定类尺度。

    问题4:是否有缺失值?

    ● 使用isnull方法判断是否有缺失值。比如,对于名为awesome_dataframe的DataFrame数据集,使用Python代码awesome_dataframe.isnull().sum()可显示每一列的缺失值总数。

    问题5:是否需要对某些列进行数据转换?

    ● 我们想知道是否需要改变定量数据的数值范围,或者是否需要为定性数据创建哑变量?由于本数据集只有定性数据,所以我们将焦点放在定序和定类范围。

    在进行数据探索之前,我们先对Python数据分析包Pandas的术语做一个简单了解。

    DataFrame

    当我们读取数据集时,Pandas将创建一个名为DataFrame类型的对象。你可以将它想象成Python版本的电子表格(但是更好用)。

    在本例中,变量yelp_raw_data就是一个DataFrame。

    我们使用以下代码验证以上说法。

    type(yelp_raw_data)

    # pandas.core.frame.Dataframe

    DataFrame本质上是一种二维结构,它和电子表格一样以行列结构存储数据。但是相对于电子表格,DataFrame最重要的优点是它可以处理的数据量远超大多数电子表格。

    如果你熟悉R语言,可能认识DataFrame这个词,因为Python中的DataFrame正是从R语言借过来的!

    由于我们处理的大部分数据都是有组织数据,所以DataFrame是Pandas中使用频率仅次于Series的对象。

    Series

    Series是简化版的DataFrame,它只有一个维度。Series本质上是由数据点组成的列表。DataFrame的每一列都可以被看作一个Series对象。下面用代码进行验证。我们首先从DataFrame中抽取单独一列(通常用中括号),代码如下:

    yelp_raw_data['business_id']# grab a single column of the Dataframe

    我们列出其中几行。

    本文由太阳娱乐发布于每日更新,转载请注明出处:有的人认为两者没有区别,DataFrame既有行索引也

    关键词: