摘要:由于今年疫情,加速了長租公寓的暴雷,本人所租的蛋殼公寓也頻繁傳出各種負面新聞,直到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 =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)
二、清洗繪圖
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很容易打通外,后面基本上聯系不到客服,全程電子音糊弄
蛋殼公寓投訴訴求 詞云圖
投訴用戶的主要訴求大家強烈要求對蛋殼公寓做出相應處罰
并要求退款和賠償
蛋殼公寓投訴問題 詞云圖
投訴問題,也就是投訴的標題,
這里也可以體現出來主要問題就是打款體現和活動返現,還有一部分保潔問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212842.html
標籤:其他
上一篇:1、requests庫之urllib和requests程式
下一篇:Python資料分析期末復習歸納