前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析实战项目-蛋壳公寓投诉分析

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

作者头像
诡途
发布2022-01-07 08:31:52
4130
发布2022-01-07 08:31:52
举报
文章被收录于专栏:诡途的python路诡途的python路

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

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

一、数据抓取

代码语言:javascript
复制
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 =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 = 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)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、清洗绘图

代码语言:javascript
复制
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")
代码语言:javascript
复制
# 读取数据
data = pd.read_csv("data/合并后蛋壳投诉数据.csv")

# 筛选到截止昨天的数据,保证按天数据的完整性
data = data[data.投诉日期<='2020-11-09']
print(f"截至2020-11-09之前,黑猫投诉累计收到蛋壳公寓相关投诉共计 {len(data)} 条")
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# 时间分布处理
_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])
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
'''配置绘图参数'''
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排队讨债并非空穴来风

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

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

三、词云生成

代码语言:javascript
复制
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很容易打通外,后面基本上联系不到客服,全程电子音糊弄

在这里插入图片描述
在这里插入图片描述

蛋壳公寓投诉诉求 词云图

投诉用户的主要诉求大家强烈要求对蛋壳公寓做出相应处罚 并要求退款和赔偿

在这里插入图片描述
在这里插入图片描述

蛋壳公寓投诉问题 词云图

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

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数据抓取
  • 二、清洗绘图
  • 三、词云生成
相关产品与服务
腾讯云图数据可视化
腾讯云图数据可视化(Tencent Cloud Visualization) 是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示大量数据,低门槛快速打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,全图形化编辑,快速可视化制作。腾讯云图数据可视化支持多种数据来源配置,支持数据实时同步更新,同时基于 Web 页面渲染,可灵活投屏多种屏幕终端。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档