2024-08-23



import requests
from bs4 import BeautifulSoup
import pandas as pd
 
# 设置请求头信息,模拟浏览器访问
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'}
 
def get_html(url):
    """
    获取网页HTML内容
    """
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except Exception as e:
        print(f"Error: {e}")
 
def parse_html(html):
    """
    解析网页,提取数据
    """
    soup = BeautifulSoup(html, 'html.parser')
    data = []
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):  # 确保 tr 是一个标签
            tds = tr('td')
            data.append([tds[0].text, tds[1].text, tds[2].text, tds[3].text])
    return data
 
def save_data(data, filename):
    """
    将数据保存到CSV文件
    """
    df = pd.DataFrame(data, columns=['序号', '姓名', '年龄', '职业'])
    df.to_csv(filename, index=False, encoding='utf-8')
 
# 网页URL
url = 'https://www.example.com/data'
html = get_html(url)
data = parse_html(html)
save_data(data, 'data.csv')

这段代码实现了上述功能,首先定义了请求头信息,模拟浏览器访问;然后定义了获取网页HTML内容的函数get_html;接着定义了解析HTML并提取数据的函数parse_html;最后定义了将数据保存到CSV文件的函数save_data。代码示例中的网页URL应该替换为实际的目标网址。

2024-08-23

在Python中,魔法方法是那些具有特殊名称的方法,Python的内置方法会在特定的情况下自动调用这些方法。魔法方法允许我们定义对象的一些行为,例如定义一个对象在打印时的输出格式,或者定义对象的加减乘除等操作。

以下是一些常见的Python魔法方法及其使用示例:

  1. __init__:构造函数,用于初始化对象。



class MyClass:
    def __init__(self, value):
        self.value = value
 
obj = MyClass(10)
  1. __str__:当我们打印对象时,这个方法定义了输出的格式。



class MyClass:
    def __init__(self, value):
        self.value = value
 
    def __str__(self):
        return f"MyClass with value: {self.value}"
 
obj = MyClass(10)
print(obj)  # 输出: MyClass with value: 10
  1. __repr__:这个方法的功能和__str__类似,但它主要是为调试而设计的。



class MyClass:
    def __init__(self, value):
        self.value = value
 
    def __repr__(self):
        return f"MyClass({self.value})"
 
obj = MyClass(10)
print(repr(obj))  # 输出: MyClass(10)
  1. __add__:定义当两个对象相加时的行为。



class MyClass:
    def __init__(self, value):
        self.value = value
 
    def __add__(self, other):
        return self.value + other.value
 
obj1 = MyClass(10)
obj2 = MyClass(20)
print(obj1 + obj2)  # 输出: 30
  1. __iter__:定义对象的迭代行为。



class MyClass:
    def __init__(self, values):
        self.values = values
 
    def __iter__(self):
        for value in self.values:
            yield value
 
obj = MyClass([1, 2, 3])
for item in obj:
    print(item)  # 输出: 1 2 3
  1. __getitem__:定义获取对象元素的行为。



class MyClass:
    def __init__(self, values):
        self.values = values
 
    def __getitem__(self, key):
        return self.values[key]
 
obj = MyClass([1, 2, 3])
print(obj[1])  # 输出: 2

这些是一些常见的Python魔法方法,每个方法都有其特定的用途,合理使用可以极大地提高代码的可读性和灵活性。

2024-08-23

在Python中,字典是一种数据类型,用于存储键值对。字典中的键必须是唯一的,但值不必。值可以是任何类型,但键必须是不可变的,如字符串,数字,或者元组。

以下是一些基本操作的示例代码:




# 创建字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
 
# 访问字典的值
print(my_dict['name'])  # 输出: Alice
 
# 更新字典的值
my_dict['age'] = 26
 
# 添加新的键值对
my_dict['job'] = 'Engineer'
 
# 删除键值对
del my_dict['city']
 
# 遍历字典
for key in my_dict:
    print(key, my_dict[key])
 
# 创建空字典
empty_dict = {}
 
# 字典函数和方法
# 获取字典的长度
length = len(my_dict)
 
# 清空字典
my_dict.clear()
 
# 检查键是否存在
if 'name' in my_dict:
    print('Key exists')
 
# 字典推导式
new_dict = {k: v.upper() for k, v in my_dict.items()}

以上代码展示了如何在Python中创建和操作字典,包括访问值、更新值、添加新的键值对、删除键值对、遍历字典,以及使用函数和方法如len(), clear(), in, 和字典推导式。

2024-08-23



import pandas as pd
 
