安卓手机性能排行之安兔兔爬虫分析

安卓手机性能排行之安兔兔爬虫分析

一、选题背景

       现今大多数人在购买手机的时候会优先考虑,Android和苹果这两款手机。在一般情况下,消费者购买手机都会去了解某种机型的情况,如外观、Soc(cpu、gup……)、综合测评、续航。如何去了解呢?例如bilibili看数码up主评测该机型,还有一些人会到该手机的平台上去了解数据。然后现在这个安兔兔评测(AnTuTu Benchmark)是一款专门为手机、平板电脑等产品进行性能评测的APP,你可以通过它获得精准的设备硬件信息和性能评价,并与其它产品进行横向或纵向的性能对比,能够深入了解设备信息,是全球对安卓设备信息展示最全面的APP软件。为此,此次课题通过安兔兔跑分平台,了解Android手机排行数据并做可视化分析。

二、设计方案

  2.1 主题式爬虫名称

    安兔兔跑分Android类爬虫系统

  2.2 主题式网络爬虫爬取内容与数据特征分析

    内容:手机名、cpu、gpu、ux、mem、总分。

    分析:网页文本  

  2.3 思路   

      1.查看网页结构。

      2.查看网页爬取内容的位置。

      3.取出数据。

  2.4 难点

      1.异常处理。

      2.网页内容读取,xtree第三方库用法。

      3.数据遍历。

      4.数据批量存储。

      5.整体系统设计。

三、实现步骤及代码

  3.1爬虫设计

  3.1.1主题页面的结构特征与特征分析

    页面有Android跑分、IOS跑分、Android Soc,此次主要针对性能榜。

    

  

  3.1.2Htmls 页面解析

  url='手机排行榜_V9_安兔兔跑分排行_安兔兔 (antutu.com)'

      页面解析:

              手机名称

     

    CPU

     

    GPU

     

    MEM

     

    UX

     

    总分

     

  3.1.3节点查找方法与遍历方法

    查找节点:

 1 手机名称:
 2 name = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
 3 /div/ul[{}]/a/div[2]/li[1]/text()".format(a))
 4 CPU:
 5 phone_cpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
 6 /div/ul[{}]/a/div[2]/li[2]/text()".format(a))
 7 GPU:
 8 phone_gpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
 9 /div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_gpu_coun))
10 MEM:
11 phone_mem = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
12 /div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_mem_coun))
13 UX:
14 phone_ux = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
15 /div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_ux_coun))
16 总分:
17 phone_sum = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]
18 /div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_sum_coun))

 

 

    遍历方法:

    采用for循环把内容取出。

 

1 #以列表的形式储存
2 sum = name + phone_cpu + phone_gpu + phone_mem + phone_ux + phone_sum
3 print(sum)
4 # 保存数据至Phone_pop.csv
5 for j in sum:
6     # print(j)

 

  3.1.4数据爬取与采集

  代码分析:

 

 1 # 请求访问
 2 ress = requests.get(url,headers=headers)
 3 ress.encoding = 'utf-8'
 4 # soup =  BeautifulSoup(ress.text,'lxml')
 5 html = etree.HTML(ress.text)
 6 # print(html)
 7 # 初始化查询数据
 8 a = 3
 9 phone_mem_coun = 4
10 phone_ux_coun = 5
11 phone_sum_coun = 6
12 phone_gpu_coun = 3
13 # 分析手机排行榜信息:手机名称name、手机cpu分数phone_cpu、手机gpu分数phone_gpu、Mem分数phone_me、UX分数phone_ux、总分phone_sum
14 for i in range(3,127):
15     # 使用xpath定位标签
16     name = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[1]/text()".format(a))
17     phone_cpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[2]/text()".format(a))
18     phone_gpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_gpu_coun))
19     phone_mem = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_mem_coun))
20     phone_ux = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_ux_coun))
21     phone_sum = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_sum_coun))
22     a += 1
23     # 以列表的形式储存
24     sum = name + phone_cpu + phone_gpu + phone_mem + phone_ux + phone_sum
25     print(sum)
26     # 保存数据至Phone_pop.xlsx
27     for j in sum:
28         # print(j)
29         with open('Phone_pop.xlsx',"a",encoding='utf-8') as file1:
30             file1.writelines(sum[0] + "," + sum[1] + "," + sum[2] + "," + sum[3] + "," + sum[4] + "," + sum[5] +'\n')

 

  3.1.5爬虫系统运行演示

  

  3.2数据分析

  导入数据:

 

