本次数据是从豆瓣读书网站上爬取的,主要字段有:
大类型,小类型,封面,书名,国家,作者,翻译人,出版社,出版日期,价格,评分,简介数据分析1、模块的导入
importpandasaspdimportnumpyasnpimportreimportmatplotlib.pyplotaspltimportseabornassnsimportjiebafrompyecharts.chartsimport*frompyechartsimportoptionsasoptsfrompyecharts.globalsimportThemeType%matplotlibinlineplt.rcParams[font.sans-serif]=[SimHei]#设置加载的字体名plt.rcParams[axes.unicode_minus]=False#解决保存图像是负号-显示为方块的问题
2、数据处理
本次数据处理将涉及到以下几点:
数据查看
缺失值的处理
数据值的修改
数据的类型转换
2.1、数据的查看
df2=pd.read_csv(./书籍.csv,encoding=gb)df2
#查看数据类型df2.info()
2.2、缺失值的处理
#将none转换为nulldf2.replace(None,np.nan,inplace=True)#查看缺失值情况df2.isnull().sum()
#缺失值的处理缺失值的处理方法主要有以下常见的方法(1)删除含有缺失值的行(2)把缺失值填充为0(3)如果是数值类型的数据,可以使用平均值,众数等来填充缺失值#填充缺失值df2=df2.fillna(0)#确认是否还有空值df2.isnull().sum()
2.3、数据值的修改
#数值列值的修改,方便之后的数据分析#主要有时间,价格,评价人数df2[日期2]=df2[出版日期].str[0:4]df2[价格2]=df2[价格].apply(lambdax:str(x).replace(元,).replace(CNY,))df2[评价人数2]=df2[评价人数].apply(lambdax:str(x).replace(人评价,))df2
2.4、数据类型的转换
#进行数值类型的转换,方便之后的数据分析#将object转换为数字类型df2[评分]=df2[评分].apply(pd.to_numeric,errors=coerce)df2[价格2]=df2[价格2].apply(pd.to_numeric,errors=coerce)df2[评价人数2]=df2[评价人数2].apply(pd.to_numeric,errors=coerce)df2.info()
3、数据分析
根据数据字段,本次数据分析的内容只涉及到以下几个方面
书籍的类型分布
书籍的国家分布
最受欢迎的出版社
最受欢迎的书籍
最受欢迎的作者
数据的价格分布
书籍的出版时间分布
3.1、书籍的类型分布
书籍数目最多的类型是文学、文化类型书籍,细分到小类目最多类型的书籍是小说,历史,外国文学,文学,心理学,哲学,经典等书籍类型。df1=pd.read_csv(./豆瓣书籍1.csv,encoding=gb)df_shuji=df1.groupby(类型).sum()#查看数据类型df_shuji
c=(Bar().add_xaxis(df_shuji_1).add_yaxis(书籍数目,df_shuji_2).set_global_opts(title_opts=opts.TitleOpts(title=各大类型书籍分布状况)))c.render_notebook()
df1[新增列]=df1[类型]+_+df1[小类型]df_shuji2=df1.groupby(新增列).sum()df_shuji3=df_shuji2.sort_values(by=书籍数目,ascending=False)
d=(Bar({theme:ThemeType.MACARONS}).add_xaxis(df_shuji3_1).add_yaxis(书籍数目,df_shuji3_2).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title=各大类型书籍分布状况)).set_series_opts(label_opts=opts.LabelOpts(is_show=True,font_size=10)))d.render_notebook()
3.2、书籍的国家分布
书籍发布最多的国家依次是中国,美国,英国,日本,法国等等
#2、书籍国家分布db2=df2[~df2[国家].isin([0])][国家].value_counts()#保存数据框db2=pd.DataFrame(db2[:20])db2=db2.reset_index().rename(columns={index:国家,国家:书籍数目})db2
c=(Bar().add_xaxis(db2[国家].to_list()[:10]).add_yaxis("",db2[书籍数目].to_list()[:10])#X轴与y轴调换顺序.set_global_opts(title_opts=opts.TitleOpts(title="",subtitle="",pos_left=left),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=10)),#更改横坐标字体大小yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=10)),#更改纵坐标字体大小).set_series_opts(label_opts=opts.LabelOpts(font_size=12)))c.render_notebook()
3.3、最受欢迎的出版社
出版书籍数目最多的出版社是人民文学出版社,上海译文出版社,评分最高的是中华书局,北京十月文艺出版社,上海古籍出版社。#3、出版社分布,出版社评分db3=df2[~df2[出版社].isin([0])][出版社].value_counts()#保存数据框db3=pd.DataFrame(db3[:20])db3=db3.reset_index().rename(columns={index:出版社,出版社:书籍数目})db3
#评估哪家出版社评分比较高db3_1=db3[出版社].tolist()#db3_1db3_rank=df2[df2[出版社].isin(db3_1)].groupby(by=出版社,as_index=False).agg({评分:np.mean})db3_rank.sort_values(by=评分,ascending=False)
3.4、最受欢迎的书籍
按照书籍的评价人数以及评分加权得出最受欢迎的图书有:活着,红楼梦,小王子,最风筝的人,白夜行,百年孤独等等。#4、书籍评分,评分最高书籍db4=df2.sort_values(by=评分,ascending=False)db4[[类型,书名,作者,评分]][:20].drop_duplicates([书名])
#从评价人数来看db4_1=df2[df2[评价人数2]].sort_values(by=评分,ascending=False)db4_1[[类型,书名,作者,评分,评价人数2]][:].drop_duplicates([书名])
#加权得分#计算得分#加权得分=为评价人数最少为db4.eval(加权得分=(((评价人数2/(评价人数2+))*评分)+(/(评价人数2+))),inplace=True)#排序,重排序db4_rank=db4.sort_values(by=加权得分,ascending=False).reset_index(drop=True)#去重处理db4_rank[[类型,书名,作者,评分,评价人数2,出版日期,加权得分]][:].drop_duplicates([书名])
3.5、最受欢迎的作者
出书最多的作者有:郑渊洁,叶嘉莹,汪曾祺,鲁迅,王小波,杨红樱
评分最高的作者有:鲁迅,老舍,汪曾祺,史铁生,[意]伊塔洛·卡尔维诺
#5、书籍作者排名,评分分布db5=df2[~df2[作者].isin([0])].drop_duplicates([书名])db5=db5[作者].value_counts()#保存数据框db5=pd.DataFrame(db5[:50])db5=db5.reset_index().rename(columns={index:作者,作者:书籍数目})db5
#评估哪家出版社评分比较高db5_1=db5[作者].tolist()#db3_1db5_rank=df2[df2[作者].isin(db5_1)].groupby(by=作者,as_index=False).agg({评分:np.mean})db5_2=db5_rank.sort_values(by=评分,ascending=False)pd.merge(db5,db5_2)
3.6、书籍的价格分布
最高价格的书籍是,价格为元最低价格的书籍是,等等,价格为0.元价格分布主要在10-70元,占比在80%左右。#价格分布#最高价格db7=df2.sort_values(by=价格2,ascending=False).drop_duplicates(书名)db7[[书名,作者,价格2]][:20]
db7_1=df2.sort_values(by=价格2,ascending=True).drop_duplicates([书名])db7_1[[书名,作者,价格2]][:20]
D=[]foriindf2[价格2].to_list():b=iifb=10:c=10元以下elif10b=30:c=10-30元elif30b=50:c=30-50元elif50b=70:c=50-70元elif70b=:c=70-元elifb=:c=-元elifb=:c=-元else:c=元以上D.append(c)df2[价格分布]=Ddb7_2=df2.groupby(价格分布).count()db7_3=db7_2.sort_values(价格2,ascending=False)db7_3[价格2]
3.7、书籍的出版时间分布
书籍出版的时间主要集中在年,而本次数据爬取的时间也在年,排除年之外,出版时间最多的是在年,看来那段时间才是书籍的百家争鸣的年份。#6、书籍出版时间分布df2[日期2]=df2[日期2].apply(pd.to_numeric,errors=coerce)#df2[日期2]=df2[日期2].astype(np.int32)#发现出版时间超出实际时间的数据,将其清除df2.drop(df2[df2[日期2]].index,inplace=True)db6=df2[日期2].value_counts()
db6=pd.DataFrame(db6)#重新排序,列名重命名db6=db6.reset_index().rename(columns={index:日期,日期2:人数})db6[人数]=db6[人数].astype("float64")#db6.info()db6精彩推荐爬虫实战4:豆瓣电影TOP数据分析实战4:共享单车分析数据分析实战3:泰坦尼克号生存分析数据分析实战2:pandas的增删改查数据分析实战1:双十一淘宝美妆分析
数据代码获取:后台回复:豆瓣读书
预览时标签不可点收录于话题#个上一篇下一篇转载请注明:http://www.laiyindu.com/byxdy/9712.html