Python网络爬虫——桌面级处理器的爬取及应用分析

zhushengquan / 2023-06-07 / 原文

一、选题背景

近年来,电脑处理器领域的竞争异常激烈,各大厂商纷纷推出新一代处理器产品。想要在这个市场中获得优势,就需要对竞争对手的产品进行深入了解和分析。因此,爬取桌面级处理器信息并进行数据分析就成为了一项重要的工作。通过网络爬虫技术,我们可以从网站上抓取处理器的基本参数信息、性能指标等重要数据,并进行处理和分析。这样的分析可以帮助用户更好地选择适合自己的处理器,同时也可以帮助厂商更好地了解市场需求和竞争格局,优化产品设计和市场营销策略。因此,Python网络爬虫——桌面级处理器的爬取及应用分析是一个非常有实际意义的选题,也是数据科学和人工智能领域的一个热门研究方向。

二、主题式网络爬虫设计方案

1.主题式网络爬虫名称

桌面级处理器的爬取及应用分析

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

爬取的是快科技上对于桌面级cpu(inter和amd)的详细数据如:

 

处理器型号

核心代号 制造工艺(nm) 大小核/线程 大核频率(GHz) 小核频率(GHz) 二/三级缓存(MB) 核显 基准功耗/加速功耗(W) 插槽

以及对于里面数据的一系列统计从而方便他人查看和更加直观的了解

 

3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

实现思路:

  1. 确定爬取的主题和目标网站:针对所需的信息和数据,确定需要爬取的主题,选择目标网站。

  2. 获取初始种子链接:从目标网站的某个页面获取初始链接(Seed URL),根据该链接获取目标网站的网页信息。

  3. 解析网页内容:对于获取的网页内容,先进行解码,然后使用解析器(如BeautifulSoup)获取其中的需要的信息(如标题、正文内容、链接等)。

  4. 分析网页链接:对于解析出的网页链接,过滤掉不符合要求的链接,将符合要求的链接添加到待爬队列中。

  5. 重复执行步骤 3 和 4:对于每个待爬取的链接,重复执行步骤 3 和 4,直到满足停止条件。

  6. 存储数据:将抓取到的数据存储到数据库或文件中。

技术难点:

  1. 爬取速度和精确性的平衡:在保证爬取速度的情况下,尽可能地提高数据抓取的精确性。

  2. 网页解析的效率和准确性:选择合适的解析器和相关库,对网页内容进行快速、准确的解析。

  3. 大规模异步爬取:如何在大规模异步爬取时保证爬取速度和数据准确性是一个值得探讨的问题。

  4. 反爬机制:目标网站的反爬机制可能会影响爬取速度和数据准确性,需要采用相应的技术手段进行规避。

  5. 存储和分析海量数据:在爬虫爬取到大量数据后,如何高效地存储、处理和分析这些数据。sdfgv

三、主题页面的结构特征分析

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

  1. 页面结构
  • 顶部导航栏:位于页面最上方,包括网站的logo、搜索框、产品分类和右侧的用户登录等部分。

  • 页面头部:紧接着导航栏,包括一张英特尔处理器的图片,以及该页面的标题、副标题和英特尔公司的介绍。

  • 文章列表:页面中央显示多篇英特尔处理器相关文章,每篇文章都由标题、摘要、发布时间和作者等内容组成,且每篇文章都有一个缩略图。

  • 分页器:文章列表下面有一个分页器,用于切换不同页面。

  • 页面底部:包含版权声明、相关链接、合作伙伴等部分。

  1. 页面特征
  • 突出展示专题内容:页面头部和中心区域仿佛在告诉用户,这是一篇与英特尔处理器相关的专题文章,吸引用户阅读。

  • 良好的可读性:页面排版简洁、清晰,配色和字体搭配也比较舒适,从而提高了读者的阅读体验。

  • 信息量大:页面中列出的多篇文章关于英特尔处理器的不同话题,给用户提供了丰富的信息,以满足各种需求。

  • 交互性良好:通过分页器和文章列表的设计,用户可以方便地访问到自己感兴趣的内容。同时,文章列表中每篇文章还附有一张缩略图,增加了网页的美观程度。

 

2.Htmls 页面解析

基本 HTML 结构:

htmlCopy Code
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>英特尔 CPU 专题</title>
    <!-- 引入 CSS 样式表 -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <!-- 网页顶部导航栏 -->
    <div id="header">
        <!-- 网站 Logo -->
        <img src="logo.png" alt="logo">
        <!-- 搜索框 -->
        <form id="search-form">
            <input type="text" name="keyword" placeholder="搜索...">
            <button type="submit">搜索</button>
        </form>
        <!-- 产品分类 -->
        <ul id="product-nav">
            <li><a href="#">笔记本电脑</a></li>
            <li><a href="#">台式机</a></li>
            <li><a href="#">平板电脑</a></li>
            <!-- ... -->
        </ul>
        <!-- 用户登录 -->
        <div id="login">
            <a href="#">注册</a>
            <a href="#">登录</a>
        </div>
    </div>

    <!-- 页面头部 -->
    <div id="page-header">
        <img src="cpu.png" alt="CPU 图标">
        <h1>英特尔 CPU 专题</h1>
        <h2>最新、最全面的英特尔 CPU 资讯</h2>
        <p>英特尔(Intel Corporation)是世界著名的半导体器件制造商,其 CPU 处理器已成为个人计算机的核心组件之一。</p>
    </div>

    <!-- 文章列表 -->
    <div id="article-list">
        <!-- 第一篇文章 -->
        <div class="article-item">
            <a href="#">
                <img src="thumbnail1.jpg" alt="文章缩略图">
                <h3>英特尔第十一代酷睿处理器发布</h3>
            </a>
            <p class="summary">英特尔第十一代酷睿处理器终于发布了,它的性能到底如何?大家一起来看看吧!</p>
            <p class="meta">
                发布时间:2019-06-01
                <span class="author">作者:小明</span>
            </p>
        </div>
        <!-- 第二篇文章 -->
        <div class="article-item">
            <a href="#">
                <img src="thumbnail2.jpg" alt="文章缩略图">
                <h3>英特尔酷睿 i9 11900K 技术规格曝光</h3>
            </a>
            <p class="summary">英特尔即将推出的酷睿 i9 11900K 处理器技术规格曝光,它的主频、核心数和功耗怎么样呢?</p>
            <p class="meta">
                发布时间:2019-05-15
                <span class="author">作者:小红</span>
            </p>
        </div>
        <!-- ... -->
    </div>

    <!-- 分页器 -->
    <div id="pagination">
        <a href="#">1</a>
        <a href="#">2</a>
        <a href="#">3</a>
        <!-- ... -->
    </div>

    <!-- 页面底部 -->
    <div id="footer">
        <ul>
            <li><a href="#">关于我们</a></li>
            <li><a href="#">联系我们</a></li>
            <li><a href="#">政策声明</a></li>
            <!-- ... -->
        </ul>
        <p>&copy; 2023 驱动之家. All rights reserved.</p>
    </div>
    
    <!-- 引入 JavaScript 脚本 -->
    <script src="script.js"></script>
