“”"


### 3. 处理页数数据


⽬前只要评分是数值型数据,我们还要将⻚数、价格、评论数量转换成数值型数据。



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rc(‘font’, **{‘family’:‘SimHei’})

导⼊数据

df = pd.read_excel(‘books.xlsx’)

删除第9列

df = df.drop(‘Unnamed: 9’, axis=1)

对数据做清洗(缺失值与异常值)

df.describe()
df.info()
df.dtypes

print(“---------------------------------”)

前期分析

print( df[‘页数’].describe() )
‘’’
count 60671
unique 2109
top None
freq 4267
Name: 页数, dtype: object
‘’’
print( df[‘页数’].isnull().sum() ) # 返回:0 ,这样看不出来
print( len(df[df[‘页数’]==‘None’]) ) # 返回:4267 , 看看有多少 None 值页数信息

print(“---------------------------------”)

转换

定义 convert_to_int ⽅法处理页数数据,如果为 None 则填充 0

import re
def convert2int(x):
if re.match(‘^\d+$’,str(x)):
return x
else:
return 0

df[‘页数’] = df[‘页数’].apply(convert2int)

‘’’

或者⽤ lambda 表达式

df[‘页数’] = df[‘页数’].apply(lambda x: x if re.match(‘^\d+$’, str(x)) else 0)
df[‘页数’] = df[‘页数’].astype(int)

‘’’

print( df[‘页数’].describe() )
‘’’
count 6.067100e+04
mean 6.883281e+06
std 1.695365e+09
min 0.000000e+00
25% 1.940000e+02
50% 2.640000e+02
75% 3.600000e+02
max 4.175936e+11
Name: 页数, dtype: float64
‘’’
print( df[‘页数’].isnull().sum() ) # 返回:0
print( len(df[df[‘页数’]==‘None’]) ) # 返回:0


### 4.处理价格数据



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rc(‘font’, **{‘family’:‘SimHei’})

导⼊数据

df = pd.read_excel(‘books.xlsx’)

删除第9列

df = df.drop(‘Unnamed: 9’, axis=1)

对数据做清洗(缺失值与异常值)

df.describe()
df.info()
df.dtypes

print(“---------------------------------”)

处理价格数据

df[‘价格’] = df[‘价格’].apply(lambda x: x if re.match(‘1+$’, str(x)) else 0)
df[‘价格’] = df[‘价格’].astype(float)

价格为 0 的图书数量

print( len(df[df[‘价格’] == 0]) ) # 3217


### 5.处理评论数量数据



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rc(‘font’, **{‘family’:‘SimHei’})

导⼊数据

df = pd.read_excel(‘books.xlsx’)

删除第9列

df = df.drop(‘Unnamed: 9’, axis=1)

对数据做清洗(缺失值与异常值)

df.describe()
df.info()
df.dtypes

print(“---------------------------------”)

处理评论数量数据

df[‘评论数量’] = df[‘评论数量’].apply(lambda x: x if re.match(‘^\d+$’, str(x)) else 0)
df[‘评论数量’] = df[‘评论数量’].astype(int)

print( df.dtypes )
‘’’
书名 object
作者 object
出版社 object
出版时间 object
页数 int64
价格 float64
ISBN object
评分 float64
评论数量 int32
dtype: obje
‘’’


## 二、分析爬取的网站数据


### 1.处理出版时间


后⾯需要⽤到年份信息,这⾥先对年份信息进⾏加⼯:处理出版时间,只要年份。



import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rc(‘font’, **{‘family’:‘SimHei’})

导⼊数据

df = pd.read_excel(‘books.xlsx’)

删除第9列

df = df.drop(‘Unnamed: 9’, axis=1)

对数据做清洗(缺失值与异常值)

df.describe()
df.info()
df.dtypes

处理⻚数数据

定义 convert_to_int ⽅法处理页数数据,如果为 None 则填充 0

import re
def convert2int(x):
if re.match(‘^\d+$’,str(x)):
return x
else:
return 0
df[‘页数’] = df[‘页数’].apply(convert2int)

处理价格数据

df[‘价格’] = df[‘价格’].apply(lambda x: x if re.match(‘2+$’, str(x)) else 0)
df[‘价格’] = df[‘价格’].astype(float)

处理评论数量数据

df[‘评论数量’] = df[‘评论数量’].apply(lambda x: x if re.match(‘^\d+$’, str(x)) else 0)
df[‘评论数量’] = df[‘评论数量’].astype(int)

print(“---------------------------------”)

处理出版时间,只要年份

def year(s):
y = re.findall(‘\d{4}’,str(s))
if len(y)>0:
return y[0]
return ‘’

df[‘出版年份’] = df[‘出版时间’].apply(year)

看看还有多少没有年份信息的

print( len(df[df[‘出版年份’] == ‘’]) ) # 返回: 1035


### 2.分析图书数量与年份的关系



与上面示例源代码相同,这里省略

print(“---------------------------------”)
print(“---------------------------------”)

按出版年份进⾏分组

grouped = df.groupby(‘出版年份’)
data = grouped[‘ISBN’].count()