# 读取Excel文件
def read_excel_file(file_path):
    # 使用pandas的read_excel函数读取文件
    df = pd.read_excel(file_path)
    return df
 
# 示例使用
if __name__ == "__main__":
    file_path = 'example.xlsx'  # Excel文件路径
    df = read_excel_file(file_path)
    print(df)  # 打印读取的数据

这段代码演示了如何使用Python的pandas库来读取Excel文件。首先,我们定义了一个函数read_excel_file,它接受一个文件路径作为参数,并使用pd.read_excel来读取Excel文件。然后,在__name__ == "__main__"的条件下,我们调用这个函数并传入文件路径,打印出读取的数据。这是处理Excel文件操作的一个基本例子。

2024-08-23

plt.scatter 是 Matplotlib 库中的一个函数,用于生成散点图。以下是一个使用 plt.scatter 的简单示例:




import matplotlib.pyplot as plt
 
# 假设有一组数据点
x = [1, 2, 3, 4, 5]
y = [2, 3, 2, 4, 2]
 
# 使用 plt.scatter 生成散点图
plt.scatter(x, y)
 
# 显示图表
plt.show()

plt.scatter 函数最基本的用法就是传入两个等长的数组 xy,它会在这些数据点的位置上生成散点。

可以通过修改参数来调整点的样式、大小和颜色等属性。例如,可以通过 s 参数来控制点的大小,通过 c 参数来控制点的颜色,通过 alpha 参数来控制点的透明度等。




import matplotlib.pyplot as plt
 
x = [1, 2, 3, 4, 5]
y = [2, 3, 2, 4, 2]
 
# 修改点的大小为 100,颜色为红色,透明度为 0.5
plt.scatter(x, y, s=100, c='red', alpha=0.5)
 
plt.show()

plt.scatter 还有其他一些参数可以用来进行更复杂的自定义,如 marker 参数可以用来改变点的形状,linewidths 参数可以用来控制边界线的宽度等。

2024-08-23



import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
 
# 示例股票价格数据
def load_data(filename):
    with open(filename, 'r') as f:
        data = f.read()
    all_data = data.split('\n')
    stock_data = np.array(all_data).astype(np.float)
    return stock_data
 
# 将数据转换为LSTM模型需要的形状
def prepare_data(stock_data, seq_length, normalize_window=True):
    X, y = [], []
    for i in range(len(stock_data) - seq_length):
        X.append(stock_data[i:i + seq_length])
        y.append(stock_data[i + seq_length])
    X = np.array(X).reshape((X.shape[0], seq_length, 1))
    y = np.array(y).reshape((y.shape[0], 1))
    if normalize_window:
        scaler = MinMaxScaler(feature_range=(0, 1))
        X_scaled = scaler.fit_transform(X.reshape((X.shape[0], X.shape[2])))
        X = X_scaled.reshape((X.shape[0], X.shape[1], X.shape[2]))
    return X, y
 
# 模型训练和评估函数
def train_and_evaluate_model(X_train, y_train, X_test, y_test, seq_length, n_features, batch_size, epochs):
    model = Sequential()
    model.add(LSTM(50, input_shape=(seq_length, n_features)))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse')
    model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=2)
    # 评估模型
    _, ax = plt.subplots(figsize=(12, 4))
    test_predict = model.predict(X_test)
    ax.plot(test_predict, color='blue', label='Prediction')
    ax.plot(y_test, color='red', label='Real Value')
    ax.legend(loc='upper left')
    ax.set_xlabel('Time')
    ax.set_ylabel('Stock Price')
    ax.set_title('Model Prediction vs. Real Stock Price')
    plt.show()
    # 计算平均平方误差
    mse = mean_squared_error(y_test, test_predict)
    return mse
 
# 示例使用
seq_length = 30  # 序列长度
batch_size = 1  # 批量大小
epochs = 500  # 训练轮数
n_features = 1  # 特征数量(单变量数据)
 
# 加载数据
stock_data = load_data('stock_data.txt')
# 准备数据
X_train, y_train = prepare_data(stock_data[:580], seq_length, normalize_window=True)
X_test, y_test = prepare_data(stock_data[580:], seq_length, normalize_window=True)
# 训练和评估模型
mse = train_and_evaluate_model(X_train, y_train, X_test, y_test, seq_length, n_features, batch_size, epochs)
print(f"Mean Squared Error: {mse}")

这段代码展示了如何加载股票价格数据,将其转换

2024-08-23