</body>
</html>

主要 HTML 标签:

  • <html> 标签:定义整个 HTML 文档。

  • <head> 标签:定义文档的头部,包括元数据(metadata)和引入外部资源,如 CSS 样式表和 JavaScript 脚本。

  • <title> 标签:定义文档标题,显示在浏览器的标签上。

  • <meta> 标签:定义页面的元数据,如字符集、关键词、描述等。

  • <link> 标签:引入外部样式表或其他资源。

  • <body> 标签:定义文档的主体。

  • <div> 标签:定义文档中的区块(区域),用于在样式表中进行布局控制。

  • <h1>~<h6> 标签:定义标题,数字越小,字体越大。

  • <p> 标签:定义段落。

  • <a> 标签:定义超链接,href 属性指向链接地址。

  • <form> 标签:定义表单,包括输入控件和提交按钮。

  • <input> 标签:定义表单中的输入控件,如文本框、密码框、单选框、复选框等。

  • <button> 标签:定义按钮,可以用于提交表单或调用 JavaScript 函数。

  • <ul><li> 标签:定义无序列表,<li> 表示列表项。

 

3.节点(标签)查找方法与遍历方法

使用了 BeautifulSoup 库的 find()find_all() 方法来查找需要的 HTML 元素。具体来说:

  • main_div = soup.find("div", class_="main") 查找 class 属性为 "main" 的 div 元素;
  • rows = main_div.find_all("tr") 在 main_div 中查找所有的 tr 元素,并返回一个列表。

遍历数据行时,使用了 Python 内置函数 enumerate() 来同时获取行号和行数据,然后使用列表推导式将单元格数据提取出来,最后将数据写入 Excel 表格中对应的单元格。在特定列上判断如果是数字的单元格则设置相应的数字格式。

四、网络爬虫程序设计

1.数据爬取与采集

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import openpyxl
 4 
 5 # 发送HTTP请求获取网页内容
 6 url = "https://www.mydrivers.com/zhuanti/tianti/cpu/index_intel.html#13thcore"
 7 response = requests.get(url)
 8 response.encoding = 'GBK'
 9 html_content = response.text
10 
11 # 解析HTML内容
12 soup = BeautifulSoup(html_content, "html.parser")
13 
14 # 创建Excel文件
15 workbook = openpyxl.Workbook()
16 
17 # 创建工作表
18 worksheet = workbook.create_sheet("IntelDesktopProcessor", 0)
19 
20 # 设置单元格标题
21 title_list = [
22               "Processor model",
23               "Sandy Bridge",
24               "Manufacturing process ",
25               "Core/Thread",
26               "Core frequency" ,
27               "Acceleration frequency" ,
28               "L2/L3 Cache" ,
29               "Nuclear display",
30               "Thermal design power" ,
31                "slot"
32              ]
33 title_row = 1
34 for col, title in enumerate(title_list, 1):
35     cell = worksheet.cell(row=title_row, column=col, value=title)
36     cell.font = openpyxl.styles.Font(bold=True)
37     cell.alignment = openpyxl.styles.Alignment(horizontal="center")
38     cell.fill = openpyxl.styles.PatternFill(fgColor="bfbfbf", fill_type="solid")
39 
40 # 查找需要的数据
41 main_div = soup.find("div", class_="main")
42 if main_div:
43     rows = main_div.find_all("tr")
44 
45     # 遍历表格行并将数据写入Excel
46     data_start_row = 2
47     for i, row in enumerate(rows):
48         cells = row.find_all("td")
49         data = [cell.text.strip() for cell in cells]
50         for j, value in enumerate(data, 1):
51             cell = worksheet.cell(row=data_start_row+i, column=j, value=value)
52             if j in [5, 6, 10, 15, 20]: # 将数字单元格设置为数字格式
53                 cell.number_format = "#,##0"
54     data_end_row = data_start_row + i
55 
56     # 设置边框
57     for col in range(1, len(title_list)+1):
58         worksheet.cell(row=title_row, column=col).border = openpyxl.styles.Border(bottom=openpyxl.styles.Side(style='thick'))
59         for row in range(data_start_row, data_end_row+1):
60             worksheet.cell(row=row, column=col).border = openpyxl.styles.Border(top=openpyxl.styles.Side(style='thin'), 
61                                                                                  bottom=openpyxl.styles.Side(style='thin'))
62 
63     # 设置自适应列宽
64     for col in worksheet.columns:
65         max_length = 0
66         column = col[0].column_letter
67         for cell in col:
68             try:
69                 if len(str(cell.value)) > max_length:
70                     max_length = len(str(cell.value))
71             except:
72                 pass
73         adjusted_width = (max_length + 2)
74         worksheet.column_dimensions[column].width = adjusted_width
75 
76     # 冻结首行
77     worksheet.freeze_panes = "A2"
78     
79     #删除最后一行的无用数据
80     worksheet.delete_rows(worksheet.max_row)
81     
82     # 保存Excel文件
83     save_path = "C:/Users/ZSQ/Desktop/INTER.xlsx"
84     workbook.save(save_path)
85     print(f"数据已成功写入文件:{save_path}")
86 else:
87     print("未找到主要的div元素")

运行结果:

 

 

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import openpyxl
 4 
 5 # 发送HTTP请求获取网页内容
 6 url = "https://www.mydrivers.com/zhuanti/tianti/cpu/index_amd.html#ryzen7"
 7 response = requests.get(url)
 8 response.encoding = 'GBK'
 9 html_content = response.text
