实验一 电影票房数据统计
# 导入包 import pandas as pd import numpy as np import warnings warnings.filterwarnings("ignore") #忽略告警 # 从从本地文件(film.csv)中读取电影原始数据,并输出前五行数据 film = pd.read_csv('film.csv',names=['date','filmname','BOR']) film.head() #查看数据有几行几列 film.shape # 一次性查看数据的特征、是否有缺失值、数据类型 film.info() #查看数据统计特征 film.describe() # 清洗掉缺失的数据,并查看新的数据集大小 film2 = film.dropna() film2.shape # 筛选电影名为老男孩的数据并输出 oldboy = film2[film2.filmname == '老男孩'] oldboy #获取放映时间,注意date的类型,需将其转换为“datetime”类型 film2['date'] = pd.to_datetime(film2['date']) film2['date'] # 筛选放映时间为5月后半个月的电影数据,并输出前五行 film_date = film2.loc[ (film2['date']> '2010-5-15') & (film2['date'] <= '2010-5-31')] film_date.head() # 名称为“老男孩”或“剑雨” 且 票房数据“>1600”的电影,并打印前5行数据 film_out = film2[(film2["filmname"].isin(['老男孩','剑雨'])) & (film2['BOR']> 1600)] film_out.head() # 根据电影名称统计后半月票房并输出结果 filmgrp_bor = film_date.groupby(['filmname'], as_index= False)['BOR'].sum() filmgrp_bor.head() # 统计每日的平均票房 filmgrp_bor2 = film2.groupby(['date'], as_index= False)['BOR'].mean() filmgrp_bor2 # 按日期和电影名称去除重复数据项 film_dis = film2.drop_duplicates(['date','filmname']) film_dis # 按日期统计电影部数 filmgrp_cnt = film_dis.groupby(['date'], as_index= False)['filmname'].count() filmgrp_cnt # 导入画图包 import matplotlib.pyplot as plt plt.ticklabel_format(axis="both", style="plain", scilimits=None) # 设置中文字体为SimHei,简黑字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决负号显示的问题 plt.rcParams['axes.unicode_minus'] = False # 画柱状图,x、y轴分别为电影名和票房,并设置每根柱子颜色为绿色,宽度为0.4 plt.bar(filmgrp_bor['filmname'],filmgrp_bor['BOR'], color = 'green', width = 0.4) # 设置标题 plt.title('5月后半月各影片票房',size=15) # 设置x、y轴的标题,x轴为电影名,y轴为票房 plt.xlabel('电影名称',size=15) plt.ylabel('票房收入\万元',size=15) plt.tick_params(labelsize=15) # 显示图像 plt.show() plt.ticklabel_format(axis="both", style="plain", scilimits=None) # 画柱状图,x、y轴分别为电影名和票房,并设置每根柱子颜色为蓝色 plt.barh(filmgrp_bor['filmname'],filmgrp_bor['BOR'], color = 'blue') # 设置标题 plt.title('5月后半月各影片票房',size=15) # 设置x、y轴的标题,x轴为电影名,y轴为票房 plt.xlabel('电影名称',size=15) plt.ylabel('票房收入\万元',size=15) plt.tick_params(labelsize=15) # 显示图像 plt.show()
知识点总结:
①pandas库中
read_csv():读取文件内容并生成DataFrame表格型数据结构
head():读取数据前五行信息;shape:查看数据几行几列
info():一次性查看数据的特征、是否有缺失值、数据类型
describe():查看数据统计特征
dropna():清洗缺失数据
to_datetime():将需要处理的日期转换为datetime类型
loc():通过行和列的名称或者标签来寻找需要的值
isin():判定某值是否存在数据集中
gruopby():根据一个或多个列的值将数据进行分组
gruopby() +聚合函数:对分组后的数据进行聚合操作运算
drop_duplicates():对特定列进行去重操作
②在matplotlib.pyplot 中
bar(x,y,color,width):设置柱状图X、Y轴展示的数据列值、颜色、宽度
barh():设置水平柱状图
title():设置头部标题
xlabel()、ylabel():设置X、Y标题
ticklabel_format(axis, style, scilimits) 1: 指定特定轴刻度标签格式化 2:指定标签格式 3:用于控制科学记数法中指数的范围
tick_params(labelsize):设置标签大小;show()展示数据可视化图形
实验二 泰坦尼克号数据特征工程
# 导入包 import numpy as np import pandas as pd import warnings warnings.filterwarnings("ignore") #忽略告警 # 从从本地文件(train.csv)中读取电影原始数据,并输出前五行数据 df = pd.read_csv('titanic.csv') df.head() # 查看每一行是否存在重复值 df.duplicated() # 查看整个数据集是否存在重复值 df.duplicated().any() #查看“Age" 和 "Cabin" 缺失值有多少 Missing_name = ['Age','Cabin'] df[Missing_name].isnull().sum() # 查看有多少人丧生,多少人获救 (查看样本标签正例和负例的数量) df.groupby("Survived").size() # 计算 age 列的均值 Age_mean = df['Age'].mean() Age_mean # 请使用上述均值填充Age 列的缺失值 df['Age'] = df['Age'].fillna(Age_mean) #对上船地点Embarked的空值采用众数填充 E = df['Embarked'].mode() df['Embarked'] = df['Embarked'].fillna("E") #重新检查AGE列/Embarked是否还存在缺失值 df.isnull().sum() # 对类别特征('Sex','Embarked')进行独热编码 dummies = pd.get_dummies(df[["Sex","Embarked"]]) dummies #将新生成的dummies列与原始数据join连接起来 df = df.join(dummies) #将无用的特征drop掉,生成新的数据集并显示前5行 feature_out = ['Name','Ticket','PassengerId','Cabin','Embarked','Sex'] df2 = df.drop(feature_out, axis = 1) #axis 默认为0,指删除行,删除列时则axis=1 df2.head() #使用MinMaxScaler做归一化,区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上 #对 Age 和 Fare进行归一化处理 from sklearn.preprocessing import MinMaxScaler fe = df2[[ 'Age', 'Fare']].values x_new = MinMaxScaler().fit_transform(fe) #将数据集划分为测试集和训练集 from sklearn.model_selection import train_test_split x=df2.drop('Survived',1) y=df2.Survived x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.3, random_state=0)# 划分数据集 #将处理好的数据保存到本地 df2.to_csv("new_titanic.csv",index=False)
duplicated():查看每一行是否存在重复值
duplicated().any():查看整个数据集是否存在重复值
isnull()、notnull():返回与原始数据形状相同的布尔对象
size():计算对象长度的函数,并返回对象中的元素数量;与 groupby() 函数结合使用时,会计算每个分组中的行数
mean():计算均值
mode():获取众数
drop():删除特征列
join():数据拼接
fillna():将所有 NaN 值替换为指定的值
get_dummies:独热编码,为每个唯一类别创建一个新列,并将相应行中的值设置为 1(如果原始列中的值等于该类别)或 0(否则)
train_test_split(x,y,test_size,random_state):将数据集划分为训练集和测试集;测试集占原始数据集的test_size%;控制数据划分时的随机种子
MinMaxScaler().fit_transform():对计算训练数据的最小值和最大值(即进行“拟合”),然后使用这些值将数据转换到[0, 1]的范围内(即进行“转换”)
to_csv():数据保存导出