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
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
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()
?
總結
以上是生活随笔為你收集整理的Python 当当网数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三相同步电机怎么接线图_三相变频电机接线
- 下一篇: 基于JAVA的类与对象做出的英雄打怪兽程