写点什么

数据分析实战项目 - 蛋壳公寓投诉分析

用户头像
诡途
关注
发布于: 2021 年 03 月 22 日
数据分析实战项目-蛋壳公寓投诉分析

摘要:由于今年疫情,加速了长租公寓的暴雷,本人所租的蛋壳公寓也频繁传出各种负面新闻,直到 10 月初合同到期,不敢再续租了,按约退房!押金退还流程先退到 APP 内,再提现,APP 内显示 14 个工作日到账,截至到发稿前 2020-11-10(2020-11-07 退租并体现),一个月过去了一直未收到打款,客服一直未能联系上,不得已,走黑猫和 12315 进行了投诉,投诉过程中,发现投诉量多达 2 万 5 千多条,于是把黑猫上关于蛋壳公寓的投诉内容爬取了下来并进行了分析,于是有了这篇完整的数据分析实战项目,从数据获取到数据的简单分析


有遇到相同问题的可以投诉走一波

黑猫投诉

12315投诉

一、数据抓取


import requests,timeimport pandas as pdimport numpy as nprequests.packages.urllib3.disable_warnings()  # 屏蔽https请求证书验证警告from fake_useragent import UserAgent  # 生成随机请求头

# uid请求数据,数据格式较为规范,方便处理def request_data_uid(req_s,couid,page,total_page): params = { 'couid': couid, # 商家ID 'type': '1', 'page_size': page * 10, # 每页10条 'page': page, # 第几页 # 'callback':'jQuery11', } print(f"正在爬取第{page}页,共计{total_page}页,剩余{total_page-page}页") url = 'https://tousu.sina.com.cn/api/company/received_complaints' # 伪造随机请求头 header={'user-agent':UserAgent().random} res=req_s.get(url,headers=header,params=params, verify=False)# res = requests.get(url, params=params, verify=False) info_list = res.json()['result']['data']['complaints'] result =[] for info in info_list: _data = info['main'] # 投诉日期 timestamp =float(_data['timestamp']) date = time.strftime("%Y-%m-%d",time.localtime(timestamp)) # sn:投诉编号 title :投诉问题 appeal:投诉诉求 summary :问题说明 data = [date,_data['sn'],_data['title'],_data['appeal'],_data['summary']] result.append(data)
pd_result = pd.DataFrame(result,columns=["投诉日期","投诉编号","投诉问题","投诉诉求","详细说明"]) return pd_result

# keywords请求数据,数据格式相对混乱# 紫梧桐这种没有收录商家ID的公司只能用keywords进行检索处理# 蛋壳公寓有uid的这种也可以使用keywods进行数据请求
def request_data_keywords(req_s,keyword,page,total_page):# page =1 params = { 'keywords':keyword, # 检索关键词 'type': '1', 'page_size': page * 10, # 每页10条 'page': page, # 第几页 # 'callback':'jQuery11', } print(f"正在爬取第{page}页,共计{total_page}页,剩余{total_page-page}页") # url = 'https://tousu.sina.com.cn/api/company/received_complaints' url ='https://tousu.sina.com.cn/api/index/s?' # 伪造随机请求头 header={'user-agent':UserAgent().random} res=req_s.get(url,headers=header,params=params, verify=False)# res = requests.get(url, params=params, verify=False) info_list = res.json()['result']['data']['lists'] result =[] for info in info_list: _data = info['main'] # 投诉日期 timestamp =float(_data['timestamp']) date = time.strftime("%Y-%m-%d",time.localtime(timestamp)) # sn:投诉编号 title :投诉问题 appeal:投诉诉求 summary :问题说明 data = [date,_data['sn'],_data['title'],_data['appeal'],_data['summary']] result.append(data)
pd_result = pd.DataFrame(result,columns=["投诉日期","投诉编号","投诉问题","投诉诉求","详细说明"]) return pd_result

#生成并保持请求会话req_s = requests.Session()
# 蛋壳公寓result = pd.DataFrame()total_page = 2507for page in range(1,total_page+1): data = request_data_uid(req_s,'5350527288',page,total_page) result = result.append(data)result['投诉对象']="蛋壳公寓"result.to_csv("蛋壳公寓投诉数据.csv",index=False)
# 紫梧桐 关键词检索# 蛋壳公寓为品牌名,工商注册名称为紫梧桐资产管理有限公司result = pd.DataFrame()total_page = 56for page in range(1,total_page+1): data = request_data_keywords(req_s,'紫梧桐',page,total_page) result = result.append(data)result['投诉对象']="紫梧桐"result.to_csv("紫梧桐投诉数据.csv",index=False)
复制代码




二、清洗绘图


import os,reimport pandas as pdimport numpy as np

# 数据清洗,处理keywords爬取导致的投诉标题混乱data_path = os.path.join('data','紫梧桐投诉数据.csv')data =pd.read_csv(data_path)pattern=r'[^\u4e00-\u9fa5\d]'data['投诉问题']=data['投诉问题'].apply(lambda x: re.sub(pattern,'',x))data.to_csv(data_path,index=False,encoding="utf_8_sig")

# 数据合并result = pd.DataFrame()for wj in os.listdir('data'): data_path = os.path.join('data',wj) data =pd.read_csv(data_path) result = result.append(data)result.to_csv("data/合并后蛋壳投诉数据.csv",index=False,encoding="utf_8_sig")
复制代码


# 读取数据data = pd.read_csv("data/合并后蛋壳投诉数据.csv")
# 筛选到截止昨天的数据,保证按天数据的完整性data = data[data.投诉日期<='2020-11-09']print(f"截至2020-11-09之前,黑猫投诉累计收到蛋壳公寓相关投诉共计 {len(data)} 条")
复制代码



