编写程序解决专业问题,要求如下:1)要求从文件中读入专业数据进行数据处理,用matplotlib实现数据绘图。 (2)要求选择一个专业网站,爬取数据(例如标题和链接),存入数据库中。 (3)要求利用tkinter设计系统界面。 (请明确列出步骤)
时间: 2024-03-30 12:37:17 浏览: 148
好的,以下是一些步骤和代码示例,希望能够帮助您:
1. 从文件中读入专业数据进行数据处理
a. 准备数据文件
首先,我们需要准备一个专业数据文件,例如以下内容:
```
专业,招生人数,平均分
计算机科学与技术,100,90
软件工程,80,85
网络工程,60,80
```
b. 读取数据文件
然后我们可以使用Python内置的csv模块读取该数据文件,例如使用以下代码:
```
import csv
data = []
with open('data.csv', 'r') as f:
reader = csv.reader(f)
headers = next(reader)
for row in reader:
data.append(row)
```
这样我们就可以获得一个包含所有数据的列表,每个元素都是一个列表,包含每个专业的信息。
c. 数据处理和绘图
接下来,我们可以使用Python的matplotlib库进行数据可视化。例如,我们可以将招生人数和平均分绘制成条形图:
```
import matplotlib.pyplot as plt
# 提取招生人数和平均分数据
enroll_nums = [int(row[1]) for row in data]
avg_scores = [int(row[2]) for row in data]
# 绘图
plt.bar(range(len(data)), enroll_nums, label='招生人数')
plt.bar(range(len(data)), avg_scores, bottom=enroll_nums, label='平均分')
plt.xticks(range(len(data)), [row[0] for row in data])
plt.legend()
plt.show()
```
这样我们就可以获得一个包含所有专业的条形图,可以比较方便地比较每个专业的招生人数和平均分。
2. 爬取数据存入数据库
a. 准备爬虫
我们可以使用Python的requests库和BeautifulSoup库来爬取网站数据。例如,以下代码可以从GitHub的Python仓库中爬取最新的100个Python仓库:
```
import requests
from bs4 import BeautifulSoup
url = 'https://github.com/trending/python?since=daily'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
repos = soup.select('h1 > a')
for repo in repos:
title = repo.text.strip()
link = 'https://github.com' + repo['href']
# 存入数据库
```
b. 存入数据库
我们可以使用Python的sqlite3库来创建一个本地SQLite数据库,并将爬取到的数据存入其中。例如,以下代码可以创建一个名为“repos”的表,并将爬取到的仓库标题和链接存入其中:
```
import sqlite3
# 连接到数据库
conn = sqlite3.connect('example.db')
# 创建表
conn.execute('''CREATE TABLE repos
(id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
link TEXT NOT NULL);''')
# 存储数据
for repo in repos:
title = repo.text.strip()
link = 'https://github.com' + repo['href']
conn.execute(f"INSERT INTO repos (title, link) VALUES ('{title}', '{link}')")
# 提交更改并关闭连接
conn.commit()
conn.close()
```
3. 利用tkinter设计系统界面
a. 设计GUI界面
使用Python的tkinter库可以相对简单地创建GUI界面。例如,以下代码可以创建一个包含一个“显示数据”按钮和一个“爬取数据”按钮的窗口:
```
import tkinter as tk
class App:
def __init__(self, master):
self.master = master
master.title("专业数据与爬虫")
self.show_data_button = tk.Button(master, text="显示数据", command=self.show_data)
self.show_data_button.pack()
self.crawl_data_button = tk.Button(master, text="爬取数据", command=self.crawl_data)
self.crawl_data_button.pack()
def show_data(self):
# 显示数据
pass
def crawl_data(self):
# 爬取数据
pass
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
root.mainloop()
```
b. 集成数据处理和爬虫
最后,我们可以将数据处理和爬虫代码集成到GUI中,例如以下代码:
```
import tkinter as tk
import csv
import matplotlib.pyplot as plt
import requests
from bs4 import BeautifulSoup
import sqlite3
class App:
def __init__(self, master):
self.master = master
master.title("专业数据与爬虫")
self.show_data_button = tk.Button(master, text="显示数据", command=self.show_data)
self.show_data_button.pack()
self.crawl_data_button = tk.Button(master, text="爬取数据", command=self.crawl_data)
self.crawl_data_button.pack()
def show_data(self):
# 从文件中读取数据
data = []
with open('data.csv', 'r') as f:
reader = csv.reader(f)
headers = next(reader)
for row in reader:
data.append(row)
# 提取数据并绘图
enroll_nums = [int(row[1]) for row in data]
avg_scores = [int(row[2]) for row in data]
plt.bar(range(len(data)), enroll_nums, label='招生人数')
plt.bar(range(len(data)), avg_scores, bottom=enroll_nums, label='平均分')
plt.xticks(range(len(data)), [row[0] for row in data])
plt.legend()
plt.show()
def crawl_data(self):
# 爬取数据并存入数据库
url = 'https://github.com/trending/python?since=daily'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
repos = soup.select('h1 > a')
conn = sqlite3.connect('example.db')
conn.execute('''CREATE TABLE repos
(id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
link TEXT NOT NULL);''')
for repo in repos:
title = repo.text.strip()
link = 'https://github.com' + repo['href']
conn.execute(f"INSERT INTO repos (title, link) VALUES ('{title}', '{link}')")
conn.commit()
conn.close()
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
root.mainloop()
```
这样我们就可以创建一个能够显示专业数据和爬取GitHub仓库数据的GUI应用程序。
阅读全文