在Python中,使用国内镜像源可以加快包的下载速度,尤其是在网络不稳定或者无法访问默认PyPI时非常有用。以下是几个常用的Python镜像源以及如何使用它们:

  1. 阿里云:https://mirrors.aliyun.com/pypi/simple/
  2. 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
  3. 豆瓣(douban):http://pypi.douban.com/simple/
  4. 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
  5. 中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

你可以在使用pip安装包时指定镜像源,例如:




pip install -i https://mirrors.aliyun.com/pypi/simple/ some-package

此命令会从阿里云镜像源安装名为some-package的Python包。

如果你想要永久修改pip默认的镜像源,可以创建或修改配置文件pip.conf(Unix系统位于~/.pip/pip.conf,Windows系统位于%HOME%\pip\pip.ini),例如:




[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

这样配置后,你使用pip安装包时会默认使用这个镜像源。

2024-08-23

在Python的matplotlib库中,可以使用matplotlib.font_manager模块来设置字体的样式,包括字体、大小、粗细以及文字的斜体、旋转角度等属性。

以下是一个示例代码,演示如何设置这些属性:




import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
 
# 创建一个FontProperties对象来设置字体属性
font = FontProperties()
font.set_family('serif')       # 设置字体为serif
font.set_style('italic')       # 设置字体样式为斜体
font.set_stretch('condensed')  # 设置字体伸缩为condensed(窄体)
font.set_weight('bold')        # 设置字体粗细为bold
font.set_size(14)              # 设置字体大小
 
# 绘图
plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
 
# 添加标题、X轴和Y轴标签,并设置字体属性
plt.title('Example Plot', fontproperties=font)
plt.xlabel('X Axis', fontproperties=font)
plt.ylabel('Y Axis', fontproperties=font, rotation=45)  # 设置标签旋转角度为45度
 
# 显示图形
plt.show()

在这个例子中,我们首先创建了一个FontProperties对象,并通过其方法设置了字体的属性。然后,在绘图时将这个字体属性对象应用到标题、X轴标签和Y轴标签上,包括设置标签旋转的角度。

2024-08-23



import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import get_window
from scipy.fftpack import fft, fftshift
 
# 定义窗函数和帧移动
def compute_stft(signal, frame_size, frame_stride, window_type):
    # 计算帧数
    num_frames = (len(signal) - frame_size) // frame_stride + 1
    # 初始化STFT矩阵
    stft_matrix = np.zeros((num_frames, frame_size), dtype=np.complex_)
    # 窗函数
    window = get_window(window_type, frame_size)
    # 使用窗函数和FFT计算短时傅里叶变换
    for i in range(num_frames):
        # 提取帧
        frame = signal[i * frame_stride:i * frame_stride + frame_size] * window
        # 进行傅里叶变换
        stft_matrix[i] = fft(frame)
    return stft_matrix
 
# 示例信号
t = np.linspace(0, 1, 16000)
signal = np.cos(2 * np.pi * 440 * t)  # 示例信号为440Hz的正弦波
 
# 设置参数
frame_size = 2048
frame_stride = 512
window_type = 'hann'
 
# 计算短时傅里叶变换矩阵
stft_matrix = compute_stft(signal, frame_size, frame_stride, window_type)
 
# 绘制短时傅里叶变换频谱图
plt.figure()
plt.specgram(signal, NFFT=frame_size, Fs=16000, noverlap=frame_stride - 1, window=window_type)
plt.title('Short-time Fourier Transform (STFT) Spectrogram')
plt.show()

这段代码首先定义了一个函数compute_stft,用于计算给定信号的短时傅里叶变换矩阵。然后,我们使用一个440Hz的正弦波作为示例信号,并使用specgram函数绘制短时傅里叶变换频谱图。这个例子展示了如何使用Python进行STFT分析,并且可以帮助开发者理解短时傅里叶变换在音频信号处理中的应用。

2024-08-23



import os
 
def get_files_by_suffix(folder_path, suffix):
    """
    获取指定文件夹下所有指定后缀的文件列表
    :param folder_path: 文件夹路径
    :param suffix: 文件后缀
    :return: 文件列表
    """
    return [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith(suffix)]
 
# 使用示例
folder = '/path/to/your/folder'  # 替换为你的文件夹路径
suffix = '.txt'  # 替换为你想要的文件后缀
files = get_files_by_suffix(folder, suffix)
print(files)

这段代码定义了一个get_files_by_suffix函数,它接受文件夹路径和文件后缀作为参数,返回该文件夹下所有指定后缀的文件列表。使用os.listdir获取文件夹内的所有文件,然后使用列表推导式过滤出指定后缀的文件,最后返回这些文件的完整路径。使用时只需要替换foldersuffix变量的值即可。