0
点赞
收藏
分享

微信扫一扫

Pandas-Numpy-Matplotlib-PyEcharts——综合案例(豆瓣电影Top_250数据分析)


豆瓣电影Top_250_Data_analysis(

​运行在jupyter notebook环境​​)


  • ​​一、 数据收集、加载数据 并查看​​
  • ​​1.1 收集数据 爬虫详细过程请点击​​
  • ​​1.2 抓取数据问题:​​
  • ​​1.3 加载数据并查看:​​
  • ​​二、数据合并(将这两个互有缺失值的DataFrame合并)​​
  • ​​三、数据清洗(消耗40%时间)​​
  • ​​3.1 查看所有数据 : 数据去重 df.duplicated() ​​
  • ​​3.2 数据格式,内容清洗​​
  • ​​3.2.1 国家(地区)内容清洗​​
  • ​​3.2.2 电影类型genre(类似于区域内容清洗)​​
  • ​​3.2.3 电影语言:​​
  • ​​3.2.4 导演​​
  • ​​3.2.5 演员(cast)​​
  • ​​3.2.5 时长(movie_duration)​​
  • ​​3.2.6 电影标记(tags)​​
  • ​​3.2.7 上映时间(init_year)​​
  • ​​3.2 缺失值检查与查看​​
  • ​​四、数据统计与分析​​
  • ​​4.1 数值型列的数据统计​​
  • ​​4.2 电影排名分析​​
  • ​​4.3 按评分-top10分析​​
  • ​​4.4 上榜次数统计分析​​
  • ​​五、数据分析与可视化展示(matplotlib)​​
  • ​​5.1 matplotlib 可视化包基本环境配置​​
  • ​​5.2 评分 与排名​​
  • ​​5.3 评论人数 与排名​​
  • ​​5.4 电影时长 与排名​​
  • ​​5.5 上映年份 与排名​​
  • ​​5.6 国家/地区 与排名​​
  • ​​5.7 语言 与排名​​
  • ​​5.8 电影类型 与排名​​
  • ​​5.9 电影标签热度词云统计 与排名​​
  • ​​六、数据分析与可视化展示​​
  • ​​6.1 安装pyecharts 可视化基本环境配置​​
  • ​​6.2 电影类型-排名​​
  • ​​6.3 按评分占比统计​​
  • ​​6.4 国家地区-排名​​


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pyecharts import Bar,Line,Pie
from pandas import

一、 数据收集、加载数据 并查看

1.1 收集数据 ​​​​

​抓取排名,电影名,导演,主演,上映日期,制片国家/地区,类型。 评分,评论数量,一句话评价,已经电影链接 top250 网址:https://movie.douban.com/top250 选用Python3 引入 url.requests BeautifulSoup4 来抓取 ​

1.2 抓取数据问题:

​ 原来页面的缺失信息(如:导演,演员等) 原来页面的本来就没有电影语言,时长,tag 解决方法: 取出当前数据的最后一列的url 解析url取出电影唯一的id 根据id得到详细页面,抓取信息 https://api.douban.com/v2/movie/id ​

1.3 加载数据并查看:

​df_1 = pd.read_csv('./csv/top250_f1.csv',sep = '#') df_2 = pd.read_csv('./csv/top250_f2.csv',sep = '#') df_1.head() #查看前五条数据 #df_2.head() #查看前五条数据​

   

num

title

director

role

init
_year

area

genre

rat
ing_
num

com
ment_
num

comment

url

0

1

肖申克的救赎

弗兰克·德拉邦特 Frank Darabont

蒂姆·罗宾斯 Tim Robbins

1994

美国

[‘犯罪 剧情’]

9.6

964842

希望让人自由。

​​https://movie​​.

douban.com

/subject/1292052/

1

2

霸王别姬

陈凯歌 Kaige Chen

张国荣 Leslie Cheung

1993

中国大陆 香港

[‘剧情 爱情 同性’]

9.5

699930

风华绝代。

​​https://movie​​.

douban.com

/subject/1291546/

2

3

这个杀手不太冷

吕克·贝松 Luc Besson

让·雷诺 Jean Reno

1994

法国

[‘剧情 动作 犯罪’]

9.4

912435

怪蜀黍和小萝莉不得不说的故事。

​​https://movie​​.

douban.com

/subject/1295644/

3

4

阿甘正传

Robert Zemeckis

Tom Hanks

1994

美国

[‘剧情 爱情’]

9.4

775889

一部美国近现代史。

​​https://movie​​.

douban.com/

subject/1292720/

4

5

美丽人生

罗伯托·贝尼尼 Roberto Benigni

罗伯托·贝尼尼 Roberto Beni…’]

1997

意大利

[‘剧情 喜剧 爱情 战争’]

9.5

453651

最美的谎言。

​​https://movie​​.

douban.com/

subject/1292063/

二、数据合并(将这两个互有缺失值的DataFrame合并)

将df_1与df_2合并数据

​数据分布在两个文件中: 取 top250_f1.csv 中的 num(排名),title(电影名),init_year(上映时间),area(国家/地区) 和 top250_f2.csv 中的 language(语言),director(导演),cast(主演),movie_duration(时长),\ tags(标签)这些列进行分析。 df_1_cut = df_1[['num','title','init_year','area','genre','rating_num','comment_num']] df_2_cut = df_2[['num','language','director','cast','movie_duration','tags']] df = df.merge(df_1_cut,df_2_cut,how = 'outer',on = 'num') #外连接,合并标准on = 'num' df.head() #查看前五条信息 #df.tail() 查看后五条信息 #df.info()​

  

nu
m

title   

init
_year

area

genre

rat
ing_
num

com
ment_
num

lang
uage

