目录
一、案例背景
在全球倡导可持续发展以及环保意识不断增强的大背景下,新能源汽车行业正蓬勃发展。新能源汽车以其低排放、高效能等特点,逐渐成为汽车产业转型升级的重要方向。从纯电动汽车到混合动力汽车,再到氢燃料电池汽车,新能源汽车的技术和产品不断创新。然而,该行业也面临着诸多挑战,如续航里程焦虑、充电基础设施不完善、电池技术瓶颈以及高昂的制造成本等。通过运用 Python 对新能源汽车行业的相关数据进行深入分析,可以帮助企业、投资者以及政策制定者更好地了解行业趋势、市场需求和竞争格局,从而做出更明智的决策。
二、代码实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import requests
from bs4 import BeautifulSoup
2.1 数据收集
数据来源包括行业研究机构报告(如中国汽车工业协会、EVTank 等发布的数据)、新能源汽车企业官网、汽车销售平台数据以及政府部门的相关统计数据。
# 从中国汽车工业协会网站抓取新能源汽车销量数据(假设网站结构可通过以下方式获取,实际可能需调整)
url = 'https://www.caam.org.cn/statistics/new_energy_vehicle_sales'
headers = {
'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# 发送HTTP请求获取网页内容
response = requests.get(url, headers = headers)
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 假设销量数据在一个表格中,定位到该表格
table = soup.find('table', class_='sales_table')
sales_data = []
# 遍历表格中的每一行(跳过表头)
for row in table.find_all('tr')[1:]:
cols = row.find_all('td')
year = cols[0].text.strip() # 获取年份
sales_volume = float(cols[1].text.strip().replace('万辆', '')) # 获取销量,转换为数值类型
sales_data.append({'Year': year, 'Sales_Volume': sales_volume})
# 将数据整理成DataFrame格式
sales_df = pd.DataFrame(sales_data)
# 从某新能源汽车企业官网获取车型参数数据(假设以JSON格式返回,需根据实际情况调整)
car_url = 'https://www.exampleevcompany.com/api/car_parameters'
# 发送请求获取车型参数数据
car_response = requests.get(car_url)
if car_response.status_code == 200:
car_params = car_response.json()
car_params_df = pd.DataFrame(car_params)
else:
print('Failed to get car parameters data')
2.2 数据探索性分析
# 查看新能源汽车销量数据的基本信息,如数据类型、是否有缺失值等
print(sales_df.info())
# 查看车型参数数据的基本信息
print(car_params_df.info())
# 绘制新能源汽车销量随时间变化的折线图
sales_df['Year'] = pd.to_numeric(sales_df['Year']) # 将年份列转换为数值类型,方便绘图
plt.figure(figsize=(12, 6))
sns.lineplot(x='Year', y='Sales_Volume', data=sales_df)
plt.title('Trend of New Energy Vehicle Sales Volume')
plt.xlabel('Year')
plt.ylabel('Sales Volume (10,000 units)')
plt.show()
# 查看不同车型的续航里程分布情况
plt.figure(figsize=(10, 6))
sns.boxplot(x='Model', y='Range', data=car_params_df) # 假设车型为Model列,续航里程为Range列
plt.title('Distribution of Driving Range for Different New Energy Vehicle Models')
plt.xlabel('Vehicle Model')
plt.ylabel('Driving Range (km)')
plt.xticks(rotation=45)
plt.show()
2.3 数据清洗
# 新能源汽车销量数据清洗
# 检查并处理缺失值,这里简单地删除包含缺失值的行
sales_df = sales_df.dropna()
# 去除重复记录
sales_df = sales_df.drop_duplicates()
# 车型参数数据清洗
# 处理异常续航里程数据,如续航里程为负数或过高的不合理值
car_params_df = car_params_df[(car_params_df['Range'] > 0) & (car_params_df['Range'] < 1000)]
# 处理缺失值,对于某些重要参数缺失的数据可考虑删除,对于非关键参数可采用填充的方式
car_params_df = car_params_df.dropna(subset=['Battery_Capacity']) # 假设电池容量为重要参数,删除其缺失的行