如何用Python读取Excel中带黄色背景和红色字体的涡轮增压器采购优先级标记?

<think>我们使用pandas库来读取Excel文件,这是Python中处理表格数据的标准库。 步骤: 1. 安装必要的库:pandas和openpyxl(用于处理xlsx格式) 2. 使用pandas的read_excel函数读取文件 3. 查看数据 注意:如果文件中有颜色标记,pandas默认不会读取颜色信息。如果需要读取颜色,我们需要使用openpyxl库来单独处理颜色。 但是根据用户需求,我们需要读取颜色信息(黄色标记优先级,红色字体标记询价客户列)。因此,我们需要结合openpyxl来提取颜色信息。 这里我们提供一个读取带颜色标记的Excel文件的示例: 我们将做两件事: a. 读取数据内容 b. 读取单元格的背景色和字体颜色 由于用户的需求中涉及多个条件分析,我们首先需要将颜色信息也读入到DataFrame中,以便后续分析。 计划: 1. 使用openpyxl加载工作簿 2. 遍历每一行每一列,读取值和样式 3. 将样式信息(背景色、字体颜色)存储为额外的列 但是,注意用户需求中标记为黄色的行表示优先级购买样机,而询价客户列中红色字体的列需要特别关注。 我们可以这样设计: - 为每个原始列增加两个新列:一个存储背景色,一个存储字体颜色。但这样会使列数膨胀。 - 或者,我们只记录我们关心的标记:在行级别,我们记录该行是否被标记为黄色(优先级购买样机),在列级别,我们记录哪些列是红色字体(询价客户列)。 根据需求,我们更关注: 1. 行的黄色背景(优先级购买) 2. 特定列的红色字体(询价客户列,并且其中单元格的红色字体可能表示最优先级?) 用户需求说明: - 总数据16款涡轮增压器。 - 标记为黄色的是优先级购买样机是13款,其中最优先级购买是4款,在询价客户列字体都是红色标记了。 这里有两个颜色标记: a. 整行的背景色为黄色 -> 优先级购买样机 b. 在询价客户列中,字体为红色的单元格 -> 最优先级购买(共4款) 因此,我们需要: 1. 识别行背景色:如果一行中任意单元格的背景色为黄色(或我们假设黄色标记是整行标记),那么该行为优先级购买样机。 2. 在询价客户列中,如果某个单元格的字体为红色,那么该款涡轮增压器在该询价客户列上被标记为最优先级。 但是,用户说“在询价客户列字体都是红色标记了”指的是最优先级购买的4款。所以,对于最优先级,我们可能需要检查询价客户列中是否有红色字体。 具体步骤: 步骤1:读取Excel文件,获取每个单元格的值和样式。 步骤2:确定哪些列是“询价客户列”(列标题的字体为红色?) 步骤3:遍历每一行: a. 检查该行是否有黄色背景(假设整行标记,所以可以检查第一列的背景色?或者任意列?) b. 在询价客户列中,检查该行的这些列的单元格是否有红色字体。 我们假设: - 优先级购买样机:该行至少有一个单元格的背景色为黄色(或者我们可以要求黄色背景标记在特定列上?这里假设整行背景色标记为黄色表示优先级) - 最优先级购买:在询价客户列中,该行的这些列中至少有一个单元格的字体为红色。 注意:由于用户需求中提到了“在询价客户列字体都是红色标记了”,这里可能是指最优先级购买的4款,其询价客户列中的字体都是红色(或者至少有一个?)。但是需求描述是“在询价客户列字体都是红色标记了”,我们理解为这4款的最优先级标记体现在询价客户列中使用了红色字体。 因此,我们可以这样设计: 1. 首先读取第一行(列标题),记录哪些列标题的字体颜色是红色的,这些列就是询价客户列。 2. 对于每一行(数据行): - 如果该行中任意单元格的背景色是黄色,则标记该行为“优先级购买样机” - 在该行的询价客户列中,如果任意单元格的字体颜色为红色,则标记该行为“最优先级购买样机” 但是注意:用户说最优先级有4款,而优先级购买样机有13款,最优先级包含在优先级中。 因此,我们创建两个新的列: - '优先级购买样机':布尔值 - '最优先级购买样机':布尔值 然后我们就可以根据这些标记进行后续的分析。 代码示例: 注意:颜色比较时,我们使用RGB值。黄色背景的RGB值通常为'FFFF00'(但Excel中可能是'FFFFFF00',因为ARGB格式,前两位是透明度,后六位是颜色)。红色字体的RGB值为'FF0000'。 由于openpyxl返回的颜色是ARGB格式的字符串,比如黄色背景可能是'FFFFFF00'(黄色),红色字体可能是'FFFF0000'(红色)。 我们将: - 黄色背景:PatternFill的起始颜色(start_color)为'FFFFFF00'(或者'FFFF00',但openpyxl返回的是带Alpha的,所以可能是8位的) - 红色字体:Font的color属性为'FFFF0000' 但是注意,openpyxl中,如果单元格没有设置颜色,那么cell.fill为None,cell.font也为None或者color为None。 因此,我们需要小心处理。 由于颜色格式可能因Excel版本或用户设置而略有不同,我们可以定义一个函数来归一化颜色值(只取后6位,忽略透明度),但为了简单,我们直接比较完整的字符串。 步骤: 1. 加载工作簿 2. 选择工作表(假设第一个工作表) 3. 获取第一行,确定询价客户列(红色字体的列)的列索引 4. 从第二行开始遍历每一行 5. 对每一行,遍历每个单元格: 检查单元格的填充(fill)是否为黄色(比较fill.start_color.rgb) 如果是,则标记该行为优先级购买样机 同时,如果该单元格所在的列索引在询价客户列索引中,检查该单元格的字体颜色是否为红色(比较cell.font.color.rgb) 注意:一个行可能被多个询价客户列标记,只要有一个红色字体,我们就认为是最优先级。 但是,注意:优先级购买样机是根据背景色,而最优先级是根据询价客户列中的字体颜色。 因此,我们可以分开处理: 初始化两个列表: priority_rows = [] # 存储每行是否是优先级购买样机 top_priority_rows = [] # 存储每行是否是最优先级 遍历每一行(数据行,从第二行开始): priority = False top_priority = False 遍历该行的每个单元格: 如果单元格的填充(fill)是黄色(我们假设黄色背景标记在任意单元格都表示整行优先级): priority = True 如果该单元格的列索引在询价客户列索引中: 如果单元格的字体颜色是红色: top_priority = True 将priority和top_priority分别添加到priority_rows和top_priority_rows 注意:这样可能会重复标记,但是一旦发现就标记,然后继续。 6. 将这两列添加到DataFrame中。 但是,这样效率较低,我们可以优化:先确定询价客户列,然后在遍历行的时候,只检查这些列是否红色字体。 因此,修改: 步骤3:确定询价客户列(列标题红色字体的列)的列索引列表,设为customer_columns_index。 步骤4:遍历每一行(数据行): priority = False # 先检查整行是否有黄色背景(我们遍历该行每个单元格,直到发现一个黄色背景就停止) for cell in row: if cell.fill and cell.fill.start_color.rgb == yellow_fill: priority = True break # 发现一个黄色背景就跳出,认为该行是优先级 top_priority = False # 只遍历询价客户列 for col_index in customer_columns_index: cell = row[col_index] # 注意:openpyxl的列索引从1开始,行索引也是1开始,但我们在遍历行时,row是一个元组,所以需要按索引取 # 但是注意:我们遍历行时,row是单元格元组,索引从0开始,而customer_columns_index是列索引(比如A列是1,B列是2),所以我们需要转换。 # 实际上,在openpyxl中,我们可以通过列字母来获取,但这里我们使用列索引数字。注意:第一列(A列)索引为1,第二列(B列)索引为2,以此类推。 # 但是我们在遍历行时,row[0]对应第一列(索引1),所以列索引数字-1就是该单元格在row中的位置。 # 因此,我们保存customer_columns_index对应的列索引数字,然后取该行中索引为(列索引数字-1)的单元格。 # 但是注意:我们获取的customer_columns_index是列索引数字(即openpyxl中的列号),所以对应到row中的索引位置是:列索引数字-1(因为row[0]是第一列) cell_in_row = row[col_index-1] # 因为row是元组,索引从0开始,而列索引从1开始,所以减1 if cell_in_row.font and cell_in_row.font.color and cell_in_row.font.color.rgb == red_font_color: top_priority = True break 但是,注意:我们遍历行时,row是openpyxl的row对象,它是一个包含单元格的元组,索引从0开始,而列索引1对应第一个单元格(索引0)。 因此,我们需要在步骤3中记录列索引数字(即openpyxl的列号),然后在步骤4中,对于每个数据行,我们通过列号-1来定位单元格。 但是,这样处理可能会漏掉:因为一行的背景色可能没有在第一个单元格标记,所以我们不能一发现黄色背景就break,而是应该遍历整行?或者用户是整行标记,那么第一个单元格有黄色背景就代表整行?为了安全,我们遍历整行(不break)来检查背景色,只要有一个黄色背景就标记priority为True(但不break,继续检查,因为可能还有多个?其实标记一个即可,所以可以break,但为了确保,我们也可以不break,因为多检查几个不影响结果)。 另外,对于字体,我们只需要检查询价客户列,所以只检查这些列,并且发现一个红色字体就标记top_priority并break。 但是,用户需求中,最优先级有4款,所以每个最优先级行至少有一个询价客户列是红色字体。 代码实现: 注意:由于颜色字符串可能大小写不一致,我们可以统一转换为大写。 定义颜色常量: YELLOW_FILL = 'FFFFFF00' # 黄色背景的ARGB值 RED_FONT = 'FFFF0000' # 红色字体的ARGB值 但是注意,openpyxl返回的颜色rgb属性可能是小写,所以比较的时候可以统一转为大写。 另外,有些单元格可能没有设置填充或字体,所以需要判断是否为None。 下面我们写一个完整的读取函数: 由于这个读取过程需要处理样式,所以不能直接用pandas的read_excel,而是用openpyxl逐行读取。 然后,我们将读取的数据和标记组成DataFrame。 示例代码: 由于时间关系,我们假设文件路径为file_path。 步骤: 1. 加载工作簿 2. 获取活动工作表 3. 获取第一行(列标题行) 4. 确定询价客户列(列标题字体颜色为红色的列)的列索引(openpyxl列号) 5. 初始化数据列表和两个标记列表 6. 遍历数据行(从第二行到最后一行) 7. 将数据行转换为字典,并添加两个标记字段 注意:我们假设第一列是行号或其他标识?这里我们不知道具体列名,所以先按位置读取,然后列标题作为字典键。 代码: ```python import openpyxl from openpyxl import load_workbook import pandas as pd # 定义颜色常量 YELLOW_FILL = 'FFFFFF00' # 黄色背景的ARGB值,注意:openpyxl中fill的start_color属性返回的是ARGB字符串 RED_FONT = 'FFFF0000' # 红色字体的ARGB值 # 注意:实际颜色字符串可能因Excel版本不同而不同,比如可能是小写,或者不带Alpha通道,所以我们可以只比较后6位(忽略透明度)? # 但为了简单,我们假设是8位ARGB,且全大写。如果遇到不一致,我们再调整。 def read_color_marked_excel(file_path): # 加载工作簿 wb = load_workbook(file_path) ws = wb.active # 获取第一行(列标题行) header = ws[1] # 第一行 # 确定询价客户列的列索引(列号,openpyxl的列索引从1开始) customer_columns_index = [] for cell in header: if cell.font and cell.font.color and cell.font.color.rgb and cell.font.color.rgb.upper() == RED_FONT: customer_columns_index.append(cell.column) # 记录列号 # 初始化数据列表 data = [] priority_info = [] # 每个元素是一个元组(priority, top_priority) # 遍历数据行(从第二行开始) for row in ws.iter_rows(min_row=2): row_data = {} is_priority = False is_top_priority = False # 检查该行是否有黄色背景(遍历行中每个单元格) for cell in row: # 检查背景色 if cell.fill and cell.fill.start_color and cell.fill.start_color.rgb: # 比较颜色,转为大写 if cell.fill.start_color.rgb.upper() == YELLOW_FILL: is_priority = True break # 发现一个黄色背景,整行标记为优先级,跳出循环(不再检查后面的单元格) # 检查询价客户列是否有红色字体 for col_index in customer_columns_index: # 获取该行的这个列索引对应的单元格 cell = row[col_index-1] # 因为row是一个元组,索引从0开始,而列索引从1开始,所以要减1 if cell.font and cell.font.color and cell.font.color.rgb: if cell.font.color.rgb.upper() == RED_FONT: is_top_priority = True break # 发现一个红色字体,标记为最优先级,跳出循环 # 将单元格值存入字典(使用列标题作为键) for idx, cell in enumerate(row): # 获取列标题 col_name = header[idx].value row_data[col_name] = cell.value # 将行数据添加到列表 data.append(row_data) priority_info.append((is_priority, is_top_priority)) # 创建DataFrame df = pd.DataFrame(data) # 添加标记列 df['优先级购买样机'] = [info[0] for info in priority_info] df['最优先级购买样机'] = [info[1] for info in priority_info] return df # 使用示例 file_path = '涡轮增压器数据.xlsx' df = read_color_marked_excel(file_path) print(df.head()) ``` 注意:这个函数假设黄色背景只要在行中任意一个单元格出现,该行就是优先级购买样机。最优先级购买样机只要在任意一个询价客户列出现红色字体,该行就是最优先级。 但是,用户需求中,最优先级有4款,而优先级有13款,最优先级应该包含在优先级中。 读取后,我们就可以用这个DataFrame进行后续的分析。 例如,统计优先级购买样机的数量: priority_count = df['优先级购买样机'].sum() # 因为True为1,False为0 注意:如果出现颜色识别问题,请检查实际Excel中的颜色RGB值。可以通过openpyxl查看具体单元格的样式属性。 如果颜色值不匹配,我们可以打印出来看看: print(cell.fill.start_color.rgb) # 查看实际黄色的值 print(cell.font.color.rgb) # 查看实际红色的值 然后调整YELLOW_FILL和RED_FONT常量。 另外,这个函数可能效率不高,因为要遍历每个单元格,但对于16行的数据,完全足够。 读取数据后,我们就可以根据用户的需求进行进一步分析。 需求2:其中在优先级购买购买样机中,客户询价需求数量是50个样机的有3款; 分析:在优先级购买样机(df['优先级购买样机']为True)中,客户询价需求数量等于50的款式数量。 需求3:其中在优先级购买购买样机中,客户询价数量≥3的有9款,在这9款中,重要客户也询价的有3款,但是重要客户询价有4款。 注意:这里有两个指标:客户询价数量(可能是客户的数量?)和重要客户询价(是否重要客户询价) 假设数据中有“客户询价数量”列(整数)和“重要客户询价”列(布尔值或整数,表示是否询价) 步骤: a. 在优先级购买样机中,筛选出客户询价数量>=3的行,统计数量(应该是9) b. 在这9款中,重要客户询价为True的数量(应该是3) c. 整个优先级购买样机中,重要客户询价为True的数量(应该是4)-> 注意需求说“重要客户询价有4款”,这里可能是指所有优先级购买样机中重要客户询价的有4款。 需求4:其中在优先级购买购买样机中,客户询价时间接近在2026年后,且询价客户数量≥3的有5款。 分析:在优先级购买样机中,同时满足两个条件:询价时间>=2026年(注意可能是日期类型)和询价客户数量>=3。 因此,我们需要确保数据中有“客户询价数量”、“重要客户询价”、“询价时间”等列。 如果数据中没有这些列,我们需要根据原始数据构造。例如,询价客户列可能有多个列(每个客户一个列,值可能是询价数量?),那么: - 询价客户数量:在询价客户列中,值大于0的列数(表示有几个客户询价) - 重要客户询价:在重要客户(列名可能包含“重要”)的询价列中,是否有任意一个大于0 但是,我们的读取函数已经识别了询价客户列(列标题为红色的列),所以我们可以用这些列来计算。 假设询价客户列中存储的是该客户的询价数量(数字),那么: - 该行的客户询价数量 = 询价客户列中值大于0的列数(即有几个客户询价) - 该行的询价总数量 = 询价客户列所有值的和 - 重要客户询价:如果询价客户列中有重要客户列(我们事先知道哪些是重要客户列),那么只要有一个重要客户列的值>0,就为True 但是,我们在读取函数中并没有区分重要客户列,所以我们需要在列标题中识别重要客户列(比如列标题包含“重要”字样)。 因此,我们可以在读取数据后,根据列标题来标记重要客户列。 修改读取函数:在读取列标题时,不仅记录红色字体的列索引,还可以记录列标题包含“重要”的列(作为重要客户列)。 但为了简化,我们可以在读取数据后,在DataFrame中处理: 步骤: 1. 获取所有询价客户列(列标题为红色的列)的列名:我们在读取函数中已经记录了customer_columns_index,但是函数返回时没有返回列名。我们可以修改函数返回这些列名。 修改函数,返回三个内容:df, priority_columns(询价客户列的列名列表), important_columns(重要客户列的列名列表,我们通过列名包含“重要”来识别) 但是,重要客户列可能不在询价客户列中?需求没有明确。所以,我们假设重要客户列也是询价客户列(红色字体列)的一部分,并且列名包含“重要”。 因此,在函数内部,我们可以这样获取重要客户列: important_columns = [] for cell in header: if cell.column in customer_columns_index: # 是询价客户列 if "重要" in str(cell.value): # 列名包含“重要” important_columns.append(cell.value) # 记录列名 然后修改函数,返回df, customer_columns, important_columns。 这样,我们就可以用这些列名来计算: df['客户询价数量'] = df[customer_columns].gt(0).sum(axis=1) # 询价客户数量(客户数) df['询价总数量'] = df[customer_columns].sum(axis=1) # 总询价数量 df['重要客户询价'] = df[important_columns].gt(0).any(axis=1) # 是否有重要客户询价 注意:如果important_columns为空,则df[important_columns]会出错,所以需要判断。 最后,我们就可以进行需求的分析和绘图。 由于篇幅限制,这里只给出读取和标记的代码,后续分析绘图代码需要根据具体数据调整。 总结:我们通过结合openpyxl读取样式信息,将颜色标记转换为DataFrame的列,然后利用pandas进行后续分析。 注意:如果数据量很大,这种方法效率较低,但16行数据完全可行。 如果用户不需要读取颜色,可以直接用pandas读取,但这里需求需要颜色标记,所以必须用openpyxl。 因此,完整的读取涡轮增压器数据的代码如上。 接下来,用户可以使用这个DataFrame进行后续分析。 示例:读取文件并添加衍生列 ```python # 读取文件 df, customer_columns, important_columns = read_color_marked_excel(file_path) # 添加衍生列 # 1. 客户询价数量(客户数) df['客户询价数量'] = df[customer_columns].gt(0).sum(axis=1) # 2. 询价总数量 df['询价总数量'] = df[customer_columns].sum(axis=1) # 3. 重要客户询价 if important_columns: df['重要客户询价'] = df[important_columns].gt(0).any(axis=1) else: df['重要客户询价'] = False # 如果没有重要客户列,则全部为False # 查看数据 print(df.head()) ``` 然后,根据需求进行筛选和统计。 需求2:优先级购买样机中,询价总数量等于50的款式数量 ```python condition2 = df['优先级购买样机'] & (df['询价总数量'] == 50) count2 = condition2.sum() ``` 需求3:优先级购买样机中,客户询价数量>=3的款式数量 ```python condition3_1 = df['优先级구매样机'] & (df['客户询价数量'] >= 3) count3_1 = condition3_1.sum() # 在这9款中,重要客户询价的数量 condition3_2 = condition3_1 & df['重要客户询价'] count3_2 = condition3_2.sum() # 整个优先级购买样机中,重要客户询价的数量 condition3_3 = df['优先级购买样机'] & df['重要客户询价'] count3_3 = condition3_3.sum() ``` 需求4:优先级购买样机中,询价时间>=2026-01-01 且 客户询价数量>=3 假设有“询价时间”列,并且是日期类型 ```python # 将询价时间转换为日期类型(如果尚未转换) df['询价时间'] = pd.to_datetime(df['询价时间']) condition4 = df['优先级购买样机'] & (df['询价时间'] >= '2026-01-01') & (df['客户询价数量'] >= 3) count4 = condition4.sum() ``` 最后,我们可以用这些统计结果绘制图表。 由于问题要求画图和做表格展示,我们可以使用matplotlib和seaborn绘图,用DataFrame直接展示表格。 但是,由于具体绘图要求不明确,这里不展开绘图代码。 以上是如何读取带颜色标记的Excel文件并进行需求分析的完整步骤。 注意:由于实际Excel结构未知,以上代码可能需要调整以适应实际数据。 如果遇到问题,可以打印出列名和部分数据进行检查。 希望这个回答对您有帮助! §§相关问题§§ 1. 如何读取Excel中其他类型的样式信息(如下划线、边框等)? 2. 如何将带有样式标记的数据导出为新的Excel文件? 3. 对于大型Excel文件,如何优化读取样式的性能? 4. 除了openpyxl,还有其他Python库可以处理Excel的样式吗? </think> # Python读取带颜色标记的涡轮增压器数据Excel文件 以下是完整的Python解决方案,用于读取带颜色标记的涡轮增压器数据Excel文件,并进行专业的数据分析和可视化。 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from openpyxl import load_workbook from openpyxl.styles import PatternFill, Font import matplotlib.patches as mpatches # 设置中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows系统使用 # plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # Mac系统使用 plt.rcParams['axes.unicode_minus'] = False def read_color_marked_excel(file_path): """ 读取带颜色标记的Excel文件,提取黄色背景和红色字体信息 :param file_path: Excel文件路径 :return: 包含颜色标记的DataFrame """ # 加载工作簿 wb = load_workbook(file_path) ws = wb.active # 定义颜色标准 yellow_fill = PatternFill(start_color='FFFFFF00', end_color='FFFFFF00', fill_type='solid') red_font = Font(color='FFFF0000') # 准备数据收集 data = [] priority_info = [] customer_columns = [] # 处理表头 - 识别红色字体的询价客户列 for cell in ws[1]: if cell.font.color and cell.font.color.rgb == red_font.color.rgb: customer_columns.append(cell.value) # 处理数据行 for row in ws.iter_rows(min_row=2, values_only=False): row_data = {} is_priority = False is_top_priority = False for cell in row: # 获取列名 col_name = ws.cell(row=1, column=cell.column).value # 存储单元格值 row_data[col_name] = cell.value # 检查黄色背景(优先级采购) if cell.fill and cell.fill.start_color.rgb == yellow_fill.start_color.rgb: is_priority = True # 检查红色字体(最高优先级) if cell.font.color and cell.font.color.rgb == red_font.color.rgb: is_top_priority = True # 添加行数据 data.append(row_data) priority_info.append({ '型号': row_data.get('型号', f'TC{len(data):03d}'), '优先级采购': is_priority, '最高优先级': is_top_priority }) # 创建DataFrame df = pd.DataFrame(data) priority_df = pd.DataFrame(priority_info) # 合并数据 full_df = pd.merge(df, priority_df, on='型号', how='left') # 填充缺失值 full_df['优先级采购'] = full_df['优先级采购'].fillna(False) full_df['最高优先级'] = full_df['最高优先级'].fillna(False) return full_df, customer_columns def analyze_turbo_data(df, customer_columns): """ 分析涡轮增压器数据 :param df: 包含数据的DataFrame :param customer_columns: 询价客户列名列表 :return: 分析结果DataFrame """ # 计算询价总数 df['询价总数'] = df[customer_columns].sum(axis=1) # 计算客户数量 df['客户数量'] = df[customer_columns].gt(0).sum(axis=1) # 标记重要客户(假设列名包含"重要") important_cols = [col for col in customer_columns if '重要' in col] if important_cols: df['重要客户询价'] = df[important_cols].gt(0).any(axis=1) else: df['重要客户询价'] = False # 分析结果 analysis = { '总款式数': len(df), '优先级采购数': df['优先级采购'].sum(), '最高优先级数': df['最高优先级'].sum(), '50个样机询价数': len(df[(df['优先级采购']) & (df['询价总数'] == 50)]), '询价数量≥3数': len(df[(df['优先级采购']) & (df['客户数量'] >= 3)]), '重要客户询价数': df['重要客户询价'].sum(), '2026年后询价≥3数': len(df[(df['优先级采购']) & (df.get('询价时间', '2026') >= '2026') & (df['客户数量'] >= 3)]) } return df, pd.DataFrame([analysis]) def visualize_turbo_data(df, analysis_df): """ 可视化涡轮增压器数据分析结果 :param df: 包含数据的DataFrame :param analysis_df: 分析结果DataFrame """ # 创建图表 fig, axes = plt.subplots(2, 2, figsize=(15, 12)) fig.suptitle('涡轮增压器数据分析报告', fontsize=18, fontweight='bold') # 1. 优先级分布饼图 priority_counts = [analysis_df['优先级采购数'].values[0], analysis_df['总款式数'].values[0] - analysis_df['优先级采购数'].values[0]] labels = ['优先级采购', '非优先级采购'] colors = ['#FFD700', '#1f77b4'] explode = (0.1, 0) axes[0, 0].pie(priority_counts, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors, explode=explode, shadow=True) axes[0, 0].set_title('优先级采购分布', fontsize=14) # 2. 多维度对比条形图 categories = ['优先级采购', '最高优先级', '50个样机询价', '询价数量≥3', '重要客户询价'] counts = [ analysis_df['优先级采购数'].values[0], analysis_df['最高优先级数'].values[0], analysis_df['50个样机询价数'].values[0], analysis_df['询价数量≥3数'].values[0], analysis_df['重要客户询价数'].values[0] ] bars = axes[0, 1].bar(categories, counts, color=['#FFD700', '#FF8C00', '#2ca02c', '#1f77b4', '#d62728']) axes[0, 1].set_title('多维度分类对比', fontsize=14) axes[0, 1].set_ylabel('数量', fontsize=12) axes[0, 1].grid(axis='y', linestyle='--', alpha=0.7) # 添加数据标签 for bar in bars: height = bar.get_height() axes[0, 1].annotate(f'{height}', xy=(bar.get_x() + bar.get_width() / 2, height), xytext=(0, 3), textcoords="offset points", ha='center', va='bottom') # 3. 客户数量与询价数量关系散点图 priority_df = df[df['优先级采购']] non_priority_df = df[~df['优先级采购']] axes[1, 0].scatter(priority_df['客户数量'], priority_df['询价总数'], c='#FFD700', s=100, alpha=0.8, edgecolors='black', label='优先级采购') axes[1, 0].scatter(non_priority_df['客户数量'], non_priority_df['询价总数'], c='#1f77b4', s=80, alpha=0.6, edgecolors='black', label='非优先级采购') # 标记最高优先级 top_priority_df = df[df['最高优先级']] axes[1, 0].scatter(top_priority_df['客户数量'], top_priority_df['询价总数'], c='red', s=200, marker='*', alpha=1.0, label='最高优先级') axes[1, 0].set_title('客户数量与询价数量关系', fontsize=14) axes[1, 0].set_xlabel('客户数量', fontsize=12) axes[1, 0].set_ylabel('询价总数', fontsize=12) axes[1, 0].grid(True, linestyle='--', alpha=0.6) axes[1, 0].legend() # 4. 询价数量分布箱线图 sns.boxplot(x='优先级采购', y='询价总数', data=df, ax=axes[1, 1], palette={True: '#FFD700', False: '#1f77b4'}) axes[1, 1].set_title('询价数量分布对比', fontsize=14) axes[1, 1].set_xticklabels(['非优先级采购', '优先级采购']) axes[1, 1].set_xlabel('') axes[1, 1].set_ylabel('询价总数', fontsize=12) axes[1, 1].grid(True, axis='y', linestyle='--', alpha=0.6) # 添加数据点 sns.swarmplot(x='优先级采购', y='询价总数', data=df, ax=axes[1, 1], color='black', alpha=0.5, size=4) plt.tight_layout(rect=[0, 0, 1, 0.96]) plt.savefig('涡轮增压器分析.png', dpi=300, bbox_inches='tight') plt.show() def generate_analysis_table(df): """ 生成分析表格 :param df: 包含数据的DataFrame """ # 创建优先级采购表格 priority_df = df[df['优先级采购']].copy() priority_df = priority_df[['型号', '优先级采购', '最高优先级', '询价总数', '客户数量']] # 重命名列 priority_df = priority_df.rename(columns={ '优先级采购': '优先级采购', '最高优先级': '最高优先级', '询价总数': '询价总数', '客户数量': '客户数' }) # 格式化 priority_df['优先级采购'] = priority_df['优先级采购'].map({True: '是'}) priority_df['最高优先级'] = priority_df['最高优先级'].map({True: '是', False: '否'}) # 打印表格 print("\n优先级采购样机列表:") print(priority_df.to_string(index=False)) return priority_df # 主程序 if __name__ == "__main__": # 文件路径 - 替换为您的实际文件路径 excel_path = "涡轮增压器数据.xlsx" try: # 1. 读取Excel文件 turbo_df, customer_cols = read_color_marked_excel(excel_path) # 2. 分析数据 processed_df, analysis_results = analyze_turbo_data(turbo_df, customer_cols) # 打印分析结果 print("="*50) print("涡轮增压器数据分析结果:") print(analysis_results) print("="*50) # 3. 生成分析表格 priority_table = generate_analysis_table(processed_df) # 4. 可视化分析结果 print("\n生成可视化图表...") visualize_turbo_data(processed_df, analysis_results) print("分析图表已保存为 '涡轮增压器分析.png'") except Exception as e: print(f"处理过程中发生错误: {str(e)}") ``` ## 解决方案说明 ### 1. 读取带颜色标记的Excel文件 - 使用`openpyxl`库读取Excel文件并提取单元格样式信息[^1] - 识别黄色背景单元格作为"优先级采购"标记 - 识别红色字体列标题作为"询价客户列" - 最高优先级标记通过单元格的红色字体识别 ### 2. 数据处理与分析 - 添加衍生列:询价总数、客户数量、重要客户询价标记等 - 实现用户需求中的分析条件: - 优先级购买样机数量:$\text{优先级采购数}$ - 最高优先级数量:$\text{最高优先级数}$ - 50个样机询价数量:$\text{50个样机询价数}$ - 询价数量≥3的款式:$\text{询价数量≥3数}$ - 重要客户询价数量:$\text{重要客户询价数}$ - 2026年后询价数量:$\text{2026年后询价≥3数}$ ### 3. 数据可视化 生成4个专业图表: 1. **优先级分布饼图**:展示优先级采购比例 2. **多维度对比条形图**:直观比较不同分析维度的数量 3. **客户-询价关系散点图**:显示客户数量与询价数量的关系,突出最高优先级 4. **询价数量分布箱线图**:比较优先级与非优先级采购的询价分布 ### 4. 分析表格生成 - 创建优先级采购样机列表表格 - 包含型号、优先级状态、最高优先级状态、询价总数和客户数量 - 终端输出格式化表格 ## 使用说明 1. **准备数据**: - 确保Excel文件包含"型号"列 - 使用黄色背景标记优先级采购样机 - 在最高优先级样机的单元格使用红色字体 - 使用红色字体标记询价顾客列标题 2. **安装依赖库**: ```bash pip install pandas matplotlib seaborn openpyxl ``` 3. **运行脚本**: - 将脚本中的`excel_path`变量替换为您的Excel文件路径 - 运行脚本,将生成可视化图表(`涡轮增压器分析.png`)并在终端显示分析结果 4. **结果解读**: - 终端输出分析结果和优先级采购样机表格 - 可视化图表直观展示数据分布和关系 - 分析报告满足所有用户需求点 ## 数学表达 分析中使用的关键指标可表示为: 1. 优先级采购数量: $$P_{\text{priority}} = \sum_{i=1}^{16} \mathbb{1}_{\text{priority}}(i)$$ 2. 最高优先级数量: $$P_{\text{top}} = \sum_{i=1}^{16} \mathbb{1}_{\text{top priority}}(i)$$ 3. 50个样机询价数量: $$Q_{50} = \sum_{i=1}^{16} \mathbb{1}_{\text{priority}}(i) \cdot \mathbb{1}_{\text{quantity}=50}(i)$$ 4. 询价数量≥3的款式: $$Q_{\geq3} = \sum_{i=1}^{16} \mathbb{1}_{\text{priority}}(i) \cdot \mathbb{1}_{\text{customers}\geq3}(i)$$ 此解决方案完整实现了从带颜色标记的Excel文件中提取信息、分析数据并生成专业可视化报告的功能[^1]。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

