数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3

1.简单文件操作练习

import pandas as pd
# 读取文件
pd.read_csv('pokemon.csv')
# 读取 CSV 文件的函数调用,它将文件中的数据加载到 DataFrame 中,并指定了 'Pokemon' 列作为索引列。
pd.read_csv('pokemon.csv',index_col='Pokemon')#查看类型
type(pd.read_csv('pokemon.csv',index_col = 'Pokemon'))# 将DataFrame转为Series
# squeeze(1) 是一个 Series 对象的方法调用,用于将包含单列数据的 DataFrame 转换为 Series。参数 1 表示对列进行压缩,即将 DataFrame 压缩为 Series。
pd.read_csv('pokemon.csv', index_col='Pokemon').squeeze(1)
type(pd.read_csv('pokemon.csv' , index_col = 'Pokemon').squeeze(1))
# squeeze=True 参数表示将 DataFrame 压缩为 Series。这意味着如果读取的数据只有一列,Pandas 将返回一个 Series 而不是 DataFrame。
pd.read_csv('pokemon.csv', index_col='Pokemon', squeeze=True)
type(pd.read_csv('pokemon.csv', index_col='Pokemon', squeeze=True))# .head() 显示 DataFrame 的前几行,默认情况下是前五行。
pd.read_csv('google_stocks.csv').head()# 告诉pandas 把 Date 列看做日期处理
pd.read_csv('google_stocks.csv',parse_dates = ['Date']).head()google = pd.read_csv('google_stocks.csv', parse_dates=['Date'], index_col='Date').squeeze(1)
google
type(google)pd.read_csv('revolutionary_war.csv').tail()# NaN: not a number
# pandas用NaN表示缺失值
# NaN是NumPy对象# 将start time设置为index
# index_col='Start Date' 参数指定将 'Start Date' 列作为 DataFrame 的索引列。
# parse_dates=['Start Date'] 参数告诉 Pandas 将 'Start Date' 列解析为日期时间对象。
pd.read_csv('revolutionary_war.csv' , index_col = 'Start Date', parse_dates = ['Start Date']).squeeze(1).tail()# 默认read_csv()会读取文件中的所有数据
# 这里我们只取2列,构造一个Series
# 一列是index,一列是value# usecols=['State', 'Start Date']: 这个参数指定了我们只需要读取 'State' 和 'Start Date' 列的数据。
battles = pd.read_csv('revolutionary_war.csv',index_col = 'Start Date',parse_dates = ['Start Date'],usecols = ['State' , 'Start Date']
).squeeze(1)battles
type(battles)

2.排序

na_positoin

设置缺失值的位置
 na_positoin 的默认值为 last,默认情况下缺失值会被放在排序后面。
 na_position 参数为 'first',这意味着将缺失值排在非缺失值之前。

 dropna()

battles.dropna().sort_values()

去除 Series 中的缺失值后对剩余的非缺失值进行排序
这样做的好处是,在进行排序之前先清除了缺失值,确保排序过程中不会受到缺失值的影响。

ascending

  • "ascending=False" 按照降序排列,也就是从大到小的顺序排列
  • "ascending=True",则表示按照升序排列,即从小到大的顺序排列

查询最大值最小值

查询最大值nlargest()

对Series的value进行查询,nlargest() 默认n=5
google.nlargest(n=5)

查询最小值nsmallest()

google.nsmallest()

注:

nlargest()和nsmallest() 不能用于value是字符串的情况

#默认升序排列
google.sort_values()
# 对字符排序时,默认按照字母顺序排序
pokemon.sort_values()# 升序排序时,大写字母排在小写字母的前面
# 即大写字母比小写字母要小
pd.Series(['Adam','adam','Ben']).sort_values()google.sort_values(ascending = False).head()
pokemon.sort_values(ascending = False).head()# 设置缺失值的位置
# na_positoin 的默认值为 last,默认情况下缺失值会被放在排序后面。
# na_position 参数为 'first',这意味着将缺失值排在非缺失值之前。
battles.sort_values()
battles.sort_values(na_position = 'first')# 将value为缺失值的数据过滤掉
# dropna() 只适用于Series的value,而不是index
# dropna() 方法去除了 Series 中的缺失值后对剩余的非缺失值进行排序
# 这样做的好处是,在进行排序之前先清除了缺失值,确保排序过程中不会受到缺失值的影响。
battles.dropna().sort_values()# 按index排序
# 默认按升序排序
pokemon.sort_index()# 对日期排序,默认从最古老的时间到最新的时间
battles.sort_index()# NaT: not a time
# NumPy object
# Pandas 用 NaT代表日期缺失值# 改变带有缺失值数据的位置(缺失值在非缺失值前面)
battles.sort_index(na_position = 'first').head(10)# 按日期倒序排序
battles.sort_index(ascending = False).head(10)# 查询最大的几个值和最小的几个值
# 对Series的value进行查询
# nlargest() 默认n=5
# google.nlargest(n=5)
google.nlargest()
google.nsmallest()
# nlargest()和nsmallest() 不能用于value是字符串的情况

