100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python 当当网数据分析

Python 当当网数据分析

时间:2020-02-21 19:18:54

相关推荐

Python 当当网数据分析

关注微信公共号:小程在线

关注CSDN博客:程志伟的博客

Python 3.7.6 (default, Jan 8 , 20:23:39) [MSC v.1916 64 bit (AMD64)]

Type "copyright", "credits" or "license" for more information.

IPython 7.12.0 -- An enhanced Interactive Python.

1. 读数据表

首先,我们读取原始数据。数据集各字段的介绍可参考此处

import pandas as pd

import re

df=pd.read_csv(r'F:\Python\合鲸社区\10-当当网图书分析\图书数据集.csv',delimiter='\t')

df.head(5)

Out[2]:

书名 ... 评论数

0 机器学习 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著... ... 76149条评论

1 机器学习实战【python基础教程指南,python核心编程实例指导,对wxpython数... ... 25256条评论

2 机器学习实战:基于Scikit-Learn和TensorFlow 被称为机器学习图书*强的... ... 5759条评论

3 机器学习理论导引 ... 783条评论

4 机器学习――原理、算法与应用 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度... ... 1184条评论

[5 rows x 5 columns]

2. 提取价格数值

我们去掉当前价格这一列中的 '¥' 符号,将当前价格中的数值提取出来,保存为新的一列当前价格_match。

df['当前价格_match']=df['当前价格'].str.replace('¥','')

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

3. 提取评论数

对于评论数这一列提取数值,保存为评论数_match。

df['评论数_match']=df['评论数'].str.replace('条评论','').astype('int32')

4.提取星级数值

对于星级这一列提取数值,保存为星级_match。

df['星级_match']=df['星级'].str.replace('width: ','')

df['星级_match']=df['星级_match'].str.replace('%;','').astype('int32')

5. 星级数值除以20

接着将提取出的星级数值除以20,将取值范围转换为[0,5]。

def function(x):

if x==100:

return '5星'

elif x==90:

return '4星半'

elif x==80:

return '4星'

elif x==70:

return '3星半'

elif x==60:

return '3星'

elif x==50:

return '2星半'

elif x==40:

return '2星'

elif x==30:

return '1星半'

elif x==20:

return '1星'

elif x==10:

return '半星'

else:

return '0星'

df['星级_match']=df['星级_match'].apply(function)

6. 出版信息字符串分割

接下来我们处理出版信息这一列,从原始数据中可以看到,这一列主要包含三个信息,分别是作者、出版日期、出版社。它们以“/”分隔,并且存放在一个数据单元中,我们将它们分别取出,然后单独存为三列。

def function_1(x):

return x.split('/')[0]

def function_2(x):

if len(x.split('/',2))==3:

return x.split('/',2)[1]

else:

return '未知'

def function_3(x):

return x.split('/',2)[-1]

df['作者']=df['出版信息'].apply(function_1)

df['出版社']=df['出版信息'].apply(function_3)

df['出版时间']=df['出版信息'].apply(function_2)

7. 书名去掉【】

书名信息中混合着简介信息,观察原始数据中书名一列,能找到一些规律。除去一些包含在 【】和 [] 中间的标注信息,剩余的内容中书名和其他内容基本是由空格隔开的。所以我们首先将【】和 [] 去掉,然后按照空格分隔字符串,第一个内容便是书名。

首先在书名一列中去掉【】中的信息,并将结果保存为书名_replace:

df['书名_replace']=df['书名'].str.replace('【',' ')

df['书名_replace']=df['书名_replace'].str.replace('】',' ')

8. 书名去掉[]

接着在书名_replace一列中去掉[]中的信息,保存为书名_replace_replace:

df['书名_replace_replace']=df['书名_replace'].str.replace('[','')

df['书名_replace_replace']=df['书名_replace_replace'].str.replace(']','')

9. 书名字符串分割

去除方括号【】和[]后我们把书名_replace_replace列中文字根据空格进行字符串分割,并进行分列。

def name(x):

return x.split()[0]

def jianjie_1(x):

a=x.split()

if len(a)==1:

return ' '

else:

return a[1]

def jianjie_2(x):

a=x.split()

if len(a)==3:

return a[2]

else:

return ' '

df['name']=df['书名_replace_replace'].apply(name)