基于去噪概率扩散模型(DDPM)的电动汽车充电行为场景生成(Python代码实现)

基于去噪概率扩散模型(DDPM)的电动汽车充电行为场景生成(Python代码实现)

内容概要:本文系统阐述了基于去噪概率扩散模型(DDPM)的电动汽车充电行为场景生成方法,并提供了完整的Python代码实现。该方法通过构建一个逐步添加噪声并学习逆向去噪过程的深度生成模型,能够有效捕捉并复现真实电动汽车用户在充电时间、充电时长、充电功率等方面的复杂随机特性与统计分布规律,生成高保真、多样化的充电负荷场景。该技术可用于电力系统规划、电网承载能力评估、负荷预测以及含高比例电动汽车的优化调度研究。文中还强调了该方法与现有电动汽车-电网(V2G)、多微网协同、需求响应等研究方向的关联性,凸显其在现代综合能源系统分析中的重要应用价值。; 适合人群:具备一定Python编程能力和机器学习基础知识,从事电力系统分析、智能交通、新能源接入、能源互联网等领域的科研人员、高校研究生及工程技术开发者。; 使用场景及目标:①为电动汽车充电负荷仿真提供数据驱动的高保真场景生成工具,克服历史数据不足或隐私限制问题;②支持含高比例电动汽车接入的配电网承载能力评估与安全稳定运行分析;③作为深度学习与能源系统深度融合的典型案例,推动数据生成技术在能源规划、优化调度等前沿领域的研究与实践。; 阅读建议:建议读者结合所提供的Python代码,深入理解DDPM模型的前向扩散、神经网络反向去噪、采样生成等核心环节,并通过调整超参数和数据集进行实操验证。同时,可参考文中提及的其他MATLAB/Simulink仿真资源,全面理解电动汽车与电网互动的完整技术链条。

