c语言sscanf函数的用法是什么
330
2022-11-16
【数据分析】豆瓣电影Top250爬取的数据的可视化分析
豆瓣Top250网址 将之前爬取到的豆瓣电影进行简单的可视化: 数据列表保存为CSV格式,如图
导入数据 做好准备
#!-*- coding:utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pylab as pltimport refrom numpy import rankfrom builtins import mapfrom datashape.coretypes import Map#参考了简书上的饼状图教程#切换工作目录,IPython运行%pylabMovie=pd.read_csv('./doubanmovietop.csv') #数据读取
检查数据头
Movie.head()
Unnamed: 0 | title | info | rating_num | comment_num | daoyan | date | guojia | juqing | |
0 | 1 | 肖申克的救赎 | 希望让人自由。 | 9.7 | 1682392 | 导演: 弗兰克·德拉邦特 Frank Darabont主演: 蒂姆·罗宾斯 Tim Robb... | 1994 | 美国 | 犯罪 剧情 |
1 | 2 | 霸王别姬 | 风华绝代。 | 9.6 | 1244650 | 导演: 陈凯歌 Kaige Chen主演: 张国荣 Leslie Cheung / 张丰毅 ... | 1993 | 中国大陆 中国香港 | 剧情 爱情 同性 |
2 | 3 | 阿甘正传 | 一部美国近现代史。 | 9.5 | 1301770 | 导演: 罗伯特·泽米吉斯 Robert Zemeckis主演: 汤姆·汉克斯 Tom Han... | 1994 | 美国 | 剧情 爱情 |
3 | 4 | 这个杀手不太冷 | 怪蜀黍和小萝莉不得不说的故事。 | 9.4 | 1495321 | 导演: 吕克·贝松 Luc Besson主演: 让·雷诺 Jean Reno / 娜塔莉·波... | 1994 | 法国 | 剧情 动作 犯罪 |
4 | 5 | 美丽人生 | 最美的谎言。 | 9.5 | 760464 | 导演: 罗伯托·贝尼尼 Roberto Benigni主演: 罗伯托·贝尼尼 Roberto... | 1997 | 意大利 | 剧情 喜剧 爱情 战争 |
#Rating pieRating=Movie['rating_num']bins=[8,8.5,9,9.5,10] #分区(0,8],(8,8.5]....rat_cut=pd.cut(Rating,bins=bins)rat_class=rat_cut.value_counts() #统计区间个数rat_pct=rat_class/rat_class.sum()*100 #计算百分比rat_arr_pct=np.array(rat_pct)#将series格式转成array,为了避免pie中出现namef1=plt.figure(figsize=(9,9))plt.title('DoubanMovieTop250\nRatingDistributin(0~10)')plt.pie(rat_arr_pct,labels=rat_pct.index,colors=['r','g','b','c'],autopct='%.2f%%',startangle=75,explode=[0.05]*4) #autopct属性显示百分比的值plt.savefig('MovieTop250.RatingDistributin(0~10).png')f1.show()#explode:将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数#shadow,饼是否有阴影#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看#pctdistance,百分比的text离圆心的距离#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本
#year pieyear=Movie['date']for i in year.index: if len(year[i])>4: year.drop(i,inplace=True) # year.drop(i,inplace=True) 去除多个年代的特例,inplace重要,修改改变原值year=year.astype(int)bins=np.linspace(min(year)-1,max(year)+1,10).astype(int) #产生区间,bins一般为(,]的,所以+1year_cut=pd.cut(year,bins=bins)year_class=year_cut.value_counts()year_pct=year_class/year_class.sum()*100year_arr_pct=np.array(year_pct)color=['b', 'g', 'r', 'c', 'm', 'y', (0.2,0.5,0.7), (0.6,0.5,0.7),(0.2,0.7,0.1)] #RGB 0-1之间的tuplef2=plt.figure(figsize=(9,9))patches,out_text,in_text=plt.pie(year_arr_pct,labels=year_pct.index,colors=color,autopct='%.2f%%',explode=[0.05]*9,startangle=30)plt.title('MovieTop250\nYears Distribution')f2.show()# plt.savefig('MovieTop250_YearsDistribution.png')
豆瓣电影Top250,电影排名&评价人数&电影评分的散点图:
#评价人数 rank=np.array(Movie.index,dtype=int)+1 #index start from 0 Movie['0']=rankf3=plt.figure(3,figsize=(12,10))plt.scatter(x=Movie['0'],y=Movie['comment_num'],c=Movie['rating_num'],s=80)plt.title('Douban Movie\nRank and Rating People by Rating',fontsize=20)plt.xlabel('Rank',fontsize=15)plt.ylabel('Rating People',fontsize=15)plt.axis([-5,255,0,750000]) #x轴坐标范围plt.colorbar() #显示colorbarplt.savefig('DoubanMovie_Rank_and_RatingPeople_by_Rating.png')plt.show()
#!-*- coding:utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pylab as pltfrom matplotlib.font_manager import FontProperties #fontproperties的模块,pyde自动添加的,好评Movie=pd.read_csv('./doubanmovietop.csv',encoding='utf-8')country_iter=(set(x.split(' ')) for x in Movie['guojia']) #generator生成器,分解字符串countries=sorted(set.union(*country_iter)) #Return the union of sets as a new set.#*country_iter:This works for any iterable of iterables.df=pd.DataFrame(np.zeros((len(Movie),len(countries))),columns=countries)#创建一个0DataFrame,np.zeros()内为要tuplefor i,gen in enumerate(Movie['guojia']): df.ix[i,gen.split(' ')]=1 #第i条数据的country置为1num_of_country=df.sum() # print(num_of_country)num_of_country[4]=num_of_country[1]+num_of_country[2]+num_of_country[4] #(1964中国大陆中国大陆重映)和中国大陆合并# num_of_country.pop('中国')# print(num_of_country)num_of_country.sort_values(inplace=True,ascending=False)f1=plt.figure()for i,gen in enumerate(num_of_country[:10]): plt.bar(i,gen) #i为bar的起始横坐标,gen为纵坐标,宽度默认names=list(num_of_country.index)plt.xticks(np.arange(10),names,fontproperties='SimHei',rotation =60) #在图中显示中文字符要加上fontproperties='SimHei'plt.ylabel('Movie Number')plt.title('Douban Movie\nMovie Distribution by Countries')# plt.savefig('Movie_Distribution_by_Countries.png')f1.show() #因为有些影片为多国合作的,也算各自国家的吧。#过滤了很多只有一两部的国家,果然还是美帝有金坷垃,亩产一万八
genre_iter=(set(x.split(' ')) for x in Movie['juqing'])genre=sorted(set.union(*genre_iter))frame=pd.DataFrame(np.zeros((len(Movie),len(genre))),columns=genre)for i,gen in enumerate(Movie['juqing']): frame.ix[i,gen.split(' ')]=1genre_sum=frame.sum()genre_sum.sort_values(inplace=True,ascending=False)f2=plt.figure(2)'''for i,gen in enumerate(genre_sum[:8]): plt.bar(i,gen)names=list(genre_sum.index)plt.xticks(np.arange(8)+0.4,names,fontproperties='SimHei')plt.show()'''#改进的方法p2=plt.bar(np.arange(8),genre_sum.values[:8],align='center') #p2包含8个元素,每个对应一个barnames=list(genre_sum.index)plt.xticks(np.arange(8),names,fontproperties='SimHei')plt.legend((p2[0],),('MovieNumber',)) #只有一个元素的tuple应写成(ele,)plt.ylabel('Movie Number')plt.title('Douban Movie\nDistribution by Genre')#plt.savefig('Movie_Distribution_by_Genre.png')plt.show()
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~