前言

前面我们已经成功的把数据从网站上抓取下来并存入了csv文件当中,那么本章就演练将数据从csv中读取出来,并作相应的分析


数据读取

可以使用pandas的函数read_csv来读取数据,默认情况下csv文件的数据都是以逗号分隔的。

比如我们将前面的CSV文件用记事本打开,看到的结果如下

我们直接在命令窗口对文件进行读取,并显示前三行

In [190]: df = pd.read_csv('data\out.csv')In [191]: df[:3]
Out[191]: Unnamed: 0   name       box  boxRatio  playRatio  attendance
0  2017-08-01    战狼2  29249.43      86.3       56.4        42.4
1  2017-08-01   建军大业   3248.29       9.6       22.3        19.3
2  2017-08-01  神偷奶爸3    464.67       1.4        4.7        13.7

read_csv函数中有很多参数,例如通过设置sep参数可以修改默认的分隔符

df = pd.read_csv('data\out.csv', sep=';')df[:3]
Out[198]: ,name,box,boxRatio,playRatio,attendance
0  2017-08-01,战狼2,29249.43,86.3,56.4,42.4
1   2017-08-01,建军大业,3248.29,9.6,22.3,19.3
2    2017-08-01,神偷奶爸3,464.67,1.4,4.7,13.7

我们发现读取出来的数据就变成每行只有一条数据了,因为数据中没有;分隔符

通过name参数,修改DataFrame的索引,以下示例将name列改为索引

df = pd.read_csv('data\out.csv', index_col='name')df[:3]
Out[202]: Unnamed: 0       box  boxRatio  playRatio  attendance
name
战狼2    2017-08-01  29249.43      86.3       56.4        42.4
建军大业   2017-08-01   3248.29       9.6       22.3        19.3
神偷奶爸3  2017-08-01    464.67       1.4        4.7        13.7

通过encoding参数,修改编码格式。默认值为utf8

df = pd.read_csv('data\out.csv', encoding='latin1')df[:3]
Out[213]: Unnamed: 0           name       box  boxRatio  playRatio  attendance
0  2017-08-01        战狼2  29249.43      86.3       56.4        42.4
1  2017-08-01   建军大业   3248.29       9.6       22.3        19.3
2  2017-08-01  神偷奶爸3    464.67       1.4        4.7        13.7

先把数据,按照日期为索引的方式读取出来,日期我们并没有命名,从前面的读取结果可以看到,他的名字为0


In [222]: df = pd.read_csv('data\out.csv', index_col=0, parse_dates=[0], dayfirst=True)In [223]: df[:3]
Out[223]: name       box  boxRatio  playRatio  attendance
2017-08-01    战狼2  29249.43      86.3       56.4        42.4
2017-08-01   建军大业   3248.29       9.6       22.3        19.3
2017-08-01  神偷奶爸3    464.67       1.4        4.7        13.7

列选择

读取出来的数据类型是DataFrame,可以像从字典中获取元素一样,来获取某一列的数据

In [224]: df['box'][:3]
Out[224]:
2017-08-01    29249.43
2017-08-01     3248.29
2017-08-01      464.67
Name: box, dtype: float64

对列数据进行绘图

只需要在取出来的列后面加上.plot()方法就行,So easy。

In [225]: df['box'].plot()
Out[225]: <matplotlib.axes._subplots.AxesSubplot at 0x10a2b5b0>

从图表中我们可以看出2017-08-05到2017-08-06的票房最高,我猜测这几天肯定是周末。翻看日历一看,果然是周六和周日。

我们也可以很容易的画出所有列。我们让图变大一点。

In [226]: df.plot(figsize=(15, 10))
Out[226]: <matplotlib.axes._subplots.AxesSubplot at 0x10f6f110>

由于票房数据的数值太大,所以其他数据都看不见了。


数据分析

我们现在的数据集不够多,我们从新执行命令,来获取50天的数据。(一次性获取太多数据或太频繁的获取,猫眼会让你输入验证码)

