第1题 P134 按照任务5.1的要求
要求将detail表和order表,按照 detail.order_id和order.info_id主键合并,
求合并后数据 最后20行,所有数字之和(不包括index),并且提交到ftp://125.220.74.10
时间不加,文件名中的数字不加。
import pandas as pd
import numpy as np
import sqlalchemy
order=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\meal_order_info.csv",encoding="GBK")
conn=sqlalchemy.create_engine(r"sqlite:///G:\大数据实验数据库\3.大数据实验数据\test.db")
detail=pd.read_sql_table("meal_order_detail1",conn)
order["info_id"]=order["info_id"].astype("str")
x1=pd.merge(detail,order,left_on="order_id",right_on="info_id") #合并
sum1=0
for i in range(0,x1.shape[1]): #列
for j in range(2779-20,2779): #行
#print(x1.iloc[j,i],type(x1.iloc[j,i]))
tt=str(x1.iloc[j,i]) #将每一列的数据转换为字符串
if tt.isdigit(): #判断是否为数字字符
sum1+=int(tt)
print("合并后数据 最后20行,所有数字之和",sum1)
第2题 P150面 任务5.2清洗数据之异常值
按照3o原则,判断detail[‘counts’]的异常值,找到倒数第3个异常值index是多少?
将这个数字提交到第二行 提交服务器地址为:并且提交到ftp://125.220.74.10
方法1
import pandas as pd
import numpy as np
detail=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\detail.csv",encoding="GBK")
def outRange(Ser1):
boolInd=(Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.var()<Ser1) #列的条件限制
index=np.arange(Ser1.shape[0])[boolInd] #符合条件的表格数据
outrange=Ser1.iloc[index] #获取对应的行列
return outrange
outlier=outRange(detail["counts"])
print("倒数第3个异常值index以及异常值为",outlier.iloc[outlier.shape[0]-3:outlier.shape[0]-2][:])
方法2
import pandas as pd
import numpy as np
detail=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\detail.csv",encoding="GBK")
ser1=detail["counts"]
serlb=(ser1.mean()-3*ser1.std()>ser1)|(ser1.mean()+3*ser1.std()>ser1)
list1=[]
for i in range(detail.shape[0]):
if serlb[i]==0: #将不满足条件的数打印出来
list1.append(i)
print("倒数第3个异常值index是",list1[-3])
第3题 P164 实训1
电量数据缺失值,求最后一个拉格朗日插入的数值为多少?
作为第三题的数据提交到第3行。
import math
import pandas as pd
import numpy as np
from scipy.interpolate import lagrange
#取每一列的前两个数进行构造拉格朗函数
x=[0,1]
y0=[236.2708,238.0521]
y1=[325.6379,328.0897]
y2=[515.4564,514.8900]
f0=lagrange(x,y0)
f1=lagrange(x,y1)
f2=lagrange(x,y2)
t=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\missing_data.csv",encoding="GBK")
print("插入前的数据\n\n",t)
list1=[]
for i in range(t.shape[0]):
for j in range(t.shape[1]):
if math.isnan(t.iloc[i,j]): #遍历全表,判断是否为Nan 不同的列调用不同的拉格朗函数
if j==0:
t.iloc[i,j]=f0(i)
list1.append(t.iloc[i,j])
elif j==1:
t.iloc[i,j]=f1(i)
list1.append(t.iloc[i,j])
else:
t.iloc[i,j]=f2(i)
list1.append(t.iloc[i,j])
print("插入后的数据\n\n",t)
print("\n插入数据列表为",list1)
print("\n最后一个插入数值为%.4f"%list1[-1])
第4题 P164 实训2
提交数据为 合并后最后一行的所有数字之和,不包括index.提交数据作为第4行
import pandas as pd
import numpy as np
ele_loss=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\ele_loss.csv",encoding="GBK")
alarm=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\alarm.csv",encoding="GBK")
print(ele_loss.shape)
print(alarm.shape)
data=pd.merge(ele_loss,alarm,left_on=("ID","date"),right_on=("ID","date")) #主键组合并
print("合并后的表格为")
print(data)
sum1=0
for i in range(0,data.shape[1]):
for j in range(6-1,6):
tt=data.iloc[j,i]
if isinstance(tt,float):
sum1+=tt
elif str(tt).isdigit():
sum1+=tt
print("\n合并后,最后1行数字和为",sum1)