1 import numpy as np
2 import pandas as pd
3 import matplotlib.pyplot as plt
4 Android_phone_data = pd.read_excel(r'C:/Users/angel/Desktop/Phone_pop.xlsx')
5 Android_phone_data 

 显示结果:

  

 

  3.2.1对数据进行清洗和处理

 

1 # 重复值处理
2 Android_phone_data = Android_phone_data.drop_duplicates('phone_cpu')
3 # Nan处理
4 Android_phone_data = Android_phone_data.dropna(axis = 0)
5 #删除无效行
6 # Android_phone_data = Android_phone_data.drop(['text'], axis = 1)
7 # cpu降序排列
8 Android_phone_data.sort_values(by=["phone_cpu"],inplace=True,ascending=[False])
9 Android_phone_data

  显示结果:

 

  

 

 

  3.2.2数据分析与可视化

  柱状图 
 1 # cpu降序排列
 2 Android_phone_data.sort_values(by=["phone_cpu"],inplace=True,ascending=[False])
 3 Android_phone_data
 4 x = Android_phone_data['name'].head(10)
 5 y = Android_phone_data['phone_cpu'].head(10)
 6 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 7 plt.rcParams['axes.unicode_minus']=False
 8 plt.xticks(rotation=90)
 9 plt.bar(x,y,alpha=0.2, width=0.6, color='b', lw=3)
10 plt.legend(loc = "best")#图例
11 plt.title("安卓手机cpuTop趋势图",fontsize=18)
12 plt.show()

 显示结果:

  

  

 1 Android_phone_data.sort_values(by=["phone_gpu"],inplace=True,ascending=[False])
 2 x = Android_phone_data['name'].head(10)
 3 y = Android_phone_data['phone_gpu'].head(10)
 4 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 5 plt.rcParams['axes.unicode_minus']=False
 6 plt.xticks(rotation=90)
 7 plt.bar(x,y,alpha=0.2, width=0.6, color='k', lw=3)
 8 plt.legend(loc = "best")#图例
 9 plt.title("安卓手机gpuTop趋势图",fontsize=18)
10 plt.show()

 显示结果:

  

 1 Android_phone_data.sort_values(by=["phone_mem"],inplace=True,ascending=[False])
 2 x = Android_phone_data['name'].head(10)
 3 y = Android_phone_data['phone_mem'].head(10)
 4 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 5 plt.rcParams['axes.unicode_minus']=False
 6 plt.xticks(rotation=90)
 7 plt.bar(x,y,alpha=0.2, width=0.6, color='cyan', lw=3)
 8 plt.legend(loc = "best")#图例
 9 plt.title("安卓手机memTop趋势图",fontsize=18)
10 plt.show()

 显示结果:

  

 

 1 Android_phone_data.sort_values(by=["phone_ux"],inplace=True,ascending=[False])
 2 x = Android_phone_data['name'].head(10)
 3 y = Android_phone_data['phone_ux'].head(10)
 4 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 5 plt.rcParams['axes.unicode_minus']=False
 6 plt.xticks(rotation=90)
 7 plt.bar(x,y,alpha=0.2, width=0.6, color='deeppink', lw=3)
 8 plt.legend(loc = "best")#图例
 9 plt.title("安卓手机UxTOP10趋势图",fontsize=18)
10 plt.show()

 显示结果:

  

 

 1 Android_phone_data.sort_values(by=["phone_sum"],inplace=True,ascending=[False])
 2 x = Android_phone_data['name'].head(10)
 3 y = Android_phone_data['phone_sum'].head(10)
 4 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 5 plt.rcParams['axes.unicode_minus']=False
 6 plt.xticks(rotation=90)
 7 plt.bar(x,y,alpha=0.2, width=0.6, color='deepskyblue', lw=3)
 8 plt.legend(loc = "best")#图例
 9 plt.title("安卓手机总分TOP10趋势图",fontsize=18)
10 plt.show()

 显示结果:

  

 

  水平图
1 # 水平图
2 plt.barh(x,y, alpha=0.2, height=0.4, color='lightcoral',label="热度", lw=3)
3 plt.title("安卓手机总分TOP10趋势图",fontsize=18)
4 plt.legend(loc = "best")#图例
5 plt.xticks(rotation=90)
6 plt.xlabel("总分",)#横坐标名字
7 plt.ylabel("手机")#纵坐标名字

 显示结果:

 