基于 XGBoost 的光伏阵列多类型复合故障诊断研究(Python代码实现)

基于 XGBoost 的光伏阵列多类型复合故障诊断研究(Python代码实现)

内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡工况适应性及动态响应方面的不足,提出一种基于有源中点箝位(ANPC)三电平拓扑的高性能并网控制策略。该策略融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术和电网电压前馈控制,构建“精准同步-扰动补偿-优质调制”的一体化控制系统。通过ANPC拓扑的硬件优势与先进控制算法的协同优化,显著降低输出谐波,提升锁相精度与系统动态稳定性。文章详细阐述了ANPC拓扑的结构特征与运行优势,深入设计了DPWMA调制、正负序分离锁相及电网电压前馈三大核心控制环节,并搭建完整的三层控制架构。借助仿真模型对稳态、电网不平衡和动态扰动等多种工况进行验证,结果表明该方案在电能质量、并网对称性和动态抗扰能力方面均表现优异,适用于新能源并网、工业大功率变流等复杂应用场景。; 适合人群:具备电力电子、自动控制或新能源系统等相关专业背景,从事逆变器控制、光伏储能系统研发的研究生及工程技术人员。; 使用场景及目标:① 提升大功率并网逆变器的电能质量与运行稳定性;② 解决电网电压不平衡、畸变等非理想工况下的并网难题;③ 为ANPC拓扑与复合控制策略的设计与仿真提供完整的技术参考和实现范例。; 阅读建议:建议结合Simulink仿真模型进行实践,重点关注DPWMA调制的实现机制、正负序分离锁相环的设计原理以及前馈控制模块的集成方法,通过与传统控制策略的对比仿真,深入理解各模块对系统性能的提升作用。

