Python 当当网数据分析

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



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

Python 3.7.6 (default, Jan  8 2020, 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
莎拉・圭多 /2017-01-01  /东南大学出版社      1
中国科学技术大学出版社                      1
2020-07-01                       1
上海浦江教育出版社                        1
武汉大学出版社                          1
中山大学出版社                          1
哈尔滨工业大学出版社                       1
机械工业出版社 清华大学出版社                  1
时事出版社                            1
广东高等教育出版社                        1
冶金工业出版社                          1
国防工业出版社                          1
北京交通大学出版社                        1
2018-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]          1
dtype: 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('2020-07-01')
a
Out[19]: 
出版社
北京大学出版社             1
广东高等教育出版社           1
机械工业出版社 清华大学出版社     1
人民邮电出版社 等           2
清华大学出版社             2
清华大学出版社 人民邮电出版社     2
科学出版社               2
电子工业出版社             4
人民邮电出版社            14
机械工业出版社            15
dtype: int64

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

 
c=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(['2018-05-16  /同济大学出版社','2020-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
莎拉・圭多 /2017-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(['2018-05-16  /同济大学出版社','2020-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
莎拉・圭多 /2017-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
2020-07-01                     5.0
莎拉・圭多 /2017-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()

 

Guess you like

Origin blog.csdn.net/c1z2w3456789/article/details/121752578