数据分析及可视化

本报告将对商户、用户和评论数据进行深入分析,并利用Python进行可视化呈现,帮助您全面了解用户的行为和喜好,并为商户提供精准的运营策略建议。

一、商户分析

  1. 找出美国最常见商户(前20)
  2. 找出美国商户最多的前10个城市
  3. 找出美国商户最多的前5个州
  4. 找出美国最常见商户,并显示平均评分(前20)
  5. 统计评分最高的城市(前10)
  6. 统计category的数量
  7. 统计最多的category及数量(前10)
  8. 收获五星评论最多的商户(前20)
  9. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅类型及数量
  10. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评论数量
  11. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评分分布

餐厅的category为:Restaurants

不同菜系的category分别为:American、Mexican、Italian、Japanese、Chinese、ThaiMediterranean、French、Vietnamese、Greek,Indian、Korean HawaiianAfricanSpanish Middle eastern

二、用户分析

  1. 分析每年加入的用户数量

  2. 统计评论达人(review_count)

  3. 统计人气最高的用户(fans)

  4. 统计每年优质用户,普通用户比例

  5. 显示每年总用户数、沉默用户数(未写评论)的比例

  6. 统计出每年的新用户数、评论数、精英用户、tip数、打卡数

    a. 列出结果表格 b. 列出结果折线图 c. 阐述你对结果的洞察分析 d. 执行时间

三、评论分析

  1. 统计每年的评论数
  2. 统计有用(helpful)、有趣(funny)及酷(cool)的评论及数量
  3. 每年全部评论用户排行榜
  4. 从评论中提取最常见的Top20词语
  5. 提取全部评论,通过词性过滤,并完成词云分析(WordCloud)
  6. 计算单词的关系图(譬如chinesesteak等单词)

四、评分分析

  1. 统计评分的分布情况(1-5分)
  2. 统计评分周(周一~周天)次数统计
  3. 统计拥有次数最多的5分评价的商家

五、打卡分析

  1. 统计每年的打卡次数
  2. 统计24小时每小时打卡次数
  3. 统计最喜欢打卡的城市
  4. 全部商家的打卡排行榜

六、综合分析

  1. 每个城市最好(评分次数、评分、打卡数)的五家商家

Python可视化代码示例

以下是使用Python进行可视化的示例代码:

商户分析

  1. 找出美国最常见商户(前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()
  1. 找出美国商户最多的前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()
  1. 找出美国商户最多的前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()
  1. 找出美国最常见商户,并显示平均评分(前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()
  1. 统计评分最高的城市(前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()
  1. 统计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()
  1. 统计最多的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()
  1. 收获五星评论最多的商户(前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()
  1. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅类型及数量
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()
  1. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评论数量
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()
  1. 统计不同类型('中国菜'、'美式'、'墨西哥')的餐厅的评分分布
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()

用户分析

  1. 分析每年加入的用户数量
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()
  1. 统计评论达人(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()
  1. 统计人气最高的用户(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()
  1. 统计每年优质用户,普通用户比例
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()
  1. 显示每年总用户数、沉默用户数(未写评论)的比例
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()
  1. 统计出每年的新用户数、评论数、精英用户、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)

评论分析

  1. 统计每年的评论数
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()
  1. 统计有用(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()
  1. 每年全部评论用户排行榜
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()
  1. 从评论中提取最常见的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()
  1. 提取全部评论,通过词性过滤,并完成词云分析(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()
  1. 计算单词的关系图(譬如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. 统计评分的分布情况(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()
  1. 统计评分周(周一~周天)次数统计
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()
  1. 统计拥有次数最多的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()

打卡分析

  1. 统计每年的打卡次数
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()
  1. 统计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()
  1. 统计最喜欢打卡的城市
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()
  1. 全部商家的打卡排行榜
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()

综合分析

  1. 每个城市最好(评分次数、评分、打卡数)的五家商家
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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录