国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

豆瓣圖書統(tǒng)計可視化分析

這篇具有很好參考價值的文章主要介紹了豆瓣圖書統(tǒng)計可視化分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

s此博客是建立于爬蟲基礎之上,首先我們需要對豆瓣網(wǎng)站的圖書進行爬取,這里將不再展示爬取部分,直接進行數(shù)據(jù)清洗及可視化分析部分。


一.準備數(shù)據(jù)集

數(shù)據(jù)集在下方鏈接當中,如需請自取。

https://pan.baidu.com/s/146N5YQfE0hkkYm2JOZQsEg

豆瓣圖書統(tǒng)計可視化分析


import pandas as pd
import numpy as np
import re
import openpyxl

df=pd.read_csv(r'book_douban.csv',index_col=0)
print(df.head(10)) #打印前十行進行觀察

輸出結果:

豆瓣圖書統(tǒng)計可視化分析

?二.數(shù)據(jù)清洗

大概流程如下:

豆瓣圖書統(tǒng)計可視化分析

?在該數(shù)據(jù)集當中,因為存在大量“不規(guī)則”字符,我們在使用的第一步就需要將該大類數(shù)據(jù)清洗,并且補全一些缺失項數(shù)據(jù)。這樣在接下來的分析及可視化過程當中才可以順利進行。

1.重新命名

因為原數(shù)據(jù)集當中的第六列的標題為:“數(shù)”很抽象,所以我們的第一步清洗就將“數(shù)”重命名為“頁數(shù)”

df.rename(columns={'數(shù)':'頁數(shù)'}, inplace=True)
df.reset_index(drop=True, inplace=True)
df.describe()
print(df.iloc[:, 4])

輸出結果:

豆瓣圖書統(tǒng)計可視化分析

觀察可得,現(xiàn)在已經(jīng)將“數(shù)”改為“頁數(shù)”,接著我們將數(shù)據(jù)中的缺失值或空值刪除或替換為其他值。

2.處理缺失值與空值

#將'none'轉換為null
df = df.replace('None', np.nan)

#查看缺失值情況
print(df.isnull().sum())

#去除'ISBM'列
df = df.drop('ISBM', axis=1)

#去除指定列含有空值的行
df = df.dropna(subset=['作者','出版社','出版時間','頁數(shù)','價格','評分','評論數(shù)量'], how='any')

#重置索引
df = df.reset_index(drop=True)

#確認是否還有空值
df.isnull().sum()

3.出版時間清洗

豆瓣圖書統(tǒng)計可視化分析

觀察上述出版時間一列的數(shù)據(jù)可知,存在這許多不同的時間表達方式,但是為了之后對于時間的可視化描述,我們需要在這里對時間進行“歸一”化。

代碼如下:

 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
 # 將出版時間轉換為整數(shù)型
 df.drop(df[df['出版時間'].str.len()!=4].index,axis=0,inplace=True)
 df['出版時間']=df['出版時間'].astype(np.int32)
 # 發(fā)現(xiàn)出版時間超出實際時間的數(shù)據(jù),將其清除
 df.drop(df[df['出版時間']>2019].index,inplace=True)

?3.檢查頁數(shù)一列的數(shù)據(jù)情況

清洗“頁數(shù)”中存在亂碼/不規(guī)則/標點情況

代碼如下:

df['頁數(shù)'].str.contains('\.').value_counts()
# 規(guī)范頁數(shù)的格式,去除含有其他字符的數(shù)據(jù)比如‘.’
df['頁數(shù)']=df['頁數(shù)'].apply(lambda x:x.replace(',','').replace(' ',''))
df.drop(df[~(df['頁數(shù)'].str.isdecimal())].index,axis=0,inplace=True)

# 轉換頁數(shù)的格式
df['頁數(shù)']=df['頁數(shù)'].astype(np.int32)
df.drop((df[df['頁數(shù)']==0]).index,inplace=True)  # 清除頁數(shù)為0的數(shù)據(jù)

4.對于評分,評論數(shù)量進行轉型操作

代碼如下:

# 轉換數(shù)據(jù)類型
df['評分']=df['評分'].astype(float)
df['評論數(shù)量']=df['評論數(shù)量'].astype(np.int32)

5.對于價格列的清洗

對于價格一列當中不是純數(shù)據(jù)類型的數(shù)據(jù)全部剔除

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)

對于價格小于1的數(shù)據(jù)剔除

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

對于價格一列進行轉型操作,更方便于計算。

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

6.對于書名一列進行清洗

由于是漢語居多,所以我們此時只需清洗書名一樣的數(shù)據(jù)

代碼如下:

df['書名'].value_counts()
df['書名'].duplicated().value_counts()
# 按照評論數(shù)量排名,然后去重,以保證數(shù)據(jù)可靠性
df=df.sort_values(by='評論數(shù)量',ascending=False)
df.reset_index(drop=True,inplace=True)
# 對排序后的數(shù)據(jù)進行去重
df.drop_duplicates(subset='書名', keep='first',inplace=True)
df.reset_index(drop=True,inplace=True)
# 查看是否還有重復的數(shù)據(jù)
df['書名'].value_counts()
# 清理后的數(shù)據(jù)
df.to_excel(r'douban_book.xlsx',encoding='utf_8_sig')

輸出結果:

豆瓣圖書統(tǒng)計可視化分析

7.出版書籍評分最高的為哪一個?

