当前位置: 首页 > news >正文

python dataframe的某一列变为list_手把手教你用Python爬中国电影票房数据

以下文章来自我的好友,城市数据团的大鹏。

大家好,我是大鹏,致力于Python数据分析、数据可视化的应用与教学。

和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂。大部分网上的资料总是从Python语法教起,夹杂着大量Python开发的知识点,花了很多时间却始终云里雾里,不知道哪些知识才是真正有用的。本来以为上手就能写爬虫出图,却在看基础的过程中消耗了一周又一周,以至于很多励志学习Python的小伙伴牺牲在了入门的前一步。

63493385a6ea709c79551cc4a45098b9.png

于是,我总结了以下一篇干货,来帮助大家理清思路,提高学习效率。总共分为三大部分:做Python数据分析必知的语法,如何实现爬虫,怎么做数据分析。

1.必须知道的两组Python基础术语

A.变量和赋值

Python可以直接定义变量名字并进行赋值的,例如我们写出a = 4时,Python解释器干了两件事情:

  • 在内存中创建了一个值为4的整型数据

  • 在内存中创建了一个名为a的变量,并把它指向4

用一张示意图表示Python变量和赋值的重点

eae38b73739b298f065d315b45b65c6b.png

例如下图代码,“=”的作用就是赋值,同时Python会自动识别数据类型:

a=4 #整型数据
b=2 #整型数据
c=“4” #字符串数据
d=“2” #字符串数据
print(“a+b结果为”,a+b)#两个整数相加,结果是6
print(“c+d结果为”,c+d)#两个文本合并,结果是文本“42”#以下为运行结果>>>a+b结果为 6
>>>c+d结果为 42

请阅读代码块里的代码和注释,你会发现Python是及其易读易懂的。

B.数据类型

在初级的数据分析过程中,有三种数据类型是很常见的:

  • 列表list(Python内置)

  • 字典dict(Python内置)

  • DataFrame(工具包pandas下的数据类型,需要import pandas才能调用)

它们分别是这么写的:

列表(list):

#列表liebiao=[1,2.223,-3,'刘强东','章泽天','周杰伦','昆凌',['微博','B站','抖音']]

list是一种有序的集合,里面的元素可以是之前提到的任何一种数据格式和数据类型(整型、浮点、列表……),并可以随时指定顺序添加其中的元素,其形式是:

#ist是一个可变的有序表,所以,可以往list中追加元素到末尾:
liebiao.append('瘦')
print(liebiao)#结果1>>>[1, 2.223, -3, '刘强东', '章泽天', '周杰伦', '昆凌', ['微博', 'B站', '抖音'], '瘦']#也可以把元素插入到指定的位置,比如索引号为5的位置,插入“胖”这个元素:
liebiao.insert(5, '胖')
print(liebiao)#结果2>>>[1, 2.223, -3, '刘强东', '章泽天', '胖', '周杰伦', '昆凌', ['微博', 'B站', '抖音'], '瘦']

字典(dict):

#字典zidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'}

字典使用键-值(key-value)存储,无序,具有极快的查找速度。以上面的字典为例,想要快速知道周杰伦的年龄,就可以这么写:

zidian['周杰伦']>>>'40'

dict内部存放的顺序和key放入的顺序是没有关系的,也就是说,"章泽天"并非是在"刘强东"的后面。

DataFrame:

DataFrame可以简单理解为Excel里的表格格式。导入pandas包后,字典和列表都可以转化为DataFrame,以上面的字典为例,转化为DataFrame是这样的:

import pandas as pd

df=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])#注意DataFrame的D和F是大写
df=df.reset_index().rename(columns={'index':'name'})#给姓名加上字段名

0d19a322bbc1a53a19f07b5ce4bfdba7.png

和excel一样,DataFrame的任何一列或任何一行都可以单独选出进行分析。

以上三种数据类型是python数据分析中用的最多的类型,基础语法到此结束,接下来就可以着手写一些函数计算数据了。

