数据分析实战项目-蛋壳公寓投诉分析
摘要:由于今年疫情,加速了长租公寓的暴雷,本人所租的蛋壳公寓也频繁传出各种负面新闻,直到10月初合同到期,不敢再续租了,按约退房!押金退还流程先退到APP内,再提现,APP内显示14个工作日到账,截至到发稿前2020-11-10(2020-11-07退租并体现),一个月过去了一直未收到打款,客服一直未能联系上,不得已,走黑猫和12315进行了投诉,投诉过程中,发现投诉量多达2万5千多条,于是把黑猫上关于蛋壳公寓的投诉内容爬取了下来并进行了分析,于是有了这篇完整的数据分析实战项目,从数据获取到数据的简单分析
有遇到相同问题的可以投诉走一波
黑猫投诉
12315投诉
一、数据抓取
import requests,time
import pandas as pd
import numpy as np
requests.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 =1params = {'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 = 2507
for 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 = 56
for 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,re
import pandas as pd
import 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-05
num2 = _data[(_data.投诉日期>='2020-02-21')&(_data.投诉日期<='2020-11-05')].投诉数量.sum()# 2020-11-06 ~ 2020-11-09 本数据只采集到2020-11-09
print(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 inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.size']=18
plt.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 re
import collections
import PIL.Image as img# pip install PIL
from wordcloud import WordCloud
import PIL.Image as img# pip install PIL
from 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很容易打通外,后面基本上联系不到客服,全程电子音糊弄
蛋壳公寓投诉诉求 词云图
投诉用户的主要诉求大家强烈要求对蛋壳公寓做出相应处罚
并要求退款和赔偿
蛋壳公寓投诉问题 词云图
投诉问题,也就是投诉的标题,
这里也可以体现出来主要问题就是打款体现和活动返现,还有一部分保洁问题
数据分析实战项目-蛋壳公寓投诉分析相关推荐
- python数据分析实战项目—运用matplotlib可视化分析10000条北京各大区二手房区域信息(附源码)
文章目录 开发工具 数据内容 实现代码 运行效果 10000条二手房信息下载地址 总结 开发工具 python版本:Python 3.6.1 python开发工具:JetBrains PyCharm ...
- 在线教育数据分析实战项目案例
数据分析实战项目案例 数据分析概览 数据分析经常遇到的问题 解决思路 常规产品指标 在线教育产品指标 市场效果广告指标 搭建指标系统流程 渠道的分类 针对搜索引擎,信息流广告如何稳定提高ROI 利用M ...
- Python数据分析实战:降雨量统计分析报告分析
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于菜J学Python ,作者小小明 最近遇到一个有点烧脑的需求,其实也不算烧pytho ...
- 数据项目总结 -- 蛋壳公寓租金分析!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:牧小熊,华中农业大学,Datawhale原创作者 本文约3000字 ...
- 【Python基础】数据项目总结 -- 蛋壳公寓租金分析!
作者:牧小熊,华中农业大学,Datawhale原创作者 本文约3000字,建议阅读15分钟 审稿人:鱼佬,Datawhale成员,武汉大学硕士,腾讯广告算法大赛冠军选手. 最近爬取了武汉蛋壳公寓的租房 ...
- 分享3个数据分析实战项目(附最新资料包)
"跳槽大厂数分岗位,到底需要准备什么呢?" 之前我简历里带了一个数据分析实战经验,项目不大不小,只是想用来美化下简历.结果没想到,最后这竟然成了我斩获大厂offer的关键之一! 相 ...
- 数据挖掘实战项目——北京二手房房价分析
本次实战项目的主要目的是分析北京二手房房价,项目源自博文:入门Python数据分析最好的实战项目(一)和入门Python数据分析最好的实战项目(二).本篇文章仅记录博主在学习过程中的思路. 数据分析 ...
- Python数据分析实战:上海二手房价分析
1 数据搜集 使用 urllib 库中的request 模块爬取赶集网发布的上海二手房信息,包括包括户型.面积.单价等,再使用BeautifulSoup 库解析爬取的HTML数据,最终将数据保存到CS ...
- 基于python的房地产数据分析_基于Python的数据分析实战项目
本文中项目资料来源于网易云课堂,代码为纯手工码字滴,请放心食用,不定期更新,欢迎对Python.数据分析以及编程感兴趣的同学留言沟通. 详细介绍了数十个数据分析相关的实战项目,大量使用pandas.n ...
最新文章
- 红警1开源放出源码,4K高清重制版登顶Steam畅销榜!网友:青春回来了
- 校招9.28笔试题:1-N 的幂集中集合个数 去除含相邻数字的集合
- python3.6.5安装教程-Centos7 安装Python3.6.
- 美观实用 最新《生化危机》主题人体工学游戏椅公开
- [前台]---js重复上传一张图片两次,第二次失败的解决办法和思路
- idea中将java项目中的单个类打包成jar包
- Clob 2 String
- 《Java深入解析》阅读笔记二(运算符与表达式)
- 转载--页面间大量数据参数传递
- Android 之类库常用包
- flexsim怎么设置传送带方向_Flexsim_编程常用代码
- 微信浏览器无法下载APK文件的解决方案
- 英国高中A-Level和IB课程介绍
- SEO优化中关键词密度和布局的重要性
- 图片怎样编辑文字?分享三个图片编辑修改文字的方法
- RabbitMq报错 Execution of Rabbit message listener failed
- Jetpack 架构组件:Room 数据库应用
- 【将门创投】商汤徐立:计算机视觉的完整链条,从成像到早期视觉再到识别理解...
- MUI前端代码生成快捷键
- 为什么年轻一代连操作系统的基本知识都不懂?
热门文章
- Gumroad:付费链接服务平台是一个通过制作付费的链接来获得佣金的平台,只要拥有Facebook或Twitter的帐号,就可以通过OAuth 模式安全登陆,开...
- linux find按权限查找,如何使用find命令按权限查找文件详解
- 使用 LJ1-01 夜间灯光图像检测县域经济发展:与 NPP-VIIRS 数据的比较
- JavaWeb篇之二------sql注入的原理和解决方法(预编译)
- enum枚举构造函数
- 严查非正常申请专利,何为非正常专利申请?
- 断言java_java断言使用
- Android中使用硬件加速的技巧
- 《银行法律法规》二、银行业务——2、贷款业务
- 远程桌面:未授予此用户在此计算机上的请求登陆类型