探索的分析
3Wパブリックコメントのデータは、8つの人気のデザートショップレビューでフィールドを含んでいます。顧客ID、時間、コメント、評価、レビュー、内容、味、環境、サービス、店舗IDを
#引入库
import pandas as pd
from matplotlib import pyplot as plt
import pymysql
import seaborn as sns
from wordcloud import WordCloud, STOPWORDS
%matplotlib inline
データベースは、データを読みます
私たちは、pymysqlデータベース接続のMySQLデータベースを使用し、pd.read_sql機能は、直接データベース接続データを読み込みます
#连接数据库,读入数据
db = pymysql.connect("localhost",'root','root','dianping') #服务器:localhost,用户名:root,密码:(空),数据库:TESTDB
sql = "select * from dzdp;"
data = pd.read_sql(sql,db)
db.close()
データの概要
データサイズや基本情報を見ます
data.shape
(32483, 14)
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32483 entries, 0 to 32482
Data columns (total 14 columns):
cus_id 32483 non-null object
comment_time 32483 non-null object
comment_star 32483 non-null object
cus_comment 32474 non-null object
kouwei 32483 non-null object
huanjing 32483 non-null object
fuwu 32483 non-null object
shopID 32483 non-null object
stars 26847 non-null object
year 32483 non-null object
month 32483 non-null object
weekday 32483 non-null object
hour 32483 non-null object
comment_len 32483 non-null object
dtypes: object(14)
memory usage: 3.5+ MB
data.head()
cus_id | comment_time | comment_star | cus_comment | kouwei | huanjing | fuwu | shopID | 星 | 年 | 月 | 平日 | 時間 | comment_len | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | テディは混乱しました | 2018年9月20日午前6時48分00秒 | コル-str40 | 南広州の手紙は、有名なデザートバー、いくつかの時間帯は、メニューを見て、完全な家に渡していること... | 非常に良いです | 良いです | 良いです | 518986 | 4.0 | 2018 | 9 | 3 | 6 | 184 |
1 | 幼稚園支配 | 2018年9月22日午前21時49分00秒 | コル-str40 | いわゆるティーバッグレスト後の正午には、アフタヌーンティーサービスを食べに戻ってダウンして行くでしょう... | 良く | 良く | 良く | 518986 | 4.0 | 2018 | 9 | 5 | 21 | 266 |
2 | お気に入り梅梅の夏 | 2018年9月22日22時16分00秒 | コル-str40 | 成都の一族を中心に広州への特権月や友人卒業旅行を食べるためにチームスプリント王... | 良く | 良く | 良く | 518986 | 4.0 | 2018 | 9 | 5 | 22 | 341 |
3 | ジンジャージンジャーオーバー得られるであろう | 2018年9月19日午前6時36分00秒 | コル-str40 | 広州は、砂糖を食べて一階に南のジンジャーミルク牛小豆をPinAIサムスンワンタン麺への手紙に署名すると言うこと... | 非常に良いです | 良く | 良く | 518986 | 4.0 | 2018 | 9 | 2 | 6 | 197 |
4 | forevercage | 2018年8月24日17時58分00秒 | コル-str50 | また、サンプルは、多くのにしていた前に、非常に豊富なデザート広州で最も好きなデザートを楽しみにされています... | 非常に良いです | 良く | 良く | 518986 | 5.0 | 2018 | 8 | 4 | 17 | 261 |
ラベル「comment_star」とタグデータが処理されたコラムを参照してください。
#查看情况
data['comment_star'].value_counts()
sml-str40 10849
sml-str50 9067
NAN 5636
sml-str30 5152
sml-str20 982
sml-str10 797
Name: comment_star, dtype: int64
#数据清洗
data.loc[data['comment_star'] == 'sml-str1','comment_star'] = 'sml-str10'
data['stars'] = data['comment_star'].str.findall(r'\d+').str.get(0)
data['stars'] = data['stars'].astype(float)/10
sns.countplot(data=data,x='stars')
<matplotlib.axes._subplots.AxesSubplot at 0x12be0396978>
良いと悪いようには受け取ら負帰還よりもはるかに高い、前記最高点の評価4を占め、不均一な分布で見ることができます
sns.boxplot(data=data,x='shopID',y='stars')
<matplotlib.axes._subplots.AxesSubplot at 0x12bdf8e8400>
同じではありませんが、機能スコアは賞賛と評価に集中している店舗の分布を評価見ることができます
データの前処理
時間特徴抽出
我々は時間から年、月、日、曜日、時間などの共通の特徴を抽出すること
data.comment_time = pd.to_datetime(data.comment_time.str.findall(r'\d{4}-\d{2}-\d{2} .+').str.get(0))
data['year'] = data.comment_time.dt.year
data['month'] = data.comment_time.dt.month
data['weekday'] = data.comment_time.dt.weekday
data['hour'] = data.comment_time.dt.hour
#各星期的小时评论数分布图
fig1, ax1=plt.subplots(figsize=(14,4))
df=data.groupby(['hour', 'weekday']).count()['cus_id'].unstack()
df.plot(ax=ax1, style='-.')
plt.show()
日曜日の時間分布に月曜日がより類似したコメントで、コメントがアップ遅く次の日のため、カザフスタンであってもよいし、土曜日の夜、よりアクティブユーザー、ピークで11時、16時00と22:00現れます
#评论的长短可以看出评论者的认真程度
data['comment_len'] = data['cus_comment'].str.len()
fig2, ax2=plt.subplots()
sns.boxplot(x='stars',y='comment_len',data=data, ax=ax2)
ax2.set_ylim(0,600)
(0, 600)
少し短いコメントがもっと努力しているようで、1分、コメントの5分の短い長さを見ることができます
テキストデータの前処理
1 **非テキストデータを削除します**わかるように、多くの爬虫類は、データを取得した「\のXA0は」非テキストデータが似ていますが、無意味なデータ干渉の数は、「コメントを隠す」の最後として、があります
data['cus_comment'][5]
'甜品 一直 是 我 的 心头肉 既然 来 了 广州 不吃 甜品 是 不会 罢休 的 可惜 还有 好几家 没有 办法 前往 南信 牛奶 甜品 专家 是 非常 火 的 甜品店 一 万多条 的 评论 就 能 看出 之 火爆 到 店 是 中午 点 左右 基本 是 爆满 还好 三楼 的 时候 刚好 有 一桌 起来 了 不然 还 真要 站 着 等 一会 先点 单 付钱 入座 等待 红豆 双皮奶 元份 等待 时 长 大概 分钟 食客 实在 太多 了 可 选择 冰热 夏天 当然 要 吃 冰 的 吃 的 有点 小 恶心 又'
#除去非文本数据和无意义文本
data['cus_comment'] = data['cus_comment'].str.replace(r'[^\u4e00-\u9fa5]','').str.replace('收起评论','')
2 **中国語の単語:**中国語テキストデータ処理、シンプルで使いやすい、我々はjiebaライブラリを使用しない中国語の単語を残しますか。ここでは、文字列領域のワードプロセッシングセグメントとしてテキスト文字列を持っています
#中文分词
import jieba
import importlib
import sys
importlib.reload(sys)
data['cus_comment'] = data['cus_comment'].astype(str).apply(lambda x:' '.join(jieba.cut(x)))
data['cus_comment'].head()
0 南信 算是 广州 著名 甜品店 吧 好几个 时间段 路过 都 是 座无虚席 看着 餐单 上 ...
1 中午 吃 完 了 所谓 的 早茶 回去 放下 行李 休息 了 会 就 来 吃 下午茶 了 服...
2 冲刺 王者 战队 吃遍 蓉城 战队 有 特权 五月份 和 好 朋友 毕业 旅行 来 了 广州...
3 都 说来 广州 吃 糖水 就要 来南信 招牌 姜撞奶 红豆 双皮奶 牛 三星 云吞面 一楼 ...
4 一直 很 期待 也 最 爱 吃 甜品 广州 的 甜品 很 丰富 很 多样 来 之前 就 一直...
Name: cus_comment, dtype: object
3 **ストップワードを削除します**テキスト、wordcloudので、我々は、テキストの解析時に紹介したいと思いますので、削除する必要はありませんいくつかの句読点は、そこにある「そこに、このような「」など、多くの有効な言葉は、ある」とそして、TF-IDFは、ストップワードをサポートしていますので、余分に対処していません
ワードクラウドショー
from wordcloud import WordCloud, STOPWORDS #导入模块worldcloud
from PIL import Image #导入模块PIL(Python Imaging Library)图像处理库
import numpy as np #导入模块numpy,多维数组
import matplotlib.pyplot as plt #导入模块matplotlib,作图
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']#作图的中文
matplotlib.rcParams['font.serif'] = ['KaiTi']#作图的中文
infile = open("stopwords.txt",encoding='utf-8')
stopwords_lst = infile.readlines()
STOPWORDS = [x.strip() for x in stopwords_lst]
stopwords = set(STOPWORDS) #设置停用词
def ciyun(shop_ID='all'):
texts = data['cus_comment']
if shop_ID == 'all':
text = ' '.join(texts)
else:
text = ' '.join(texts[data['shopID']==shop_ID])
wc = WordCloud(font_path="msyh.ttc",background_color = 'white',max_words = 100,stopwords = stopwords,
max_font_size = 80,random_state =42,margin=3) #配置词云参数
wc.generate(text) #生成词云
plt.imshow(wc,interpolation="bilinear")#作图
plt.axis("off") #不显示坐标轴
data['shopID'].unique()
array(['518986', '520004', '1893229', '520356', '3456244', '3179845',
'2447053', '521698'], dtype=object)
ciyun('520004')
#导出数据
data.to_csv('data.csv',index=False)