3.数据修改

inplace

告诉函数是否要在原始数据上进行修改,而不是返回一个修改后的副本。

实际尽量少用,最好用赋值语句,这样代码更具可读性。

  • inplace=True 传递给函数时,函数会在原始数据上直接进行操作,而不会返回一个新的副本。这意味着原始数据会被修改,并且你不需要将函数的输出赋值给一个新的变量。
  • inplace=False 或者不传递这个参数,则函数会返回一个修改后的副本,而原始数据则不受影响。
# 之前的方法都没有修改Series中的数据
battles.head(3)
battles.sort_values().head(3)
battles.head(3)# 修改Series的内容
# 通过 inplace=True
# battles.sort_values(inplace=True)
battles_copy = battles.copy(deep=True)
battles_copy.head()
battles_copy.sort_values(inplace=True)
battles_copy.head()# 实际中尽量少用 inplace 参数
# 最好使用赋值语句,这样代码具有更好的可读性
battles_new = battles.sort_values()
battles

4.统计数据个数

首先查看原始数据

value_counts()

统计Series中每个value出现的次数

value_counts(bins = 10,sort = False)

用于对数据进行分箱并计算每个分箱中数值的频数。

举个例子,如果有一个包含身高数据的 Series, value_counts(bins=10, sort=False) 将身高数据分成 10 个区间,并计算每个区间内身高数据的频数。

  • bins=10 参数指定了数据分成的箱子(bin)的数量。这意味着函数将会把数据分成 10 个区间,并计算每个区间中数值的频数。
  • sort=False 参数指定了是否对结果进行排序。

len(pokemon.value_counts)

len() 函数来计算这个结果的长度,也就是不同数值的数量。

pokemon.nunique()

用于计算不同数值的数量。它直接返回数据中不同数值的数量,而不需要额外的操作。通常情况下,这个方法在处理 Pandas 数据时更为方便和高效。

round()

用于控制数字的小数点后位数。你可以使用它来四舍五入到指定的小数点位数。

num = 3.1415926
rounded_num = round(num, 2)
print(rounded_num)  # 输出: 3.14

 normalize=True 

参数将结果转换为相对频率

normalize=True 参数是 value_counts() 方法的一个选项,用于指定是否将结果规范化为相对频率而不是绝对计数。当设置为 True 时,结果中的每个值的计数将除以总数以计算相对频率,即每个值在数据中出现的比例。这对于比较不同类别或值在数据中的相对重要性或分布情况非常有用。

pokemon.head()
# 统计Series中每个value出现的次数
pokemon.value_counts()
# 该方法返回一个新的Series对象
# 新Series的index labels:原Series的value
# 新Series的value:出现的次数len(pokemon.value_counts())
pokemon.nunique()# value_counts()方法默认按照计数从大到小排列
# 即默认情况下,参数 ascending=False
pokemon.value_counts(ascending=True)# 计算每个index label的占比
pokemon.value_counts(normalize = True).head()
# 转换成百分比。给每个值乘以100
pokemon.value_counts(normalize=True).head() * 100# 控制小数点后的位数
# 保留小数点后2位(四舍五入小数点后的第三位)
# round()方法
(pokemon.value_counts(normalize=True).head() * 100).round(2)google.value_counts().head()
google.max()
google.min()# 将股票价格范围划分为多个区间
# [200, 1400], step=200
buckets = [0, 200, 400, 600, 800, 1000, 1200, 1400]
google.value_counts(bins=buckets)
# 上面的结果是按value降序排序(默认)的
# 现在按照index label(区间顺序)进行排序
google.value_counts(bins=buckets).sort_index()google.value_counts(bins = buckets,sort = False)# -0.001?
# pandas 在左右方向会自动扩展给定区间,最多0.1%
google.value_counts(bins = 10, sort = False)
battles.head()# 查看哪个地方的战争最多
battles.value_counts()
# value_counts()默认不统计value为NaN的数据# 在value_counts()中统计value为NaN的数据
battles.value_counts(dropna = False)# 查询哪个时间战争最多
# 对Series的index label使用value_count()
battles.index
battles.index.value_counts()

