analysis.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # 读取罕见画面结果的表格,从第4列开始,统计每一列每个值出现的次数,并保存数量到新的表格中
  2. import pandas as pd
  3. import logging
  4. # 配置日志
  5. logging.basicConfig(
  6. level=logging.INFO,
  7. format='%(asctime)s - %(levelname)s - %(message)s',
  8. handlers=[
  9. logging.FileHandler('analysis_statistics.log', encoding='utf-8'),
  10. logging.StreamHandler()
  11. ]
  12. )
  13. logger = logging.getLogger(__name__)
  14. def analyze_result_statistics():
  15. """分析结果表格的统计信息"""
  16. try:
  17. # 读取罕见画面结果表格
  18. input_file = "历史名人结果.xlsx"
  19. logger.info(f"正在读取文件: {input_file}")
  20. df = pd.read_excel(input_file)
  21. logger.info(f"成功读取文件,数据形状: {df.shape}")
  22. logger.info(f"列名: {list(df.columns)}")
  23. # 从第4列开始统计(索引从0开始,所以是索引3)
  24. start_column_index = 4 # 第4列
  25. columns_to_analyze = df.columns[start_column_index:]
  26. logger.info(f"从第4列开始分析,共 {len(columns_to_analyze)} 列")
  27. logger.info(f"分析的列: {list(columns_to_analyze)}")
  28. # 创建统计结果字典
  29. statistics_results = {}
  30. # 对每一列进行统计
  31. for column in columns_to_analyze:
  32. logger.info(f"正在统计列: {column}")
  33. # 统计每个值出现的次数
  34. value_counts = df[column].value_counts()
  35. # 将统计结果添加到字典中
  36. statistics_results[column] = value_counts
  37. logger.info(f"列 {column} 的统计结果:")
  38. for value, count in value_counts.items():
  39. logger.info(f" {value}: {count} 次")
  40. # 创建统计结果表格
  41. # 将所有统计结果合并到一个DataFrame中
  42. all_statistics = []
  43. for column, value_counts in statistics_results.items():
  44. for value, count in value_counts.items():
  45. all_statistics.append({
  46. '列名': column,
  47. '值': value,
  48. '出现次数': count,
  49. '占比': f"{count/len(df)*100:.2f}%"
  50. })
  51. # 创建统计结果DataFrame
  52. stats_df = pd.DataFrame(all_statistics)
  53. # 保存统计结果到新的Excel文件
  54. output_file = "analysis_statistics.xlsx"
  55. stats_df.to_excel(output_file, index=False, engine='openpyxl')
  56. logger.info(f"✅ 统计结果已保存到: {output_file}")
  57. logger.info(f"✅ 统计表格包含 {len(stats_df)} 行数据")
  58. # 显示统计摘要
  59. logger.info("=== 统计摘要 ===")
  60. for column in columns_to_analyze:
  61. unique_values = df[column].nunique()
  62. logger.info(f"{column}: {unique_values} 个不同值")
  63. return stats_df
  64. except Exception as e:
  65. logger.error(f"分析统计时出错: {e}")
  66. raise
  67. def main():
  68. """主函数"""
  69. try:
  70. logger.info("开始分析罕见画面结果表格的统计信息...")
  71. result = analyze_result_statistics()
  72. logger.info("分析完成!")
  73. except Exception as e:
  74. logger.error(f"程序执行出错: {e}")
  75. if __name__ == "__main__":
  76. main()