1 # 水平图
2 x = Android_phone_data['name'].head(10)
3 y = Android_phone_data['phone_cpu'].head(10)
4 plt.barh(x,y, alpha=0.2, height=0.4, color='coral',label="热度", lw=3)
5 plt.title("安卓手机CPUTOP10趋势图",fontsize=18)
6 plt.legend(loc = "best")#图例
7 plt.xticks(rotation=90)
8 plt.xlabel("总分",)#横坐标名字
9 plt.ylabel("手机")#纵坐标名字

  显示结果:

 

1 # 水平图
2 x = Android_phone_data['name'].head(10)
3 y = Android_phone_data['phone_gpu'].head(10)
4 plt.barh(x,y, alpha=0.2, height=0.4, color='darkolivegreen')
5 plt.title("安卓手机GPUTOP10趋势图",fontsize=18)
6 plt.legend(loc = "best")#图例
7 plt.xticks(rotation=90)
8 plt.xlabel("总分",)#横坐标名字
9 plt.ylabel("手机")#纵坐标名字

 显示结果:

 

1 # 水平图
2 x = Android_phone_data['name'].head(10)
3 y = Android_phone_data['phone_mem'].head(10)
4 plt.barh(x,y, alpha=0.2, height=0.4, color='darkolivegreen')
5 plt.title("安卓手机MemTOP10趋势图",fontsize=18)
6 plt.legend(loc = "best")#图例
7 plt.xticks(rotation=90)
8 plt.xlabel("总分",)#横坐标名字
9 plt.ylabel("手机")#纵坐标名字

  显示结果:

1 # 水平图
2 x = Android_phone_data['name'].head(10)
3 y = Android_phone_data['phone_ux'].head(10)
4 plt.barh(x,y, alpha=0.2, height=0.4, color='chartreuse')
5 plt.title("安卓手机UXTOP10趋势图",fontsize=18)
6 plt.legend(loc = "best")#图例
7 plt.xticks(rotation=90)
8 plt.xlabel("总分",)#横坐标名字
9 plt.ylabel("手机")#纵坐标名字

 显示结果:

  散点图

 

1 # 散点图
2 x = Android_phone_data['name'].head(30)
3 y = Android_phone_data['phone_cpu'].head(30)
4 plt.scatter(x,y,color='lightgreen',marker='o',s=40,alpha=0.5)
5 plt.xticks(rotation=90)
6 plt.title("安卓手机CPU散点图")
7 plt.xlabel("总分",)#横坐标名字
8 plt.ylabel("手机")#纵坐标名字

 显示结果:

 

  

1 # 散点图
2 x = Android_phone_data['name'].head(30)
3 y = Android_phone_data['phone_gpu'].head(30)
4 plt.scatter(x,y,color='magenta',marker='o',s=40,alpha=0.5)
5 plt.xticks(rotation=90)
6 plt.title("安卓手机CPU散点图")
7 plt.xlabel("总分",)#横坐标名字
8 plt.ylabel("手机")#纵坐标名字

 显示结果:

  

  盒图

 

1 #盒图
2 
3 plt.boxplot(y)
4 plt.title("安卓手机CPU散盒图")
5 plt.show()

 显示结果:

 

 

3.2.2 回归线性方程

1 #散点图
2 import seaborn as sns
3 import matplotlib.pyplot as plt
4 import pandas as pd
5 import numpy as np
6 import warnings
7 warnings.filterwarnings("ignore")
8 four=pd.DataFrame(pd.read_excel('C:/Users/angel/Desktop/Phone_pop.xlsx'))
9 sns.regplot(x='phone_cpu',y='phone_gpu',data=four,color='r')

显示结果

 

 1 from sklearn import datasets
 2 from sklearn.linear_model import LinearRegression
 3 import pandas as pd
 4 import numpy as np
 5 import seaborn as sns
 6 predict_model = LinearRegression()
 7 three=pd.DataFrame(pd.read_excel('C:/Users/angel/Desktop/Phone_pop.xlsx'))
 8 X = three['phone_cpu'].values
 9 X = X.reshape(-1,1)
10 predict_model.fit(X , three['phone_gpu'])
11 np.set_printoptions(precision = 3, suppress = True)
12 a = predict_model.coef_
13 b = predict_model.intercept_
14 print("回归方程系数{}".format(predict_model.coef_))
15 print("回归方程截距{0:2f}".format(predict_model.intercept_))
16 print("线性回归预测模型表达式为{}*x+{}".format(predict_model.coef_,predict_model.intercept_))