5.apply()函数

使用apply()函数处理Series的每个value。

是 Pandas 中用于对 Series 或 DataFrame 中的数据执行自定义函数操作的方法。它可以将一个函数应用到 Series 的每个元素上,或者对 DataFrame 的每一行或每一列执行相同的操作。

import pandas as pd# 创建一个 Series
s = pd.Series([1, 4, 9, 16, 25])# 定义一个函数,用于计算平方根
def square_root(x):return x ** 0.5# 使用 apply() 函数将函数应用到 Series 的每个元素上
result = s.apply(square_root)print(result)

输出:square_root() 函数被定义用于计算一个数的平方根,然后通过 apply() 函数将这个函数应用到 Series 的每个元素上,得到了一个新的 Series 包含了每个数的平方根。

funcs = [len, max, min]
for current_func in funcs:print(current_func(google))# google.apply(func=round)对 google 的 Series 对象中的每个元素应用 round() 函数,即将每个元素四舍五入为最接近的整数。
google.apply(func=round)def single_or_multi(pokemon_type):if '/' in pokemon_type:return 'Multi'return 'Single'
pokemon.head()# 将多个数据替换为Multi,单个数据替换为Single
pokemon.apply(single_or_multi)
# 统计单个数据和多个数据的数量
pokemon.apply(single_or_multi).value_counts()

6.练习

战争期间,一周中哪一天发生的战斗最多

day_of_week 函数

   day_of_week 函数内部使用了 strftime('%A') 方法,这是 Python 中处理日期时间对象的方法之一,用于将日期时间格式化为指定的字符串表示。

  '%A' 是一个日期时间格式化指令,代表将日期时间转换为完整的星期几名称,比如 Monday、Tuesday 等。

days_of_war自定义函数

  1. filepath_or_buffer='revolutionary_war.csv': 这是指定要读取的 CSV 文件的文件路径或缓冲区。在这个例子中,文件名为 'revolutionary_war.csv',它应该位于当前工作目录或者指定的路径中。
  2. usecols=['Start Date']: 这是一个可选参数,用于指定要读取的列。在这里,只读取了名为 'Start Date' 的列。
  3. parse_dates=['Start Date']: 这是另一个可选参数,用于将指定的列解析为日期时间格式。在这里,'Start Date' 列被解析为日期时间格式。
  4. .squeeze(1): 这是一个 Series 对象的方法,用于将 DataFrame 对象压缩成 Series 对象。参数 1 表示如果 DataFrame 只有一列,则返回 Series 对象。
import datetime as dt
def day_of_week(day):return day.strftime('%A')days_of_war = pd.read_csv(filepath_or_buffer='revolutionary_war.csv', usecols=['Start Date'], parse_dates=['Start Date'],).squeeze(1)print(type(days_of_war))
print()
days_of_war#dropna() 方法会删除 Series 中的任何包含 NaN(缺失值)的行,然后 apply(day_of_week) 会对剩余的每个非空元素应用自定义函数 day_of_week。这个操作将把日期转换为相应的星期几,将结果存储在名为 days 的新 Series 中。
days = days_of_war.dropna().apply(day_of_week)
daysdays.value_counts()

练习4

DataFrame

可以将 DataFrame 想象成 Python 环境中的一个强大的电子表格。它是一个二维数据结构,本质上是一个表格,数据以行和列的形式组织。每列可以容纳不同的数据类型,这使得 DataFrame 在处理各种数据集时非常灵活。