2.从Python爬虫学循环函数

掌握了以上基本语法概念,我们就足以开始学习一些有趣的函数。我们以爬虫中绕不开的遍历url为例,讲讲大家最难理解的循环函数for的用法:

A.for函数

for函数是一个常见的循环函数,先从简单代码理解for函数的用途:

zidian={'刘强东':'46','章泽天':'36','周杰伦':'40','昆凌':'26'}for key in zidian:
        print(key)>>>
刘强东
章泽天
周杰伦
昆凌

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

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

B.爬虫和循环

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

7ca3c2d52711a04953ed95a92934db1f.png

dab8310b67a5175cfe637b46eb9bd3b3.png

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

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

2fdc23aa5ef04f1ce867a11bb98e9b0c.png

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

import pandas as pd
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)})'''
将网址相同的部分生成5次,并利用pandas的时间序列功能生成5个星期一对应的日期。
其中用到了第一部分提供的多个数据类型:
range(5)属于列表,
'urls':[]属于字典,
pd.dataframe属于dataframe
'''
url_df['urls'] = url_df['urls'] + url_df['date'].astype('str')

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

c92701e7015096f3b01c548fefc8555e.png

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

e92ff992908b52d4f6feb2cf1b9a98b3.png

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

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

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

A.Python分析

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

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

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

57136de5c3ade49ecf6214d3e01d90e5.png

9行代码,我们完成了Excel里的透视表、拖动、排序等鼠标点击动作。最后再用Python中的可视化包matplotlib,快速出图:

1c56f9b0b8d9c8098bc2475098f039a8.gif

b234ddd3a4ac12991e225a83c1b737f7.png

B.函数化分析

以上是一个简单的统计分析过程。接下来就讲讲Excel基础功能不能做的事——自定义函数提效。观察数据可以发现,数据中记录了周票房和总票房的排名,那么刚刚计算了周票房排名的代码,还能不能复用做一张总票房分析呢?

fd92b4ffd87af005a6e4e09b4265a3f4.png

当然可以,只要使用def函数和刚刚写好的代码建立自定义函数,并说明函数规则即可:

def pypic(pf):#定义一个pypic函数,变量是pf
    dataTop1_sum = data[['电影名',pf]]#取出源数据中,列名为“电影名”和pf两列数据
    dataTop1_sum = dataTop1_sum.groupby('电影名').max()[pf].reset_index()#用“电影名”来分组数据,相同电影连续霸榜的选择最大的pf票房保留,其他数据删除
    dataTop1_sum = dataTop1_sum.sort_values(by=pf,ascending=False)#将数据按照pf进行降序排序
    dataTop1_sum.index = dataTop1_sum['电影名']del dataTop1_sum['电影名']#整理index列,使之变为电影名,并删掉原来的电影名列
    dataTop1_sum[:20].iloc[::-1].plot.barh(figsize = (6,10),color = 'orange')
    name=pf+'top20分析'
    plt.title(name)#根据函数变量名出图

定义函数后,批量出图so easy:

4913f13e350e830d477c99f35b9fcc63.gif

e222d85bdceaa4bdab7f0e4d3028267c.png

学会函数的构建,一个数据分析师才算真正能够告别Excel的鼠标点击模式,迈入高效分析的领域

4.光看不练是永远不能入门的

如果只有一小时学习,以上就是大家一定要掌握的Python知识点。光看不练永远都会是门外汉,如果你有兴趣学习Python数据分析,却在过程中感到困惑,欢迎来参加我在网易云课堂的免费直播,每晚一个主题,有学有练,让你快速入门Python数据分析:

不间断直播陪你从入门到精通

3d613d14c7eca183c515e6b5627d4f72.png

扫码即可预约免费直播席位(限前100)

01

Python免费直播课,每周放送

第一场  5月20日 周一 晚上8点(可回看)

《初学者必看:一定需要规避的Python学习误区》

1. Python基础语法学习路径

