赞
踩
让我们讨论一下用Python做数据分析。在本教程中,您将在使用Python和pandas探索数据集时学习一些简单的数据分析过程。
在我们开始之前,请确保您已经为这个实践设置了环境。请安装Python 3.6、pandas和matplotlib。此外,我们将在本教程中使用一个Jupyter Notebook。如果您还没有听说过这个组合工具,那么这一段 Linear Digressions可以很好地解释它们。
我将使用Anaconda,它是一个运行Python的平台,包含一套数据分析工具。本教程将分为三个部分:问题、处理和探索。
在这里下载本教程的Jupyter Notebook。
在这里下载本教程的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,它是数据人的家园,一个数据人学习,交流和分享的场所。欢迎您,大家一起来创造和分享数据知识,共建和共享数据智库,为智能化社会助力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。