关键特性和优势:

  • 结构化数据组织: DataFrame 提供了一种清晰直观的方式来组织数据,类似于电子表格,具有标记的行和列。这种结构简化了数据访问、操作和分析。

  • 异构数据: 与要求统一数据类型的数组不同,DataFrame 允许每列容纳不同的数据类型(例如,整数、浮点数、字符串),使其适用于各种数据集。

  • 基于标签的索引: DataFrame 提供灵活的索引方法。您可以使用标签(列名、行索引)引用行和列,从而使数据选择和操作更加直观。

  • 数据操作的强大工具: Pandas 提供了大量用于数据操作的函数。您可以轻松执行以下任务:

    • 根据条件过滤行
    • 添加或删除列
    • 对数据进行排序
    • 处理缺失值
    • 合并和连接 DataFrame
    • 聚合数据(例如,计算总和、平均值等)
    • 以及更多
  • 与其他库集成: Pandas 与 NumPy 和 SciPy 等其他科学 Python 库无缝集成,增强了其数值计算和科学分析的能力。

1.创建 DataFrame

在 Pandas 中创建 DataFrame 有多种方法:

  • 从字典创建:
import pandas as pddata = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 22]}
df = pd.DataFrame(data)
print(df)
  • 从列表的列表创建:
data = [['Alice', 25], ['Bob', 30], ['Charlie', 22]]
df = pd.DataFrame(data, columns=['姓名', '年龄'])
print(df)
  • 从 NumPy 数组创建:
import numpy as npdata = np.array([['Alice', 25], ['Bob', 30], ['Charlie', 22]])
df = pd.DataFrame(data, columns=['姓名', '年龄'])
print(df)
  • 从 CSV 文件创建:
df = pd.read_csv("data.csv")
print(df)

2.使用 DataFrame

  • 访问数据:
# 按名称访问列
age_column = df['年龄']# 访问多列
name_and_age = df[['姓名', '年龄']]# 按索引访问行
first_row = df.iloc[0]# 访问特定元素
element = df.loc[0, '姓名']
  • 数据操作:
# 添加新列
df['城市'] = ['New York', 'Paris', 'London']# 按年龄排序
df_sorted = df.sort_values(by='年龄')# 根据条件过滤行
filtered_df = df[df['年龄'] > 25]# 计算平均年龄
mean_age = df['年龄'].mean()

dtypes

返回一个 Series,其中包含了 DataFrame 中每一列的数据类型信息。这些数据类型可以是整数、浮点数、字符串、日期时间等。这个属性对于了解数据集的结构以及进行数据预处理非常有用,因为你可以根据列的数据类型进行相应的处理和分析。

sample()

从 DataFrame 中随机抽取指定数量或百分比的样本。

nba.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

其中参数的含义如下:

  • n:要抽取的样本数量。
  • frac:要抽取的样本数量的比例(0到1之间的值),与 n 二选一。
  • replace:是否允许重复抽样,如果为 True,则允许同一样本被抽取多次,如果为 False,则不允许。
  • weights:用于抽样时的权重,可以为每个样本设置一个权重。
  • random_state:随机数生成器的种子,用于可重复的随机抽样。
  • axis:指定抽样的轴,0 表示按行抽样,1 表示按列抽样,默认为 0。
# 从 nba DataFrame 中随机抽取 5 条样本
nba.sample(n=5)# 从 nba DataFrame 中按照 30% 的比例抽取样本
nba.sample(frac=0.3)# 从 nba DataFrame 中按照指定权重抽取样本
nba.sample(weights=[0.1, 0.2, 0.3, 0.4])