10 
11 # 解析HTML内容
12 soup = BeautifulSoup(html_content, "html.parser")
13 
14 # 创建Excel文件
15 workbook = openpyxl.Workbook()
16 
17 # 创建工作表
18 worksheet = workbook.create_sheet("AMDDesktopProcessor", 0)
19 
20 # 设置单元格标题
21 title_list = [
22               "Processor model",
23               "Core architecture",
24               "Manufacturing process ",
25               "Core/Thread",
26               "Core frequency" ,
27               "Acceleration frequency" ,
28               "L2/L3 Cache" ,
29               "Nuclear display",
30               "Thermal design power" ,
31                "slot"
32              ]
33 title_row = 1
34 for col, title in enumerate(title_list, 1):
35     cell = worksheet.cell(row=title_row, column=col, value=title)
36     cell.font = openpyxl.styles.Font(bold=True)
37     cell.alignment = openpyxl.styles.Alignment(horizontal="center")
38     cell.fill = openpyxl.styles.PatternFill(fgColor="bfbfbf", fill_type="solid")
39 
40 # 查找需要的数据
41 main_div = soup.find("div", class_="main")
42 if main_div:
43     rows = main_div.find_all("tr")
44 
45     # 遍历表格行并将数据写入Excel
46     data_start_row = 2
47     for i, row in enumerate(rows):
48         cells = row.find_all("td")
49         data = [cell.text.strip() for cell in cells]
50         for j, value in enumerate(data, 1):
51             cell = worksheet.cell(row=data_start_row+i, column=j, value=value)
52             if j in [5, 6, 10, 15, 20]: # 将数字单元格设置为数字格式
53                 cell.number_format = "#,##0"
54     data_end_row = data_start_row + i
55 
56     # 设置边框
57     for col in range(1, len(title_list)+1):
58         worksheet.cell(row=title_row, column=col).border = openpyxl.styles.Border(bottom=openpyxl.styles.Side(style='thick'))
59         for row in range(data_start_row, data_end_row+1):
60             worksheet.cell(row=row, column=col).border = openpyxl.styles.Border(top=openpyxl.styles.Side(style='thin'), 
61                                                                                  bottom=openpyxl.styles.Side(style='thin'))
62 
63     # 设置自适应列宽
64     for col in worksheet.columns:
65         max_length = 0
66         column = col[0].column_letter
67         for cell in col:
68             try:
69                 if len(str(cell.value)) > max_length:
70                     max_length = len(str(cell.value))
71             except:
72                 pass
73         adjusted_width = (max_length + 2)
74         worksheet.column_dimensions[column].width = adjusted_width
75 
76     # 冻结首行
77     worksheet.freeze_panes = "A2"
78     
79     #删除最后一行的无用数据
80     worksheet.delete_rows(worksheet.max_row)
81 
82     # 保存Excel文件
83     save_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
84     workbook.save(save_path)
85     print(f"数据已成功写入文件:{save_path}")
86 else:
87     print("未找到主要的div元素")

运行结果:

 数据的导入

 1 import pandas as pd
 2 
 3 # 读取Excel表格
 4 df = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx')
 5 
 6 # 删除单独几行只有一个值的数据
 7 df = df.dropna(thresh=2)
 8 # 读取Excel表格,跳过前一行
 9 df = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx', skiprows=2)
10 
11 # 输出前几行
12 df.head(30)
13 
14 import pandas as pd
15 
16 # 读取Excel表格
17 df = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx')
18 
19 # 删除单独几行只有一个值的数据
20 df = df.dropna(thresh=2)
21 # 读取Excel表格,跳过前一行
22 df = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx', skiprows=1)
23 
24 # 输出前几行
25 df.head(30)

运行结果:

 

 

 

2.对数据进行清洗和处理

对英特尔表的数据清理 
1
#删除无效行 2 import openpyxl 3 4 # 打开Excel文件 5 file_path = "C:/Users/ZSQ/Desktop/INTER.xlsx" 6 workbook = openpyxl.load_workbook(file_path) 7 worksheet = workbook.active 8 9 # 查找需要删除的行并删除 10 rows_to_delete = [] 11 for row in worksheet.iter_rows(): 12 empty_cell_count = 0 13 for cell in row: 14 if not cell.value: 15 empty_cell_count += 1 16 if empty_cell_count > len(row) // 2: 17 rows_to_delete.append(row) 18 19 for row in rows_to_delete: 20 worksheet.delete_rows(row[0].row) 21 22 # 保存Excel文件 23 workbook.save(file_path) 24 print("已删除空值过多的行") 25 26 import openpyxl 27 28 # 打开Excel文件 29 file_path = "C:/Users/ZSQ/Desktop/INTER.xlsx" 30 workbook = openpyxl.load_workbook(file_path) 31 worksheet = workbook.active 32 33 # 查找需要删除的行并删除 34 unique_rows = [all] 35 for row in worksheet.iter_rows(): 36 row_data = tuple(cell.value for cell in row) 37 if row_data not in unique_rows: 38 unique_rows.append(row_data) 39 else: 40 worksheet.delete_rows(row[0].row) 41 42 # 保存Excel文件 43 workbook.save(file_path) 44 print("已删除重复的行") 45 46 47 #去除重复值 48 import pandas as pd 49 50 # 读取Excel文件 51 excel_file = pd.read_excel("C:/Users/ZSQ/Desktop/INTER.xlsx") 52 53 # 根据"Processor model"列进行去重 54 cleaned_excel_file = excel_file.drop_duplicates(subset=["Processor model"]) 55 56 # 保存去重后的Excel文件 57 save_path = "C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx" 58 cleaned_excel_file.to_excel(save_path, index=False) 59 print(f"已成功去除重复数据,并将结果保存至Excel文件:{save_path}") 60 61 #空值处理 62 import pandas as pd 63 64 # 将Excel文件读取为DataFrame 65 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx") 66 67 # 对DataFrame中的空值进行填充 68 df.fillna(value="N/A", inplace=True) 69 70 # 将填充后的DataFrame写入Excel文件 71 df.to_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", index=False) 72 73 print("数据已成功清理,并将结果保存至新的Excel文件")

运行结果:

 

 1 对AMD的数据进行清理
 2 #删除无效行
 3 import openpyxl
 4 
 5 # 打开Excel文件
 6 file_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
 7 workbook = openpyxl.load_workbook(file_path)
 8 worksheet = workbook.active
 9 
