实验一 电影票房数据统计
# 导入包
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():数据保存导出

