第六次-大作业
一、2002 年-2018 年上海机动车拍照拍卖
df_car = pd.read_csv(‘数据集/2002年-2018年上海机动车拍照拍卖.csv’)
##1
df = df_car.copy()
df[‘percent’] = df.apply(lambda x:x[‘Total number of license issued’]/x[‘Total number of applicants’],axis=1)
for index, row in df.iterrows():
if row[‘percent’]<0.05:
print(row[‘Date’])
break
##2
groupedyear = dfym.groupby(‘年份’)
def f(df):
data = OrderedDict()
data[‘LP_max’] = df["lowest price "].max()
data[‘LP_mean’] = df[‘lowest price ‘].mean()
data[‘LP_075’] = df[‘lowest price ‘].quantile(q=0.75)
return pd.Series(data)
groupedyear.apply(f)
##3
df = df_car.copy()
df[‘年份’] = df[‘Date’].apply(lambda x : 2000+int(x.split(’-’)[0]))
df[‘月份’] = df[‘Date’].apply(lambda x : x.split(’-’)[1])
newcolumns = [‘年份’,‘月份’]+list(df.columns[1:-2])
dfym = df.reindex(columns=newcolumns).copy()
dfym.head()
##4
Month = dfym.iloc[0:12,1].to_list()
result = dfym.melt(id_vars=[‘年份’,‘月份’],value_vars=[‘Total number of license issued’,‘lowest price ‘,‘avg price’,‘Total number of applicants’],value_name=‘info’)
result.pivot_table(index = [‘年份’,‘variable’],columns=‘月份’,values=‘info’,fill_value=’-’).reindex(columns = Month)
##5
print(’[最低价、均值]与上月差额不同号的有:’)
for index in dfym.index:
try:
signal = (dfym.loc[index,'lowest price ']-dfym.loc[index+1,‘lowest price ‘])*
(dfym.loc[index,‘avg price’] -dfym.loc[index+1,‘avg price’])
if signal<0:
print(dfym.loc[index+1,[‘年份’,‘月份’]])
print(’\n’)
except:
break
##6
df6 = dfym.copy()
df6[‘发行增益’]=0
for index in df6.index:
if index<2:continue
df6.loc[index,‘发行增益’]= df6.loc[index,‘Total number of license issued’]-(df6.loc[index-1,‘Total number of license issued’]+df6.loc[index-2,‘Total number of license issued’])/2
print(“最小”,df6.loc[df6[“发行增益”] == df6[“发行增益”].min()][[‘年份’,‘月份’]].head())
print(“最大”,df6.loc[df6[“发行增益”] == df6[“发行增益”].max()][[‘年份’,‘月份’]].head())
(1) 哪一次拍卖的中标率首次小于 5%?
15-May
(2) 按年统计拍卖最低价的下列统计量:最大值、均值、0.75 分位数,要求
显示在同一张表上。
(3) 将第一列时间列拆分成两个列,一列为年份(格式为 20××),另一列为
月份(英语缩写),添加到列表作为第一第二列,并将原表第一列删除,
其他列依次向后顺延。
(4) 现在将表格行索引设为多级索引,外层为年份,内层为原表格第二至第
五列的变量名,列索引为月份。
(5) 一般而言某个月最低价与上月最低价的差额,会与该月均值与上月均值 的差额具有相同的正负号,哪些拍卖时间不具有这个特点?
【最低价、均值】与上月差额不同号的有:
年份 2003
月份 Oct
Name: 21, dtype: object
年份 2003
月份 Nov
Name: 22, dtype: object
年份 2004
月份 Jun
Name: 29, dtype: object
年份 2005
月份 Jan
Name: 36, dtype: object
年份 2005
月份 Feb
Name: 37, dtype: object
年份 2005
月份 Sep
Name: 44, dtype: object
年份 2006
月份 May
Name: 52, dtype: object
年份 2006
月份 Sep
Name: 56, dtype: object
年份 2007
月份 Jan
Name: 60, dtype: object
年份 2007
月份 Feb
Name: 61, dtype: object
年份 2007
月份 Dec
Name: 71, dtype: object
年份 2012
月份 Oct
Name: 128, dtype: object
(6) 将某一个月牌照发行量与其前两个月发行量均值的差额定义为发行增
益,最初的两个月用 0 填充,求发行增益极值出现的时间。
最小 年份 月份
74 2008 Apr
最大 年份 月份
72 2008 Jan
二、2007 年-2019 年俄罗斯机场货运航班运载量
df_rus = pd.read_csv(‘数据集/2007年-2019年俄罗斯货运航班运载量.csv’)
##1
df_rus.groupby(‘Year’)[‘Whole year’].sum()
##2
print(df_rus.groupby(‘Year’)[‘Airport name’].count())
apcount = (df_rus.groupby(‘Airport name’)[‘Year’].count())
print(apcount[apcount<13].count(),apcount[apcount<13].count()/apcount.count())
##3
year = [2010,2011,2012,2013,2014,2015]
df3 = df_rus[df_rus[‘Year’].isin(year)]
for y in year:
dd = df3[df3[‘Year’]==y]
print(dd[dd[‘Whole year’]==0].shape[0])
print(f"{y}-{dd[dd[‘Whole year’]==0].shape[0]*100/dd.shape[0]:4.4f}%")
##4
remove = 0
df4 = df_rus.copy()
for name,group in df4.groupby(‘Airport name’):
zeroyear = group[group[‘Whole year’]0].shape[0]
if zeroyear >= 5:
remove += zeroyear
df4 = df4[df4[‘Airport name’]!=name]
df4.describe()
##5
df5 = df4[df4[‘Year’]>2016].copy()
df5[‘lon’] = df5[‘Airport coordinates’].apply(lambda x : float(re.findall(r’\d+.\d+’,x)[0]))
df5[‘lat’] = df5[‘Airport coordinates’].apply(lambda x : float(re.findall(r’\d+.\d+’,x)[1]))
lonmed = df5[‘lon’].median();latmed = df5[‘lat’].median()
print(f’2017-2019机场分布经纬度中位数{lonmed},{latmed}’)
def f(lon,lat):
if lat>latmed:
string = ‘N’
else:
string = ‘S’
if lon>lonmed:
string +=‘E’
else:
string +=‘W’
return string
df5[‘region’] = df5.apply(lambda x: f(x[‘lon’],x[‘lat’]),axis=1)
print(‘按中位数划分四区,机场数量分布如下:’)
display(df5.groupby([‘Year’,‘region’])[‘Whole year’].count())
print(f"期间,运量最大区域为:{df5.groupby(‘region’)[‘Whole year’].sum().idxmax()}")
##6
df6 = df4.query('Year2016’).copy()
month = list(df6.columns[2:14])
for i in month:
df6[i+’_r’]=0
for index in df6.index:
mid = df6.loc[index,month].sort_values(ascending = False)
rank = 1
for ii in mid.index:
df6.loc[index,ii+’_r’]=rank
rank+=1
print(df6.iloc[:,-12:].sum())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
(1) 求每年货运航班总运量。
Year
2007 659438.23
2008 664682.46
2009 560809.77
2010 693033.98
2011 818691.71
2012 846388.03
2013 792337.08
2014 729457.12
2015 630208.97
2016 679370.15
2017 773662.28
2018 767095.28
2019 764606.27
Name: Whole year, dtype: float64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(2) 每年记录的机场都是相同的吗?
Year
2007 292
2008 292
2009 292
2010 292
2011 292
2012 292
2013 292
2014 292
2015 292
2016 292
2017 292
2018 248
2019 251
Name: Airport name, dtype: int64
63 0.21212121212121213
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(3) 按年计算 2010 年-2015 年全年货运量记录为 0 的机场航班比例。
224
2010-76.7123%
225
2011-77.0548%
225
2012-77.0548%
225
2013-77.0548%
225
2014-77.0548%
225
2015-77.0548%
1
2
3
4
5
6
7
8
9
10
11
12
(4) 若某机场至少存在 5 年或以上满足所有月运量记录都为 0,则将其所有
年份的记录信息从表中删除,并返回处理后的表格
(5) 采用一种合理的方式将所有机场划分为东南西北四个分区,并给出 2017 年-2019 年货运总量最大的区域。 2017-2019机场分布经纬度中位数73.40807,55.6083255 按中位数划分四区,机场数量分布如下:
Year region
2017 NE 17
NW 16
SE 16
SW 17
2018 NE 17
NW 16
SE 16
SW 17
2019 NE 17
NW 18
SE 16
SW 19
Name: Whole year, dtype: int64
期间,运量最大区域为:NW
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(6) 在统计学中常常用秩代表排名,现在规定某个机场某年某个月的秩为该
机场该月在当年所有月份中货运量的排名(例如 *** 机场 19 年 1 月运
量在整个 19 年 12 个月中排名第一,则秩为 1),那么判断某月运量情
况的相对大小的秩方法为将所有机场在该月的秩排名相加,并将这个量
定义为每一个月的秩综合指数,请根据上述定义计算 2016 年 12 个月
的秩综合指数。
January_r 705
February_r 597
March_r 478
April_r 404
May_r 467
June_r 465
July_r 499
August_r 396
September_r 361
October_r 324
November_r 267
December_r 185
dtype: int64
1
2
3
4
5
6
7
8
9
10
11
12
13
三
##1
df_death = pd.read_csv(‘数据集/美国死亡数.csv’)
df_diag = pd.read_csv(‘数据集/美国确证数.csv’)
df_death[[‘Population’,‘2020/4/26’]].corr()
##2
df2 = df_diag[[‘Admin2’,‘Province_State’,‘2020/4/1’]]
(df2[df2[‘2020/4/1’]==0].groupby(‘Province_State’)[‘2020/4/1’].count()/df2.groupby(‘Province_State’)[‘2020/4/1’].count()).fillna(0)
##3
df3 = df_diag.copy()
columnsdate = df3.columns[11:];top3 = 3;toptown=[];starttime=[]
for date in columnsdate:
town = df3[df3[date]>0]
ts = town.shape[0]
if ts>0:
top3 -= ts
starttime += [date for i in range(ts)]
toptown +=list(town[‘Admin2’])
df3 = df3.drop(index=town.index)
if top3<=0:
break
print(‘最早发生:’,toptown)
print(‘首现日期:’,starttime)
##4
df4 = pd.merge(df_death,df_diag,on=df_death.columns[0:10].to_list(),suffixes=(‘death’,'diag’))
df4_death = df_death.copy()
df4_diag = df_diag.copy()
columnsdate = df4_death.columns[12:].to_list()
datelen = len(columnsdate)
for i in range(datelen-1,0,-1):
ci=columnsdate[i]; ci=columnsdate[i-1]
df4_death[ci] = df4_death.apply(lambda x : x[ci]-x[ci],axis=1)
df4_diag[ci] = df4_diag.apply(lambda x : x[ci]-x[ci_],axis=1)
df4_death.groupby(‘Province_State’)[columnsdate].sum()
df4_diag.groupby(‘Province_State’)[columnsdate].sum().idxmax(axis=1)
##5
df5_death = df_death.copy()
df5_diag = df_diag.copy()
death = df5_death.groupby(‘Province_State’).sum().iloc[:,6:].T
diag = df5_diag.groupby(‘Province_State’).sum().iloc[:,5:].T
States = df5_death.groupby(‘Province_State’)[‘Admin2’].sum().index.to_list()
for state in States:
aaa = pd.DataFrame({‘确证数’:diag[state],‘死亡数’:death[state]})
for index,row in aaa.iterrows():
if row[‘死亡数’]>0:
break
else:
aaa.drop(index,inplace=True)
aaa.to_csv(state+’.csv’)
##6
April = columnsdate[-26:-16]
death6 = df4_death.groupby(‘Province_State’)[April].sum()
diag6 = df4_diag.groupby(‘Province_State’)[April].sum()
for day in April:
aaa = pd.DataFrame({‘确证数’:diag6[day],‘死亡数’:death6[day]})
aaa.to_csv(day.replace(’/’, ‘_’)+’.csv’)
(1)
Population 2020/4/26
Population 1.000000 0.403844
2020/4/26 0.403844 1.000000
(2)
Province_State
Alabama 0.119403
Alaska 0.793103
Arizona 0.000000
Arkansas 0.293333
California 0.137931
Colorado 0.218750
Connecticut 0.000000
Delaware 0.000000
District of Columbia 0.000000
Florida 0.164179
Georgia 0.125786
Hawaii 0.200000
Idaho 0.386364
Illinois 0.480392
Indiana 0.108696
Iowa 0.404040
Kansas 0.609524
Kentucky 0.441667
Louisiana 0.062500
Maine 0.250000
Maryland 0.041667
Massachusetts 0.142857
Michigan 0.192771
Minnesota 0.367816
Mississippi 0.060976
Missouri 0.391304
Montana 0.625000
Nebraska 0.752688
Nevada 0.470588
New Hampshire 0.100000
New Jersey 0.000000
New Mexico 0.424242
New York 0.080645
North Carolina 0.180000
North Dakota 0.547170
Ohio 0.181818
Oklahoma 0.376623
Oregon 0.277778
Pennsylvania 0.104478
Rhode Island 0.000000
South Carolina 0.065217
South Dakota 0.560606
Tennessee 0.115789
Texas 0.452756
Utah 0.482759
Vermont 0.142857
Virginia 0.270677
Washington 0.128205
West Virginia 0.472727
Wisconsin 0.319444
Wyoming 0.347826
Name: 2020/4/1, dtype: float64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(3)
最早发生: [‘King’, ‘Cook’, ‘Maricopa’, ‘Los Angeles’, ‘Orange’]
首现日期: [‘2020/1/22’, ‘2020/1/24’, ‘2020/1/26’, ‘2020/1/26’, ‘2020/1/26’]
1
2