10 # 查找需要删除的行并删除
11 rows_to_delete = []
12 for row in worksheet.iter_rows():
13     empty_cell_count = 0
14     for cell in row:
15         if not cell.value:
16             empty_cell_count += 1
17     if empty_cell_count > len(row) // 2:
18         rows_to_delete.append(row)
19 
20 for row in rows_to_delete:
21     worksheet.delete_rows(row[0].row)
22 
23 # 保存Excel文件
24 workbook.save(file_path)
25 print("已删除空值过多的行")
26 
27 import openpyxl
28 
29 # 打开Excel文件
30 file_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
31 workbook = openpyxl.load_workbook(file_path)
32 worksheet = workbook.active
33 
34 # 查找需要删除的行并删除
35 unique_rows = [all]
36 for row in worksheet.iter_rows():
37     row_data = tuple(cell.value for cell in row)
38     if row_data not in unique_rows:
39         unique_rows.append(row_data)
40     else:
41         worksheet.delete_rows(row[0].row)
42 
43 # 保存Excel文件
44 workbook.save(file_path)
45 print("已删除重复的行")
46 #去除重复值
47 import pandas as pd
48 
49 # 读取Excel文件
50 excel_file = pd.read_excel("C:/Users/ZSQ/Desktop/AMD.xlsx")
51 
52 # 根据"Processor model"列进行去重
53 cleaned_excel_file = excel_file.drop_duplicates(subset=["Processor model"])
54 
55 # 保存去重后的Excel文件
56 save_path = "C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx"
57 cleaned_excel_file.to_excel(save_path, index=False)
58 print(f"已成功去除重复数据,并将结果保存至Excel文件:{save_path}")
59 #空值处理
60 import pandas as pd
61 
62 # 将Excel文件读取为DataFrame
63 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx")
64 
65 # 对DataFrame中的空值进行填充
66 df.fillna(value="N/A", inplace=True)
67 
68 # 将填充后的DataFrame写入Excel文件
69 df.to_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", index=False)
70 
71 print("数据已成功清理,并将结果保存至新的Excel文件")

运行结果:

 

 

3.数据分析与可视化(例如:数据柱形图、直方图、散点图、盒图、分布图)

 inter的数据分析

 1 #对制造工艺的统计并绘制成图表
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 # 读取 Excel 文件并获取数据
 6 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", skiprows=1)
 7 data = df.iloc[:, 2]  # 获取第二列数据
 8 
 9 # 统计每个制造工艺的数量
10 counts = data.value_counts().reset_index()
11 counts.columns = ["value", "count"]
12 
13 # 绘制饼状图
14 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
15 plt.rcParams['axes.unicode_minus'] = False  # 设置负号显示
16 colors = [
17     "#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#ffd6f7", "#d8bfd8",
18     "#ffe5cc", "#c2b280", "#b3cde0", "#b2d8b2", "#c2c2d6", "#f7cac9"
19 ]
20 plt.pie(
21     counts["count"],
22     labels=counts["value"],
23     autopct="%1.1f%%",
24     colors=colors,
25     startangle=90,  # 起始角度设置为90度
26     counterclock=False,  # 不逆时针显示
27     pctdistance=0.8,  # 数字和饼图之间的距离
28     labeldistance=1.05,  # 标签和饼图之间的距离
29     textprops={"fontsize": 12},
30     wedgeprops={"linewidth": 1, "edgecolor": "#ffffff"},
31     shadow=True,  # 添加阴影效果
32     )
33 plt.title("制造工艺分布情况", fontweight='bold', fontsize=16)
34 plt.legend(title="工艺类型", loc="best", fontsize=12)
35 plt.axis("equal")

运行结果:

 

 1 #对大核频率(GHz)进行中值判定并做出盒方图
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 # 将Excel文件读取为DataFrame
 6 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx")
 7 
 8 # 筛选出第5列中不为"大核频率(GHz)"的数据,并进行数字类型转换
 9 data = []
10 for value in df["Core frequency"].values:
11     if value != "大核频率(GHz)":
12         if "-" in str(value):
13             values = value.split("-")
14             # 计算范围数据的平均值
15             data.append((float(values[0]) + float(values[1])) / 2)
16         elif isinstance(value, (int, float)):
17             data.append(value)
18         else:
19             try:
20                 data.append(float(str(value).replace(",", "")))
21             except ValueError:
22                 pass
23 
24 # 绘制箱线图
25 fig, ax = plt.subplots(figsize=(8, 6))
26 ax.boxplot(data, vert=False)
27 
28 # 设置图表标题、x轴标签和y轴标签
29 ax.set_title("INTER Core Frequency Distribution")
30 ax.set_xlabel("Frequency (GHz)")
31 ax.set_ylabel("Devices")
32 
33 # 显示图表
34 plt.show()

运行结果:

 

 1 #对插槽类型进行统计
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", skiprows=1)
 6 data = df.iloc[:, 9]  # 获取第二列数据
 7 counts = data.value_counts().reset_index()
 8 counts.columns = ["value", "count"]
 9 
10 # 设置图形大小和分辨率
11 fig = plt.figure(figsize=(8, 6), dpi=80)
12 
13 # 绘制水平条形图,并设置一些样式
14 plt.barh(
15     counts["value"],
16     counts["count"],
17     align="center",
18     height=0.5,
19     color="#4682B4",
20     edgecolor="#2F4F4F",
21     alpha=0.8
22 )
23 
24 # 添加数据标签
25 for x, y in zip(counts["count"], counts["value"]):
26     plt.text(x+10, y, f'{x}', va='center', fontsize=12)
27 
28 # 设置 X 轴和 Y 轴的标签、标题以及刻度字体大小
29 plt.xlabel("Counts", fontsize=14)
30 plt.ylabel("slot", fontsize=14)
31 plt.title("INTER slot plot", fontsize=16, fontweight='bold')
32 plt.xticks(fontsize=12)
33 plt.yticks(fontsize=12)
34 
35 # 隐藏上方和右侧的边框
36 plt.gca().spines['top'].set_visible(False)
37 plt.gca().spines['right'].set_visible(False)
38 
39 plt.show()

运行结果:

 

 1 #对大小核心线程数据进行散点展示
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 # 将Excel文件读取为DataFrame
 6 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx")
 7 
 8 # 提取 'Core/Thread' 这一列的数据,并去除空值
 9 data = df.loc[:, 'Core/Thread'].dropna()
