Datawhale组队学习(Pandas) task11-综合练习

任务4 显卡日志

在这里插入图片描述
最开始想要通过str.extract(pat)提取有用信息,然后长宽表变换得到答案的,后来在实践过程中并没有实现,于是 解答该题思路转化为:

  • 每一条测试都是两行,首先我将奇数行/偶数行分别存储
  • 偶数行提取状态、精度、模型信息
  • 奇数行提取模型、时间信息
  • 本来最开始思路是根据模型 merge两个结果的,后来突然发现不同模型对应不同状态、精度,于是索性根据默认的索引直接拼接了
# 提取有用信息行
data = pd.read_table('./data/test/benchmark.txt')
data = data.values.tolist()
data = data[9:393]
data = sum(data, [])  # 二维转一维

在这里插入图片描述

# 偶数行
data1 = [data[i] for i in range(len(data)) if i%2==0]
data_1 = pd.Series(data1)
data_1[:5]

在这里插入图片描述

data_1_res = data_1.str.split('precision type',expand=True)
data_1_res.iloc[:,0] = data_1_res.iloc[:,0].str.replace('Benchmarking ','')
data_1_res[['状态','精度']]=data_1_res.iloc[:,0].str.split(' ',n=1,expand=True)  # 匹配一次
data_1_res.columns = ['drop','model','状态','精度']
data_1_res = data_1_res.drop('drop',1)
data_1_res.head()

在这里插入图片描述

data_1_res['状态_精度']=data_1_res['状态']+'_'+data_1_res['精度']
data_1_res = data_1_res.drop(['状态','精度'],1)

在这里插入图片描述

# 奇数行
data2 = [data[i] for i in range(len(data)) if i%2!=0]
data_2 = pd.Series(data2)
data_2[:5]

在这里插入图片描述

data_2_res = data_2.str.split('model|time :',expand=True)
data_2_res.columns = ['model','drop','time']
data_2_res = data_2_res.drop('drop',1)
data_2_res['model'] = data_2_res['model'].str.strip()
data_2_res

在这里插入图片描述

# 两表拼接
data_1_res['time'] = data_2_res['time']
data_1_res['time'] = data_1_res['time'].str.replace(' ms','').str.replace(' ','')  # 处理时间格式
data_1_res['time'] = data_1_res[['time']].astype(float).round(3)
data_1_res

在这里插入图片描述

# 长宽表转化
# 长表→宽表
data_1_res.pivot(index='model', columns='状态_精度', values='time')

在这里插入图片描述

任务五 水压站点的特征工程

在这里插入图片描述

第一问

time_list = [str(i)+':00:00' for i in range(24)]
df1.columns = ['Time','MeasName'] + time_list

# 宽表变长表
df1_res = df1.melt(id_vars=['Time','MeasName'],value_vars=time_list, var_name='时间', value_name='压力')
df1_res['Time'] = df1_res['Time'] + ' ' + df1_res['时间']
df1_res['Time'] = pd.to_datetime(df1_res['Time'])  # 转化为时间
df1_res

在这里插入图片描述

df1_res = df1_res.drop('时间',1)
df1_res['MeasName'] = df1_res['MeasName'].str.replace('站点','').astype(int)
df1_res = df1_res.sort_values(['Time','MeasName'])

在这里插入图片描述

# df2 类似转化
time_list = [str(i)+':00:00' for i in range(24)]
df2.columns = ['Time','MeasName'] + time_list

# 宽表变长表
df2_res = df2.melt(id_vars=['Time','MeasName'],value_vars=time_list, var_name='时间', value_name='压力')
df2_res['Time'] = df2_res['Time'] + ' ' + df2_res['时间']
df2_res['Time'] = pd.to_datetime(df2_res['Time'])  # 转化为时间
df2_res

df2_res = df2_res.drop('时间',1)
df2_res['MeasName'] = df2_res['MeasName'].str.replace('站点','').astype(int)
df2_res = df2_res.sort_values(['Time','MeasName'])
df_res = pd.concat([df1_res, df2_res])
df_res.set_index('Time')

在这里插入图片描述

第二问