显示结果:

 

  3.2.3 文本分析

 

 1 # 词云
 2 import random
 3 import wordcloud as wc
 4 import matplotlib.pyplot as plt
 5 
 6 bk = np.array(Image.open("wyymuc.jpg"))
 7 mask = bk
 8 # 定义图片尺寸
 9 word_cloud = wc.WordCloud(
10    mask = mask,
11    background_color='mintcream',  
12    font_path='msyhbd.ttc',  
13    max_font_size=300, 
14    random_state=50,  
15                        )
16 text = Android_phone_data["name"]
17 text = " ".join(text)
18 # 绘制词云
19 word_cloud.generate(text)
20 plt.imshow(word_cloud)
21 plt.show()

 显示结果:

 

  3.3代码汇总

 

  1 import  requests
  2 from bs4 import BeautifulSoup
  3 import time
  4 import random
  5 import sys
  6 import re
  7 from tqdm import tqdm
  8 from lxml import etree
  9 
 10 # 随机头
 11 USER_AGENTS = [
 12     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 13     "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
 14     "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 15     "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
 16     "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
 17     "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
 18     "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
 19     "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
 20     "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
 21     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
 22     "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
 23     "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
 24     "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
 25     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
 26     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
 27     "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
 28     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
 29     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
 30     "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
 31     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
 32     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
 33 ]
 34 headers = {
 35    'User-Agent':random.choice(USER_AGENTS),
 36     # 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0',
 37    'Connection':'keep-alive',
 38     'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'
 39     }
 40 
 41 url = 'http://www.antutu.com/ranking/rank1.htm'
 42 
 43 file = open("Phone_pop.xlsx", "a")
 44 file.write("name" + "," + "phone_cpu" + "," + "phone_gpu" + "," + "phone_mem" + "," +  "phone_ux" + "," +  "phone_sum" + '\n')
 45 file = file.close()
 46 
 47 def Antutu():
 48     # 请求访问
 49     ress = requests.get(url,headers=headers)
 50     ress.encoding = 'utf-8'
 51     # soup =  BeautifulSoup(ress.text,'lxml')
 52     html = etree.HTML(ress.text)
 53     # print(html)
 54     # 初始化查询数据
 55     a = 3
 56     phone_mem_coun = 4
 57     phone_ux_coun = 5
 58     phone_sum_coun = 6
 59     phone_gpu_coun = 3
 60     # 分析手机排行榜信息:手机名称name、手机cpu分数phone_cpu、手机gpu分数phone_gpu、Mem分数phone_me、UX分数phone_ux、总分phone_sum
 61     for i in range(3,127):
 62         # 使用xpath定位标签
 63         name = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[1]/text()".format(a))
 64         phone_cpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[2]/text()".format(a))
 65         phone_gpu = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_gpu_coun))
 66         phone_mem = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_mem_coun))
 67         phone_ux = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_ux_coun))
 68         phone_sum = html.xpath("//*[@id='rank']/div[1]/div/div/div[1]/div/div[1]/div/ul[{}]/a/div[2]/li[{}]/text()".format(a,phone_sum_coun))
 69         a += 1
 70         # 以列表的形式储存
 71         sum = name + phone_cpu + phone_gpu + phone_mem + phone_ux + phone_sum
 72         print(sum)
 73         # 保存数据至Phone_pop.xlsx
 74         for j in sum:
 75             # print(j)
 76             with open('Phone_pop.xlsx',"a",encoding='utf-8') as file1:
 77                 file1.writelines(sum[0] + "," + sum[1] + "," + sum[2] + "," + sum[3] + "," + sum[4] + "," + sum[5] +'\n')
 78 
 79 if __name__ == '__main__':
 80     Antutu()
 81 
 82 3.3.2 数据分析
 83 import numpy as np
 84 import pandas as pd
 85 import matplotlib.pyplot as plt
 86 Android_phone_data = pd.read_excel(r'C:/Users/angel/Desktop/Phone_pop.xlsx')
 87 Android_phone_data
 88 # 重复值处理
 89 Android_phone_data = Android_phone_data.drop_duplicates('phone_cpu')
 90 # Nan处理
 91 Android_phone_data = Android_phone_data.dropna(axis = 0)
 92 # 删除无效行
 93 # Android_phone_data = Android_phone_data.drop(['text'], axis = 1)
 94 # cpu降序排列
 95 Android_phone_data.sort_values(by=["phone_cpu"],inplace=True,ascending=[False])
 96 Android_phone_data
 97 # gpu降序排列
 98 Android_phone_data.sort_values(by=["phone_cpu"],inplace=True,ascending=[False])
 99 
