当前位置: 首页 > article >正文

新能源汽车产销数据分析

新能源汽车产销数据分析

  • 一、读取数据
  • 1.打印表头信息
  • 2.查看前几行数据
  • 3.打印数据基本统计信息
  • 4.检查缺失值情况
  • 5.缺失值处理方法
  • 二、绘图
  • 1.统计"车型大类"的分布
  • 2.制造厂累计销量对比(前90%)
  • 3.当期销量随时间变化折线图
  • 4.累计同比分布箱线图
  • 5.当期同比直方图
  • 6.当期环比随时间变化折线图
  • 7.累计值与去年同期累计值对比
  • 三、建议


一、读取数据

安装必要的库(如果未安装):

pip install pandas openpyxl

其中 pandas 用于数据操作。openpyxl 用于读取 .xlsx 文件。

import pandas as pd

# 读取 Excel 文件
file_path = "./dataset/data.xlsx"  
data = pd.read_excel(file_path)

1.打印表头信息

print("表头信息:\n", data.columns)
表头信息:
 Index(['序号', '统计类型', '制造厂', '车型', '车型大类', '数据日期', '当期值(辆)', '累计值(辆)',
       '去年同期累计值(辆)', '当期同比(%)', '当期环比(%)', '累计同比(%)', '市占率(%)'],
      dtype='object')

2.查看前几行数据

print("\n数据前几行:")
print(data.head())
数据前几行:
    序号 统计类型    制造厂        车型    ...  当期同比(%) 当期环比(%)  累计同比(%)  市占率(%)
0  1.0   产量  特斯拉(上海)  Model3(BEV)  ...    0.00      -5.94     0.00       1.38
1  2.0   销量  特斯拉(上海)  Model3(BEV)  ...    0.00      34.78     0.00       1.24
2  3.0   销量      比亚迪       秦(BEV)  ...    61.90      38.25   117.63       0.63
3  4.0   产量      比亚迪       秦(BEV)  ...    52.50      38.32   123.33       0.64
4  5.0   销量     一汽丰田   卡罗拉(HEV)  ...   154.05      97.49   -35.98       0.56

[5 rows x 13 columns]

3.打印数据基本统计信息

print("\n数据统计信息:")
print(data.describe())

其中,统计指标的含义
count: 数据的非空值数量。 表示每列中实际记录的非缺失值数量。缺失值(如 NaN)不会计入。
例如,"序号"列有 30145 条记录,"累计同比(%)"列有 25376 条有效数据。
mean: 平均值。 每列数据的算术平均值。例如,“当期值(辆)”的平均值是 962.2,表示记录的车辆数平均为 962 辆。
std: 标准差。 描述数据分布的离散程度。值越大,数据越分散。例如,“市占率(%)”的标准差是 0.497,表示市占率数据有较大的离散性。
min: 最小值。 数据中的最小值。例如,“当期值(辆)”的最小值是 -991,可能表示一个异常值(如退货或修正数据)。
25% (1/4 分位数):数据按从小到大排序后,前 25% 数据的最大值。 例如,“当期值(辆)”的 25% 分位数是 0,表示四分之一的记录当期值为 0 或更低。
50% (中位数):数据按从小到大排序后,中间值。 例如,“当期值(辆)”的中位数是 50,表示一半的记录当期值在 50 辆及以下。
75% (3/4 分位数):数据按从小到大排序后,前 75% 数据的最大值。 例如,“当期值(辆)”的 75% 分位数是 679,表示四分之三的记录当期值为 679 辆及以下。
max: 最大值。 数据中的最大值。例如,“当期值(辆)”的最大值是 62640,表示某记录的当期值为 62640 辆。

数据统计信息:
          序号        当期值()  ...       累计同比(%)        市占率(%)
count  	30145.000000  30143.000000  ...  25376.000000  30144.000000
mean     242.861868    962.198421  ...     -2.988029      0.130589
std      172.686269   2990.651372  ...    106.949501      0.496897
min        1.000000   -991.000000  ...   -446.670000      0.000000
25%       98.000000      0.000000  ...    -90.692500      0.000000
50%      212.000000     50.000000  ...      0.000000      0.010000
75%      364.000000    679.000000  ...      0.000000      0.080000
max      766.000000  62640.000000  ...    500.000000     13.020000

[8 rows x 8 columns]

4.检查缺失值情况

print("\n缺失值统计:")
print(data.isnull().sum())
缺失值统计:
序号             165
统计类型           165
制造厂            165
车型             165
车型大类           165
数据日期           165
当期值()         167
累计值()         166
去年同期累计值()     167
当期同比(%)       5140
当期环比(%)       3811
累计同比(%)       4934
市占率(%)         166
dtype: int64

5.缺失值处理方法

# 直接删除对应行
data_cleaned = data.dropna()

二、绘图

安装依赖库:

pip install matplotlib seaborn pandas

导入库基础库并加载数据:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import rcParams

# 设置字体为 SimHei (黑体)
rcParams['font.sans-serif'] = ['SimHei']  # Windows: SimHei; macOS: PingFang SC/Songti SC
rcParams['axes.unicode_minus'] = False  # 正常显示负号

# 读取 Excel 文件
file_path = "./dataset/data.xlsx"  
data = pd.read_excel(file_path)

1.统计"车型大类"的分布

category_counts = data['车型大类'].value_counts()

