本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于IT小伙伴
前言
由于今年疫情,加速了長租公寓的暴雷,某殼公寓頻繁傳出各種負面新聞,于是把黑貓上關于某殼公寓的投訴內容爬取了下來并進行了分析,就有了這篇完整的資料分析實戰專案,從資料獲取到資料的分析,
一、資料抓取
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 = https://www.cnblogs.com/hhh188764/p/[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 = https://www.cnblogs.com/hhh188764/p/[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 = https://www.cnblogs.com/hhh188764/p/pd.read_csv("data/合并后某殼投訴資料.csv") # 篩選到截止昨天的資料,保證按天資料的完整性 data = https://www.cnblogs.com/hhh188764/p/data[data.投訴日期<='2020-11-09'] print(f"截至2020-11-09之前,黑貓投訴累計收到某殼公寓相關投訴共計 {len(data)} 條") # 時間分布處理 _data=https://www.cnblogs.com/hhh188764/p/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')# 在本地生成檔案展示
某殼公寓投訴詳情 詞云圖
投訴詳情可以看出來,主要投訴問題:提現,活動返現(每個月返多少錢,我的除了剛開始兩個月正常返現,后面也沒按時打款,客服打不通后面就沒怎么關注了),主要還有客服聯系不上,保潔問題等!也許好好直面問題,投訴可能也沒那么多,
某殼公寓投訴訴求 詞云圖
投訴用戶的主要訴求大家強烈要求對某殼公寓做出相應處罰并要求退款和賠償,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222224.html
標籤:Python
下一篇:Python學習筆記4:函式