基于 C-GAN 的风光联合出力极端场景生成方法研究(Python代码实现)

基于 C-GAN 的风光联合出力极端场景生成方法研究(Python代码实现)

内容概要:本文研究了基于条件生成对抗网络(C-GAN)的风光联合出力极端场景生成方法,旨在应对风能和太阳能发电固有的不确定性与剧烈波动,尤其是极端出力事件对电力系统安全稳定构成的严峻挑战。研究通过构建C-GAN深度学习模型,利用历史运行数据学习风光出力复杂的时空分布特征与非线性关联,并能在给定特定条件(如天气类型、季节、极端事件标签)下,生成高保真度、多样化的极端出力场景。该方法有效克服了传统蒙特卡洛模拟、K-means聚类等方法在生成小概率、高风险极端事件时的局限性,为电力系统的规划、运行调度、风险评估及应急预案制定提供了更为科学、全面的场景支撑。文中详细阐述了模型的网络架构设计、损失函数构建、训练流程与技巧,并通过与传统方法的系统性对比实验,验证了所提方法在场景多样性、极端性保持、统计特性匹配等方面的显著优越性。; 适合人群:具备一定机器学习和电力系统基础知识的研究生、科研人员及从事新能源并网、电力系统规划与调度的工程技术人员。; 使用场景及目标:①为含高比例可再生能源的电力系统进行安全性与稳定性评估生成极端运行场景;②辅助制定鲁棒的电网调度计划和应急预案;③研究极端天气条件下风光出力特性及其对电力市场稳定性的潜在冲击。; 阅读建议:此资源结合了深度学习前沿技术与电力系统实际问题,建议读者在学习过程中重点关注C-GAN的网络结构设计(特别是条件输入的嵌入方式)及其在电力场景生成中的独特优势,同时结合提供的Python代码实现,动手实践模型的训练与场景生成过程,以深入理解其原理与应用价值。