# 当天最高温、最低温及温差
df3[['最高温','最低温']] = df3['气温'].str.split('~',n=1,expand=True)
# 这里replace很容易忽略掉.str.replace('℃','')
df3['最高温'] = df3['最高温'].str.replace('C','').str.replace('℃','')
df3['最低温'] = df3['最低温'].str.replace('C','').str.replace('℃','')
# 使用to_numeric转化为数字
df3['温差'] = pd.to_numeric(df3['最高温'], errors='ignore') -  pd.to_numeric(df3['最低温'], errors='ignore')
df3

在这里插入图片描述

# 当天是否有沙暴、是否有雾、是否有雨、是否有雪、是否为晴天
# 沙暴这里,天气数据部分体现的是“扬沙”
# 这部分的思路主要是采用文本数据一节中的str.contains知识点

weather = pd.Series(df3['天气'].values.tolist())
df3['是否有沙暴'] = weather.str.contains('扬沙')
df3['是否有雾'] = weather.str.contains('雾')
df3['是否有雨'] = weather.str.contains('雨')
df3['是否有雪'] = weather.str.contains('雪')
df3['是否是晴天'] = df3['天气']=='晴'  # 晴天要单独识别,否则会与“阴转晴”这类混淆

在这里插入图片描述

# 选择一种合适的方法度量雨量/下雪量的大小(构造两个序列分别表示二者大小)
pat = '(?P<雨量>\w雨)|(?P<雪量>\w雪)'
weather.str.extract(pat)
res_3.fillna('无')

在这里插入图片描述
注:这里做的有问题,刚刚看到论坛中有小伙伴提醒写法,才猛然意识到不仅仅有“中雨/小雨”这样的描述,还有“多云转小到中雨”这种。这部分自己没有想起来categories的知识点。
在这里插入图片描述

# 限制只用4列,对风向进行0-1编码(只考虑风向,不考虑大小)
# [] 字符类,匹配方括号中包含的任意字符
# * 匹配前面的子表达式零次或多次
pat_wind = '(?P<风向1>[东南西北]*[东南西北]风).(?P<风向2>[东南西北]*[东南西北]风)'
df3['风向'].str.extract(pat_wind)
res_4.fillna('无')

在这里插入图片描述
今天实在是没时间了,要去完成个别的活儿,第三块时间序列部分的题没有完成。唉…/(ㄒoㄒ)/
简单写写近一个月的学习心得,刚刚看了下我们小队的建群时间12.12,今天已经是1.13 时间如白驹过隙,真的好快。

想当时自己报名pandas初衷很简单,完全是因为自己在搞论文 处理数据时发现举步维艰,一个可能简简单单的功能都需要面向百度/github才可以艰难完成,十分挫败,每每遇到需要重新处理的数据,内心都极其畏惧。于是,当看到pandas开始了新一期的组队学习,犹豫了一下决心好好学一次pandas(说实话 每次打卡强度真的挺高,想要学透彻就要花费很长时间,压缩了学习其他东西的时间 是几次组会划水的原因哈哈哈),抱着100%将东西学到手的心情去参与学习、也报名了队长(也为了督促自己)。

有句话说得好嘛 “取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣” ,那回溯这一段的学习历程,也总结目前的状态,发现自己是“得其中”的,原因之一也是遗憾之一是最后三个task期间事情比较多,课后习题没有百分百完成。那遗憾同时,其实也感受到了学习过后的成长,在此期间还帮同学处理了一些数据哈哈,现学现卖了。

这次学习不是结束,恰恰是个开始,让我知道 一切看上去很困难的东西,其实都是有迹可循的 其实都有一点点掌握规则的方法,只需要一步步学习、吸收、练习和应用就好了。谢谢这段时间学习给予我的自信。

Datawhale的学习内容一如既往的精品,pandas更是精品,感谢内容编写者GYH(不知道还有没有一同编写的成员,有的话一并感谢)和助教大大们。我想,用心对待每次学习是对内容最真挚的敬意和感谢,我也愿意向我身边的所有需要学习pandas的人推荐这份教程。由衷感谢大家~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值