df['简介_1']=df['书名_replace_replace'].apply(jianjie_1)

df['简介_2']=df['书名_replace_replace'].apply(jianjie_2)

10. 删除不需要的数据列

在原始数据中和上面操作生成数据中有许多冗余数据列,我们把不需要的数据列都删除掉。

df=df.drop(['书名','出版信息','当前价格','星级','评论数','书名_replace','书名_replace_replace'],axis=1)

11. 数据字段重命名¶

df['当前价格']=df['当前价格_match']

df['评论数']=df['评论数_match']

df['星级']=df['星级_match']

df['书名称']=df['name']

df=df.drop(['当前价格_match','评论数_match','星级_match','name'],axis=1)

df=df.reindex(['当前价格','星级','评论数','作者','出版社','出版时间','书名称','简介_1','简介_2'],axis=1)

12. 查看数据

首先使用读数据表组件读取原始数据,并查看各字段基本情况。

df.head(5)

Out[15]:

当前价格 星级 ... 简介_1 简介_2

0 66.0 4星半 ... 击败AlphaGo的武林秘籍,赢得人机大战的必由之路:人工智能大牛周志华教授巨著,全面揭开机...

1 46.3 4星半 ... python基础教程指南,python核心编程实例指导,对wxpython数据库充分的讲解,...

2 83.3 4星半 ... 被称为机器学习图书*强的存在!前谷歌工程师撰写,“美亚”人工智能图书畅销榜首图书!从实践出发...

3 62.3 5星 ...

4 39.6 4星半 ... 全书深入浅出,兼具广度与深度,帮助读者真正掌握机器学习、深度学习的原理与应用

[5 rows x 9 columns]

13. 字段基本统计信息

这一步使用字段基本信息统计组件统计并生成数据集中各个字段的样本数、均值、标准差、最小值、四分位数等基本信息。

In[23]:

df.describe()

Out[16]:

当前价格评论数

count 600.000000 600.000000

mean 60.941183 530.863333

std 32.768884 4074.239732

min 14.990000 0.000000

25% 44.075000 0.000000

50% 55.600000 7.000000

75% 69.000000 133.000000

max 355.000000 76149.000000

14. 各出版社出版图书数量

使用查看唯一值及数量组件,统计图书所属的出版社信息。

df.groupby(['出版社']).size().sort_values(ascending=False)

Out[17]:

出版社

机械工业出版社 215

人民邮电出版社 127

清华大学出版社 112

电子工业出版社 52

东南大学出版社 17

科学出版社 16

北京大学出版社 11

水利水电出版社 8

中国电力出版社 4

人民邮电出版社有限公司 4

中国人民大学出版社 3

化学工业出版社 3

西安电子科技大学出版社 2

中信出版社 2

人民邮电出版社 等 2

华中科技大学出版社 2

科学技术文献出版社 2

知识产权出版社 2

清华大学出版社 人民邮电出版社 2

莎拉・圭多 /-01-01 /东南大学出版社 1

中国科学技术大学出版社 1

-07-01 1

上海浦江教育出版社 1

武汉大学出版社 1

中山大学出版社 1

哈尔滨工业大学出版社 1

机械工业出版社 清华大学出版社 1

时事出版社 1

广东高等教育出版社 1

冶金工业出版社 1

国防工业出版社 1

北京交通大学出版社 1

-05-16 /同济大学出版社 1

dtype: int64

15. 各星级图书数量统计直方图

这一步统计图书的星级信息。

star=df.groupby(['星级']).size()

star

Out[18]:

星级

0星 345

1星半 2

2星半 1

3星 2

3星半 4

4星 16

4星半 66

5星 164

dtype: int64

from pyecharts import options as opts

from pyecharts.charts import Bar

from pyecharts.faker import Faker

c=Bar()

c.add_xaxis(star.index.tolist())

c.add_yaxis("数量",star.values.tolist())

c.reversal_axis()

c.set_series_opts(label_opts=opts.LabelOpts(position="right"))

c.set_global_opts(title_opts=opts.TitleOpts(title="各星级的数量"))

c.render_notebook()

16. 图书价格直方图

使用直方图,显示图书的价格分布。

#16. 图书价格直方图

price=df['当前价格']

price=price.tolist()

cats=pd.cut(price,20,3)

price_1=df.value_counts(cats).sort_index()

