2024-08-19



import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
 
# 生成模拟数据
def make_data(n_samples, n_features, centers=3, random_state=0):
    np.random.seed(random_state)
    centers = np.random.rand(centers, n_features)
    cluster_std = 0.6
    clusters = np.zeros((n_samples, n_features))
    for i in range(centers.shape[0]):
        clusters += np.random.normal(centers[i], cluster_std, size=(n_samples, n_features))
    return clusters
 
# 绘制聚类散点图
def plot_clusters(X, y_pred, title=None):
    # 为不同的聚类分配颜色
    colors = np.array([x for _, x in plt.get_cmap('tab20b').colors])
    for i in range(len(colors)):
        plt.scatter(X[y_pred == i, 0], X[y_pred == i, 1], s=30, c=colors[i])
    plt.title(title)
    plt.show()
 
# 定义 K-means 聚类函数
def kmeans_cluster(X, n_clusters, max_iter=300):
    kmeans = KMeans(n_clusters=n_clusters, max_iter=max_iter)
    y_pred = kmeans.fit_predict(X)
    title = f"K-Means Clustering with n_clusters = {n_clusters}, Silhouette Score: {silhouette_score(X, y_pred)}"
    plot_clusters(X, y_pred, title)
 
# 使用函数进行聚类
n_samples = 3000
n_features = 2
n_clusters = 3
random_state = 1
X = make_data(n_samples, n_features, centers=n_clusters, random_state=random_state)
kmeans_cluster(X, n_clusters, max_iter=300)

这段代码首先定义了生成模拟数据和绘制聚类散点图的函数。然后定义了kmeans_cluster函数,它使用scikit-learn库中的KMeans算法对数据进行聚类,并计算和绘制聚类的散点图,其中包括每个样本的聚类预测结果和蒙轮机得分。最后,使用生成的模拟数据调用kmeans_cluster函数进行聚类。

2024-08-19

read_csv() 是 pandas 库中用于读取 CSV 文件的函数。以下是该函数的一些常用参数和用法示例:

  1. filepath_or_buffer:指定 CSV 文件的路径。
  2. sepdelimiter:指定分隔符,默认为逗号 ,
  3. header:指定标题行,默认为 0(第一行),如果没有标题行设为 None
  4. index_col:指定用作索引的列。
  5. names:指定列名,会覆盖 CSV 文件中的标题。
  6. usecols:指定需要读取的列。
  7. skiprows:指定需要跳过的行数或者跳过某些行。
  8. nrows:指定需要读取的行数。
  9. skipfooter:指定需要跳过的文件尾部行数。
  10. encoding:指定文件编码,常用如 utf-8

示例代码:




import pandas as pd
 
# 读取 CSV 文件,默认分隔符为逗号,有标题行,索引为第一列
df = pd.read_csv('example.csv')
 
# 指定分隔符为制表符,没有标题行,第一列作为索引
df = pd.read_csv('example.csv', sep='\t', header=None)
 
# 指定标题行为第二行,第三列作为索引
df = pd.read_csv('example.csv', header=1, index_col=2)
 
# 指定列名
df = pd.read_csv('example.csv', names=['column1', 'column2', 'column3'])
 
# 只读取第一列和第三列
df = pd.read_csv('example.csv', usecols=[0, 2])
 
# 跳过前三行
df = pd.read_csv('example.csv', skiprows=3)
 
# 只读取前三行
df = pd.read_csv('example.csv', nrows=3)
 
# 指定编码为 utf-8
df = pd.read_csv('example.csv', encoding='utf-8')

以上代码展示了 read_csv() 函数的一些常见用法。根据实际情况,您可以根据需要选择适合的参数。

2024-08-19

在Python中,向Excel写入内容可以使用多种库,如xlwtxlsxwriteropenpyxlpandas等。以下是使用这些库的基本示例:

  1. 使用xlwt库(仅限Excel 97-2003格式,.xls):



import xlwt
 
# 创建一个workbook对象
workbook = xlwt.Workbook()
 
# 添加一个sheet页
sheet = workbook.add_sheet('Sheet1')
 
# 往sheet中写入数据
sheet.write(0, 0, 'Hello')
sheet.write(0, 1, 'World')
 
# 保存这个workbook到文件
workbook.save('example.xls')
  1. 使用xlsxwriter库:



import xlsxwriter
 
# 创建一个workbook对象
workbook = xlsxwriter.Workbook('example.xlsx')
 
# 添加一个sheet页
sheet = workbook.add_worksheet()
 
# 往sheet中写入数据
sheet.write('A1', 'Hello')
sheet.write('B1', 'World')
 
# 关闭workbook,保存文件
workbook.close()
  1. 使用openpyxl库(可以处理.xlsx格式):



from openpyxl import Workbook
 
# 创建一个workbook对象
workbook = Workbook()
 
# 获取第一个sheet页
sheet = workbook.active
 
# 往sheet中写入数据
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
 