director

cast

movie_
duration

tags

0

1

肖申克的救赎

1994

美国

[‘犯罪 剧情’]

9.6

964842

[‘英语’]

[‘弗兰克·德拉邦特 Frank Darabont’]

[‘蒂姆·罗宾斯 Tim Robbins’, ‘摩根·弗里曼 Morgan Freeman’…

[‘142 分钟’]

[{‘count’: 197742, ‘name’: ‘经典’}, {‘count’: 16…

1

2

霸王别姬

1993

中国大陆 香港

[‘剧情 爱情 同性’]

9.5

699930

[‘汉语普通话’]

[‘陈凯歌 Kaige Chen’]

[‘张国荣 Leslie Cheung’, ‘张丰毅 Fengyi Zhang’, ‘巩俐 …

[‘171 分钟’]

[{‘count’: 124150, ‘name’: ‘经典’}, {‘count’: 63…

2

3

这个杀手不太冷

1994

法国

[‘剧情 动作 犯罪’]

9.4

912435

[‘英语’, ‘意大利语’, ‘法语’]

[‘吕克·贝松 Luc Besson’]

[‘让·雷诺 Jean Reno’, ‘娜塔莉·波特曼 Natalie Portman’, …

[‘110分钟(剧场版)’, ‘133分钟(国际版)’]

[{‘count’: 150097, ‘name’: ‘经典’}, {‘count’: 85…

3

4

阿甘正传

1994

美国

[‘剧情 爱情’]

9.4

775889

[‘英语’]

[‘Robert Zemeckis’]

[‘Tom Hanks’, ‘Robin Wright Penn’, ‘Gary Sinis…

[‘142 分钟’]

[{‘count’: 179046, ‘name’: ‘励志’}, {‘count’: 13…

4

5

美丽人生

1997

意大利

[‘剧情 喜剧 爱情 战争’]

9.5

453651

[‘意大利语’, ‘德语’, ‘英语’]

[‘罗伯托·贝尼尼 Roberto Benigni’]

[‘罗伯托·贝尼尼 Roberto Benigni’, ‘尼可莱塔·布拉斯基 Nicolet…

[‘116分钟’]

[{‘count’: 70710, ‘name’: ‘意大利’}, {‘count’: 67…

三、数据清洗(消耗40%时间)

3.1 查看所有数据 : 数据去重 df.duplicated()

​df.duplicated().head() #返回 True,则有重复项,反之亦然 df.duplicated().value_counts() df.title.unique() #检查某一列是否有重复电影名 df.num.unique() #检查某一列是否有并列排名​

3.2 数据格式,内容清洗

​◆去除多余字段-去除字段两侧['']形式,可以用str分数字符串 df['genre'] = df['genre'].str[2:-2] df['language'] = df['language'].str[2:-2] df['director'] = df['director'].str[2:-2] df['cast'] = df['cast'].str[2:-2] df['movie_duration'] = df['movie_duration'].str[2:-2] df.head()​​  num…genrerating
_numcomme
nt_numlang
uagedirectorcastmovie_
durationtags01…犯罪 剧情9.6964842英语弗兰克·德拉邦特 Frank Darabont蒂姆·罗宾斯 Tim Robbins’, ‘摩根·弗里曼 Morgan Freeman’, …142 分钟[{‘count’: 197742, ‘name’: ‘经典’}, {‘count’: 16…12…剧情 爱情 同性9.5699930汉语普通话陈凯歌 Kaige Chen张国荣 Leslie Cheung’, ‘张丰毅 Fengyi Zhang’, ‘巩俐 Li…171 分钟[{‘count’: 124150, ‘name’: ‘经典’}, {‘count’: 63…23…剧情 动作 犯罪9.4912435英语’, ‘意大利语’, ‘法语吕克·贝松 Luc Besson让·雷诺 Jean Reno’, ‘娜塔莉·波特曼 Natalie Portman’, ‘加…110分钟(剧场版)’, ‘133分钟(国际版)[{‘count’: 150097, ‘name’: ‘经典’}, {‘count’: 85…34…剧情 爱情9.4775889英语Robert ZemeckisTom Hanks’, ‘Robin Wright Penn’, ‘Gary Sinise’…142 分钟[{‘count’: 179046, ‘name’: ‘励志’}, {‘count’: 13…45…剧情 喜剧 爱情 战争9.5453651意大利语’, ‘德语’, ‘英语罗伯托·贝尼尼 Roberto Benigni罗伯托·贝尼尼 Roberto Benigni’, ‘尼可莱塔·布拉斯基 Nicoletta…116分钟[{‘count’: 70710, ‘name’: ‘意大利’}, {‘count’: 67…

3.2.1 国家(地区)内容清洗

​#对于area列,由多个国家地区之间合作的电影,中间用空格隔开, #用str.split()分列,再应用apply(pd.Series)作用到每一行或列 area_split = df['area'].str.split('').apply(pd.Series) area_split.head() #对每列的值重合的作了一个汇总统计,同时NaN用0填充 a = area_split.apply(df.value_counts).fillna('0') #更改列名,转换数据类型(object->int) a.columns = ['area_1','area_2','area_3','area_4','area_5'] a['area_1'] = a['area_1'].astype(int) a['area_2'] = a['area_2'].astype(int) a['area_3'] = a['area_3'].astype(int) a['area_4'] = a['area_4'].astype(int) a['area_5'] = a['area_5'].astype(int) #将每一行的数据汇总后,变成一列显示(行汇总) a = a.apply(lambda x:x.sum().axis=1) #包装成一个标准的 DataFrame area_c = df.DataFrame(a,column = ['counts']) area_c.head()​



举报

相关推荐

0 条评论