price_1

(14.65, 31.99] 66(31.99, 48.991] 148(48.991, 65.991]201(65.991, 82.992]114(82.992, 99.992] 26(99.992, 116.993]16(116.993, 133.993]5(133.993, 150.994]12(150.994, 167.994]3(167.994, 184.995]3(184.995, 201.996]1(201.996, 218.996]1(218.996, 235.996]1(235.996, 252.997]0(252.997, 269.998]1(269.998, 286.998]0(286.998, 303.998]0(303.998, 320.999]1(320.999, 338.0] 0(338.0, 355.0]1dtype: int64

price_index=['(14.65, 31.99)','(31.99, 48.991)','(48.991, 65.991)','(65.991, 82.992)','(82.992, 99.992)','(99.992, 116.993)'

,'(116.993, 133.993)','(133.993, 150.994)','(167.994, 184.995)','(184.995, 201.996)','(201.996, 218.996)',

'(218.996, 235.996)','(235.996, 252.997)','(252.997, 269.998)','(269.998, 286.998)','(286.998, 303.998)',

'(320.999, 338.0)','(338.0, 355.0)']

from pyecharts import options as opts

from pyecharts.charts import Bar

from pyecharts.faker import Faker

c=Bar()

c.add_xaxis(price_index)

c.add_yaxis("在该价格区间的数量", price_1.values.tolist())

c.set_global_opts(title_opts=opts.TitleOpts(title="图书价格直方图"))

c.render_notebook()

17. 高价书籍筛选

在上一步,通过绘制图书价格的直方图,我们发现一部分图书价格偏离样本均值较大,我们接下来针对这一部分图书进行定性分析。我们首先使用数据筛选组件筛选出价格大于100元的图书信息。筛选结果如下表所示:

more_100=df[df['当前价格']>100]

more_100.head(5)

Out[18]:

当前价格 星级 ... 简介_1 简介_2

5 112.6 4星 ...人工智能算法,机器学习奠基之作,AI圣经

34 104.2 0星 ... 全景式呈现机器学习领域的基础理论,以及将这些技术应用于实际问题的有效方法,提供自学项目和数据集

53 101.9 5星 ... 自动化技术

80 212.5 5星 ... 畅读原版机器学习经典著作,在全景式知识体系中融会传统与创新算法

94 101.1 4星半 ...

[5 rows x 9 columns]

18. 高价书籍所属出版社统计

上一步中我们筛选出了价格大于100元的图书,这一步我们使用饼状图展示这一部分图书所属的出版社。

a=more_100.groupby(['出版社']).size().sort_values()

a.pop('-07-01')

a

Out[19]:

出版社

北京大学出版社 1

广东高等教育出版社1

机械工业出版社 清华大学出版社 1

人民邮电出版社 等2

清华大学出版社 2

清华大学出版社 人民邮电出版社 2

科学出版社 2

电子工业出版社 4

人民邮电出版社14

机械工业出版社15

dtype: int64

from pyecharts import options as optsfrom pyecharts.charts import Piefrom pyecharts.faker import Fakerc=Pie()c.add("",[list(z)for z in zip(a.index.tolist(),a.values.tolist() ,)],center=["40%", "50%"],)c.set_global_opts(title_opts=opts.TitleOpts(title="高价书籍所属出版社统计"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),)c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))c.render_notebook()

19. 各出版社图书价格均值

这一步使用数据分组聚合组件,对图书分组列分组聚合分析。分组的列为出版社,聚合列为图书价格,聚合函数为平均值函数。这一步的分析主要是计算各个出版社出版图书的平均价格的高低。分组聚合分析的结果如下表所示:

c=df['当前价格'].groupby(df['出版社']).mean()

c.drop(['-05-16 /同济大学出版社','-07-01'])

Out[20]:

出版社

上海浦江教育出版社 73.570000

东南大学出版社 67.027647

中信出版社 35.495000

中国人民大学出版社 37.533333

中国电力出版社 38.475000

中国科学技术大学出版社 47.600000

中山大学出版社 42.300000

人民邮电出版社 60.872913

人民邮电出版社 等 129.235000

人民邮电出版社有限公司 37.505000

冶金工业出版社 36.300000

化学工业出版社 40.166667

北京交通大学出版社 50.600000

北京大学出版社 53.271818

