R中如何统计品牌出现次数并绘制按所有者分组的折线图
实现步骤及代码示例
1. 依赖库导入
使用pandas做数据处理,matplotlib做可视化即可实现需求:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter
2. 数据预处理
先将Period字段的字符串转成标准格式,同时生成要求的yearmon数字格式:
# 构造示例DataFrame data = { 'Brand': ['Adidas', 'Nike', 'Adidas', 'Nike', 'Puma', 'Joma', 'Adidas', 'Diadora'], 'owner': ['andy', 'diana', 'rose', 'sara', 'laura', 'harry', 'jon', 'keith'], 'Period': ['May 2018', 'June 2019', 'August 2019', 'July 2020', 'March 2020', 'April 2018', 'May 2018', 'June 2021'] } df = pd.DataFrame(data) # 转换Period为日期格式 df['Period_dt'] = pd.to_datetime(df['Period'], format='%B %Y') # 生成yearmon数字格式(如2018年5月=2018 + 5/12 ≈ 2018.4167) df['yearmon_num'] = df['Period_dt'].dt.year + df['Period_dt'].dt.month / 12
3. 聚合统计品牌出现次数
按owner、年月维度聚合统计品牌出现次数:
count_df = df.groupby(['owner', 'yearmon_num', 'Period_dt'], as_index=False)['Brand'].count() count_df.rename(columns={'Brand': 'brand_count'}, inplace=True)
4. 绘制折线图
方案1:使用yearmon数字格式作为x轴
plt.figure(figsize=(10,6)) # 按owner分组循环绘制折线 for owner, group in count_df.groupby('owner'): plt.plot(group['yearmon_num'], group['brand_count'], marker='o', label=owner) plt.xlabel('Year-Month (Numeric)') plt.ylabel('Brand Occurrence Count') plt.legend(title='Owner') plt.xticks(rotation=45) plt.tight_layout() plt.show()
方案2:优化x轴可读性(可选)
如果不需要严格使用数字x轴,可直接用日期格式做x轴,显示效果更直观:
plt.figure(figsize=(10,6)) for owner, group in count_df.groupby('owner'): plt.plot(group['Period_dt'], group['brand_count'], marker='o', label=owner) plt.xlabel('Year-Month') plt.ylabel('Brand Occurrence Count') plt.legend(title='Owner') # 格式化x轴日期显示为年-月格式 plt.gca().xaxis.set_major_formatter(DateFormatter('%Y-%m')) plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Hash Slasher
相关产品推荐
相关产品推荐