3.常用操作

  1. 查看基本信息:

    • .head() 查看前几行数据。
    • .tail() 查看后几行数据。
    • .info() 查看数据类型、非空值数量等信息。
    • .describe() 统计描述性信息(如平均值、标准差、最小值、最大值等)。
  2. 选择与过滤数据:

    • 通过列名选择列:df['column_name']
    • 通过条件选择行:df[df['Age'] > 30]
    • 切片操作:df[start:end] 或选择特定索引 df.loc[index] / df.iloc[index]
  3. 修改与添加数据:

    • 添加新列:df['NewColumn'] = values
    • 修改列的值:df['column_name'] = df['column_name'].apply(func)
    • 插入列:df.insert(loc, column_name, values)
  4. 删除数据:

    • 删除列:del df['column_name'] 或 df.drop(columns=['column_name'])
    • 删除行:df.drop(index, axis=0) 或根据条件过滤 df = df[df['Age'] != 30]
  5. 数据排序:

    • 按列排序:df.sort_values(by='column_name', ascending=True/False)
  6. 合并与连接数据:

    • 使用.concat()合并DataFrame。
    • 使用.merge()按键(列)合并DataFrame,类似于SQL的JOIN操作。
  7. 分组与聚合:

    df.groupby('Name').Age.mean()
    
    • .groupby()进行分组,然后可以应用聚合函数,如求和、平均等。
  8. 数据透视表:

    • 使用.pivot_table()创建数据透视表,非常适合做复杂的数据汇总。
  9. 缺失值处理:

    • 查找缺失值:df.isnull()
    • 填充缺失值:df.fillna(value) 或删除含有缺失值的行/列:df.dropna()
  10. 字符串操作(对于包含字符串的列):

    df['Name'].str.upper()
    
    • 使用.str属性进行字符串操作,如截取、查找、替换等。
  11. 日期时间操作:

    • 将列转换为日期时间格式:pd.to_datetime(df['date_column'])
    • 提取日期时间的部分,如年、月、日。
import pandas as pd
import numpy as np# dict创建DataFrame
city_data = {'City':['New York City', 'Paris', 'Barcelone', 'Rome'],'Country':['United States', 'France', 'Spain', 'Italy'],'Population':[8600000, 2141000, 5515000, 2873000]
}
cities = pd.DataFrame(city_data)
cities# index label 与 column index交换位置
cities.transpose()
cities.T# 用ndarray创建DataFrame
random_data = np.random.randint(1,101,(3,5))
print(type(random_data))
random_data
pd.DataFrame(data = random_data)# 设置 row label
row_labels = ['Morning', 'Afternoon', 'Evening']
temperatures = pd.DataFrame(data = random_data,index = row_labels)
temperatures# 设置column label
column_labels = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
pd.DataFrame(data = random_data,index = row_labels,columns = column_labels)# row label 和 column label 都分别可以包含重复的值
# 但是尽量不要出现重复值
row_labels = ["Morning", "Afternoon", "Morning"]
column_labels = ["Monday","Tuesday","Wednesday","Tuesday","Friday"
]
pd.DataFrame(data = random_data,index = row_labels,columns = column_labels,
)pd.read_csv('nba.csv')
# pandas导入数据时,日期默认为字符串
# 需要将日期进行设置
nba = pd.read_csv(filepath_or_buffer = 'nba.csv',parse_dates = ['Birthday'])
nbanba.dtypes
type(nba.dtypes)
nba.dtypes.value_counts()nba.indexnba.columns# 获取对象维度,对于DataFrame,ndim通常返回2,因为DataFrame本质上是一个二维结构,它由行和列组成。如果操作的是Series(DataFrame的一列),则ndim会返回1,表示一维数据结构。
nba.ndimnba.shape# 查询有多少个数据(包括缺失值NaN的个数)
nba.size# 如果想在统计数据个数时,排除缺失值,使用count()统计每列中非缺失值的个数
nba.count()
nba.count().sum()# 当前这个nba数据集中没有缺失值
# 对比 size属性 和 count()
# 创建一个带有缺失值的DataFrame
data = {'A':[1,np.nan],'B':[2,3]
}
df = pd.DataFrame(data = data)
df
df.size
df.count()
df.count().sum()nba.head(2)
nba.tail(3)# 随机抽取3条数据
nba.sample(3)# 查看每一列有多少个不同的值
nba.nunique()nba.max()
nba.min()# 查询工资最高的4个人
nba.nlargest(4,columns = 'Salary')# 查询年龄最大的3个人
nba.nsmallest(n=3, columns='Birthday')# 计算所有人的工资之和
nba['Salary'].sum()# 计算DataFrame中'Salary'列所有非缺失值的平均值。
nba['Salary'].mean()# 计算中位数。
nba['Salary'].median()# 出现次数最多的值
nba['Salary'].mode()# 计算standard deviation(标准差)
nba['Salary'].std()

4.选择指定的行和列

选择一列:nba.Salary

选择多列:nba[ ['Salary' , 'Birthday'] ]

根据数据类型选择列:nba.select_dtypes(include = 'object')或nba.select_dtypes(exclude = 'object')

5.切片操作

nba.sort_index().loc['Otto Porter':'Patrick Beverley']