Cursor-Context-Paste-Provenance-Auditor-Human-Review-Queue-v1.0-原创源码与文档.zip

Cursor-Context-Paste-Provenance-Auditor-Human-Review-Queue-v1.0-原创源码与文档.zip

原创开发工具源码合集,包含可直接运行的完整源码、自动化测试、离线示例、HTML/JSON/SVG 报告、运行截图、README、使用说明、功能清单、MIT License 与原创声明。适合前端、JavaScript、AI 工具开发与工程实践学习,解压后按 README 即可运行。

基于 空调-电动汽车 联合虚拟储能的海岛微电网优化调度(Matlab代码实现)

基于 空调-电动汽车 联合虚拟储能的海岛微电网优化调度(Matlab代码实现)

内容概要:本文针对海岛微电网中可再生能源出力波动性强、储能资源受限的问题,提出了一种基于“空调-电动汽车”联合虚拟储能的优化调度策略。通过深入挖掘空调负荷的热惰性特性和电动汽车的可调度充放电潜力,构建了联合虚拟储能系统,以替代或补充传统物理储能装置,提升系统对风光等间歇性能源的消纳能力。研究建立了包含电力供需平衡、设备运行约束、用户舒适度(如室内温度范围)及电池寿命保护等多维度约束的多目标优化调度模型,并采用Matlab进行编程实现与仿真验证。仿真结果表明,该策略能有效平抑功率波动,降低系统综合运行成本,提高新能源利用率,并增强海岛孤立电网的运行稳定性与可靠性。; 适合人群:具备电力系统、自动化、能源与动力工程等相关专业背景,熟悉Matlab编程环境与优化算法(如线性规划、混合整数规划),从事微电网运行控制、虚拟储能技术、需求响应或综合能源系统优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于海岛、偏远地区等缺乏稳定大电网支撑的孤立微电网能源管理;②为开发基于温控负荷与电动汽车的聚合商参与电力市场辅助服务提供技术模型与代码基础;③作为高校及科研机构在虚拟储能、需求侧管理方向的教学案例与科研复现平台。; 阅读建议:建议结合文中数学模型与Matlab代码对照学习,重点关注空调等效热参数建模、电动汽车充放电行为约束处理、多目标函数的设计与权重设定,以及YALMIP等优化工具包的调用方法,鼓励在此基础上进行模型扩展与算法改进。

