import numpy as np import pandas as pd import matplotlib.pyplot as plt
#读取文件 df=pd.DataFrame(pd.read_csv('vgsales.csv')) #初步了解 print(df.info()) print(df.describe()) #检查空值 print(df.isnull().any()) print(df.isnull().sum())
1.不同体裁的游戏在营收方面的表现 (纵向对比,即比较不同的平台在同一方面的营收情况) genre_sale=df.groupby('Genre').agg(NAsales=('NA_Sales','sum'),EUsales=('EU_Sales','sum'), JPsales=('JP_Sales','sum'),Othsales=('Other_Sales','sum'), Glosales=('Global_Sales','sum')).sort_values(by='Genre') 1.1全球销量排名 genre_sale['rank']=genre_sale['Glosales'].rank(method='min',ascending=False) 1.2全球销量排名前三的体裁 print(genre_sale.query('rank<=3')) 1.3绘图 1.3.1折线图 plt.figure() x=genre_sale.index y=genre_sale['Glosales'] z=genre_sale['Othsales'] plt.xticks(rotation=30) plt.plot(x, y,label='glo') plt.plot(x,z,label='oth') plt.legend() for a,b in zip(x,y): plt.text(a,b+10,'%.2f' % b,ha='center') for a,b in zip(x,z): plt.text(a,b+10,'%.2f' % b,ha='center') plt.figure() c=genre_sale['NAsales'] d=genre_sale['EUsales'] e=genre_sale['JPsales'] plt.plot(x,c,label='NA') plt.plot(x,d,label='EU') plt.plot(x,e,label='JP') plt.legend() plt.xticks(rotation=30) 1.3.2条形图(结构条形图) plt.figure() plt.bar(x,c,label='NA',color='pink') plt.bar(x,d,label='EU',color='purple') plt.bar(x,e,label='JP',color='lightblue') plt.legend() plt.xticks(rotation=30) for a,b in zip(x,c): plt.text(a,b,'%.2f' % b,ha='center') 1.4评级 def sale_label(x): if x>np.mean(genre_sale['Glosales']): return 'high' else: return 'low' genre_sale['label']=genre_sale['Glosales'].apply(lambda x:sale_label(x))
2.不同平台在营收方面的表现 plat_sale=df.groupby('Platform').agg(NAsales=('NA_Sales','sum'),EUsales=('EU_Sales','sum'), JPsales=('JP_Sales','sum'),Othsales=('Other_Sales','sum'), Glosales=('Global_Sales','sum')) 2.1纵向对比,即比较不同的平台在同一方面的营收情况 plat_sale['rank']=plat_sale['Glosales'].rank(method='min',ascending=False) plt.figure() for i in range(plat_sale.shape[1]): x1=plat_sale.index y1=plat_sale.iloc[:,i] plt.bar(x1,y1,color='orange') plt.xticks(rotation=90) plt.ylabel(plat_sale.columns[i]) plt.show() 2.2横向对比,即比较同一平台在不同方面的营收情况 for i in range(len(plat_sale)): f1=pd.DataFrame(plat_sale.iloc[i,:]) plt.plot(f1,color='orange') plt.ylabel(f1.columns) for n,g in zip(f1.index,f1.iloc[:,0]): plt.text(n,g,'%.2f' % g,ha='center') plt.show()
纵向
横向
3.不同出版商在营收方面的表现 3.1分组计算 pub_sale=df.groupby('Publisher').agg(NAsales=('NA_Sales','sum'),EUsales=('EU_Sales','sum'), JPsales=('JP_Sales','sum'),Othsales=('Other_Sales','sum'), Glosales=('Global_Sales','sum')) 3.2排名 pub_sale['rank']=pub_sale['Glosales'].rank(method='min',ascending=False) pub_sale_20=pub_sale.query('rank<=20') 3.3画图 plt.figure() x2=pub_sale_20.index y2=pub_sale_20['Glosales'] plt.plot(x2,y2,color='orange') plt.xticks(rotation=90) for a,b in zip(x2,y2): plt.text(a,b+10,'%.2f' % b,ha='center')
4.不同年份在营收方面的的表现 4.1给年份分组 def year_group(x): if x<=1990: return '1980-1990' elif x<=2000: return '1991-2000' elif x<=2010: return '2001-2010' else: return '2011-2020' list1=[] for i in df['Year']: a=year_group(i) list1.append(a) df['year_group']=list1 #另一种写法 #df['year_group']=df['Year'].apply(lambda x:year_group(x)) 4.2分组计算 year_sale=df.groupby('year_group').agg(NAsales=('NA_Sales','sum'),EUsales=('EU_Sales','sum'), JPsales=('JP_Sales','sum'),Othsales=('Other_Sales','sum'), Glosales=('Global_Sales','sum')) 4.3画图 plt.figure() for i in range(year_sale.shape[1]): x2=year_sale.index y2=year_sale.iloc[:,i] plt.plot(x2,y2,label=year_sale.columns[i]) for a,b in zip(x2,y2): plt.text(a,b,'%.2f' % b,ha='center') plt.legend()
5.不同游戏在营收方面的表现 5.1分组计算 game_sale=df.groupby('Name').agg(NAsales=('NA_Sales','sum'),EUsales=('EU_Sales','sum'), JPsales=('JP_Sales','sum'),Othsales=('Other_Sales','sum'), Glosales=('Global_Sales','sum')) 5.2游戏在不同国家营收的排名 for i in range(game_sale.shape[1]): coname=game_sale.columns game_sale[coname[i]+'_rate']=game_sale.iloc[:,i].rank(method='min',ascending=False) 5.3取出不同国家营收排名前十的游戏 for i in range(5,10): outn=game_sale[game_sale.iloc[:,i]<=10].iloc[:,i] print(outn)