通过标签(在这里是球员的名字)来选择索引范围内的行。

从名字为'Otto Porter'的行开始,到名字为'Patrick Beverley'的行结束(包括这两行),展示这部分球员的数据。

1. 基于标签的切片 (loc)

  • 语法df.loc[行标签, 列标签]
  • 说明loc 方法用于通过行和列的标签来选择数据。它考虑到了标签的范围,所以当指定起始和结束标签时,包括起始标签,但不包括结束标签,类似于Python的切片操作。
# 假设df是一个DataFrame
df.loc['row_label_start':'row_label_end', 'column_label1':'column_label2']

2. 基于位置的切片 (iloc)

  • 语法df.iloc[行索引, 列索引]
  • 说明:与loc不同,iloc是基于行和列的整数索引来选择数据的。它同样遵循Python的切片规则,即包括起始索引,不包括结束索引。
# 选取第0行到第4行,第1列到第3列的数据
df.iloc[0:5, 1:4]

特殊用法

  • 单一标签切片:可以直接用单个标签或索引来选取单行或单列。
df.loc['single_row_label']  # 选取单行
df.iloc[0]  # 选取第一行,按位置
df['column_label']  # 选取单列,基于列名
  • 条件筛选:虽然不是传统意义上的切片,但通过条件表达式可以实现数据的选择,常与布尔索引结合使用。
df[df['Age'] > 30]  # 选取Age列大于30的所有行
  • 步长切片:可以像常规Python序列那样使用步长,例如 df.iloc[::2, ::3] 选取每第二行和每第三列的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式,在react-router6.4.0及以上版本,提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件,使用createBrow…

十二届蓝桥杯Python组1月中/高级试题 第五题

** 十二届蓝桥杯Python组1月中/高级试题 第五题 ** 第五题(难度系数 5,35 个计分点) 提示信息: 平均数:是指在一组数据中所有数据之和再除以这组数据的个数。 如:“1,2,3&#xf…

命令行方式将mysql数据库迁移到达梦数据库(全步骤)

因项目需求,需要将mysql数据库转换为国产达梦数据库,但由于安全问题,正式环境只能用命令行方式连接,下列是操作全步骤 目录 一、操作逻辑二、操作步骤1、本地安装达梦相关工具2、将服务器mysql导出到本地a) 服务器命令行导出mysql…

如何添加、编辑、调整WordPress菜单

我们最近在使用WordPress建站建设公司网站。我们是使用的hostease的主机产品建设的WordPress网站。在建设网站使用遇到了一些WordPress菜单使用方面的问题。好在hostease提供了不少帮助。 下面把WordPress菜单使用心得分享一下。 本文将详细介绍WordPress菜单的各种功能&#x…

音频录制软件有哪些?这2种推荐给你

音频在当今数字化世界中扮演着至关重要的角色。无论是音乐创作、语音记录、会议记录还是其他任何需要捕捉声音的场景,音频录制软件都是能为我们提供强大功能的工具。 那么到底哪一种软件才最适合您呢?下面小编将为您介绍2款音频录制软件。 方法一&#…

Ansys Mechanical|绳索仿真技术

绳索,俗称绳子,是通过扭或编等方式加强后,连成一定长度的纤维。其拉伸强度很好但没有压缩强度,可用来做连接、牵引的工具。绳索的用途数不胜数:从建筑中的材料固定、到岩土工程中的柔性锚索、汽车门窗的升降拉索、电缆…

在系统学习C语言之前所需要了解的知识

C语言常见概念 前言1. C语言是什么2. C语言的历史和辉煌3. 编译器的选择VS20223.1 编译和链接3.2 编译器的对比3.3 VS2022的优缺点优点:缺点: 4. VS项目和源文件、头文件介绍5. 第⼀个C语言程序6. main函数7. printf和库函数8. 关键字介绍9. 字符和ASCII…

Spring Cloud Kubernetes 本地开发环境调试

一、Spring Cloud Kubernetes 本地开发环境调试 上面文章使用 Spring Cloud Kubernetes 在 k8s 环境中实现了服务注册发现、服务动态配置,但是需要放在 k8s 环境中才能正常使用,在本地开发环境中可能没有 k8s 环境,如何本地开发调试呢&#…

