• 大数据测试2


    5 数据分析

    5.1 why 想要探索影响票房的因素,从电影市场趋势,观众喜好类型,电影导演,发行时间,评分与 关键词等维度着手,给从业者提供合适的建议。

    5.2 what

    5.2.1 电影类型:定义一个集合,获取所有的电影类型

        clean_tmdb_5000_movies = "static/data/clean_df_tmdb_5000_movies.csv"

        # 电影分类

        # 统计分类列表

        clean_df_tmdb_5000_movies = pd.read_csv(clean_tmdb_5000_movies)

        temp_list = clean_df_tmdb_5000_movies["genres"].str.split(",").tolist()

        genre_list = list(set([i for j in temp_list for i in j]))

        # 构造全为0的数组

        zeros_df = pd.DataFrame(np.zeros((clean_df_tmdb_5000_movies.shape[0], len(genre_list))), columns=genre_list)

        print(zeros_df)

        # 给每个顶电影出现的位置赋值为1

        for i in range(clean_df_tmdb_5000_movies.shape[0]):

            # zeros_df.loc[0,["Sci-fi","Mucical"]]=1

            zeros_df.loc[i, temp_list[i]] = 1

     

        print(zeros_df.head(3))

        # 统计每个分类电影数量和

        genre_count = zeros_df.sum(axis=0)

        print(genre_count)

        # 排序

        genre_count = genre_count.sort_values()

        print(genre_count)

     

    注意到集合中存在多余的元素:空的单引号,所以需要去除。

    由于类型属性的值是"Action,Adventure,Fantasy,Science Fiction,"这种形式所以按逗号分割时会有空值,所以要去掉空值

        genre_count_clean=genre_count[:-1]

        print(genre_count_clean)

     

    5.2.1.1 电影类型数量(绘制条形图)

     

    _x=genre_count_clean.index

        _y=genre_count_clean.values

        # 设置图形的大小

        plt.figure(figsize=(20,8),dpi=80)

        plt.bar(range(len(_x)),_y)

        plt.xticks(range(len(_x)),_x)

    plt.show()

    5.2.1.2 电影类型占比(绘制饼图)

     

        #饼状图

        labels =genre_count_clean.index

        sizes =genre_count_clean.values

        explode = (0, 0.1, 0, 0)  # 0.1表示将Hogs那一块凸显出来

        plt.pie(sizes,labels=labels, autopct='%1.1f%%', shadow=False,startangle=90)  # startangle表示饼图的起始角度

        plt.axis('equal')  # 加入这行代码即可!

    plt.show()

    5.2.1.3 电影类型变化趋势(绘制折线图)

     

        #折线图

        plt.figure(figsize=(20, 8), dpi=80)

        plt.plot(range(len(_x)), _y)

        plt.xticks(range(len(_x)), _x)

    plt.show()

    5.2.1.4 不同电影类型预算/利润(绘制组合图)

    Budget预算revenue收入

     

    先获取各类型的预算与收入

        #budget预算revenue收入

        clean_tmdb_5000_movies = "static/data/clean_df_tmdb_5000_movies.csv"

        # 电影分类

        # 统计分类列表

        clean_df_tmdb_5000_movies = pd.read_csv(clean_tmdb_5000_movies)

        genre_count_clean=plot_bar_bin()

        _type=genre_count_clean.index

        budget_list=[]#预算

        budget_list=create_0()#初始值设为0

        revenue_list=[]#收入

        revenue_list=create_0()

        num=clean_df_tmdb_5000_movies.shape[0]#电影数目

        print(len(_type))

        for i in range(len(_type)):

            for j in range(num):

                if(_type[i] in clean_df_tmdb_5000_movies["genres"][j]):

                    budget_list[i]=budget_list[i]+clean_df_tmdb_5000_movies["budget"][j]

                    revenue_list[i]=revenue_list[i]+clean_df_tmdb_5000_movies["revenue"][j]

        print(budget_list)

    print(revenue_list)

    在绘制组合图

        _x = genre_count_clean.index

        _y_budget = budget_list

        _y_revenue = revenue_list

        # 设置图形的大小

        # 直方图

        plt.figure(figsize=(20, 8), dpi=80)

        plt.bar(range(len(_x)), _y_budget)

        plt.plot(range(len(_x)), _y_revenue)

        plt.xticks(range(len(_x)), _x)

    plt.show()

    5.2.2 电影关键词(keywords 关键词分析,绘制词云图)

     

    # budget预算revenue收入

        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)

        num=clean_df_tmdb_5000_movies.shape[0]

        text=""

        for i in range(num):

            try:

                text=text+clean_df_tmdb_5000_movies["keywords"][i]

            except:

                print("NaN")

        # os.path.join()函数: 连接两个或者更多的路径名组件

        # 加入(encoding='gb18030', errors='ignore')是为了防止出现解码错误,是可以省略的,但省略后如出现错误,可查阅“参考文献[1]”

        wc = WordCloud(scale=1, max_font_size=100)

        # 词云参数设置

        wc.generate(text)

        # genarate  v.生成;   Python中称为使用生成器

        plt.imshow(wc, interpolation='bilinear')

        # 显示图像

        # bilinear  adj.双直线的;双线性的;双一次性的;

        plt.axis('off')

        # 隐藏坐标轴

        plt.tight_layout()

        # tight_layout会自动调整子图参数,使之填充整个图像区域。

        # tight adj. 紧的;紧身的;挤满的;layout n.排版;布局;设计

        plt.savefig('tu1.png', dpi=300)

        # 保存词云图,分辨率为300,也可以用 wc.to_file('1900_basic.png')

        plt.show()

        # plt.imshow()函数负责对图像进行处理,并显示其格式

    # plt.show()则是将plt.imshow()处理后的函数显示出来。

    5.3 when

    查看 runtime 的类型,发现是 object 类型,也就是字符串,所以,先进行数据转化。

     

        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)

    print( clean_df_tmdb_5000_movies["runtime"])

    5.3.1 电影时长(绘制电影时长直方图)

     

        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)

        # 准备数据

        runtime_data = clean_df_tmdb_5000_movies["runtime"].tolist()

        runtime_data.sort()

        _y_count=[]

        for i in range(len(set(runtime_data))):

            _y_count.append(0)

        flag=0

        for i in set(runtime_data):

            _y_count[flag]=runtime_data.count(i)

            flag=flag+1

        _x = set(runtime_data)

        print(_x)

        print(_y_count)

        # 设置图形的大小

        # 直方图

        plt.figure(figsize=(20, 8), dpi=80)

        plt.bar(range(len(_x)), _y_count)

        plt.xticks(range(len(_x)), _x)

        x_major_locator = MultipleLocator(10)

        # 把x轴的刻度间隔设置为1,并存在变量里

        y_major_locator = MultipleLocator(10)

        # 把y轴的刻度间隔设置为10,并存在变量里

        ax = plt.gca()

        # ax为两条坐标轴的实例

        ax.xaxis.set_major_locator(x_major_locator)

        # 把x轴的主刻度设置为1的倍数

        ax.yaxis.set_major_locator(y_major_locator)

        # 把y轴的主刻度设置为10的倍数

    plt.show()

    5.3.2 发行时间(绘制每月电影数量和单片平均票房)

    Pass

  • 相关阅读:
    js es6遍历对象的6种方法
    MySQL、Redis、MongoDB网络抓包工具
    SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化(C#自带函数的3到4倍速度)。
    设置EntityFramework中decimal类型数据精度问题(EF默认将只会保留到2为精度)
    IIS资料
    RabbitMQ
    微信公众平台生成带场景参数二维码
    .net Core资料
    微信字体放大影响布局的处理
    VirtualBox虚拟机下安装Win10性能优化
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15671134.html
Copyright © 2020-2023  润新知