华中科技大学出版社 34.050000

哈尔滨工业大学出版社 59.200000

国防工业出版社 81.200000

广东高等教育出版社 169.970000

时事出版社 59.900000

机械工业出版社 64.535302

机械工业出版社 清华大学出版社 200.000000

武汉大学出版社 30.000000

水利水电出版社 49.475000

清华大学出版社 50.729464

清华大学出版社 人民邮电出版社 290.000000

电子工业出版社 59.374231

知识产权出版社 34.350000

科学出版社 76.913750

科学技术文献出版社 38.950000

莎拉・圭多 /-01-01 /东南大学出版社 70.300000

西安电子科技大学出版社 31.050000

Name: 当前价格, dtype: float64

20.各出版社出版图书口碑分析

这一步我们通过计算出版社出版机器学习类图书平均星级的高低,来分析出版社出版机器学习类图书的质量以及出版社在用户中的口碑。使用数据分组聚合组件,对图书进行分组聚合分析。分组的列为出版社,聚合列为图书星级,聚合函数为平均值函数。这一步的分析主要是计算各个出版社出版图书的平均星级的高低。分析的结果如下表所示:

df['星级(float)']=df['星级'].str.replace('星','.')

df['星级(float)']=df['星级(float)'].str.replace('半','5')

df['星级(float)']=df['星级(float)'].astype('float')

b=df['星级(float)'].groupby(df['出版社']).mean()

b.drop(['-05-16 /同济大学出版社','-07-01'])

Out[21]:

出版社

上海浦江教育出版社 0.000000

东南大学出版社 2.000000

中信出版社 4.750000

中国人民大学出版社 4.333333

中国电力出版社 3.625000

中国科学技术大学出版社5.000000

中山大学出版社 0.000000

人民邮电出版社 1.748031

人民邮电出版社 等 2.500000

人民邮电出版社有限公司0.375000

冶金工业出版社 0.000000

化学工业出版社 1.666667

北京交通大学出版社 0.000000

北京大学出版社 2.181818

华中科技大学出版社 2.500000

哈尔滨工业大学出版社 0.000000

国防工业出版社 5.000000

广东高等教育出版社 0.000000

时事出版社 3.500000

机械工业出版社 2.006977

机械工业出版社 清华大学出版社 0.000000

武汉大学出版社 0.000000

水利水电出版社 4.750000

清华大学出版社 1.647321

清华大学出版社 人民邮电出版社 5.000000

电子工业出版社 2.605769

知识产权出版社 5.000000

科学出版社 2.187500

科学技术文献出版社 2.500000

莎拉・圭多 /-01-01 /东南大学出版社 5.000000

西安电子科技大学出版社0.000000

Name: 星级(float), dtype: float64

21. 数据按列值排序

在这一步,我们使用数据按列值排序组件,对上一步的分析结果,按照图书星级平均值星级_mean进行降序排序,结果如下:

b.sort_values(ascending=False).head(5)

Out[22]:

出版社

国防工业出版社 5.0

知识产权出版社 5.0

清华大学出版社 人民邮电出版社 5.0

-07-01 5.0

莎拉・圭多 /-01-01 /东南大学出版社 5.0

Name: 星级(float), dtype: float64

22.词云图

from pyecharts import options as opts

from pyecharts.charts import WordCloud

from pyecharts.globals import SymbolType

words = [

("学习", 10),

("机器", 61),

("算法", 43),

("实例", 40),

("技术", 24),

("理论", 22),

("应用", 18),

("基础知识", 14),

("数据分析", 11),

("科学", 8),

("基础", 8),

("工程", 5),

("全面", 5),

("清华大学出版社", 5),

("经典", 4),

("著作", 3),

("智能", 3),

("张敏玲", 2),

("模型", 2),

("问题", 2),

("王磊", 2),

("机械", 22),

("于洋", 18),

("周志华", 14),

("可视化", 11),

("阿图尔", 8),

("数据挖掘", 8),

("帮助", 2),

("大量", 5),

("实际使用", 5),

("深度", 6),

("平台", 3),

("视频", 3),

("场景", 8),

("原理", 7),

("图书", 5),

]

c=WordCloud()

c.add("词云图", words, word_size_range=[20, 100], shape=SymbolType.DIAMOND)

c.set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond"))

c.render_notebook()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。