# 绘制饼图
plt.figure(figsize=(8, 6))
category_counts.plot.pie(autopct='%1.1f%%', startangle=45, colors=sns.color_palette("pastel"), fontsize=15)
plt.title("车型大类分布", fontsize=20)
plt.ylabel("")  # 去掉默认的Y轴标签
plt.show()

车型大类分布

2.制造厂累计销量对比(前90%)

# 删除包含缺失值的行
data_cleaned = data.dropna()

# 统计每个制造厂的累计销量
factory_sales = data_cleaned.groupby('制造厂')['累计值(辆)'].sum()

# 按累计值排序,并计算累计百分比
factory_sales_sorted = factory_sales.sort_values(ascending=False)
cumulative_percentage = factory_sales_sorted.cumsum() / factory_sales_sorted.sum()

# 筛选前30%的数据
top_30_percent = factory_sales_sorted[cumulative_percentage <= 0.9]

# 检查是否有数据满足条件
if top_30_percent.empty:
    print("没有满足筛选条件的数据。")
else:
    # 绘制柱状图
    plt.figure(figsize=(10, 6))
    top_30_percent.plot(kind='bar', color='skyblue')
    plt.title("制造厂累计销量对比(前90%)")
    plt.xlabel("制造厂")
    plt.ylabel("累计值(辆)")
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

在这里插入图片描述

3.当期销量随时间变化折线图

# 删除包含缺失值的行
data_cleaned = data.dropna()

# 确保数据日期列是日期类型
data_cleaned['数据日期'] = pd.to_datetime(data_cleaned['数据日期'])

# 按日期统计当期值总和
date_sales = data_cleaned.groupby('数据日期')['当期值(辆)'].sum().sort_values(ascending=False)

# 计算前30%累计比例
cumulative_percentage = date_sales.cumsum() / date_sales.sum()
top_30_percent = date_sales[cumulative_percentage <= 1.0]

# 绘制折线图
plt.figure(figsize=(12, 6))
top_30_percent.plot(color='blue', marker='o', linestyle='-')
plt.title("当期销量随时间变化")
plt.xlabel("数据日期")
plt.ylabel("当期值(辆)")
plt.grid()
plt.tight_layout()
plt.show()

在这里插入图片描述

4.累计同比分布箱线图

import seaborn as sns

# 绘制箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(data=data_cleaned, x='累计同比(%)', color='lightblue')
plt.title("累计同比分布及异常值")
plt.xlabel("累计同比(%)")
plt.tight_layout()
plt.show()

在这里插入图片描述

5.当期同比直方图

# 绘制直方图
plt.figure(figsize=(8, 6))
sns.histplot(data=data_cleaned, x='当期同比(%)', bins=30, kde=True, color='orange')
plt.title("当期同比分布")
plt.xlabel("当期同比(%)")
plt.ylabel("频率")
plt.tight_layout()
plt.show()

在这里插入图片描述

6.当期环比随时间变化折线图

# 按日期统计当期环比的平均值
date_monthly = data_cleaned.groupby('数据日期')['当期环比(%)'].mean().sort_values(ascending=False)

# 绘制折线图
plt.figure(figsize=(12, 6))
date_monthly.plot(color='green', marker='s', linestyle='--')
plt.title("当期环比随时间变化")
plt.xlabel("数据日期")
plt.ylabel("当期环比(%)")
plt.grid()
plt.tight_layout()
plt.show()

在这里插入图片描述

7.累计值与去年同期累计值对比

compare_sales = data_cleaned[['累计值(辆)', '去年同期累计值(辆)']].sum().sort_values(ascending=False)

# 绘制柱状图
plt.figure(figsize=(8, 6))
compare_sales.plot(kind='bar', color=['skyblue', 'orange'])
plt.title("累计值与去年同期累计值对比")
plt.xlabel("类别")
plt.ylabel("车辆数量")
plt.tight_layout()
plt.show()

在这里插入图片描述


三、建议


http://www.kler.cn/a/445360.html

相关文章:

  • 使用vcpkg安装opencv>=4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效
  • 火山引擎发布数据飞轮 2.0,AI 重塑企业数据消费
  • C# winform 字符串通过枚举类型转成int类型的数据
  • Spring Boot中Bean的 构造器注入、字段注入和方法注入
  • rfid标签打印开发指导
  • 【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南
  • MYSQL_联合查询(全)
  • MacOS安装MySQL
  • 监控IP频繁登录服务器脚本
  • 卡尔曼滤波效果(python应用)
  • 半导体制造技术导论(第二版)萧宏 第十二章 化学机械研磨工艺
  • 负载均衡-lvs
  • TDengine 新功能 通过 UID 删除不可见表
  • Midjourney参数大全
  • 【ETCD】当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?
  • 如何从 ASP.NET Core IIS上传大文件一些配置
  • [python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
  • Kioptix Level 2靶场练习保姆级---春不晚
  • git企业开发的相关理论(一)
  • 深入解析MySQL Explain关键字:字段意义及调优策略
  • EasyExcel 导出文件
  • html中实用标签dl dt dd(有些小众的标签 但是很好用)
  • Expected end or semicolon (after name and no valid version specifier)
  • 非结构化数据分析与应用(Unstructured data analysis and applications)(pt3)图像数据分析1
  • NVR管理平台EasyNVR接入的安防监控摄像机如何计算音频码流?
  • 【python算法题目】统计一个文本中所有大写字母出现的次数