2. 十大易错点分别是哪些?

3. 初步用Python实现数据清洗

第二场  5月21日 周二 晚上8点(可回看)

《用Python处理文本数据:星座运势分析》

1. Python处理文本数据

2. Pandas处理文本数据方法

3. 案例实现:星座运势文本数据处理

第三场  5月22日 周三 晚上8点

《用Python做词云图:中国电影十年票房分析》

1.中国票房数据采集

2.票房排名及上榜电影分析

3.用词云图看看票房评价关键字

第四场  5月23日 周四 晚上8点

《超级干货:手把手教可视化工具Tableau》

1.什么是商业智能?

2.Tableau介绍及基础操作

3.基于Tableau的数据可视化套路

直播预约方式

3d613d14c7eca183c515e6b5627d4f72.png

扫码即可预约免费直播席位(限前100)

02

一周免费课程

5538e2cba9fd3b2e7f5dfb766f940bb8.png

配练习材料

课程大纲

1. Python语言入门

2. 每月净收入模型构建

3. 每月支出模型构建

4. 不同情况下的花呗还款场景模拟

5. 负债积累问题

6. 如何用图表讲好一个故事?(彩蛋)

03

学习资料包,入门有方向

9e80f66d10e9b5facef73f6f08f3552f.png

04

福利获取方式

所有以上福利,扫码添加网易云课堂小助手即可获得

3d613d14c7eca183c515e6b5627d4f72.png

微信号:neteasepython1

席位有限,先到先得

相关文章:

  • 网站迁移到新服务器的步骤_在网站改版期间如何避免SEO灾难
  • vue按需引入第三方插件_elementui组件按需引入踩过的坑
  • 3842开关电源完整原理图_详细分析开关电源输入端串联的电阻(作用/阻值/功率)...
  • python生成表格文件_【记录】Python中生成(写入数据到)Excel文件中
  • springboot jwt token前后端分离_4小时开发一个SpringBoot+vue前后端分离博客项目附带源码
  • idea serialversionuid怎么生成_这样设置 IDEA,让你爽到飞起!
  • 论文英文参考文献[10]的时候后面多空格_论文干货|论文新手别急,完整的论文写作没那么难...
  • python os open_[原创] python os.open()方法
  • idea构建springboot项目右边没有maven_你们要的干货来了——实战 Spring Boot
  • 使用python下载文件_使用Python下载文件(大文件,重定向文件)
  • 为什么python现在这么火_Python为什么这么火,您怎么看的?
  • python提示line3_python中使用tab键进行提示(python3有效)
  • python字典程序题_Python练习:字典
  • python转换函数使用_【已解决】Python中,将字符串转换为函数,并且实现带参数的函数调用...
  • phpthink验证旧密码_【法制警示】宁夏一手机店老板将他人旧手机回收,竟盗取其支付宝中5000余元......
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【译】理解JavaScript:new 关键字
  • css布局,左右固定中间自适应实现
  • gops —— Go 程序诊断分析工具
  • JAVA并发编程--1.基础概念
  • php中curl和soap方式请求服务超时问题
  • Python socket服务器端、客户端传送信息
  • quasar-framework cnodejs社区
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring-boot 启动时碰到的错误
  • storm drpc实例
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue--数据传输
  • 开源SQL-on-Hadoop系统一览
  • 每天10道Java面试题,跟我走,offer有!
  • 如何合理的规划jvm性能调优
  • 使用parted解决大于2T的磁盘分区
  • 问题之ssh中Host key verification failed的解决
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 阿里云ACE认证学习知识点梳理
  • 通过调用文摘列表API获取文摘
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #Z2294. 打印树的直径
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net6使用Sejil可视化日志
  • .NET中GET与SET的用法
  • .NET中使用Redis (二)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [2023年]-hadoop面试真题(一)
  • [AIGC] 如何建立和优化你的工作流?
  • [CISCN 2023 初赛]go_session
  • [CTO札记]盛大文学公司名称对联