>科技>>正文

使用Python和Jupyter Notebook进行数据分析

原标题:使用Python和Jupyter Notebook进行数据分析

“君之所以明者,兼听也;其所以暗者,偏信也。”——汉·王符《潜夫论·明暗》

数据分析,不管对于个人,还是公司,都是一种核心能力。和一些数据朋友聊天时,会谈及一些有效的数据分析工具。一位友人说,“我用Python,Jupyter notebook和Python相应的库(numpy, matplotlib,seaborn和pandas等)做数据分析工作,非常有效,也很便利”。怀揣着学习和进取的心态,我立刻在google上面检索关键词:python jupyter notebook data analysis,阅读了一些与这个主题相关的系列文章,并且积极地进行实践之,让自己一来熟悉jupyter notebook这个工具,二来借助这个工具实现更有效地做数据分析。同时,发现一篇用jupyter notebook做数据分析的浅显易懂的教程,特翻译之,以备学习之用。

译者:王路情

作者:Wei Tang

http://www.storybench.org/getting-started-with-python-and-jupyter-notebooks-for-data-analysis/

让我们讨论一下用Python做数据分析。在本教程中,您将在使用Python和pandas探索数据集时学习一些简单的数据分析过程。

在我们开始之前,请确保您已经为这个实践设置了环境。请安装Python 3.6、pandas和matplotlib。此外,我们将在本教程中使用一个Jupyter Notebook。如果您还没有听说过这个组合工具,那么这一段 Linear Digressions可以很好地解释它们。

我将使用Anaconda,它是一个运行Python的平台,包含一套数据分析工具。本教程将分为三个部分:问题、处理和探索。

在这里下载本教程的Jupyter Notebook。

决定您的数据集和问题

数据分析总是从问题开始。反过来,这些将决定您收集什么类型的数据。在本教程中,我们将探索NewsWhip在2016年11月至2017年5月期间收集的由世界500强新闻出版商发布在Facebook上的10,000篇新闻文章的数据集。我们可能会问,哪些新闻机构在这组新闻中发表的文章最多,标题中最重要的关键词是什么。

将数据集导入一个Jupyter Notebook

让我们下载数据集,然后在一个Jupyter Notebook中导入和打开它。当你把Jupyter notebook 输入终端时,一个Jupyter Notebook会立即启动。

接下来,你将会看到这样的一个页面:

接下来,单击upload按钮上传数据集。然后点击“新建”下拉菜单,选择Python [conda root]。

请跟随我导入本教程所需的所有包。

然后,让我们导入数据集

1df= pd.read_csv( "file_name.csv")

通过输入df.head(10),您可以查看该数据集中的前10行。

处理(Wrangle)

一旦我们导入数据集之后,我们需要处理数据以帮助回答前面提到的问题。没有一个数据集是完美的,这就是为什么我们需要检查这个数据集中的问题并修复它们。

让我们输入df.shape来检查这个数据集中有多少列和行。

这意味着我们有10,000行和12列。接下来,输入df.dtypes检查每个列的数据类型。

注意到Publisher, Headline, Link, 和Date都是作为对象列出的。这是奇怪的。进一步的研究表明,它们实际上是字符串,我通过输入:

1type(df[ 'column name'][ 0])

将日期列从对象转换为日期时间

让我们将Date的数据类型从object更改为datetime。

输入:

1df[ ' Date '] = pd.to_datetime(df[ ' Date '])

完成后,请输入df.types,以确保它工作。

很好,Date的数据类型现在是datetime64[ns]。接下来,让我们检查这个数据集中是否有缺失的值。我们会输入:

1df.info()

注意在Keywords,在10,000行中,只有7,528行包含Keywords列中的对象。这意味着大约有2500个缺失值。这意味着这些文章没有关键词。请记住这一点,因为在讨论数据分析时,我们需要包括这一点。

接下来,我们输入df.duplicate()检查是否有任何重复的数据

这看起来不错。我们不需要删除任何重复的数据。

