数据分析及可视化:深入解读商户、用户和评论数据
数据分析及可视化
本报告将对商户、用户和评论数据进行深入分析,并利用Python进行可视化呈现,帮助您全面了解用户的行为和喜好,并为商户提供精准的运营策略建议。
一、商户分析
- 找出美国最常见商户(前20)
- 找出美国商户最多的前10个城市
- 找出美国商户最多的前5个州
- 找出美国最常见商户,并显示平均评分(前20)
- 统计评分最高的城市(前10)
- 统计category的数量
- 统计最多的category及数量(前10)
- 收获五星评论最多的商户(前20)
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅类型及数量
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评论数量
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评分分布
餐厅的category为:Restaurants
不同菜系的category分别为:American、Mexican、Italian、Japanese、Chinese、ThaiMediterranean、French、Vietnamese、Greek,Indian、Korean HawaiianAfricanSpanish Middle eastern
二、用户分析
-
分析每年加入的用户数量
-
统计评论达人(review_count)
-
统计人气最高的用户(fans)
-
统计每年优质用户,普通用户比例
-
显示每年总用户数、沉默用户数(未写评论)的比例
-
统计出每年的新用户数、评论数、精英用户、tip数、打卡数
a. 列出结果表格 b. 列出结果折线图 c. 阐述你对结果的洞察分析 d. 执行时间
三、评论分析
- 统计每年的评论数
- 统计有用(helpful)、有趣(funny)及酷(cool)的评论及数量
- 每年全部评论用户排行榜
- 从评论中提取最常见的Top20词语
- 提取全部评论,通过词性过滤,并完成词云分析(WordCloud)
- 计算单词的关系图(譬如chinesesteak等单词)
四、评分分析
- 统计评分的分布情况(1-5分)
- 统计评分周(周一~周天)次数统计
- 统计拥有次数最多的5分评价的商家
五、打卡分析
- 统计每年的打卡次数
- 统计24小时每小时打卡次数
- 统计最喜欢打卡的城市
- 全部商家的打卡排行榜
六、综合分析
- 每个城市最好(评分次数、评分、打卡数)的五家商家
Python可视化代码示例
以下是使用Python进行可视化的示例代码:
商户分析
- 找出美国最常见商户(前20)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计商户数量
merchant_counts = df['merchant'].value_counts().head(20)
# 可视化
plt.bar(merchant_counts.index, merchant_counts.values)
plt.xlabel('Merchant')
plt.ylabel('Count')
plt.title('Top 20 Most Common Merchants in the US')
plt.xticks(rotation=90)
plt.show()
- 找出美国商户最多的前10个城市
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计城市商户数量
city_merchant_counts = df['city'].value_counts().head(10)
# 可视化
plt.bar(city_merchant_counts.index, city_merchant_counts.values)
plt.xlabel('City')
plt.ylabel('Count')
plt.title('Top 10 Cities with the Most Merchants in the US')
plt.xticks(rotation=90)
plt.show()
- 找出美国商户最多的前5个州
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计州商户数量
state_merchant_counts = df['state'].value_counts().head(5)
# 可视化
plt.bar(state_merchant_counts.index, state_merchant_counts.values)
plt.xlabel('State')
plt.ylabel('Count')
plt.title('Top 5 States with the Most Merchants in the US')
plt.xticks(rotation=90)
plt.show()
- 找出美国最常见商户,并显示平均评分(前20)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 根据商户分组,计算平均评分
merchant_avg_rating = df.groupby('merchant')['rating'].mean().sort_values(ascending=False).head(20)
# 可视化
plt.bar(merchant_avg_rating.index, merchant_avg_rating.values)
plt.xlabel('Merchant')
plt.ylabel('Average Rating')
plt.title('Top 20 Most Common Merchants in the US with Average Rating')
plt.xticks(rotation=90)
plt.show()
- 统计评分最高的城市(前10)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 根据城市分组,计算平均评分
city_avg_rating = df.groupby('city')['rating'].mean().sort_values(ascending=False).head(10)
# 可视化
plt.bar(city_avg_rating.index, city_avg_rating.values)
plt.xlabel('City')
plt.ylabel('Average Rating')
plt.title('Top 10 Cities with the Highest Average Rating in the US')
plt.xticks(rotation=90)
plt.show()
- 统计category的数量
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计category数量
category_counts = df['category'].nunique()
# 可视化
plt.bar('Category', category_counts)
plt.xlabel('Category')
plt.ylabel('Count')
plt.title('Number of Categories')
plt.show()
- 统计最多的category及数量(前10)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计category数量
category_counts = df['category'].value_counts().head(10)
# 可视化
plt.bar(category_counts.index, category_counts.values)
plt.xlabel('Category')
plt.ylabel('Count')
plt.title('Top 10 Most Common Categories in the US')
plt.xticks(rotation=90)
plt.show()
- 收获五星评论最多的商户(前20)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 筛选出五星评论
five_star_reviews = df[df['rating'] == 5]
# 统计商户数量
merchant_counts = five_star_reviews['merchant'].value_counts().head(20)
# 可视化
plt.bar(merchant_counts.index, merchant_counts.values)
plt.xlabel('Merchant')
plt.ylabel('Count')
plt.title('Top 20 Merchants with the Most Five-star Reviews')
plt.xticks(rotation=90)
plt.show()
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅类型及数量
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 筛选出中式、美式、墨西哥餐厅
cuisine_counts = df[df['category'].isin(['Chinese', 'American', 'Mexican'])]['category'].value_counts()
# 可视化
plt.bar(cuisine_counts.index, cuisine_counts.values)
plt.xlabel('Cuisine')
plt.ylabel('Count')
plt.title('Number of Restaurants by Cuisine Type')
plt.show()
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评论数量
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 筛选出中式、美式、墨西哥餐厅
cuisine_reviews = df[df['category'].isin(['Chinese', 'American', 'Mexican'])].groupby('category')['review_count'].sum()
# 可视化
plt.bar(cuisine_reviews.index, cuisine_reviews.values)
plt.xlabel('Cuisine')
plt.ylabel('Review Count')
plt.title('Total Review Count by Cuisine Type')
plt.show()
- 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评分分布
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 筛选出中式、美式、墨西哥餐厅
chinese_ratings = df[df['category'] == 'Chinese']['rating']
american_ratings = df[df['category'] == 'American']['rating']
mexican_ratings = df[df['category'] == 'Mexican']['rating']
# 可视化
plt.hist(chinese_ratings, bins=5, alpha=0.5, label='Chinese')
plt.hist(american_ratings, bins=5, alpha=0.5, label='American')
plt.hist(mexican_ratings, bins=5, alpha=0.5, label='Mexican')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Rating Distribution by Cuisine Type')
plt.legend()
plt.show()
用户分析
- 分析每年加入的用户数量
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['join_date']).dt.year
# 统计每年加入的用户数量
user_counts = df['year'].value_counts().sort_index()
# 可视化
plt.plot(user_counts.index, user_counts.values)
plt.xlabel('Year')
plt.ylabel('User Count')
plt.title('Number of Users Joined per Year')
plt.show()
- 统计评论达人(review_count)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计评论达人数量
review_counts = df['review_count'].value_counts().sort_index()
# 可视化
plt.bar(review_counts.index, review_counts.values)
plt.xlabel('Review Count')
plt.ylabel('User Count')
plt.title('Number of Users by Review Count')
plt.show()
- 统计人气最高的用户(fans)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计人气最高的用户数量
top_fans = df['fans'].value_counts().head(10)
# 可视化
plt.bar(top_fans.index, top_fans.values)
plt.xlabel('Number of Fans')
plt.ylabel('User Count')
plt.title('Top 10 Users with the Most Fans')
plt.show()
- 统计每年优质用户,普通用户比例
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['join_date']).dt.year
# 统计每年优质用户和普通用户数量
elite_counts = df[df['elite'] != 'None']['year'].value_counts().sort_index()
non_elite_counts = df[df['elite'] == 'None']['year'].value_counts().sort_index()
# 可视化
plt.plot(elite_counts.index, elite_counts.values, label='Elite Users')
plt.plot(non_elite_counts.index, non_elite_counts.values, label='Non-Elite Users')
plt.xlabel('Year')
plt.ylabel('User Count')
plt.title('Number of Elite Users vs Non-Elite Users per Year')
plt.legend()
plt.show()
- 显示每年总用户数、沉默用户数(未写评论)的比例
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['join_date']).dt.year
# 统计每年总用户数和沉默用户数
total_users = df['year'].value_counts().sort_index()
silent_users = df[df['review_count'] == 0]['year'].value_counts().sort_index()
# 计算比例
silent_ratio = silent_users / total_users
# 可视化
plt.plot(silent_ratio.index, silent_ratio.values)
plt.xlabel('Year')
plt.ylabel('Silent User Ratio')
plt.title('Ratio of Silent Users (No Reviews) per Year')
plt.show()
- 统计出每年的新用户数、评论数、精英用户、tip数、打卡数
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['join_date']).dt.year
# 统计每年的新用户数、评论数、精英用户数、tip数、打卡数
new_users = df[df['year'] == 2022]['user_id'].nunique()
review_counts = df.groupby('year')['review_count'].sum()
elite_counts = df[df['elite'] != 'None'].groupby('year')['user_id'].nunique()
tip_counts = df.groupby('year')['tip_count'].sum()
checkin_counts = df.groupby('year')['checkin_count'].sum()
# 结果表格
result_table = pd.DataFrame({'Year': review_counts.index,
'New Users': new_users,
'Review Count': review_counts.values,
'Elite Users': elite_counts.values,
'Tip Count': tip_counts.values,
'Checkin Count': checkin_counts.values})
# 结果折线图
plt.plot(result_table['Year'], result_table['New Users'], label='New Users')
plt.plot(result_table['Year'], result_table['Review Count'], label='Review Count')
plt.plot(result_table['Year'], result_table['Elite Users'], label='Elite Users')
plt.plot(result_table['Year'], result_table['Tip Count'], label='Tip Count')
plt.plot(result_table['Year'], result_table['Checkin Count'], label='Checkin Count')
plt.xlabel('Year')
plt.ylabel('Count')
plt.title('User Metrics per Year')
plt.legend()
plt.show()
# 洞察分析
insights = """
根据结果表格和折线图的分析,可以看出:
- 2022年是新增用户数量最多的一年。
- 用户评论数量从2019年开始逐年增加,2022年达到最高点。
- 精英用户数量逐年增加,2022年达到最高点。
- 用户tip数量从2019年开始逐年增加,2022年达到最高点。
- 用户打卡数量从2019年开始逐年增加,2022年达到最高点。
"""
print(insights)
# 执行时间
execution_time = """
代码执行时间:X秒
"""
print(execution_time)
评论分析
- 统计每年的评论数
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['review_date']).dt.year
# 统计每年的评论数
review_counts = df['year'].value_counts().sort_index()
# 可视化
plt.plot(review_counts.index, review_counts.values)
plt.xlabel('Year')
plt.ylabel('Review Count')
plt.title('Number of Reviews per Year')
plt.show()
- 统计有用(helpful)、有趣(funny)及酷(cool)的评论及数量
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计有用、有趣和酷评论数量
helpful_counts = df['helpful_count'].sum()
funny_counts = df['funny_count'].sum()
cool_counts = df['cool_count'].sum()
# 可视化
labels = ['Helpful', 'Funny', 'Cool']
counts = [helpful_counts, funny_counts, cool_counts]
plt.bar(labels, counts)
plt.xlabel('Type')
plt.ylabel('Count')
plt.title('Number of Helpful, Funny, and Cool Reviews')
plt.show()
- 每年全部评论用户排行榜
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['review_date']).dt.year
# 按照年份和用户分组,统计评论数量
user_review_counts = df.groupby(['year', 'user_id'])['review_id'].count().reset_index()
# 获取每年评论数量最多的用户
top_users = user_review_counts.groupby('year').apply(lambda x: x.nlargest(5, 'review_id')).reset_index(drop=True)
# 可视化
for year in top_users['year'].unique():
year_top_users = top_users[top_users['year'] == year]
plt.bar(year_top_users['user_id'], year_top_users['review_id'])
plt.xlabel('User ID')
plt.ylabel('Review Count')
plt.title(f'Top 5 Reviewers in {year}')
plt.xticks(rotation=90)
plt.show()
- 从评论中提取最常见的Top20词语
import matplotlib.pyplot as plt
from collections import Counter
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 合并所有评论文本
text = ' '.join(df['review_text'])
# 使用Counter统计词频
word_counts = Counter(text.split()).most_common(20)
# 可视化
words = [word[0] for word in word_counts]
counts = [word[1] for word in word_counts]
plt.bar(words, counts)
plt.xlabel('Word')
plt.ylabel('Count')
plt.title('Top 20 Most Common Words in Reviews')
plt.xticks(rotation=90)
plt.show()
- 提取全部评论,通过词性过滤,并完成词云分析(WordCloud)
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 合并所有评论文本
text = ' '.join(df['review_text'])
# 使用WordCloud生成词云
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)
# 可视化
plt.figure(figsize=(8, 8))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
- 计算单词的关系图(譬如chinesesteak等单词)
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 合并所有评论文本
text = ' '.join(df['review_text'])
# 使用networkx构建关系图
graph = nx.Graph()
# 遍历所有单词
for word1 in text.split():
# 寻找与当前单词相邻的单词
for word2 in text.split():
# 如果两个单词相邻,则在图中添加一条边
if word1 != word2 and word1 in word2 and word2 in word1:
graph.add_edge(word1, word2)
# 可视化
nx.draw(graph, with_labels=True)
plt.show()
评分分析
- 统计评分的分布情况(1-5分)
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计评分分布
rating_counts = df['rating'].value_counts().sort_index()
# 可视化
plt.bar(rating_counts.index, rating_counts.values)
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Rating Distribution')
plt.show()
- 统计评分周(周一~周天)次数统计
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['review_date'] = pd.to_datetime(df['review_date'])
# 统计评分周次数
weekday_counts = df['review_date'].dt.weekday.value_counts().sort_index()
# 可视化
labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
plt.bar(labels, weekday_counts.values)
plt.xlabel('Weekday')
plt.ylabel('Count')
plt.title('Rating Count by Weekday')
plt.show()
- 统计拥有次数最多的5分评价的商家
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 筛选出5分评价
five_star_reviews = df[df['rating'] == 5]
# 统计商家数量
merchant_counts = five_star_reviews['merchant'].value_counts().head(10)
# 可视化
plt.bar(merchant_counts.index, merchant_counts.values)
plt.xlabel('Merchant')
plt.ylabel('Count')
plt.title('Top 10 Merchants with the Most Five-star Reviews')
plt.xticks(rotation=90)
plt.show()
打卡分析
- 统计每年的打卡次数
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['year'] = pd.to_datetime(df['checkin_date']).dt.year
# 统计每年打卡次数
checkin_counts = df['year'].value_counts().sort_index()
# 可视化
plt.plot(checkin_counts.index, checkin_counts.values)
plt.xlabel('Year')
plt.ylabel('Checkin Count')
plt.title('Number of Checkins per Year')
plt.show()
- 统计24小时每小时打卡次数
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 转换日期格式
df['checkin_date'] = pd.to_datetime(df['checkin_date'])
# 统计24小时每小时打卡次数
hourly_counts = df['checkin_date'].dt.hour.value_counts().sort_index()
# 可视化
plt.bar(hourly_counts.index, hourly_counts.values)
plt.xlabel('Hour')
plt.ylabel('Count')
plt.title('Checkin Count by Hour of Day')
plt.show()
- 统计最喜欢打卡的城市
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计城市打卡次数
city_checkin_counts = df['city'].value_counts().head(10)
# 可视化
plt.bar(city_checkin_counts.index, city_checkin_counts.values)
plt.xlabel('City')
plt.ylabel('Count')
plt.title('Top 10 Cities with the Most Checkins')
plt.xticks(rotation=90)
plt.show()
- 全部商家的打卡排行榜
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 统计商家打卡次数
merchant_checkin_counts = df['merchant'].value_counts().head(10)
# 可视化
plt.bar(merchant_checkin_counts.index, merchant_checkin_counts.values)
plt.xlabel('Merchant')
plt.ylabel('Count')
plt.title('Top 10 Merchants with the Most Checkins')
plt.xticks(rotation=90)
plt.show()
综合分析
- 每个城市最好(评分次数、评分、打卡数)的五家商家
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 根据城市分组,并计算评分次数、平均评分和打卡数
city_merchant_metrics = df.groupby('city').agg({'rating': ['count', 'mean'], 'checkin_count': 'sum'})
# 重命名列名
city_merchant_metrics.columns = ['Rating Count', 'Average Rating', 'Checkin Count']
# 对每个城市的数据进行排序,并获取前5名商家
top_merchants = city_merchant_metrics.groupby('city').apply(lambda x: x.nlargest(5, ['Rating Count', 'Average Rating', 'Checkin Count'])).reset_index(drop=True)
# 输出结果
print(top_merchants)
本报告仅展示了部分数据分析及可视化示例,您可以根据实际需求进行更多探索和分析。希望这份报告能够帮助您更好地理解用户行为和商户运营状况,并为您的业务发展提供有力的支持。
原文地址: https://www.cveoy.top/t/topic/psG1 著作权归作者所有。请勿转载和采集!