大数据测试4

5.6 how

5.6.1 原创 VS 改编占比(饼图)

 

在查看属性列并没有发现有“改编“这一列一时间不知道如何分辨是否是改编。

但是百度以后发现keywords这一属性列中有based on代表是改编。于是问题解决了:

    clean_tmdb_5000_movies = "static/data/clean_df_tmdb_5000_movies.csv"

    # 显示所有列

    pd.set_option('display.max_columns', None)

    # 显示所有行

    pd.set_option('display.max_rows', None)

    # 显示宽度

    pd.set_option('display.width', None)

    clean_df_tmdb_5000_movies = pd.read_csv(clean_tmdb_5000_movies)

    # 创建数据框

    original_df = pd.DataFrame()

    original_df['keywords'] =clean_df_tmdb_5000_movies['keywords'].str.contains('based on').map(lambda x: 1 if x else 0)

    #print(clean_df_tmdb_5000_movies['keywords'].str.contains('based on').map(lambda x: 1 if x else 0))

    #contains判断是否有子字符串,返回布尔类型,后面的map是将布尔类型转换为1,0表示

    original_df['profit'] = clean_df_tmdb_5000_movies['revenue']#收入

    original_df['budget'] = clean_df_tmdb_5000_movies['budget']#预算

 

    # 计算

    novel_cnt = original_df['keywords'].sum()  # 改编作品数量

    original_cnt = original_df['keywords'].count() - original_df['keywords'].sum()  # 原创作品数量

    # 按照 是否原创 分组

    original_df = original_df.groupby('keywords', as_index=False).mean()  # 注意此处计算的是利润和预算的平均值

    # 增加计数列

    original_df['count'] = [original_cnt, novel_cnt]

    #print(original_df)

    # 计算利润率

    original_df['profit_rate'] = (original_df['profit'] / original_df['budget']) * 100

 

    # 修改index

    original_df.index = ['original', 'based_on_novel']

    # 计算百分比

    original_pie = original_df['count'] / original_df['count'].sum()

 

    # 绘制饼图

    original_pie.plot(kind='pie', label='', startangle=90, shadow=False, autopct='%2.1f%%', figsize=(8, 8))

    plt.title('Original VS Adaptation', fontsize=20)

    plt.legend(loc=2, fontsize=10)

    plt.savefig('改编VS原创.png', dpi=300)

    plt.show()

5.6.2 原创 VS 改编预算/利润率(组合图)

 

x = original_df.index

    y1 = original_df.budget

    y2 = original_df.profit_rate

 

    fig = plt.figure(figsize=(8, 6))

 

    # 左轴

    ax1 = fig.add_subplot(1, 1, 1)

    plt.bar(x, y1, color='b', label='Average budget', width=0.25)

    plt.xticks(rotation=0, fontsize=12)  # 更改横坐标轴名称

    ax1.set_xlabel('Original VS Adaptation')  # 设置x轴label ,y轴label

    ax1.set_ylabel('Average budget', fontsize=16)

    ax1.legend(loc=2, fontsize=10)

 

    # 右轴

    # 共享x轴,生成次坐标轴

    ax2 = ax1.twinx()

    ax2.plot(x, y2, 'ro-.', linewidth=5, label='Average profit margin')

    ax2.set_ylabel('Average profit margin', fontsize=16)

    ax2.legend(loc=1, fontsize=10)  # loc=1,2,3,4分别表示四个角,和四象限顺序一致

 

    # 将利润率坐标轴以百分比格式显示

    import matplotlib.ticker as mtick

    fmt = '%.1f%%'

    yticks = mtick.FormatStrFormatter(fmt)

    ax2.yaxis.set_major_formatter(yticks)

 

    plt.savefig('改编VS原创的预算以及利润率.png', dpi=300)

plt.show()

posted @ 2021-12-11 13:14  风吹过半夏  阅读(45)  评论(0编辑  收藏  举报