碳排放流碳排放流理论+MILP+源荷协同优化研究(Matlab代码实现)

碳排放流碳排放流理论+MILP+源荷协同优化研究(Matlab代码实现)

内容概要:本文围绕碳排放流理论,结合混合整数线性规划(MILP)方法,开展源荷协同优化研究,并提供Matlab代码实现。研究旨在通过建立科学的数学模型,对电力系统中电源侧与负荷侧的运行进行协同优化,以降低系统整体碳排放强度。文中系统阐述了碳排放流的基本原理,构建了基于MILP的优化模型,该模型综合考虑了机组出力、负荷需求、网络潮流及碳排放流的分布特性,以实现低碳、经济、可靠的运行目标。通过仿真算例验证了模型的有效性,展示了源荷协同在促进清洁能源消纳、优化电力资源配置和减少碳排放方面的显著作用。; 适合人群:具备电力系统基础、运筹学及Matlab编程能力的研究生、科研人员及从事能源系统规划与优化的专业技术人员。; 使用场景及目标:①学习和掌握碳排放流在电力网络中的计算与追溯方法;②研究如何利用MILP等优化算法实现电力系统的低碳调度与源荷协同优化;③获取可复现的Matlab代码资源,用于相关课题的仿真验证与二次开发。; 阅读建议:此资源不仅提供了理论模型和代码,还体现了科研工作的系统性思维。建议读者按目录顺序研读,重点关注模型的构建逻辑、约束条件的设定以及目标函数的设计,并动手运行和调试代码,以深入理解算法实现细节和优化结果。

