机器学习案例

实验一 电影票房数据统计

# 导入包
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():数据保存导出


页面链接:https://www.datazzh.top/archives/825/2024/03/27/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