有两条数据⽐较奇怪,处理⼀下

df[df[‘出版年份’] == ‘1979’]
df.loc[df.index[60632], [‘书名’, ‘出版时间’, ‘出版年份’]]
“”"
书名 鲁迅作品中的绍兴⽅⾔注释
出版时间 1979/初版印
出版年份 1979
Name: 60632, dtype: object
“”"
df.loc[df.index[60632], [‘出版年份’]] = ‘1979’
df[df[‘出版年份’] == ‘2002’]
df.loc[df.index[4544], [‘书名’, ‘出版时间’, ‘出版年份’]]
“”"
书名 俄罗斯插画作品集
出版时间 2002/2
出版年份 2002
Name: 4544, dtype: object
“”"
df.loc[df.index[4544], [‘出版年份’]] = ‘2002’

然后按”出版年份“进⾏分组

grouped = df.groupby(‘出版年份’)
data = grouped[‘ISBN’].count()
print( data )

print(“---------------------------------”)

判断前7条数据和后4条数据属于异常数据,所以删除前7后4的数据

data2 = data[7:-4]

准备画图,设置宽⼀点

plt.figure(figsize=(15, 5))

设置 x 周标签的倾斜⻆度

plt.xticks(rotation=60)
plt.xlabel(‘年份’)
plt.ylabel(‘图书数量’)
plt.plot(data2.index, data2.values)
plt.show()


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a11b718da2504a7988ae31da563b0ec2.png)


### 3.分析图书评分与年份的关系



与上面示例源代码相同,这里省略

print(“---------------------------------”)
print(“---------------------------------”)

按出版年份进⾏分组

grouped = df.groupby(‘出版年份’)
data = grouped[‘ISBN’].count()

有两条数据⽐较奇怪,处理⼀下

df[df[‘出版年份’] == ‘1979’]
df.loc[df.index[60632], [‘书名’, ‘出版时间’, ‘出版年份’]]
“”"
书名 鲁迅作品中的绍兴⽅⾔注释
出版时间 1979/初版印
出版年份 1979
Name: 60632, dtype: object
“”"
df.loc[df.index[60632], [‘出版年份’]] = ‘1979’
df[df[‘出版年份’] == ‘2002’]
df.loc[df.index[4544], [‘书名’, ‘出版时间’, ‘出版年份’]]
“”"
书名 俄罗斯插画作品集
出版时间 2002/2
出版年份 2002
Name: 4544, dtype: object
“”"
df.loc[df.index[4544], [‘出版年份’]] = ‘2002’

然后按”出版年份“进⾏分组

grouped = df.groupby(‘出版年份’)
data = grouped[‘ISBN’].count()
print( data )

print(“---------------------------------”)

data3 = grouped[‘评分’].mean()
data3 = data3[7:-4]

折线图反映年份和评分之间的关系

设置宽⼀点

plt.figure(figsize=(15, 5))

设置 x 周标签的倾斜⻆度

plt.xticks(rotation=60)
plt.xlabel(‘出版年份’)
plt.ylabel(‘评分’)
plt.plot(data3.index, data3.values)

还要画均值线

m = data3.values.mean()
plt.plot(data3.index, [m]*len(data3.index))
plt.show()


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eaed8b9bf41b4ba8befef142ded26da4.png)


### 4.分析图书价格分布情况



与上面示例源代码相同,这里省略

print(“---------------------------------”)
print(“---------------------------------”)

df2 = df[df[‘价格’] > 0]

看看有多少价格⼤于0的

len(df2)
df2[‘价格’].describe()

直⽅图显⽰图书价格分布情况

plt.figure(figsize=(15, 5))
plt.hist(df2[‘价格’], bins=40, range=(0, 200), rwidth=0.8)
plt.show()


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1f0747ddb0bb409f8de5ae93a3fc9169.png)


### 5.出版图书最多的top20出版社



与上面示例源代码相同,这里省略

print(“---------------------------------”)
print(“---------------------------------”)

出版书籍最多的20个出版社

data4 = df.groupby(‘出版社’)[‘ISBN’].count()
plt.figure(figsize=(15, 5))
plt.title(‘⾼产出版社 Top20’)

最多的是 None,要去掉,所以选择 -21:-1

data4.sort_values()[-21:-1].plot(kind=‘bar’)
plt.show()


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b0d426fe0ca142fab4b4984f71d02c0b.png)


### 6. 图书评分较高的出版社


 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/a5fde6d2facc0e51261c1ce290b8ff77.png)

![img](https://img-blog.csdnimg.cn/img_convert/01cc1f6bb7a0bb8e28b47c797ea7deeb.png)

![img](https://img-blog.csdnimg.cn/img_convert/fc89156a1de85c230652ac2da1e2a977.png)

![img](https://img-blog.csdnimg.cn/img_convert/85eaf9ee6c2c5eed91a893fa286eb069.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

...(img-1q3Z8NID-1713682748223)]

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/35f857b35ea079d2d947bb2122927b78.jpeg)

  1. \d. ↩︎

  2. \d. ↩︎

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