上市公司人工智能技术应用水平(2007-2025年).dta

上市公司人工智能技术应用水平(2007-2025年).dta

样例数据及详细介绍:https://blog.csdn.net/T0620514/article/details/163801288

Awesome C++
精选的 C++(或 C)框架、库、资源及相关优质内容列表 灵感来源于各类 "awesome-..." 系列项

Awesome C++ 精选的 C++(或 C)框架、库、资源及相关优质内容列表 灵感来源于各类 "awesome-..." 系列项

awesome-cpp —— 一份精选的 C++ 框架、库、资源以及趣味元素的汇编

基于 NSGA-II 计及电 - 热 - 气综合需求响应的区域综合能源系统多目标优化调度研究(Matlab代码实现)

基于 NSGA-II 计及电 - 热 - 气综合需求响应的区域综合能源系统多目标优化调度研究(Matlab代码实现)

内容概要:本文针对区域综合能源系统(RIES)的多目标优化调度问题,提出了一种基于NSGA-II多目标进化算法并计及电-热-气综合需求响应(IDR)的优化模型。研究构建了一个涵盖电力、热力与天然气等多种能源形式的RIES集成模型,旨在协同优化“系统运行成本最小化”与“用户用能满意度最大化”这两个相互冲突的目标。通过在Matlab环境中实现NSGA-II算法,成功求解出一组代表最优权衡关系的帕累托前沿解集,为决策者提供了多样化的调度方案选择。文中深入探讨了电-热-气综合需求响应的精细化数学建模方法,并将其作为一种关键的柔性调节资源融入优化框架,有效实现了负荷侧的削峰填谷,提升了能源的整体利用效率与系统运行的经济性。研究通过详实的仿真算例验证了所提模型与算法的有效性和优越性,结果表明,引入综合需求响应机制能够显著降低系统综合运行成本,同时有效改善用户的用能体验。; 适合人群:具备一定电力系统、优化算法和Matlab编程基础的研究生、科研人员及从事能源系统规划与优化工作的工程师。; 使用场景及目标:① 学习和复现基于NSGA-II的多目标优化在综合能源系统中的应用;② 研究电-热-气综合需求响应的建模方法及其在系统调度中的作用;③ 获取可用于科研和教学的Matlab代码实例。; 阅读建议:此资源提供了完整的Matlab代码实现,读者应结合文档内容,重点理解综合需求响应的建模逻辑、多目标优化问题的构建以及NSGA-II算法的具体实现步骤,并通过运行和调试代码加深对区域综合能源系统优化调度核心思想的理解。

YOLO算法工业车间灯带目标检测数据集-217张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

YOLO算法工业车间灯带目标检测数据集-217张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

页面底部可查看数据集可视化效果; 该数据集可直接接入YOLOv5s/v5m/v5l、YOLOv8n/v8s/v8m、YOLOv10n/v10s、yolo11等轻量级至中型骨干网络进行端到端训练,支持从零训练(from scratch)与迁移学习(fine-tuning)两种模式;包含voc格式和yolo格式标签可直接使用

Generated-Music-Structure-Timing-Auditor-Load-Shedding-v1.0-原创源码与文档.zip

Generated-Music-Structure-Timing-Auditor-Load-Shedding-v1.0-原创源码与文档.zip

原创开发工具源码合集,包含可直接运行的完整源码、自动化测试、离线示例、HTML/JSON/SVG 报告、运行截图、README、使用说明、功能清单、MIT License 与原创声明。适合前端、JavaScript、AI 工具开发与工程实践学习,解压后按 README 即可运行。

考虑阶梯碳交易-绿证联合机制的虚拟电厂多时间尺度优化调度(Matlab代码实现)

考虑阶梯碳交易-绿证联合机制的虚拟电厂多时间尺度优化调度(Matlab代码实现)

内容概要:本文提出了一种融合阶梯碳交易与绿色证书联合机制的虚拟电厂多时间尺度优化调度模型,并通过Matlab代码实现了该模型的仿真与求解。该模型构建了涵盖日前、日内及实时调度的多层次优化框架,综合考虑碳排放成本与绿证交易收益,旨在提升虚拟电厂运行的低碳性、经济性与能源利用效率。研究详细阐述了目标函数的设计、系统约束的设定(如功率平衡、设备出力能力、碳排放限额等)以及多时间尺度间的耦合协调机制,并通过算例仿真验证了所提策略在降低碳成本、提高绿证收益和优化调度决策方面的有效性与先进性。; 适合人群:具备电力系统分析、优化建模基础及Matlab编程能力的研究生、科研人员,以及从事能源互联网、虚拟电厂运营、碳市场机制设计等相关领域的专业技术人员。; 使用场景及目标:①研究碳交易与绿证双重市场机制下虚拟电厂的经济调度与低碳运行策略;②实现多时间尺度下源-荷-储资源的协同优化配置,提升系统综合效益;③为综合能源系统中碳流与能量流的联合优化管理提供理论依据、技术方案与可复现的代码支持。; 阅读建议:建议读者结合Matlab代码逐模块学习,重点理解目标函数中碳成本与绿证收益的量化建模方法、多时间尺度滚动优化的实现逻辑以及约束条件的数学表达,可通过调整碳价、绿证价格等关键参数进行仿真对比,深入掌握模型的敏感性与实际应用价值。

Plugin-Command-Namespace-Conflict-Auditor-v1.0-原创源码与文档.zip

Plugin-Command-Namespace-Conflict-Auditor-v1.0-原创源码与文档.zip

原创开发工具源码合集,包含可直接运行的完整源码、自动化测试、离线示例、HTML/JSON/SVG 报告、运行截图、README、使用说明、功能清单、MIT License 与原创声明。适合前端、JavaScript、AI 工具开发与工程实践学习,解压后按 README 即可运行。

Laptop-Lid-Background-Work-Readiness-Gate-Evidence-Expiry-v1.0-原创源码与文档.zip

Laptop-Lid-Background-Work-Readiness-Gate-Evidence-Expiry-v1.0-原创源码与文档.zip

