背景
因为最近在看车,但是每台车在网上的褒贬程度不一。可以通过车质网(https://www.12365auto.com/)查看车辆投诉信息:
所以想知道下最近车辆信息的投诉数据大致走势和可视化,由于车质网没有提供相关的数据可视化,主要是关于质量问题的投诉,于是就自己动手做一个。
以我看中的别克君威为例(去年上汽通用好像召回了部分车型,所以该车现在的评价褒贬不一),看看现在该车的投诉情况。
流程
- 查看车质网的相关请求和数据,F12进入开发模式,找到对应请求2. 使用python的request库请求数据并解析
uri = {请求的url}
params = {
"sid": 43, # 君威 43, ct4 2799 , ct5 2720 , 君越 42
"type": 1,
"year": 0,
"stime": stime ,#"2024-01-01",
"etime": etime ,#"2024-01-05",
"cou": 13
}
# 发送get请求并获取响应
r = requests.get(uri, params=params, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"})
r.encoding = "utf-8"#r.apparent_encoding
content=r.content.decode('utf-8', 'ignore')
parsed_content = extract_jsonp(content)
parsed_content_data = parsed_content['data']
可以获得请求数据(提供参考数据):
jQuery17204193017622193662_1709080333929({"result":true,"msg":null,"data":{"dxwt":[{"letter":"H78","firstLetter":"H","ctiTitle":"汽油泵故障","count":1],"wtDict":{"a":1,"b":1,"d":3,"e":4,"g":6,"h":1},"yearCou":[{"year":2024,"count":16}]},"other":null})
该解析数据对应的就是页面上的投诉统计内容。
- 按照时间维度循环请求即可。注意的是,由于投诉数量一共就万条以内,不需要使用并发来请求数据,并且过高的并发也会对网站产生负担,直接循环就可以。
for stime, etime in date_list:
parsed_content_data = request_auto_web(stime, etime)
year_count = parsed_content_data['yearCou']
pro_count_one_day = sum([coun["count"] for coun in year_count])
count_list.append(pro_count_one_day)
time_list.append(stime)
total_count += pro_count_one_day
- 最后使用matplotlib库来进行可视化
plt.rc("font",family='MicroSoft YaHei',weight="bold")
plt.figure(figsize=(10, 6))
plt.plot(time_list, count_list, marker='o')
plt.xlabel('日期')
plt.ylabel('投诉数')
plt.xticks([time_list[i] for i in range(0, len(time_list), 10)])
# plt.title('')
plt.grid(True)
plt.show()
- 查看君威的投诉可视化结果,这里我是按照每7天的时间跨度进行拉取数据(图中每个点是7天的投诉数据)
分析
可以看到的近一年投诉数量中,23年9月开始投诉量激增,估计是最近一段时间生产的某一批车型有设计缺陷或者质量问题,在23年10月开始投诉量下降,最近24年2月份将近回归到去年同期的投诉数量。
结合新闻,19年9月~23年7月的车型存在缺陷,可能是因为这个原因导致的投诉量突然增多,并且24年款的车型应该会有所改善。
TODO
接下来,可以结合车辆的数据建模(购车几年内出现的问题,购车地点,车辆基础数据),做回归分析,计算出24年款出现问题的概率。