10 
11 # 绘制散点图
12 fig, ax = plt.subplots(figsize=(8, 6))
13 ax.scatter(x=df.index, y=data.values, s=10, c='red', alpha=0.7)
14 
15 # 设置图表标题、x轴标签和y轴标签
16 ax.set_title("INTER Core/Thread Plot")
17 ax.set_xlabel("Device Index")
18 ax.set_ylabel("Core/Thread")
19 
20 # 添加网格线
21 ax.grid(True)
22 
23 # 调整x轴标签的角度
24 plt.xticks(rotation=45)
25 
26 # 紧凑排列图表元素
27 plt.tight_layout()
28 
29 # 显示图表
30 plt.show()

运行结果:

 AMD的数据分析(因为上述有些已经重复所以方法类似,这里做的就是一些其他的数据)

 1 #AMD处理器热设计功耗(W)直方图
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 # 读取 Excel 文件并获取数据
 6 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", skiprows=1)
 7 data = df.iloc[:, 8]  # 获取第二列数据
 8 
 9 # 统计每个制造工艺的数量
10 counts = data.value_counts().reset_index()
11 counts.columns = ["value", "count"]
12 
13 # 绘制饼状图
14 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
15 plt.rcParams['axes.unicode_minus'] = False  # 设置负号显示
16 colors = [
17     "#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#ffd6f7", "#d8bfd8",
18     "#ffe5cc", "#c2b280", "#b3cde0", "#b2d8b2", "#c2c2d6", "#f7cac9"
19 ]
20 plt.hist(data, bins=10, color="#66b3ff")
21 plt.title("AMD处理器热设计功耗(W)", fontweight='bold', fontsize=16)
22 plt.xlabel("功耗瓦数", fontsize=12)
23 plt.ylabel("数量", fontsize=12)

运行结果:

 

 1 #对top前10的核心频率进行统计
 2 import pandas as pd
 3 import matplotlib.pyplot as plt
 4 
 5 # 读取数据
 6 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", skiprows=1)
 7 
 8 # 对核心频率类型进行统计
 9 data = df.iloc[:, 4]  
10 value_counts = data.value_counts()
11 
12 # 显示前10行数据
13 top10 = value_counts.head(10)
14 
15 # 创建画布和子图对象
16 fig, ax = plt.subplots(figsize=(8, 6))
17 
18 # 绘制折线图
19 ax.plot(top10.index, top10.values, marker='o', markersize=10, color="#4682B4", linewidth=2)
20 
21 # 设置 X 轴和 Y 轴的标签、标题以及刻度字体大小
22 ax.set_xlabel("Core frequency", fontsize=14)
23 ax.set_ylabel("Counts", fontsize=14)
24 ax.set_title("AMD Core frequency plot (Top 10)", fontsize=16, fontweight='bold')
25 ax.tick_params(axis='x', labelrotation=45, labelsize=10)
26 ax.tick_params(axis='y', labelsize=12)
27 
28 # 隐藏上方和右侧的边框
29 ax.spines['top'].set_visible(False)
30 ax.spines['right'].set_visible(False)
31 
32 # 填充折线下方的颜色
33 ax.fill_between(top10.index, top10.values, color="#D8D8D8")
34 
35 plt.show()

运行结果:

 

 4.两张表的合并

 1 #将两个表格合并在一起
 2 import pandas as pd
 3 
 4 # 读取第一个Excel表格
 5 df1 = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx')
 6 
 7 # 读取第二个Excel表格
 8 df2 = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx')
 9 
10 # 合并两个表格
11 merged_df = pd.concat([df1, df2], ignore_index=True)
12 
13 # 将合并后的表格保存为新的Excel文件
14 merged_df.to_excel('C:/Users/ZSQ/Desktop/cpu总和.xlsx', index=False)
15 
16 # 输出提示信息
17 print('两个Excel表格已经合并为一个文件:C:/Users/ZSQ/Desktop/cpu总和.xlsx')

运行结果:

 

 5.将以上各部分的代码汇总,附上完整程序代码

  1 #数据挖掘
  2 
  3 import requests
  4 from bs4 import BeautifulSoup
  5 import openpyxl
  6 
  7 # 发送HTTP请求获取网页内容
  8 url = "https://www.mydrivers.com/zhuanti/tianti/cpu/index_intel.html#13thcore"
  9 response = requests.get(url)
 10 response.encoding = 'GBK'
 11 html_content = response.text
 12 
 13 # 解析HTML内容
 14 soup = BeautifulSoup(html_content, "html.parser")
 15 
 16 # 创建Excel文件
 17 workbook = openpyxl.Workbook()
 18 
 19 # 创建工作表
 20 worksheet = workbook.create_sheet("IntelDesktopProcessor", 0)
 21 
 22 # 设置单元格标题
 23 title_list = [
 24               "Processor model",
 25               "Sandy Bridge",
 26               "Manufacturing process ",
 27               "Core/Thread",
 28               "Core frequency" ,
 29               "Acceleration frequency" ,
 30               "L2/L3 Cache" ,
 31               "Nuclear display",
 32               "Thermal design power" ,
 33                "slot"
 34              ]
 35 title_row = 1
 36 for col, title in enumerate(title_list, 1):
 37     cell = worksheet.cell(row=title_row, column=col, value=title)
 38     cell.font = openpyxl.styles.Font(bold=True)
 39     cell.alignment = openpyxl.styles.Alignment(horizontal="center")
 40     cell.fill = openpyxl.styles.PatternFill(fgColor="bfbfbf", fill_type="solid")
 41 
 42 # 查找需要的数据
 43 main_div = soup.find("div", class_="main")
 44 if main_div:
 45     rows = main_div.find_all("tr")
 46 
 47     # 遍历表格行并将数据写入Excel
 48     data_start_row = 2
 49     for i, row in enumerate(rows):
 50         cells = row.find_all("td")
 51         data = [cell.text.strip() for cell in cells]
 52         for j, value in enumerate(data, 1):
 53             cell = worksheet.cell(row=data_start_row+i, column=j, value=value)
 54             if j in [5, 6, 10, 15, 20]: # 将数字单元格设置为数字格式
 55                 cell.number_format = "#,##0"
 56     data_end_row = data_start_row + i
 57 
 58     # 设置边框
 59     for col in range(1, len(title_list)+1):
 60         worksheet.cell(row=title_row, column=col).border = openpyxl.styles.Border(bottom=openpyxl.styles.Side(style='thick'))
 61         for row in range(data_start_row, data_end_row+1):
 62             worksheet.cell(row=row, column=col).border = openpyxl.styles.Border(top=openpyxl.styles.Side(style='thin'), 
 63                                                                                  bottom=openpyxl.styles.Side(style='thin'))
 64 
 65     # 设置自适应列宽
 66     for col in worksheet.columns:
 67         max_length = 0
 68         column = col[0].column_letter
 69         for cell in col:
 70             try:
 71                 if len(str(cell.value)) > max_length:
 72                     max_length = len(str(cell.value))
 73             except:
 74                 pass
 75         adjusted_width = (max_length + 2)
 76         worksheet.column_dimensions[column].width = adjusted_width
 77 
 78     # 冻结首行
 79     worksheet.freeze_panes = "A2"
 80     
 81     #删除最后一行的无用数据
 82     worksheet.delete_rows(worksheet.max_row)
 83     
 84     # 保存Excel文件
 85     save_path = "C:/Users/ZSQ/Desktop/INTER.xlsx"
 86     workbook.save(save_path)
 87     print(f"数据已成功写入文件:{save_path}")
 88 else:
 89     print("未找到主要的div元素")
 90 
 91     
 92 import requests
 93 from bs4 import BeautifulSoup
 94 import openpyxl
 95 
 96 # 发送HTTP请求获取网页内容
 97 url = "https://www.mydrivers.com/zhuanti/tianti/cpu/index_amd.html#ryzen7"
 98 response = requests.get(url)
 99 response.encoding = 'GBK'