【优选算法】—Leetcode—11—— 盛最多水的容器

1.题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#…

探索MySQL数学宝库:常用数学函数的秘密操作

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探索MySQL数学宝库:常用数学函数的秘密操作 前言ABS函数(绝对值)ROUND函数(四舍五入)CEIL和FLOOR函数(向上取整和向下取整&#…

酷开科技AI技术支持,酷开系统根据你的喜好量身定制节目

在当今数字化时代,个性化推荐已成为提升消费者体验的关键因素。酷开科技的智慧AI,为消费者提供了精彩的内容推荐服务,更大地丰富了消费者的娱乐生活。 酷开系统中的AI推荐引擎通过学习消费者的观看习惯和偏好,能够快速识别其兴趣…

【C++】-【QT】类库使用-001

1主窗口创建 1.1【makefile】配置 1 源码 QT widgetsSOURCES main.cpp2 图示 1.2源码 1 源码 #include <QWidget> #include <QApplication>using namespace std;int main(int argc,char *argv[]) {QApplication a(argc,argv);QWidget w;w.show();return a…

nginx代理原理(端口复用)探究

前言&#xff1a;对于一些常用的插件&#xff0c;我们应该学会如何使用。同时&#xff0c;其实现原理也要进行深究&#xff0c;可以为其他的项目开发做借鉴。 探究方案&#xff1a; 一、发布两个不同的服务&#xff0c;这两个服务的端口不致 二、配置nginx&#xff0c;让这两…

C语言——文件描述符、系统调用操作文件

文件描述符 在Unix-like操作系统中&#xff0c;文件描述符&#xff08;file descriptor&#xff09;是一个用于标识打开文件或I/O设备的整数值。它是对底层文件系统的抽象&#xff0c;用于在应用程序和操作系统之间传递文件信息。 文件描述符是一个非负整数&#xff0c;通常是…

透明桌面便签便笺怎么设置 透明的便签在哪

在繁忙的工作与生活中&#xff0c;我一直渴望找到一种能够轻松管理待办事项的方式。最近&#xff0c;我发现了一个让我爱不释手的工具。它不仅有着出色的提醒功能&#xff0c;更独特的是&#xff0c;它提供了透明便签的设计。 那么&#xff0c;透明便签的好处究竟有哪些呢&…

第十三届蓝桥杯决赛(国赛)真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 火柴棒数字试题 B: 小蓝与钥匙试题 C: 内存空间试题 D: 斐波那契数组试题 E: 交通信号试题 F: 数组个数试题 G: 六六大顺试题 H : \mathrm{H}: H: 选素数试题 I: 图书借阅试题 J \mathrm{J} J : 括号序列树 发现宝藏 前些天发现了一个…

EPSON推出可定制晶振技术支持

什么叫做定制晶振呢?定制晶振又可以称为订制&#xff0c;订做晶振&#xff0c;爱普生可编程晶振可在0.67MHz~166MHz频率范围内实现任意频率烧录订制。定制频率晶振是基于PLL技术的一次频率烧录的振荡器&#xff0c;在没有温补的情况下也能够产生稳定的频率输出。单CMOS频率输出…

什么才是正确的领域驱动实现架构?

作为一种系统建模方法&#xff0c;DDD同样涉及系统的体系架构设计。区别于分布式、事件驱动、消息总线等架构设计方法&#xff0c;DDD中的架构设计关注前面各章所介绍的聚合、实体、值对象、领域事件、应用服务以及资源库之间的交互方式和风格&#xff0c;并在设计思想上有其独…

基于Go编写一个人员管理系统案例

代码结构 人员结构体 package entity// 结构体&#xff1a;人 type Person struct {Id intName stringSex stringAge int }// 构造函数 func NewPerson(id int, name, sex string, age int) *Person {return &Person{Id: id,Name: name,Sex: sex,Age: age,} }人员…

【AutoGPT】踩坑帖(follow李鱼皮)

本文写于2024年5月7日 参考视频&#xff1a;AutoGPT傻瓜式使用教程真实体验&#xff01; 对应文章&#xff1a;炸裂的AutoGPT&#xff0c;帮我做了个网站&#xff01; 平台&#xff1a;GitPod 云托管服务 原仓库已经改动很大&#xff0c;应使用的Repo为&#xff1a;Auto-GPT-ZH…