# 时间分布处理_data=data.groupby('投诉日期').count().reset_index()[['投诉日期','投诉编号']]_data.rename(columns={"投诉编号":"投诉数量"},inplace = True)

# 2020-01-30之前投诉数量求和num1 = _data[_data.投诉日期<='2020-01-30'].投诉数量.sum()data0 =pd.DataFrame([['2020-01-30之前',num1]],columns=['投诉日期','投诉数量'])# 2020-02-01 ~ 2020-02-21号之间投诉情况分布data1=_data[(_data.投诉日期>='2020-02-01')&(_data.投诉日期<='2020-02-21')]
# 2020-02-21 ~ 2020-11-05num2 = _data[(_data.投诉日期>='2020-02-21')&(_data.投诉日期<='2020-11-05')].投诉数量.sum()
# 2020-11-06 ~ 2020-11-09 本数据只采集到2020-11-09print(f"2020-11-06当天投诉量{_data[_data.投诉日期=='2020-11-06'].iloc[0,1]}条") data2=_data[(_data.投诉日期>'2020-11-06')&(_data.投诉日期<='2020-11-09')]

data3=pd.DataFrame([['2020-02-21 ~ 2020-11-05',num2]],columns=['投诉日期','投诉数量'])new_data = pd.concat([data0,data1,data3,data2])
复制代码



'''配置绘图参数'''import matplotlib.pyplot as plt%matplotlib inlineplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=18plt.rcParams['figure.figsize']=(12,8)plt.style.use("ggplot")new_data.set_index('投诉日期').plot(kind='bar') # 剔除了2020-11-06的数据,24093条
复制代码

2020-01-30 之前属于正常投诉量,偶尔一两单,2 月份因为疫情原因,导致投诉量大量增长,可能是因为疫情原因无法保洁,疫情租房补贴之类的,还有被长租公寓暴雷以及蛋壳破产之类的负面新闻给带起来的租户紧张等等。


2020-02-21 之后一直到 2020-11-05 号投诉量很正常,相比较 2020-01-30 之前略多,仍在正常经营可接受范围内


2020-11-06 突然骤增了 2 万 4 千多条投诉,异常值影响展示,单独剔除出去了,特地去查了一下新闻,看看有没有什么大事儿发生,结果还真有,据 36 氪报道 2020-11-06 蛋壳公寓关联公司称被执行人,执行标的超 519 万元


自此之后的 7、8、9 蛋壳在黑猫的投诉每天维持在 2-300 的日增,看来蛋壳破产的官方辟谣都是扯淡了,也许并不是谣言,也许网传蛋壳再现 ofo 排队讨债并非空穴来风


以上还是仅仅从黑猫上获取到的投诉数据,投诉无门以及自认倒霉的的用户量又会有多大呢?


接下来就看一下,投诉用户主要投诉的是什么?主要诉求是什么?


三、词云生成


import jieba# 分词模块import reimport collectionsimport PIL.Image as img# pip install PILfrom wordcloud import WordCloudimport PIL.Image as img# pip install PILfrom wordcloud import WordCloud
# 投诉详细说明合并后进行分词all_word=''for line in data.values: word = line[4] all_word = all_word+word
# jieba分词result=list(jieba.cut(all_word))
# 投诉问题词云图wordcloud=WordCloud( width=800,height=600,background_color='white', font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加载解析的词典 max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成图片展示wordcloud.to_file('蛋壳公寓投诉详情.png')# 在本地生成文件展示

# 投诉标题合并后进行分词all_word=''for line in data.values: word = line[2] all_word = all_word+word
# jieba分词result=list(jieba.cut(all_word))
# 生成词云图# 投诉问题词云图wordcloud=WordCloud( width=800,height=600,background_color='white', font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加载解析的词典 max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成图片展示wordcloud.to_file('蛋壳公寓投诉问题.png')# 在本地生成文件展示
# 投诉诉求合并后进行分词all_word=''for line in data.values: word = line[3] all_word = all_word+word
# jieba分词result=list(jieba.cut(all_word))
# 生成词云图# 投诉问题词云图wordcloud=WordCloud( width=800,height=600,background_color='white', font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加载解析的词典 max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成图片展示wordcloud.to_file('蛋壳公寓投诉诉求.png')# 在本地生成文件展示
复制代码


蛋壳公寓投诉详情 词云图


投诉详情可以看出来,主要投诉问题:提现(应该是和我一样的问题,押金体现),活动返现(每个月返多少钱,我的除了刚开始两个月正常返现,后面也没按时打款,客服打不通后面就没怎么关注了),主要还有客服联系不上,保洁问题等!也许好好直面问题,投诉可能也没那么多,最受不了的是除了第一次找房官方 400 很容易打通外,后面基本上联系不到客服,全程电子音糊弄


蛋壳公寓投诉诉求 词云图


投诉用户的主要诉求大家强烈要求对蛋壳公寓做出相应处罚

并要求退款和赔偿


蛋壳公寓投诉问题 词云图


投诉问题,也就是投诉的标题,

这里也可以体现出来主要问题就是打款体现和活动返现,还有一部分保洁问题



发布于: 2021 年 03 月 22 日阅读数: 12
用户头像

诡途

关注

科技成就商业未来,数据看透问题本质 2020.11.04 加入

目前就职于电商数据分析师,日常工作以爬虫和DBA数据库管理为主,从最初的表哥到现在的大数据、数据挖掘、机器学习,一直不断成长! CSDN:https://blog.csdn.net/qq_35866846 微信公众号:诡途

评论

发布
暂无评论
数据分析实战项目-蛋壳公寓投诉分析