由于之间的时间方法是选定一个时间,再设置往后多少天,不太方便。我们将其改为往前多少天,即获取从今天开始,前50天的数据。

很简单,只需要将timedelta的days参数改为-1就行

def buildDates(start, days):day = timedelta(days=-1)for i in range(days):yield start + day*i

获取50天的数据

if __name__ == "__main__":df = getData(2017, 8, 11, 50)writeToCSV(df, 'data\out.csv')df = pd.read_csv('data\out.csv')

plot绘图中文显示

默认情况下,使用matplotlib进行绘图,如果有中文会显示不出来,这是因为matplotlib包默认只支持ASCII码,不支持unicode码。

解决方法,就是需要将 matplotlib 的安装目录下, matplotlibrc 配置文件修改一下,将font.family 部分注释去掉,并且在 font.serif 和 font.sans-serif 支持字体加上一个中文字体,如 SimHei。matplotlibrc文件的默认位置在C:\Python27\Lib\site-packages\matplotlib\mpl-data :

font.family         : sans-serif
font.style          : normal
font.variant        : normal
font.weight         : medium
font.stretch        : normal
# note that font.size controls default text sizes.  To configure
# special text sizes tick labels, axes, labels, title, etc, see the rc
# settings for axes and ticks. Special text sizes can be defined
# relative to font.size, using the following values: xx-small, x-small,
# small, medium, large, x-large, xx-large, larger, or smaller
#font.size           : 12.0
font.serif          : SimHei, Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

查看战狼2上映后的票房走势

In [23]: df = pd.read_csv('data\out.csv', index_col=0)In [24]: df[df.name == '战狼2']['box'].sort_index().plot()
Out[24]: <matplotlib.axes._subplots.AxesSubplot at 0x111ffb30>

票房占比趋势

In [25]: df[df.name == '战狼2']['boxRatio'].sort_index().plot()
Out[25]: <matplotlib.axes._subplots.AxesSubplot at 0x10ca3770>

查看战狼2现有票房

In [51]: sum(df[df.name == '战狼2']['box'])
Out[51]: 405248.93000000005

已经突破40E了?查了下,果然突破40E了,恭喜恭喜。

查看历史总票房排名

将票房数据按照片名进行加总,并根据票房进行倒叙排列,再取出前10名

df2 = df.groupby(['name']).sum().sort('box', ascending=False)df2[:10]
Out[74]: box  boxRatio  playRatio  attendance
name
战狼2          405248.93    1200.2      789.8      1052.0
变形金刚5:最后的骑士  150792.95     865.1      756.3       497.2
神偷奶爸3        102270.50     644.9      527.8       695.2
悟空传           69202.04     514.9      409.2       491.0
三生三世十里桃花      51162.79     130.3      209.2       167.6
建军大业          36883.16     117.5      245.9       634.9
绣春刀II:修罗战场    26366.93     238.9      237.3       634.9
京城81号II       21849.87     154.6      173.6       491.5
逆时营救          20115.38     173.2      190.5       429.0
父子雄兵          12449.89     109.1      132.8      1023.5

没有美人鱼是因为我们获取的数据是从2017年8月11日至前50天的,数据不够多啊 :(

In [87]: df2[:10].plot(kind='bar')
Out[87]: <matplotlib.axes._subplots.AxesSubplot at 0x207c5e70>

票房前10出席率

In [88]: df2['attendance'][:10].plot(kind='bar')
Out[88]: <matplotlib.axes._subplots.AxesSubplot at 0x20968d70>

票房前10排片率

In [89]: df2['playRatio'][:10].plot(kind='bar')
Out[89]: <matplotlib.axes._subplots.AxesSubplot at 0x2094cd70>

最后

再次祝贺战狼2,票房突破40E

实战:战狼2票房数据分析——(3)数据读取及分析相关推荐

  1. 实战:战狼2票房数据分析——(1)数据获取及解析

    前言 战狼最近大火,为了紧跟热度,根据之前学的做一个关于战狼2票房售卖情况的数据分析. 要做数据分析,首先要有数据,数据从哪儿来呢? 网上有专门做票房时时统计的网站,他们会把最新的票发信息公布在网上, ...

  2. 实战:战狼2票房数据分析——(2)票房数据构造及保存

    前言 前面构造了movieList数据集,但对于我们人为的去读取不是很友好,所以我们将调整其存放格式,并保存为csv文件. 数据构造 从movieList的结构我们可以看出,它是一个有元组构成的列表, ...

  3. 大数据实战-callLog项目(通话记录数据分析)之数据生产

    文章目录 前言 生成基础数据 Maven依赖 姓名-手机号列表 时间维度表 自动随机生成 生成时间戳 生成一定范围内的long数据 代码 调用演示 获得随机的时间戳 代码 调用示例 生成一行记录 打包 ...

  4. NLP以赛代练 Task 2:数据读取与分析

    数据读取与分析 数据读取 数据分析 句子长度分析 类别分布 字符分布统计 数据分析的结论 数据读取 import pandas as pdtrain_df = pd.read_csv('/Users/ ...

  5. python电影数据分析报告_【python数据分析实战】电影票房数据分析(二)数据可视化...

    在上一部分<[python数据分析实战]电影票房数据分析(一)数据采集> 已经获取到了2011年至今的票房数据,并保存在了mysql中. 本文将在实操中讲解如何将mysql中的数据抽取出来 ...

  6. python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)

    我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...

  7. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析

    本期目标 学习使用Pandas读取赛题数据 分析赛题数据的分布规律 数据读取 import pandas as pd train_df=pd.read_csv('./train_set.csv/tra ...

  8. 电影数据读取、分析与展示(Python+Scrapy)

    目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 选题背景及意义 1 1.2 国内外研究现状 1 1.2.1 爬虫技术概述 1 1.2.2 爬虫设计者面临的问题与反爬虫技术现状 3 ...

  9. SICK LMS 111激光雷达数据读取与分析

    SICK LMS111激光雷达的使用https://blog.csdn.net/weixin_34146805/article/details/86126953https://blog.csdn.ne ...

最新文章

  1. unef螺纹_这十一种螺纹,你知道几种呢?
  2. Python中的Numpy(3.聚合操作)
  3. java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊
  4. Java 队列清空,如何清空Actor死信队列 - java
  5. MySql 错误 Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
  6. java7 uri,细数Java8中那些让人纵享丝滑的文件操作
  7. Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例
  8. Bootstrap开篇理解:
  9. Android清除本地数据缓存代码
  10. Mask-RCNN训练train_shapes.ipynb
  11. jquery ready() 与window onload的区别
  12. IAR for stm8安装破解
  13. SQL语句中查询数据
  14. Wireshark使用指南
  15. Android布局原理与优化
  16. 2012年苏州大学872真题整理
  17. 大浪淘金——下半年经济与资本市场展望(姜超6月25日于海通深圳策略会)
  18. 关于 nng/nanomsg 库的一点想法
  19. vue项目打包部署在windows或linux服务器上
  20. ZZZ Project All 37 Product-国内最完整版

热门文章

  1. Java面试宝典2018版
  2. 【算法学习笔记】64. 枚举法 SJTU OJ 1381 畅畅的牙签
  3. PV140R1K1T1NMR1派克柱塞泵
  4. nacos整合springmvc:解决使用@Value或@NacosValue无法从nacos配置中心动态获取最新配置数据问题
  5. python批量修改文件扩展名
  6. 【日语】日语商务情景口语
  7. c语言课程设计自我评价,学生成长卡,个人表现,自评
  8. 2225. 找出输掉零场或一场比赛的玩家
  9. canvas绘制多张图的排列顺序问题
  10. PMP-PMBOK-培训(7)Initiating a Project and Preparing the Project Plan