# 保存这个workbook到文件
workbook.save('example.xlsx')
  1. 使用pandas库(需要安装pandasopenpyxl):



import pandas as pd
 
# 创建一个DataFrame
df = pd.DataFrame({
    'Column1': ['Hello'],
    'Column2': ['World']
})
 
# 将DataFrame写入到Excel文件
df.to_excel('example.xlsx', index=False)

以上代码展示了如何使用不同的库创建一个Excel文件,并在其中写入内容。选择哪个库取决于你的需求,比如是否需要处理.xlsx格式,是否需要处理大规模数据集等。

2024-08-19



import requests
from bs4 import BeautifulSoup
import re
 
def get_page(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except requests.RequestException:
        return None
 
def parse_page(html):
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.select('.product_name')[0].text
    price = soup.select('.price_sale')[0].text
    return {
        'title': title,
        'price': price
    }
 
def main(url):
    html = get_page(url)
    if html:
        data = parse_page(html)
        print(f"商品名称: {data['title']}")
        print(f"商品价格: {data['price']}")
 
if __name__ == '__main__':
    url = 'https://www.example.com/product/12345'
    main(url)

这段代码首先定义了一个get_page函数,用于发送HTTP GET请求并获取页面内容。其中使用了请求头来伪装浏览器访问以绕过一些网站的反爬机制。如果请求成功,它会返回页面的HTML内容;如果请求失败,则返回None。

parse_page函数使用BeautifulSoup来解析HTML内容,并提取商品名称和价格信息。

main函数首先调用get_page获取页面内容,然后调用parse_page解析页面,并打印出商品名称和价格。

最后,如果这段代码被直接运行,它将会爬取示例URL指定页面的商品信息。

2024-08-19

subprocess模块提供了一种在Python脚本中调用外部程序的方法。Popensubprocess模块中的一个类,可以用来启动子进程,并与之交互。runsubprocess模块中的一个函数,它封装了Popen,提供了一种简单的方式来运行命令,并等待命令完成后,返回一个包含执行结果的CompletedProcess对象。

解决方案1:使用subprocess.run()




import subprocess
 
# 使用subprocess.run()来运行命令
completed_process = subprocess.run(['ls', '-l'], capture_output=True, text=True)
 
# 打印输出结果
print("stdout:", completed_process.stdout)
 
# 打印错误信息
print("stderr:", completed_process.stderr)

解决方案2:使用subprocess.Popen()




import subprocess
 
# 使用subprocess.Popen()来运行命令
p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
out, err = p.communicate()
 
# 打印输出结果
print("stdout:", out)
 
# 打印错误信息
print("stderr:", err)

subprocess.run()相对于Popen的优势在于它是一个更简单的接口,可以更直接地运行命令并获取命令的输出,而无需处理管道和communicate()。不过,如果你需要更复杂的交互,比如要发送信号或者调整子进程的环境,你可能需要使用Popen

注意:run()函数在Python 3.5中被引入。如果你使用的是更早的Python版本,只能使用Popen

2024-08-19

在Python中,您可以使用osshutil模块来删除文件夹及其下所有文件。以下是一个简单的示例代码:




import os
import shutil
 
def delete_folder_contents(folder):
    for filename in os.listdir(folder):
        file_path = os.path.join(folder, filename)
        try:
            if os.path.isfile(file_path) or os.path.islink(file_path):
                os.unlink(file_path)
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)
        except Exception as e:
            print(f'Failed to delete {file_path}. Reason: {e}')
 
# 使用示例
folder_to_delete = '/path/to/your/folder'
delete_folder_contents(folder_to_delete)

确保替换/path/to/your/folder为您想要删除的文件夹的路径。此代码将删除指定文件夹下的所有文件和子文件夹。请注意,在删除文件和文件夹之前,这些操作是不可逆的,请谨慎使用。

2024-08-19

在Python中,读取.nc(Network Common Data Form)文件通常使用netCDF4xarray库。以下是使用这两种库读取.nc文件的示例代码:

使用netCDF4库:




import netCDF4
 
# 打开.nc文件
nc_file = netCDF4.Dataset('example.nc', mode='r')
 
# 读取变量
var = nc_file.variables['variable_name']
data = var[:]
 
# 关闭文件
nc_file.close()

使用xarray库:




import xarray as xr
 
# 读取.nc文件
ds = xr.open_dataset('example.nc')
 
# 读取变量
var = ds['variable_name']
data = var.values
 
# 查看数据
print(data)

xarray提供的接口更简洁,并且它能够更自动化地处理多维数据。通常,xarray在数据处理和分析方面提供了更好的支持,尤其是在处理地理空间数据时。

2024-08-19

pynput 库提供了控制和监听键盘与鼠标的功能。以下是使用 pynput 库的基本示例。

监听键盘事件:




from pynput import keyboard
 
def on_press(key):
    try:
        print(f"按下键: {key.char}")
    except AttributeError:
        print(f"按下键: {key}")
 