100 html_content = response.text
101 
102 # 解析HTML内容
103 soup = BeautifulSoup(html_content, "html.parser")
104 
105 # 创建Excel文件
106 workbook = openpyxl.Workbook()
107 
108 # 创建工作表
109 worksheet = workbook.create_sheet("AMDDesktopProcessor", 0)
110 
111 # 设置单元格标题
112 title_list = [
113               "Processor model",
114               "Core architecture",
115               "Manufacturing process ",
116               "Core/Thread",
117               "Core frequency" ,
118               "Acceleration frequency" ,
119               "L2/L3 Cache" ,
120               "Nuclear display",
121               "Thermal design power" ,
122                "slot"
123              ]
124 title_row = 1
125 for col, title in enumerate(title_list, 1):
126     cell = worksheet.cell(row=title_row, column=col, value=title)
127     cell.font = openpyxl.styles.Font(bold=True)
128     cell.alignment = openpyxl.styles.Alignment(horizontal="center")
129     cell.fill = openpyxl.styles.PatternFill(fgColor="bfbfbf", fill_type="solid")
130 
131 # 查找需要的数据
132 main_div = soup.find("div", class_="main")
133 if main_div:
134     rows = main_div.find_all("tr")
135 
136     # 遍历表格行并将数据写入Excel
137     data_start_row = 2
138     for i, row in enumerate(rows):
139         cells = row.find_all("td")
140         data = [cell.text.strip() for cell in cells]
141         for j, value in enumerate(data, 1):
142             cell = worksheet.cell(row=data_start_row+i, column=j, value=value)
143             if j in [5, 6, 10, 15, 20]: # 将数字单元格设置为数字格式
144                 cell.number_format = "#,##0"
145     data_end_row = data_start_row + i
146 
147     # 设置边框
148     for col in range(1, len(title_list)+1):
149         worksheet.cell(row=title_row, column=col).border = openpyxl.styles.Border(bottom=openpyxl.styles.Side(style='thick'))
150         for row in range(data_start_row, data_end_row+1):
151             worksheet.cell(row=row, column=col).border = openpyxl.styles.Border(top=openpyxl.styles.Side(style='thin'), 
152                                                                                  bottom=openpyxl.styles.Side(style='thin'))
153 
154     # 设置自适应列宽
155     for col in worksheet.columns:
156         max_length = 0
157         column = col[0].column_letter
158         for cell in col:
159             try:
160                 if len(str(cell.value)) > max_length:
161                     max_length = len(str(cell.value))
162             except:
163                 pass
164         adjusted_width = (max_length + 2)
165         worksheet.column_dimensions[column].width = adjusted_width
166 
167     # 冻结首行
168     worksheet.freeze_panes = "A2"
169     
170     #删除最后一行的无用数据
171     worksheet.delete_rows(worksheet.max_row)
172 
173     # 保存Excel文件
174     save_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
175     workbook.save(save_path)
176     print(f"数据已成功写入文件:{save_path}")
177 else:
178     print("未找到主要的div元素")
179     
180     
181     
182 #数据分析
183 #inter
184 import pandas as pd
185 
186 # 读取Excel表格
187 df = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx')
188 
189 # 删除单独几行只有一个值的数据
190 df = df.dropna(thresh=2)
191 # 读取Excel表格,跳过前一行
192 df = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx', skiprows=2)
193 
194 # 输出前几行
195 df.head(30)
196 #amd
197 import pandas as pd
198 
199 # 读取Excel表格
200 df = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx')
201 
202 # 删除单独几行只有一个值的数据
203 df = df.dropna(thresh=2)
204 # 读取Excel表格,跳过前一行
205 df = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx', skiprows=1)
206 
207 # 输出前几行
208 df.head(30)
209 
210 
211 
212 #数据清洗
213 #删除无效行
214 import openpyxl
215 
216 # 打开Excel文件
217 file_path = "C:/Users/ZSQ/Desktop/INTER.xlsx"
218 workbook = openpyxl.load_workbook(file_path)
219 worksheet = workbook.active
220 
221 # 查找需要删除的行并删除
222 rows_to_delete = []
223 for row in worksheet.iter_rows():
224     empty_cell_count = 0
225     for cell in row:
226         if not cell.value:
227             empty_cell_count += 1
228     if empty_cell_count > len(row) // 2:
229         rows_to_delete.append(row)
230 
231 for row in rows_to_delete:
232     worksheet.delete_rows(row[0].row)
233 
234 # 保存Excel文件
235 workbook.save(file_path)
236 print("已删除空值过多的行")
237 
238 import openpyxl
239 
240 # 打开Excel文件
241 file_path = "C:/Users/ZSQ/Desktop/INTER.xlsx"
242 workbook = openpyxl.load_workbook(file_path)
243 worksheet = workbook.active
244 
245 # 查找需要删除的行并删除
246 unique_rows = [all]
247 for row in worksheet.iter_rows():
248     row_data = tuple(cell.value for cell in row)
249     if row_data not in unique_rows:
250         unique_rows.append(row_data)
251     else:
252         worksheet.delete_rows(row[0].row)
253 
254 # 保存Excel文件
255 workbook.save(file_path)
256 print("已删除重复的行")
257 
258 #去除重复值
259 import pandas as pd
260 
261 # 读取Excel文件
262 excel_file = pd.read_excel("C:/Users/ZSQ/Desktop/INTER.xlsx")
263 
264 # 根据"Processor model"列进行去重
265 cleaned_excel_file = excel_file.drop_duplicates(subset=["Processor model"])
266 
267 # 保存去重后的Excel文件
268 save_path = "C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx"
269 cleaned_excel_file.to_excel(save_path, index=False)
270 print(f"已成功去除重复数据,并将结果保存至Excel文件:{save_path}")
271 
272 #空值处理
273 import pandas as pd
274 
275 # 将Excel文件读取为DataFrame
276 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx")
277 
278 # 对DataFrame中的空值进行填充
279 df.fillna(value="N/A", inplace=True)
280 
281 # 将填充后的DataFrame写入Excel文件
282 df.to_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", index=False)
283 
284 print("数据已成功清理,并将结果保存至新的Excel文件")
285 
286 #AMD
287 #删除无效行
288 import openpyxl
289 
290 # 打开Excel文件
291 file_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
292 workbook = openpyxl.load_workbook(file_path)
293 worksheet = workbook.active
294 
295 # 查找需要删除的行并删除
296 rows_to_delete = []
297 for row in worksheet.iter_rows():
298     empty_cell_count = 0
299     for cell in row:
300         if not cell.value:
301             empty_cell_count += 1
302     if empty_cell_count > len(row) // 2:
303         rows_to_delete.append(row)
304 
305 for row in rows_to_delete:
306     worksheet.delete_rows(row[0].row)
307 
308 # 保存Excel文件
309 workbook.save(file_path)
310 print("已删除空值过多的行")
311 
312 import openpyxl
313 
314 # 打开Excel文件
315 file_path = "C:/Users/ZSQ/Desktop/AMD.xlsx"
316 workbook = openpyxl.load_workbook(file_path)
317 worksheet = workbook.active
318 
319 # 查找需要删除的行并删除
320 unique_rows = [all]
321 for row in worksheet.iter_rows():
322     row_data = tuple(cell.value for cell in row)
323     if row_data not in unique_rows:
324         unique_rows.append(row_data)
325     else:
326         worksheet.delete_rows(row[0].row)
327 
328 # 保存Excel文件
329 workbook.save(file_path)
330 print("已删除重复的行")
331 
332 #去除重复值
333 import pandas as pd
334 
335 # 读取Excel文件
336 excel_file = pd.read_excel("C:/Users/ZSQ/Desktop/AMD.xlsx")
337 
338 # 根据"Processor model"列进行去重
339 cleaned_excel_file = excel_file.drop_duplicates(subset=["Processor model"])
340 
341 # 保存去重后的Excel文件
342 save_path = "C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx"
343 cleaned_excel_file.to_excel(save_path, index=False)
344 print(f"已成功去除重复数据,并将结果保存至Excel文件:{save_path}")
345 
346 #空值处理
347 import pandas as pd
348 
349 # 将Excel文件读取为DataFrame
350 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx")
351 
352 # 对DataFrame中的空值进行填充
353 df.fillna(value="N/A", inplace=True)
354 
355 # 将填充后的DataFrame写入Excel文件
356 df.to_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", index=False)
357 
358 print("数据已成功清理,并将结果保存至新的Excel文件")
359 
360 
361 
362 
363 
364 #数据可视化
365 #对制造工艺的统计并绘制成图表
366 import pandas as pd
367 import matplotlib.pyplot as plt
368 
369 # 读取 Excel 文件并获取数据
370 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", skiprows=1)
371 data = df.iloc[:, 2]  # 获取第二列数据
372 
373 # 统计每个制造工艺的数量
374 counts = data.value_counts().reset_index()
375 counts.columns = ["value", "count"]
376 
377 # 绘制饼状图
378 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
379 plt.rcParams['axes.unicode_minus'] = False  # 设置负号显示
380 colors = [
381     "#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#ffd6f7", "#d8bfd8",
382     "#ffe5cc", "#c2b280", "#b3cde0", "#b2d8b2", "#c2c2d6", "#f7cac9"
383 ]
384 plt.pie(
385     counts["count"],
386     labels=counts["value"],
387     autopct="%1.1f%%",
388     colors=colors,
389     startangle=90,  # 起始角度设置为90度
390     counterclock=False,  # 不逆时针显示
391     pctdistance=0.8,  # 数字和饼图之间的距离
392     labeldistance=1.05,  # 标签和饼图之间的距离
393     textprops={"fontsize": 12},
394     wedgeprops={"linewidth": 1, "edgecolor": "#ffffff"},
395     shadow=True,  # 添加阴影效果
396     )
397 plt.title("制造工艺分布情况", fontweight='bold', fontsize=16)
398 plt.legend(title="工艺类型", loc="best", fontsize=12)
399 plt.axis("equal")
400 
401 
402 #对大核频率(GHz)进行中值判定
403 import pandas as pd
404 import matplotlib.pyplot as plt
405 
406 # 将Excel文件读取为DataFrame
407 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx")
408 
409 # 筛选出第5列中不为"大核频率(GHz)"的数据,并进行数字类型转换
410 data = []
411 for value in df["Core frequency"].values:
412     if value != "大核频率(GHz)":
413         if "-" in str(value):
414             values = value.split("-")
415             # 计算范围数据的平均值
416             data.append((float(values[0]) + float(values[1])) / 2)
417         elif isinstance(value, (int, float)):
418             data.append(value)
419         else:
420             try:
421                 data.append(float(str(value).replace(",", "")))
422             except ValueError:
423                 pass
424 
425 # 绘制箱线图
426 fig, ax = plt.subplots(figsize=(8, 6))
427 ax.boxplot(data, vert=False)
428 
429 # 设置图表标题、x轴标签和y轴标签
430 ax.set_title("INTER Core Frequency Distribution")
431 ax.set_xlabel("Frequency (GHz)")
432 ax.set_ylabel("Devices")
433 
434 # 显示图表
435 plt.show()
436 
437 #对插槽类型进行统计
438 import pandas as pd
439 import matplotlib.pyplot as plt
440 
441 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx", skiprows=1)
442 data = df.iloc[:, 9]  # 获取第二列数据
443 counts = data.value_counts().reset_index()
444 counts.columns = ["value", "count"]
445 
446 # 设置图形大小和分辨率
447 fig = plt.figure(figsize=(8, 6), dpi=80)
448 
449 # 绘制水平条形图,并设置一些样式
450 plt.barh(
451     counts["value"],
452     counts["count"],
453     align="center",
454     height=0.5,
455     color="#4682B4",
456     edgecolor="#2F4F4F",
457     alpha=0.8
458 )
459 
460 # 添加数据标签
461 for x, y in zip(counts["count"], counts["value"]):
462     plt.text(x+10, y, f'{x}', va='center', fontsize=12)
463 
464 # 设置 X 轴和 Y 轴的标签、标题以及刻度字体大小
465 plt.xlabel("Counts", fontsize=14)
466 plt.ylabel("slot", fontsize=14)
467 plt.title("INTER slot plot", fontsize=16, fontweight='bold')
468 plt.xticks(fontsize=12)
469 plt.yticks(fontsize=12)
470 
471 # 隐藏上方和右侧的边框
472 plt.gca().spines['top'].set_visible(False)
473 plt.gca().spines['right'].set_visible(False)
474 
475 plt.show()
476 
477 
478 #对大小核心线程数据进行散点展示
479 import pandas as pd
480 import matplotlib.pyplot as plt
481 
482 # 将Excel文件读取为DataFrame
483 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_INTER.xlsx")
484 
485 # 提取 'Core/Thread' 这一列的数据,并去除空值
486 data = df.loc[:, 'Core/Thread'].dropna()
487 
488 # 绘制散点图
489 fig, ax = plt.subplots(figsize=(8, 6))
490 ax.scatter(x=df.index, y=data.values, s=10, c='red', alpha=0.7)
491 
492 # 设置图表标题、x轴标签和y轴标签
493 ax.set_title("INTER Core/Thread Plot")
494 ax.set_xlabel("Device Index")
495 ax.set_ylabel("Core/Thread")
496 
497 # 添加网格线
498 ax.grid(True)
499 
500 # 调整x轴标签的角度
501 plt.xticks(rotation=45)
502 
503 # 紧凑排列图表元素
504 plt.tight_layout()
505 
506 # 显示图表
507 plt.show()
508 
509 
510 #AMD处理器热设计功耗(W)直方图
511 import pandas as pd
512 import matplotlib.pyplot as plt
513 
514 # 读取 Excel 文件并获取数据
515 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", skiprows=1)
516 data = df.iloc[:, 8]  # 获取第二列数据
517 
518 # 统计每个制造工艺的数量
519 counts = data.value_counts().reset_index()
520 counts.columns = ["value", "count"]
521 
522 # 绘制饼状图
523 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
524 plt.rcParams['axes.unicode_minus'] = False  # 设置负号显示
525 colors = [
526     "#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#ffd6f7", "#d8bfd8",
527     "#ffe5cc", "#c2b280", "#b3cde0", "#b2d8b2", "#c2c2d6", "#f7cac9"
528 ]
529 plt.hist(data, bins=10, color="#66b3ff")
530 plt.title("AMD处理器热设计功耗(W)", fontweight='bold', fontsize=16)
531 plt.xlabel("功耗瓦数", fontsize=12)
532 plt.ylabel("数量", fontsize=12)
533 
534 #对top前10的核心频率进行统计
535 import pandas as pd
536 import matplotlib.pyplot as plt
537 
538 # 读取数据
539 df = pd.read_excel("C:/Users/ZSQ/Desktop/CLEANED_AMD.xlsx", skiprows=1)
540 
541 # 对核心频率类型进行统计
542 data = df.iloc[:, 4]  
543 value_counts = data.value_counts()
544 
545 # 显示前10行数据
546 top10 = value_counts.head(10)
547 
548 # 创建画布和子图对象
549 fig, ax = plt.subplots(figsize=(8, 6))
550 
551 # 绘制折线图
552 ax.plot(top10.index, top10.values, marker='o', markersize=10, color="#4682B4", linewidth=2)
553 
554 # 设置 X 轴和 Y 轴的标签、标题以及刻度字体大小
555 ax.set_xlabel("Core frequency", fontsize=14)
556 ax.set_ylabel("Counts", fontsize=14)
557 ax.set_title("AMD Core frequency plot (Top 10)", fontsize=16, fontweight='bold')
558 ax.tick_params(axis='x', labelrotation=45, labelsize=10)
559 ax.tick_params(axis='y', labelsize=12)
560 
561 # 隐藏上方和右侧的边框
562 ax.spines['top'].set_visible(False)
563 ax.spines['right'].set_visible(False)
564 
565 # 填充折线下方的颜色
566 ax.fill_between(top10.index, top10.values, color="#D8D8D8")
567 
568 plt.show()
569 
570 
571 #把两个表格合并
572 import pandas as pd
573 
574 # 读取第一个Excel表格
575 df1 = pd.read_excel('C:/Users/ZSQ/Desktop/INTER.xlsx')
576 
577 # 读取第二个Excel表格
578 df2 = pd.read_excel('C:/Users/ZSQ/Desktop/AMD.xlsx')
579 
580 # 合并两个表格
581 merged_df = pd.concat([df1, df2], ignore_index=True)
582 
583 # 将合并后的表格保存为新的Excel文件
584 merged_df.to_excel('C:/Users/ZSQ/Desktop/cpu总和.xlsx', index=False)
585 
586 # 输出提示信息
587 print('两个Excel表格已经合并为一个文件:C:/Users/ZSQ/Desktop/cpu总和.xlsx')

总结

1.经过对主题数据的分析与可视化,可以得到哪些结论?是否达到预期的目标?

对主题数据进行分析过后我将更加直观的了解到桌面级处理器的数据,可以看出cpu在大核上的频率是越来越高,性能也越来越强,以及其所对应的例如插槽或是其他数据的对应,但是因为爬取的数据相对来说再其他的一些专业性数据比较隐秘,相对比较难以爬取和采集所以在数据上还是没有特别全面。

 

2.在完成此设计过程中,得到哪些收获?以及要改进的建议

在本次设计中我通过对于各个方面python的相关学习完成了上述分析,也从中再次学习了一次并且强化了自己,运用了python的各种强大库源来对数据进行爬取,分析,解析,但是依旧不够全面,而且在编译的过程当中还是会碰到很多在变成上的难题以及反爬取数据的困扰。