100 Android_phone_data
101 x = Android_phone_data['name'].head(10)
102 y = Android_phone_data['phone_cpu'].head(10)
103 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
104 plt.rcParams['axes.unicode_minus']=False
105 plt.xticks(rotation=90)
106 plt.bar(x,y,alpha=0.2, width=0.6, color='b', lw=3)
107 plt.legend(loc = "best")#图例
108 plt.title("安卓手机cpuTop趋势图",fontsize=18)
109 plt.show()
110 Android_phone_data.sort_values(by=["phone_gpu"],inplace=True,ascending=[False])
111 x = Android_phone_data['name'].head(10)
112 y = Android_phone_data['phone_gpu'].head(10)
113 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
114 plt.rcParams['axes.unicode_minus']=False
115 plt.xticks(rotation=90)
116 plt.bar(x,y,alpha=0.2, width=0.6, color='k', lw=3)
117 plt.legend(loc = "best")#图例
118 plt.title("安卓手机gpuTop趋势图",fontsize=18)
119 plt.show()
120 Android_phone_data.sort_values(by=["phone_mem"],inplace=True,ascending=[False])
121 x = Android_phone_data['name'].head(10)
122 y = Android_phone_data['phone_mem'].head(10)
123 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
124 plt.rcParams['axes.unicode_minus']=False
125 plt.xticks(rotation=90)
126 plt.bar(x,y,alpha=0.2, width=0.6, color='cyan', lw=3)
127 plt.legend(loc = "best")#图例
128 plt.title("安卓手机memTop趋势图",fontsize=18)
129 plt.show()
130 Android_phone_data.sort_values(by=["phone_ux"],inplace=True,ascending=[False])
131 x = Android_phone_data['name'].head(10)
132 y = Android_phone_data['phone_ux'].head(10)
133 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
134 plt.rcParams['axes.unicode_minus']=False
135 plt.xticks(rotation=90)
136 plt.bar(x,y,alpha=0.2, width=0.6, color='deeppink', lw=3)
137 plt.legend(loc = "best")#图例
138 plt.title("安卓手机UxTOP10趋势图",fontsize=18)
139 plt.show()
140 Android_phone_data.sort_values(by=["phone_sum"],inplace=True,ascending=[False])
141 x = Android_phone_data['name'].head(10)
142 y = Android_phone_data['phone_sum'].head(10)
143 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
144 plt.rcParams['axes.unicode_minus']=False
145 plt.xticks(rotation=90)
146 plt.bar(x,y,alpha=0.2, width=0.6, color='deepskyblue', lw=3)
147 plt.legend(loc = "best")#图例
148 plt.title("安卓手机总分TOP10趋势图",fontsize=18)
149 plt.show()
150 # 水平图
151 plt.barh(x,y, alpha=0.2, height=0.4, color='lightcoral',label="热度", lw=3)
152 plt.title("安卓手机总分TOP10趋势图",fontsize=18)
153 plt.legend(loc = "best")#图例
154 plt.xticks(rotation=90)
155 plt.xlabel("总分",)#横坐标名字
156 plt.ylabel("手机")#纵坐标名字
157 # 水平图
158 x = Android_phone_data['name'].head(10)
159 y = Android_phone_data['phone_gpu'].head(10)
160 plt.barh(x,y, alpha=0.2, height=0.4, color='darkolivegreen')
161 plt.title("安卓手机GPUTOP10趋势图",fontsize=18)
162 plt.legend(loc = "best")#图例
163 plt.xticks(rotation=90)
164 plt.xlabel("总分",)#横坐标名字
165 plt.ylabel("手机")#纵坐标名字
166 # 水平图
167 x = Android_phone_data['name'].head(10)
168 y = Android_phone_data['phone_mem'].head(10)
169 plt.barh(x,y, alpha=0.2, height=0.4, color='steelblue')
170 plt.title("安卓手机MemTOP10趋势图",fontsize=18)
171 plt.legend(loc = "best")#图例
172 plt.xticks(rotation=90)
173 plt.xlabel("总分",)#横坐标名字
174 plt.ylabel("手机")#纵坐标名字
175 # 水平图
176 x = Android_phone_data['name'].head(10)
177 y = Android_phone_data['phone_ux'].head(10)
178 plt.barh(x,y, alpha=0.2, height=0.4, color='chartreuse')
179 plt.title("安卓手机UXTOP10趋势图",fontsize=18)
180 plt.legend(loc = "best")#图例
181 plt.xticks(rotation=90)
182 plt.xlabel("总分",)#横坐标名字
183 plt.ylabel("手机")#纵坐标名字
184 # 散点图
185 x = Android_phone_data['name'].head(30)
186 y = Android_phone_data['phone_cpu'].head(30)
187 plt.scatter(x,y,color='lightgreen',marker='o',s=40,alpha=0.5)
188 plt.xticks(rotation=90)
189 plt.title("安卓手机CPU散点图")
190 plt.xlabel("总分",)#横坐标名字
191 plt.ylabel("手机")#纵坐标名字
192 # 散点图
193 x = Android_phone_data['name'].head(30)
194 y = Android_phone_data['phone_gpu'].head(30)
195 plt.scatter(x,y,color='magenta',marker='o',s=40,alpha=0.5)
196 plt.xticks(rotation=90)
197 plt.title("安卓手机CPU散点图")
198 plt.xlabel("总分",)#横坐标名字
199 plt.ylabel("手机")#纵坐标名字
200 # 盒图
201 plt.boxplot(y)
202 plt.title("安卓手机CPU盒图")
203 plt.show()
204 
205 # 线性回归方程
206 import seaborn as sns
207 import matplotlib.pyplot as plt
208 import pandas as pd
209 import numpy as np
210 import warnings
211 warnings.filterwarnings("ignore")
212 four=pd.DataFrame(pd.read_excel('C:/Users/angel/Desktop/Phone_pop.xlsx'))
213 sns.regplot(x='phone_cpu',y='phone_gpu',data=four,color='r')
214 from sklearn import datasets
215 from sklearn.linear_model import LinearRegression
216 import pandas as pd
217 import numpy as np
218 import seaborn as sns
219 predict_model = LinearRegression()
220 three=pd.DataFrame(pd.read_excel('C:/Users/angel/Desktop/Phone_pop.xlsx'))
221 X = three['phone_cpu'].values
222 X = X.reshape(-1,1)
223 predict_model.fit(X , three['phone_gpu'])
224 np.set_printoptions(precision = 3, suppress = True)
225 a = predict_model.coef_
226 b = predict_model.intercept_
227 print("回归方程系数{}".format(predict_model.coef_))
228 print("回归方程截距{0:2f}".format(predict_model.intercept_))
229 print("线性回归预测模型表达式为{}*x+{}".format(predict_model.coef_,predict_model.intercept_))
230 
231 # 词云
232 import random
233 import wordcloud as wc
234 import matplotlib.pyplot as plt
235 
236 bk = np.array(Image.open("wyymuc.jpg"))
237 mask = bk
238 # 定义图片尺寸
239 word_cloud = wc.WordCloud(
240    mask = mask,
241    background_color='mintcream',  
242    font_path='msyhbd.ttc',  
243    max_font_size=300, 
244    random_state=50,  
245                        )
246 text = Android_phone_data["name"]
247 text = " ".join(text)
248 # 绘制词云
249 word_cloud.generate(text)
250 plt.imshow(word_cloud)
251 plt.show()

 

 

 

 

四、总结

描述完成此项目得到哪些有益的结论?是否达到预期的目标?以及要改进的建议?

1.通过这个cpugpu、总分中可以看出手机不同性能与综合之间的比较,在这里可以看出手机性能强、日常使用的手机均衡等。

2.我个人觉得达到预期目标了。因为在此次的课题作业中,让我系统的学习到怎样爬取数据的一些基本的框架过程,还有在数据分析中学习到了如何清洗、分析等。

3.需要改进的地方是,在爬虫过程中会遇到一些了数据无法爬出,编写代码时需要查阅许多的资料,还有就是我自己对代码的认识比较欠缺需要勤加练习,最后希望自己可以在爬虫中运用得更加熟练操作等。

 

posted @ 2021-12-27 15:29  仙女界的扛把子  阅读(362)  评论(0编辑  收藏  举报