def on_release(key):
    print(f"释放键: {key}")
    if key == keyboard.Key.esc:
        return False
 
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

监听鼠标事件:




from pynput import mouse
 
def on_click(x, y, button, pressed):
    if pressed:
        print(f"点击位置: ({x}, {y}) 按钮: {button}")
    else:
        print(f"释放位置: ({x}, {y}) 按钮: {button}")
 
def on_scroll(x, y, dx, dy):
    print(f"滚动位置: ({x}, {y}) 偏移: ({dx}, {dy})")
 
with mouse.Listener(on_click=on_click, on_scroll=on_scroll) as listener:
    listener.join()

控制鼠标移动和点击:




from pynput.mouse import Button, Controller
 
mouse = Controller()
 
# 移动鼠标到屏幕中心
mouse.position = (100, 100)
 
# 点击左键
mouse.press(Button.left)
mouse.release(Button.left)
 
# 点击右键
mouse.press(Button.right)
mouse.release(Button.right)
 
# 移动鼠标
mouse.move(100, 0)

控制键盘输入:




from pynput.keyboard import Key, Controller
 
keyboard = Controller()
 
# 按下并释放 'a' 键
keyboard.press('a')
keyboard.release('a')
 
# 输入 'Hello World!'
keyboard.type('Hello World!')

以上代码提供了使用 pynput 进行键盘和鼠标监听以及模拟输入的基本示例。

2024-08-19

在Python中实现与STM32的串口通信,你可以使用pyserial库。以下是一个简单的例子,展示如何使用Python发送和接收数据。

首先,确保你已经安装了pyserial库,如果没有安装,可以使用pip安装:




pip install pyserial

然后,在Python代码中,你可以这样实现与STM32的串口通信:




import serial
import time
 
# 配置串口参数
# 请根据你的实际情况配置串口号、波特率等
# 例如 Windows 上的串口可能是 'COM3'
# Linux 或 macOS 上可能是 '/dev/ttyUSB0'
port = 'COM3'
baudrate = 115200
 
# 打开串口
ser = serial.Serial(port, baudrate, timeout=0.5)
 
# 发送数据到STM32
ser.write(b'Hello STM32\n')  # 注意需要发送bytes类型数据
 
# 从STM32接收数据
# 假设STM32会回复'Hello Python\n'
response = ser.readline()  # 读取一行数据,直到遇到换行符
print(response)
 
# 关闭串口
ser.close()

确保STM32的串口初始化配置与Python端匹配。在STM32上,你需要配置串口,使能中断(如果使用中断接收),并实现发送和接收功能。

以上代码是一个基本的例子,展示了如何打开串口、发送数据、接收数据和关闭串口。根据你的具体需求,你可能需要添加错误处理、数据解析和协议处理等。

2024-08-19

Python有非常丰富的库,这些库可以帮助开发者更快地完成工作,避免重复造轮子。以下是一些Python开发者常用的库:

  1. Requests:一个非常简洁而且简单的Python HTTP客户端库,用于发送所有类型的HTTP请求。



import requests
response = requests.get('https://www.google.com/')
print(response.text)
  1. BeautifulSoup:用于解析HTML和XML文件,提取所需数据。



from bs4 import BeautifulSoup
import requests
 
r = requests.get('https://www.google.com/')
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify())
  1. Pandas:用于数据分析和操作的强大库,能够处理来自不同源的数据,例如SQL,CSV,Excel文件等。



import pandas as pd
data = pd.read_csv('file.csv')
print(data)
  1. NumPy:用于处理大型多维数组和矩阵,提供了大量的数学函数库。



import numpy as np
print(np.arange(5))
  1. SciPy:是一个专门为科学和工程设计的库。



import scipy
print(scipy.__version__)
  1. Matplotlib:用于绘制数据的图形库。



import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('一些数字')
plt.show()
  1. Selenium:用于Web自动化测试,但也可以用来抓取需要JavaScript渲染的网页。



from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.google.com/')
print(driver.title)
driver.close()
  1. Scrapy:一个用于网络爬虫的开源和高级的Python框架,用于抓取网站并从其页面中提取结构化数据。



import scrapy
 
class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://www.example.com/']
 
    def parse(self, response):
        # 分析响应并提取项目
        pass
  1. TensorFlow 或 PyTorch:用于机器学习和深度学习的库。



# TensorFlow示例
import tensorflow as tf
 
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
  1. Django 或 Flask:用于Web开发的框架。



# Django示例
import django
print(django.VERSION)

这些库和框架可以帮助开发者快速完成从数据分析,数据挖掘,机器学习,Web开发,到自动化测试的任何任务。在使用时,需要安装对应的库,可以使用pip命令进行安装。例如,安装requests库的命令为:




pip install requests

以上就是Python必备库的一些示例,每个库都有其特定的用途,开发者可以根据自己的需求选择合适的库。