#出版社評分最高計算:
# 先統(tǒng)計各出版社的出版作品數(shù)量
press=df['出版社'].value_counts()
press=pd.DataFrame(press)
press=press.reset_index().rename(columns={'index':'出版集團','出版社':'出版數(shù)量'})
# 將出版作品數(shù)量大于200的出版社名稱提取到列表中
lst=press[press['出版數(shù)量']>200]['出版集團'].tolist()
# 將列表中的出版社的作品平均分計算出來,并按照降序排序
press_rank=df[df['出版社'].isin(lst)].groupby(by='出版社',as_index=False).agg(
    {'評分':np.mean}).sort_values(by='評分',ascending=False)
# 保存為excel
press_rank.to_excel(r'press_rank.xlsx', index=False, encoding='utf-8')
# print(press_rank)

# 打開xlsx文件
workbook = openpyxl.load_workbook('press_rank.xlsx')

# 選擇需要讀取數(shù)據(jù)的sheet
sheet = workbook['Sheet1']

# 讀取第二行第二列的數(shù)據(jù)
data1 = sheet.cell(row=2, column=1).value
data_list = []
for row in range(2, 7):
    data = sheet.cell(row=row, column=1).value
    data_list.append(data)

# 輸出讀取到的數(shù)據(jù)
print("出版社的書籍評分最高的為:",data1)
print("排名表已經(jīng)存于當前目錄下press_rank.xlsx中")
print("評分前五的出版社依次為:",data_list)

輸出結果:

????????豆瓣圖書統(tǒng)計可視化分析

press_rank.xlsx:

?豆瓣圖書統(tǒng)計可視化分析

8. 出版書籍最多的出版社是哪一個?

代碼如下:

df1=df[df['評論數(shù)量']>100]
# 再提取出評分大于等于8的作品
df1=df1[df1['評分']>=8]
# 將過濾后的的作品按作者進行統(tǒng)計
writer=df1['出版社'].value_counts()
writer=pd.DataFrame(writer)
writer.reset_index(inplace=True)
writer.rename(columns={'index':'出版社','出版社':'發(fā)表數(shù)量'},inplace=True)
writer.to_excel(r'chubanshe.xlsx', index=False, encoding='utf-8')
workbook = openpyxl.load_workbook('chubanshe.xlsx')

# 選擇需要讀取數(shù)據(jù)的sheet
sheet1 = workbook['Sheet1']

data2 = sheet1.cell(row=2, column=1).value
data3 = sheet1.cell(row=2, column=2).value
print("*************************************************************")
print("出版書籍最多的出版社為:",data2)
print("數(shù)量為:",data3)
print("剩余排名可查看當前目錄下chubanshe.xlsx")

輸出結果:

豆瓣圖書統(tǒng)計可視化分析

?chubanshe.xlsx:

豆瓣圖書統(tǒng)計可視化分析

?9.價格最高的出版社是哪一個?

代碼如下:

df = pd.read_excel('book_douban1.xlsx')

# 按照某一列進行排序
df_sorted = df.sort_values('價格', ascending=False)

# 將整體表格存入新的表格中
df_sorted.to_excel('price.xlsx', index=False)
workbook1 = openpyxl.load_workbook('price.xlsx')

# 選擇需要讀取數(shù)據(jù)的sheet
sheet2 = workbook1['Sheet1']

data5 = sheet2.cell(row=2, column=1).value
data7 = sheet2.cell(row=2, column=6).value
print("*************************************************************")
print("價格最高的出版社為:",data5)
print("價格為:",data7)

輸出結果:

豆瓣圖書統(tǒng)計可視化分析

三:可視化部分

這里將演示最簡單的柱形圖可視化,進階可視化圖將陸續(xù)更新。

對評分前 5名的出版社每年出版的圖書數(shù)量畫圖進行比較分析。

?代碼如下:

import openpyxl
from collections import Counter
import matplotlib.pyplot as plt
from matplotlib import rcParams

rcParams['font.sans-serif'] = ['SimHei'] # 設置正常顯示中文標簽
rcParams['axes.unicode_minus'] = False # 解決負數(shù)坐標顯示問題

# 打開xlsx文件
wb = openpyxl.load_workbook('book_douban1.xlsx')

# 選擇第一個sheet
sheet = wb.active

# 定義函數(shù),用于生成柱狀圖
def bar_chart(title, publisher):
# 遍歷第三列,輸出包含publisher的行
    lis = []
    for row in sheet.iter_rows(min_row=2, min_col=3, values_only=True):
        if publisher in row:
            lis.append(row[1])
    # 使用Counter類進行計數(shù)
    counter = Counter(lis)
    # 將計數(shù)結果轉換為兩個列表
    x = list(counter.keys())
    y = list(counter.values())

    # 使用pyplot繪制柱狀圖
    plt.bar(x, y)

    # 添加圖表標題和坐標軸標簽
    plt.title(title)
    plt.xlabel('時間')
    plt.ylabel('出版數(shù)量')

    # 顯示圖表
    plt.show()
# 調(diào)用函數(shù)生成各個出版社的柱狀圖
bar_chart('上海古籍出版社', ' 上海古籍出版社')
bar_chart('中華書局', ' 中華書局')
bar_chart('商務印書館', ' 商務印書館')
bar_chart('華東師范大學出版社', ' 華東師范大學出版社')
bar_chart('華夏出版社', ' 華夏出版社')





結果展示:

豆瓣圖書統(tǒng)計可視化分析

?我采用最簡單易懂的方式來繪制此柱形圖,不會的朋友可以留言~文章來源地址http://www.zghlxwxcb.cn/news/detail-488444.html

到了這里,關于豆瓣圖書統(tǒng)計可視化分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包