可视化分析三

可视化分析三

一.今日内容

1、 编程,在一个折线图中,画出影片ABC各自的周票房(文件中的所有涉及地区总周票房)收入变化,要求将输出的折线图保存成图像文件ans0303.jpg,程序源代码保存成ans0303.pyY轴表示票房收入,单位为“万元”;X轴表示时间,以“0123…n”的非负整数作为刻度值,单位为“周”,要求:

1) 折线图中含图例;

2) 三部电影用不同的颜色和线型表达;

3) 将电影A第一周的票房收入,电影B第二周的票房收入,电影C第三周的票房收入顺序存入ans0304.dat文件中,注意ans0303.dat只包含3个浮点型票房数据,以万元为单位,保留6位小数,数据以英文逗号分隔,不换行,文件样例如下:

23.123456,20.654321,18.123456

4) 对本题周票房的说明如下:若某部电影从某月2日开始上映,则从当月2日到8日为其第一周票房,9日至15日为其第2周票房,以此类推。

二.内容源码

import pandas as pd
import numpy as np
import datetime,sys
import matplotlib.pyplot as plt

csv_file = pd.read_csv(r"C:UsersliuDesktopargfilm_log3.csv",sep=';',header=None)
csv_file.fillna(0,inplace=True)
csv_file = csv_file.drop_duplicates()
def get_movie(str):
    return csv_file[csv_file[0].isin([str])]
def real_data(movie_name):
    data = get_movie(movie_name)
    index = np.arange(data.index.size)
    return data.set_index(index)
def get_dt(data):
    start_time = datetime.datetime.strptime(data[1][0], '%Y.%m.%d')
    end_time = datetime.datetime.strptime(data[2][0], '%Y.%m.%d')
    c_days = (end_time - start_time).days + 1
    return c_days
def a_week_total(data,days):
    total = data[7].str.replace('票房(万)','').astype(float).sum()
    return total
def main(name):
    data = real_data(name)
    days = get_dt(data)
    total = a_week_total(data,days)
    week = divmod(days,7)
    a_day = total / days
    total_weeks = [float('%.6f'%(a_day*7)) for i in range(week[0])]
    total_weeks.append(float('%.6f'%(a_day * week[1])))
    return total_weeks
movie_a = main("《简单爱》")
movie_b = main("《少年班》")
movie_c = main( "《冲上云霄》")

l1, = plt.plot(np.arange(len(movie_a)),movie_a,'r')
l2, = plt.plot(np.arange(len(movie_b)),movie_b,'g')
l3, = plt.plot(np.arange(len(movie_c)),movie_c,'b')
plt.ylabel('周平均票房(万元)')
plt.xlabel('')
plt.legend([l1,l2,l3],['《简单爱》',"《少年班》" ,"《冲上云霄》"],loc=0)
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False   #这两行需要手动设置
plt.savefig('ans0303.jpg')
plt.show()
f = open('ans0303.dat','w')
f.write('%f,%f,%f'%(movie_a[0],movie_b[1],movie_c[2]))
f.close()

 

 

三.遇到问题

  1. 折线图的画法
  2. 各个电影数据的获取以及数据分析等

四.解决方案

折线图可以根据matplotlib中的简单例子来进行模拟,关键是里边的各个参数所代表的含义

原文地址:https://www.cnblogs.com/ningl666/p/13418876.html