パブリックコメント探索的データ解析

探索的分析

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)

おすすめ

転載: blog.csdn.net/weixin_40903057/article/details/89705923