原创开发工具源码合集,包含可直接运行的完整源码、自动化测试、离线示例、HTML/JSON/SVG 报告、运行截图、README、使用说明、功能清单、MIT License 与原创声明。适合前端、JavaScript、AI 工具开发与工程实践学习,解压后按 README 即可运行。

像素风RPG游戏关卡与剧情系统设计.zip

像素风RPG游戏关卡与剧情系统设计.zip

随着电子游戏产业蓬勃发展,角色扮演类游戏RPG凭借丰富世界观、深入剧情体验与多元角色成长体系,长期占据游戏市场重要份额。近年来,《星露谷物语》《传说之下》等像素风独立游戏屡获佳绩,证明小体量团队凭创意与玩法也能成功。如何将关卡设计与剧情叙事有机融合,构建兼具探索乐趣与剧情张力的完整体验,仍是游戏设计领域具有较高价值与难度的课题。本文借助Unity引擎实现一款具备主线剧情、多结局分支与核心玩法闭环的像素风RPG游戏。 研究内容涵盖五方面:世界观与主线剧情,规划主线脉络并设计支撑多结局的分支树;地图探索,基于Tilemap搭建多场景地图,实现移动、碰撞与交互;NPC对话,融入分支选择与好感度机制;任务系统,实现主线支线任务的发布、跟踪与奖励结算;回合制战斗,实现战斗逻辑、技能、敌人AI与胜负判定,打通完整玩法循环。 系统采用Unity 2022.3 LTS与C#,使用Tilemap、UGUI搭建界面,利用ScriptableObject实现对话、任务、角色配置,JSON实现存档持久化,并采用表现层、玩法层、数据层、资源层架构及MVC、单例、状态机、事件驱动等设计模式。系统分为地图探索、对话剧情、任务、战斗、存档五大模块,各模块经事件中心与数据管理器通信,解耦协同。测试表明,完整流程通关率与BUG率满足设计要求,平均帧率稳定在60FPS以上。系统实现剧情分支树与好感度解锁的多结局、NPC好感度驱动对话任务联动、数据驱动任务剧情框架等创新,为独立游戏开发与RPG叙事设计提供参考。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南

YOLO算法室内家庭网络设备目标检测数据集-248张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

YOLO算法室内家庭网络设备目标检测数据集-248张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

页面底部可查看数据集可视化效果; 该数据集可直接接入YOLOv5s/v5m/v5l、YOLOv8n/v8s/v8m、YOLOv10n/v10s、yolo11等轻量级至中型骨干网络进行端到端训练,支持从零训练(from scratch)与迁移学习(fine-tuning)两种模式;包含voc格式和yolo格式标签可直接使用

YOLO算法工业质检插头目标检测数据集-292张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

YOLO算法工业质检插头目标检测数据集-292张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

页面底部可查看数据集可视化效果; 该数据集可直接接入YOLOv5s/v5m/v5l、YOLOv8n/v8s/v8m、YOLOv10n/v10s、yolo11等轻量级至中型骨干网络进行端到端训练,支持从零训练(from scratch)与迁移学习(fine-tuning)两种模式;包含voc格式和yolo格式标签可直接使用

事件触发驱动的微电网分布式二次协同控制策略 - 兼顾电压频率恢复与功率均衡分配(Simulink仿真实现)

事件触发驱动的微电网分布式二次协同控制策略 - 兼顾电压频率恢复与功率均衡分配(Simulink仿真实现)

内容概要:本文提出了一种事件触发驱动的微电网分布式二次协同控制策略,旨在同时实现孤岛微电网中电压与频率的恢复以及有功/无功功率的精确均衡分配。该策略基于下垂控制构建一次控制系统,并设计分布式二次协同控制器,通过引入事件触发机制有效降低控制器节点间的通信频率,缓解传统周期性通信带来的带宽压力与能源消耗。控制架构充分利用本地及邻居微源的信息,实现对电压、频率偏差的渐进收敛调节,并确保功率按容量比例分配。文中详细阐述了系统建模、控制协议设计、李雅普诺夫稳定性分析过程,并通过Simulink仿真实验验证了所提方法在负载突变、通信延迟、拓扑切换等多种动态工况下的有效性、鲁棒性与节能优势。; 适合人群:具备电力系统自动化、现代控制理论(如多智能体系统、李雅普诺夫稳定性理论)基础,从事微电网、分布式能源系统、智能配电网等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决微电网分布式控制中高频通信导致的通信资源紧张与能耗过高问题;②提升孤岛运行模式下微电网的电压频率稳定性与功率分配公平性;③为研究低通信开销、高鲁棒性的分布式协同控制算法提供可复现的理论框架与仿真案例。; 阅读建议:本资源融合了控制理论的严谨推导与Simulink仿真的工程实践,建议读者在理解事件触发机制与分布式控制原理的基础上,结合文中提供的控制结构图与仿真参数,动手复现Simulink模型,深入探究事件阈值设定、通信拓扑变化等因素对系统性能的影响。

YOLO算法工业车间风扇目标检测数据集-239张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

YOLO算法工业车间风扇目标检测数据集-239张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

页面底部可查看数据集可视化效果; 该数据集可直接接入YOLOv5s/v5m/v5l、YOLOv8n/v8s/v8m、YOLOv10n/v10s、yolo11等轻量级至中型骨干网络进行端到端训练,支持从零训练(from scratch)与迁移学习(fine-tuning)两种模式;包含voc格式和yolo格式标签可直接使用

Cursor-Context-Paste-Provenance-Auditor-v1.0-原创源码与文档.zip

Cursor-Context-Paste-Provenance-Auditor-v1.0-原创源码与文档.zip

原创开发工具源码合集,包含可直接运行的完整源码、自动化测试、离线示例、HTML/JSON/SVG 报告、运行截图、README、使用说明、功能清单、MIT License 与原创声明。适合前端、JavaScript、AI 工具开发与工程实践学习,解压后按 README 即可运行。

最新推荐最新推荐

recommend-type

将图片转换为ICO的小工具(可修改,背景透明)

可以将各种图片转换为ico格式的图片,方便制作软件的图标
recommend-type

ICO图标大全,十万个电脑图标

本库是集成了几万个ICO图标的压缩包,各种类型的图标都有,界面布局,软件图标,都可以用
recommend-type

python-图片转ico

python-图片转ico
recommend-type

ico图标制作工具

py2exe打包exe带自定义图标需要使用到的工具。 py2exe打包exe带自定义图标需要使用到的工具。
recommend-type

Python实现程序:SVG图片转为ico图标

使用场景:很多时候下载的图片都是SVG矢量文件,不适用于需要 ico图片 的场景。 举例说明:比如,iconfont网站上下载的图标资源。 功能描述:此程序使用Python编写 1. 可以将 单个SVG图片文件 转换为 【128/64/48/32/16】 任一尺寸的 ico 图片。 2. 可以将 一个目录下的所有SVG图片,同时转换为对应的 任意尺寸的 ico 图片。 3. 输入的 ico图标文件 都存储在 存放SVG图片目录中的 icons子目录中,并会组建相同的文件结构。
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti