加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python 从爬虫到数据分析

发布时间:2019-05-16 12:07:47 所属栏目:建站 来源:大鹏
导读:大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析、数据可视化的应用与教学。 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂。大部分网上的资料总是从Python语法教起,夹杂着大量Python开发的知识点,花了

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不是每次都一样。默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时#迭代key和value,可以用for k, v in d.items()

可以看到,字典里的人名被一一打印出来了。for 函数的作用就是用于遍历数据。掌握for函数,可以说是真正入门了Python函数。

B.爬虫和循环

for函数在书写Python爬虫中经常被应用,因为爬虫经常需要遍历每一个网页,以获取信息,所以构建完整而正确的网页链接十分关键。以某票房数据网为例,他的网站信息长这样:

Python 从爬虫到数据分析

Python 从爬虫到数据分析

该网站的周票房json数据地址可以通过抓包工具找到,网址为http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=20190114

仔细观察,该网站不同日期的票房数据网址(url)只有后面的日期在变化,访问不同的网址(url)就可以看到不同日期下的票房数据:

Python 从爬虫到数据分析

我们要做的是,遍历每一个日期下的网址,用Python代码把数据爬下来。此时for函数就派上用场了,使用它我们可以快速生成多个符合条件的网址:

  1. import pandas as pd 
  2.  
  3. url_df = pd.DataFrame({'urls':['http://www.cbooo.cn/BoxOffice/getWeekInfoData?sdate=' for i in range(5)],'date' :pd.date_range(20190114,freq = 'W-MON',periods = 5)}) 
  4.  
  5. ''' 
  6. 将网址相同的部分生成5次,并利用pandas的时间序列功能生成5个星期一对应的日期。 
  7. 其中用到了第一部分提供的多个数据类型: 
  8. range(5)属于列表, 
  9. 'urls':[]属于字典, 
  10. pd.dataframe属于dataframe 
  11. ''' 
  12. url_df['urls'] = url_df['urls'] + url_df['date'].astype('str') 

滑动滑块可以看到完整代码和中间的注释。

Python 从爬虫到数据分析

为了方便理解,我给大家画了一个for函数的遍历过程示意图:

Python 从爬虫到数据分析

此处省略掉后续爬取过程,相关爬虫代码见文末。我们使用爬虫爬取了5800+条数据,包含20个字段,时间囊括了从2008年1月开始至2019年2月十一年期间的单周票房、累计票房、观影人次、场均人次、场均票价、场次环比变化等信息。

3.Python怎么实现数据分析?

除了爬虫,分析数据也是Python的重要用途之一,Excel能做的事,Python究竟怎么实现呢;Excel不能做的事,Python又是否能实现呢?利用电影票房数据,我们分别举一个例子说明:

A.Python分析

在做好数据采集和导入后,选择字段进行初步分析可以说是数据分析的必经之路。在Dataframe数据格式的帮助下,这个步骤变得很简单。

比如当我们想看单周票房第一的排名分别都是哪些电影时,可以使用pandas工具库中常用的方法,筛选出周票房为第一名的所有数据,并保留相同电影中周票房最高的数据进行分析整理:

  1. import pandas as pd 
  2. data = pd.read_csv('中国票房数据爬取测试20071-20192.csv',engine='python') 
  3. data[data['平均上座人数']>20]['电影名'] 
  4. #计算周票房第一随时间变化的结果,导入数据,并选择平均上座人数在20以上的电影为有效数据 
  5.  
  6. dataTop1_week = data[data['排名']==1][['电影名','周票房']] 
  7. #取出周票房排名为第一名的所有数据,并保留“电影名”和“周票房”两列数据 
  8.  
  9. dataTop1_week = dataTop1_week.groupby('电影名').max()['周票房'].reset_index() 
  10. #用“电影名”来分组数据,相同电影连续霸榜的选择最大的周票房保留,其他数据删除 
  11.  
  12. dataTop1_week = dataTop1_week.sort_values(by='周票房',ascending=False) 
  13. #将数据按照“周票房”进行降序排序 
  14.  
  15. dataTop1_week.index = dataTop1_week['电影名'] 
  16. del dataTop1_week['电影名'] 
  17. #整理index列,使之变为电影名,并删掉原来的电影名列 
  18.  
  19. dataTop1_week 
  20. #查看数据 

Python 从爬虫到数据分析

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读