电影数据简要统计与分析总结
1、数据采集的途径(pandas自带的csv文件读取,本地操作):
import pandas as pd
# 从文件read_csv中获取数据
film = pd.read_csv('film.csv',names=['date','filmname','BOR'])#列名需要通过列表的形式传入,另外sep分隔符默认指定为逗号
‘’‘Read_csv参数:https://blog.csdn.net/superbetterman/article/details/104753358/
https://blog.csdn.net/shanmou1782/article/details/90441391
https://www.cnblogs.com/datablog/p/6127000.html’
# 输出从文件中读取的部分结果
film.head()#返回的对象类型为pandas.core.frame.DataFrame
Date Filmname BOR
0 2010-05-09 唐山大地震 51315.0
1 2010-05-16 老男孩 1599.0
2 2010-05-23 剑雨 2224.0
3 2010-05-23 剑雨 NaN
4 2010-05-23 老男孩 1605.0
#DataFrame自带数据切分
film[0:2]#取的为第0行到第1行的数据,并且左闭右开
film['Date']/film[['Date','Filmname']]#通过列标签来获取列数据
#取行取列可以组合使用
#iloc方法的使用
.iloc[行索引位,[列索引位,列索引位....]]#第二个参数为可选参数,需要前面或者两者参数共同为列表时才能返回Dataframe
前者连接的方式可以是逗号、不加符号或者冒号,如果是冒号的话是左闭右开,前者需要加冒号表示列表类型,后者需要加列表来转换类型,并且连接的符号需要是逗号,或者不加
#例子
film.iloc[0:1]/film.iloc[1] #取行
film.iloc[:,[0,1]]#取所有行,取第一列以及第二列的数据
#loc方法使用
.loc[行标签,[列标签,列标签,列标签]]#第二个参数为可选参数,需要前面以及两者参数共同的基础上都为列表的时候才能返回Dataframe
前者连接的方式可以是逗号、不加符号或者冒号,如果是冒号的话是左闭右开,前者需要加冒号表示列表类型,后者需要加列表来转换类型,并且连接的符号需要是逗号,或者不加
film.loc[:,['Date','Filmname']]#取所有行,再取Date以及Filmname两列
film.loc[0:1]/film.loc[0]#取行
2、数据解析/数据预处理(通过pandas模块进行处理):1、数据检查 2、数据清洗 3、数据筛选
- 数据检查
- 数据清洗(阶段1)
#在原先数据采集的基础上进行操作
#nan指的意思是not a number的意思
film = film.dropna()#删除dateframe当中的含有空值的行
film = film.fillna(0)#将dateframe当中的空值换成0
film = film.drop_duplicates()#如果是不指明列名的情况下,将dateframe当中的重复行删除,如果需要指定列名以列表的形式传递参数
数据筛选
#如果想要筛选带有条件的dataframe,需要以列表的形式来加条件
film = film[film.film == '老男孩']筛选出filmname为老男孩的数据
film[‘date’] = pd.to_datetime(film[‘date’])#需要先对字符串进行格式转换
#括号保证运算级别,&保证是且运算
film3 = film[ (film[‘date’]> ‘2010-5-15’) & (film[‘date’] <= ‘2010-5-31’)]
3、数据分析(通过pandas分析)
- 通过描述统计的方法来反映数据集中趋势、离散程度、相关强度的具有外在代表性的指标(分组、聚合函数这类)。
#在原先数据采集的基础上进行操作
film.groupby(['filmname',as_index=False])['BOR'].sum()#as_index默认为True,它的作用对于聚合输出而言,决定索引是否以组标签的形式展现。
Filmname BOR
0 X战警-天启 1523815.0
1 剑雨 15669.0
2 唐山大地震 671379.0
3 老男孩 22382.0
4 让子弹飞 1176397.0
#https://www.cnblogs.com/Allen-rg/p/10546642.html 解释as_index的作用
https://blog.csdn.net/jiebutianxia/article/details/82216428#记录聚合函数的种类
#groupby()需要指明对象以及列表形式的列名,as_index则用来指明相应的行索引还是列索引
#聚合函数通过指定字段来进行运算其相关特征,sum()代表求和,median()代表中位数,mean*()代表平均值
- 在前者基础上,通过机器学习的方法来对数据进行预测、推断
4、数据可视化(通过Matplotlib来展示):数据可视化比较依赖于数据解析、数据分析的结果
#pandas 读取 Csv数据
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']#设置字体格式,防止显示不出
plt.rcParams['axes.unicode_minus'] = False#设置字符格式,防止显示不出来
film = pd.read_csv("film.csv",sep = ",",names = ['Date','Filmname','BOR'])
film = film.dropna()
film2 = film.groupby("Filmname",as_index=False)['BOR'].sum()
film2
plt.bar(film2['Filmname'],film2['BOR'],color='Green',width=0.4)
plt.title("各大电影票房统计")#设置标题
plt.xlabel("电影名称")#设置横坐标
plt.ylabel("票房")#设置纵作表
plt.legend(["电影票房收入"])#设置图例
for x,y in zip(film2['Filmname'],film2['BOR']):#
plt.text(x,y,'%.2f'%y,ha='center', va='bottom')#设置数据标签
plt.show()
#zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。