探索和可视化数据

现在您已经清理了数据,您可以使用一些数学操作(如sum和count)来显示数据中的模式。通过使用value_counts函数,我们可以统计列中唯一值的个数。然后,我们可以调用结果上的plot函数来创建柱状图。

让我们来算一下哪个出版商发表的文章最多。输入:

1df['column name’].value_counts()

我们发现BuzzFeed在数据集中发表的文章最多。为了使其可视化,我们可以使用matplotlib制作一个柱状图。在Jupyter notebook 中创建可视化时,有一件事非常方便,那就是matplot inline,它允许您在notebook中查看绘图。

我们可以使用df[' Publisher '].value_counts()绘制一个简单的柱状图。使用figsize改变图的大小。

哇!这个图有点乱。让我们按降序来筛选前10位发布者。

我们可以通过设置ascending = false来实现这一点,然后通过将top10[:10]分配给变量top10来获得前Top10:

1top10 = df[ "Publisher"].value_counts()

2top10.sort_values(ascending=False)

3top10 = top10[:10]

4top10.plot(kind= "bar")

然后,绘制变量Top10的柱状图:

1top10.plot(kind= "bar")

很好,我们得到了第一个柱状图!

绘制Top20的关键词

接下来,让我们尝试创建一个柱状图来显示Keywords列中的前20个关键字。

这个问题有点复杂,因为关键字不是单个单词,而是由逗号分隔的字符串。如果不这样做,这就是我们所可视化的:

为了获得准确的关键字计数,我们需要将列拆分为单个单词并将它们放入数组中—在panda中称为series。

让我们把这一列拆成单个单词,并把它们放到一个序列中。然后,循环遍历本序列中的每个单词,我们就可以的关键字的准确计数。

1keyword_count = pd.Series(np.concatenate([str(x).lower().strip().replace(' ', '').split(',')

2for x in df.Keywords])).value_counts()

3keyword_count = keyword_count[keyword_count != 2472]

4keyword_count = keyword_count[keyword_count != 910]

5result = keyword_count.nlargest(20)

6result.plot(kind='bar',figsize=(12,8))

7print (keyword_count)

让我解释一下我写的代码。第一行是计算关键字是NULL的总数,然后将它们从序列中删除。第二行是计算关键字为空的总数,然后将它们从序列中删除。

我们可以为这个结果做一个饼状图。

让我们展开这个饼状图以便更好地进行比较。它看起来很酷!

1labels= keyword_count = 'donaldtrump ', 'politics', 'news', 'uspolitics', 'india', 'culture', 'environment', 'barackobama', 'russia', 'u.s.news'

2sizes =[ 1723, 549, 388, 288, 236, 213, 205, 199, 170, 169]

3explode =( 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 2, 0. 3, 0. 3)

4fig1, ax1 = plt.subplots()

5ax1.pie(sizes, explode=explode, labels=labels, autopct= '%1.1f%%',

6shadow=True, startangle= 90)

7ax1.axis( 'equal') # Equal aspect ratio ensures that pie is drawn as a circle.

8

9plt.show()

为了绘制这个饼状图,我们需要添加一些特征。标签是我们获得的前10个关键词;size是每个关键字的总数;Explode以不同的程度分割每个标签——数字越大,差距就越大;startangle =90是我们自定义的起始角,这意味着所有东西都是逆时针旋转90度。

希望您喜欢本教程。评论?建议吗?请留言。

上善若水。水善利万物而不争,处众人之所恶, 故几于道。居,善地;心,善渊;与,善仁;言,善信;正,善治;事,善能;动,善时。夫唯不争,故无尤。——老子《道德经》第八章

我是数据人王路情,专注于从数据中学习

我们创建数据人网http://shujuren.org,它是数据人的家园,一个数据人学习,交流和分享的场所。欢迎您,大家一起来创造和分享数据知识,共建和共享数据智库,为智能化社会助力。返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
投诉
免费获取
今日搜狐热点
今日推荐