【Python数据分析实战】豆瓣读书分析(含代码和数据集)

@[TOC]豆瓣

一.导入数据

数据集:
链接:douban.csv
提取码:pmls


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df=pd.read_csv(r'/PythonTest/Data/book_douban.csv',index_col=0)

df.head(10)
![【Python数据分析实战】豆瓣读书分析(含代码和数据集)](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230619/eb27ca3a59a44089a587da9b2774fbf2.png)

`python
df.info()

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

二.数据清洗


df=df.rename(columns={'数':'页数'})

df.reset_index(drop=True,inplace=True)

df.shape

df.describe()

2.1清理null值


df.replace('None',np.nan,inplace=True)

df.isnull().sum()

del df['ISBM']

df.dropna(axis=0,subset=['作者','出版社','出版时间','页数','价格','评分','评论数量'],
          how='any',inplace=True)

df.reset_index(drop=True,inplace=True)

df.isna().sum()

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

2.2清洗出版时间列

从数据集中可以发现出版时间的数据格式多样,有1999,2012/12,1923-4,2019年六月,因此需要提取出其年份


import re
df['出版时间']=df['出版时间'].str.replace(' ','')
for index,row in df.iterrows():
    num=re.findall('\d+',row[3])
    num=''.join(num)[0:4]
    df.iloc[index,3]=num

df.drop(df[df['出版时间'].str.len()!=4].index,axis=0,inplace=True)
df['出版时间']=df['出版时间'].astype(np.int32)

df.drop(df[df['出版时间']>2019].index,inplace=True)

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

2.3转换评分及平均数量的数据类型


df['评分']=df['评分'].astype(float)
df['评论数量']=df['评论数量'].astype(np.int32)

2.4清洗页数列


df['页数'].str.contains('\.').value_counts()

结果:
False 46173
True 7
Name: 页数, dtype: int64


df['页数']=df['页数'].apply(lambda x:x.replace(',','').replace(' ',''))
df.drop(df[~(df['页数'].str.isdecimal())].index,axis=0,inplace=True)

df['页数']=df['页数'].astype(np.int32)

df.drop((df[df['页数']==0]).index,inplace=True)

2.5清洗价格列


df['价格']=df['价格'].apply(lambda x:x.replace(',','').replace(' ',''))
for r_index,row in df.iterrows():
    if row[5].replace('.','').isdecimal()==False:
        df.drop(r_index,axis=0,inplace=True)
    elif row[5][-1].isdecimal()==False:
        df.drop(r_index,axis=0,inplace=True)

df['价格']=df['价格'].astype(float)

df.drop(df[df['价格']<1].index,inplace=True)

2.6去除书名重复的数据


df['书名'].value_counts()

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

df['书名'].duplicated().value_counts()

结果:
False 42813
True 2073
Name: 书名, dtype: int64


df=df.sort_values(by='评论数量',ascending=False)
df.reset_index(drop=True,inplace=True)

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

df.drop_duplicates(subset='书名', keep='first',inplace=True)
df.reset_index(drop=True,inplace=True)

df['书名'].value_counts()

df.to_excel(r'/PythonTest/Data/douban_book.xls',encoding='utf_8_sig')
df

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

2.7哪个出版社的书籍评分较高?


press=df['出版社'].value_counts()
press=pd.DataFrame(press)
press=press.reset_index().rename(columns={'index':'出版集团','出版社':'出版数量'})
press

lst=press[press['出版数量']>200]['出版集团'].tolist()

press_rank=df[df['出版社'].isin(lst)].groupby(by='出版社',as_index=False).agg(
    {'评分':np.mean}).sort_values(by='评分',ascending=False)

press_rank.to_excel(r'/PythonTest/Data/press_rank.xls',encoding='utf_8_sig')
press_rank

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

2.8哪些书值得一读?


sor=df[df['评论数量']>50000].sort_values(by='评分',ascending=False)
sor

df['评分'].mean()

sor.eval('加权总分=(((评论数量/(评论数量+50000))*评分)+(50000/(评论数量+50000)))',inplace=True)
book_rank=sor.sort_values(by='加权总分',ascending=False).reset_index(drop=True).head(20)

book_rank.to_excel(r'/PythonTest/Data/book_rank.xls',encoding='utf_8_sig')
book_rank

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

2.9作者排名(10部作品及以上)


df1=df[df['评论数量']>100]

df1=df1[df1['评分']>=8]

writer=df1['作者'].value_counts()
writer=pd.DataFrame(writer)
writer.reset_index(inplace=True)
writer.rename(columns={'index':'作家','作者':'作品数量'},inplace=True)
writer

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

lst1=writer[writer['作品数量']>=10]['作家'].tolist()

writer_rank=df1[df1['作者'].isin(lst1)].groupby(by='作者',as_index=False).agg(
    {'评分':np.mean}).sort_values(by='评分',ascending=False).reset_index(drop=True).head(20)

writer_rank.to_excel(r'/PythonTest/Data/writer_rank.xls',encoding='utf_8_sig')
writer_rank

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

三.数据分析与可视化

3.1各年作品出版数量折线图

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

; 3.2各价位作品数量直方图

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

3.3各出版社出版作品数量条形图&评分折线图

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

; 3.4作者作品评分条形图

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

3.5作品评分树状图

【Python数据分析实战】豆瓣读书分析(含代码和数据集)

Original: https://blog.csdn.net/m0_49263811/article/details/122220339
Author: CHRN晨
Title: 【Python数据分析实战】豆瓣读书分析(含代码和数据集)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/738561/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球