python大数据分析-星际争霸单位信息和用户数据实例分析
1.选题背景
经典游戏星际争霸的合作任务中有使用各种游戏机制,本次大数据分析的目的也是分析数据中的军费机制和单位价值机制
此次期末作业设计我选择了利用银河编辑器的数据导出功能导出了星际争霸2的单位数据和用户类型数据,在本地数据处理之后将单位信息数据用视图形势展现

2.设计方案
提取出部分用户类型数据中的实例数据
分析单位的总价值
军费计算
3.数据分析代码
(1)导入工具包
1 #导入工具包 2 import pandas as pd 3 import pickle 4 import numpy as np 5 import re 6 import sys 7 from sklearn import linear_model 8 9 10 import seaborn as sns 11 import matplotlib.pyplot as plt 12 %matplotlib inline 13 14 from sklearn.ensemble import RandomForestRegressor 15 from sklearn.svm import SVR 16 from sklearn import linear_model 17 from sklearn import ensemble 18 from sklearn.metrics import mean_squared_error 19 from sklearn.ensemble import BaggingRegressor 20 21 22 from sklearn.ensemble import RandomForestRegressor 23 from sklearn.model_selection import KFold 24 import xgboost as xgb 25 from sklearn.model_selection import train_test_split 26 27 28 from sklearn.model_selection import GridSearchCV 29 from sklearn.model_selection import cross_val_score, KFold 30 31 from sklearn.linear_model import Lasso 32 from sklearn.linear_model import Ridge 33 from sklearn.kernel_ridge import KernelRidge 34 from sklearn.svm import SVR 35 from sklearn.ensemble import RandomForestRegressor 36 from sklearn import preprocessing 37 from mpl_toolkits.mplot3d import Axes3D 38 # 39 40 import os
(2)读取单位数据
plt.rcParams['font.sans-serif']=['SimHei'] data = pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UnitInfo.csv') data
效果如下


(3)分析AI在哪些难度不登场
plt.rcParams['font.sans-serif']=['SimHei'] Userdata = pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv') for index,rows in Userdata.iterrows(): if(int(rows['value5']>1)): print(f"在{rows['value5']}难度的AI性格中不登场。") Userdata
效果如下


(4)分析合作任务生产值-绘图
Userdata.plot(x='value5',y='Count',kind='bar',title='合作任务生产') plt.show()
效果如下

(5)用户类型数据头部数据分析
1 titanic=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv')) 2 titanic.head()
效果如下

(6)数据维度分析
1 #数据维度 2 print('===数据维度:{:}行{:}列===\n'.format(titanic.shape[0],titanic.shape[1]))
效果如下

(7)查看各列数据类型
1 #查看各列数据类型 2 titanic.info()
效果如下


(8)数据描述
1 #数据描述 2 titanic.describe()
效果如下

(9)查看用户类型的局部数据
1 #查看随机百分比和基础百分比以及对应的数据索引 2 titanic[['Fixed','Index7']][2155:4514]

(10)显示头部数据-单位信息
1 df=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UnitInfo.csv')) 2 df.head()
效果

(11)数据维度-单位信息
#数据维度 print('===数据维度:{:}行{:}列===\n'.format(df.shape[0],df.shape[1]))
效果

(12)查看各列数据类型-单位信息
1 #查看各列数据类型 2 df.info()

(13)数据描述-单位信息
#数据描述 df.describe()

(14)查看单位造价
1 #查看单位Scout的造价 2 df[['index15','value64']][1303:1305]
效果如下,由此可知Scout的造价需要250晶体矿和75的瓦斯

(15)计算单位造价
1 #计算Scout的总价值 2 scout_price = df['value64'][1303]+df['value64'][1304] 3 print("侦察机的总价值是",scout_price)
效果如下

(16)计算军费
1 #根据军费创建攻击波次-计算军费-休闲 2 titanic=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv')) 3 difficultyAsInt=input(int) 4 ResourceAllocation=9000 5 waveResourceTotal=ResourceAllocation*titanic['Fixed'][4563] 6 print("当前要支付的军费",waveResourceTotal)
效果如下

(17)单位造价可视化
柱状图
1 # 绘制垂直柱状图 2 #计算相关单位的造价 3 NovaACLaserTurret_price = df['value64'][1946] 4 print("黑色行动炮台的总价值是",NovaACLaserTurret_price) 5 NovaBoombotBurrowed_price = df['value64'][1794]+df['value64'][1795] 6 print("黑色行动自爆者的总价值是",NovaBoombotBurrowed_price) 7 KelMorianGrenadeTurret_price = df['value64'][6868] 8 print("自动机炮的总价值是",KelMorianGrenadeTurret_price) 9 SIDrone_price = df['value64'][7627] 10 print("被感染的SCV的总价值是",SIDrone_price) 11 SunkenColony_price = df['value64'][7947] 12 print("穿刺集群的总价值是",SunkenColony_price) 13 plt.rcParams['font.family'] = ['sans-serif'] 14 plt.rcParams['font.sans-serif'] = ['SimHei'] 15 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 16 plt.bar(['NovaACLaserTurret','NovaBoombotBurrowed','KelMorianGrenadeTurret','SIDrone','SunkenColony'], 17 [NovaACLaserTurret_price, NovaBoombotBurrowed_price, KelMorianGrenadeTurret_price, SIDrone_price,SunkenColony_price], 18 label="部分单位造价") 19 plt.legend() 20 plt.show()
效果图如下

折线图
1 x=['NovaACLaserTurret','NovaBoombotBurrowed','KelMorianGrenadeTurret','SIDrone','SunkenColony'] 2 y=[NovaACLaserTurret_price, NovaBoombotBurrowed_price, KelMorianGrenadeTurret_price, SIDrone_price,SunkenColony_price] 3 plt.plot(x,y) 4 plt.show() 5 #了解每一个单位的价值

饼图
1 x=['NovaACLaserTurret','NovaBoombotBurrowed','KelMorianGrenadeTurret','SIDrone','SunkenColony'] 2 y=[NovaACLaserTurret_price, NovaBoombotBurrowed_price, KelMorianGrenadeTurret_price, SIDrone_price,SunkenColony_price] 3 plt.pie(y,labels=x) 4 plt.show()
效果图如下

小提琴图
1 #绘制小提琴图 2 sns.violinplot(x="id",y="value16",data=df) 3 #在sns.violinplot中,x是类别变量,y是数值型变量,data用于指定数据集

三维图
1 fig = plt.figure() 2 ax = Axes3D(fig) 3 4 x = np.arange(NovaACLaserTurret_price/8*-1, NovaACLaserTurret_price/8, 0.1) 5 y = np.arange(NovaACLaserTurret_price/8*-1, NovaACLaserTurret_price/8, 0.1) 6 X, Y = np.meshgrid(x, y) 7 Z = np.add(-np.power(X, 4), np.power(Y, 4)) 8 # 绘制三维曲面图 9 surf = ax.plot_surface(X, Y, Z, cmap=cm.gist_rainbow) 10 # 设置颜色条 11 fig.colorbar(surf, shrink=0.5, aspect=5) 12 plt.show()

1 fig = plt.figure() 2 3 # 创建3d图形的两种方式 4 # ax = Axes3D(fig) 5 ax = fig.add_subplot(111, projection='3d') 6 # X, Y value 7 X = np.arange(NovaBoombotBurrowed_price/25*-1, NovaBoombotBurrowed_price/25, 0.25) 8 Y = np.arange(NovaBoombotBurrowed_price/25*-1, NovaBoombotBurrowed_price/25, 0.25) 9 X, Y = np.meshgrid(X, Y) # x-y 平面的网格 10 R = np.sqrt(X ** 2 + Y ** 2) 11 # height value 12 Z = np.sin(R) 13 14 # rstride:行之间的跨度 cstride:列之间的跨度 15 # rcount:设置间隔个数,默认50个,ccount:列的间隔个数 不能与上面两个参数同时出现 16 #vmax和vmin 颜色的最大值和最小值 17 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow')) 18 # zdir : 'z' | 'x' | 'y' 表示把等高线图投射到哪个面 19 # offset : 表示等高线图投射到指定页面的某个刻度 20 ax.contourf(X,Y,Z,zdir='z',offset=-2) 21 # 设置图像z轴的显示范围,x、y轴设置方式相同 22 ax.set_zlim(-2,2)

(18)其他单位造价可视化和计算
1 #计算IndustrialShip的总价值 2 IndustrialShip_price = df['value64'][1058]+df['value64'][1059] 3 print("工业船的总价值是",IndustrialShip_price)

1 #计算GhostFemale_BlackOps的总价值 2 GhostFemale_BlackOps_price = df['value64'][970]+df['value64'][971] 3 print("黑色行动女幽灵的总价值是",GhostFemale_BlackOps_price)

1 #计算VoidCoopWarbot的总价值 2 VoidCoopWarbot_price = df['value64'][5826]+df['value64'][5827] 3 print("武装机器人的总价值是",VoidCoopWarbot_price)

#计算OdinMKII的总价值 OdinMKII_price = df['value64'][6103]+df['value64'][6104] print("奥丁MKII的总价值是",OdinMKII_price)

1 #计算StukovInfestedDiamondBack的总价值 2 StukovInfestedDiamondBack_price = df['value64'][6409]+df['value64'][6410] 3 print("被感染的响尾蛇战车的总价值是",StukovInfestedDiamondBack_price)

1 #计算ScourgeNest的总价值 2 ScourgeNest_price = df['value64'][6687]+df['value64'][6688] 3 print("爆蚊巢穴的总价值是",ScourgeNest_price)

1 import matplotlib.pyplot as plt 2 plt.rcParams['font.family'] = ['sans-serif'] 3 plt.rcParams['font.sans-serif'] = ['SimHei'] 4 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 5 plt.bar(['ScourgeNest','OdinMKII','VoidCoopWarbot','GhostFemale_BlackOps','IndustrialShip'], 6 [ScourgeNest_price, OdinMKII_price, VoidCoopWarbot_price, GhostFemale_BlackOps_price,IndustrialShip_price], 7 label="部分单位造价") 8 plt.legend() 9 plt.show()

1 x=['ScourgeNest','OdinMKII','VoidCoopWarbot','GhostFemale_BlackOps','IndustrialShip'] 2 y=[ScourgeNest_price, OdinMKII_price, VoidCoopWarbot_price, GhostFemale_BlackOps_price,IndustrialShip_price] 3 plt.pie(y,labels=x) 4 plt.show()

1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 x=['ScourgeNest','OdinMKII','VoidCoopWarbot','GhostFemale_BlackOps','IndustrialShip'] 5 y=[ScourgeNest_price, OdinMKII_price, VoidCoopWarbot_price, GhostFemale_BlackOps_price,IndustrialShip_price] 6 7 plt.xlabel("x") 8 plt.ylabel("v") 9 plt.boxplot(ScourgeNest_price,sym="o",whis=3) 10 plt.show()

1 fig = plt.figure() 2 #画散点图,计算星际争霸单位价格分布图 3 ax = Axes3D(fig) 4 x = np.random.randint(0,10,int(GhostFemale_BlackOps_price/15)) 5 y = np. random.randint(0,10,int(VoidCoopWarbot_price/16)) 6 z = np.random.randint(0,10,int(StukovInfestedDiamondBack_price/6)) 7 ax. scatter(x, y, z) 8 ax.set_xlabel('x') 9 ax.set_ylabel( 'y' ) 10 ax.set_zlabel('z' ) 11 plt.show() 12 13 #显示图案了解星际争霸单位价值情况

1 import pandas as pd 2 import pickle 3 import numpy as np 4 df=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UnitInfo.csv')) 5 #计算GhostAcademyNova的总价值 6 GhostAcademyNova_BlackOps_price = df['value64'][3991]+df['value64'][3992] 7 print("幽灵军校的总价值是",GhostAcademyNova_BlackOps_price) 8 SolarForge_price = df['value64'][5537]+df['value64'][5538] 9 print("太阳锻炉的总价值是",SolarForge_price) 10 #计算TechReactor的建造价值 11 TechReactor_price = df['value64'][5505]+df['value64'][5506] 12 print("科技反应堆的总价值是",TechReactor_price) 13 #VoidRayTaldarim的价值 14 VoidRayTaldarim_price = df['value64'][5714]+df['value64'][5715] 15 print("毁灭者的总价值是",VoidRayTaldarim_price) 16 #NovaBoombot的价值 17 NovaBoombot_price = df['value64'][5966]+df['value64'][5967] 18 print("破坏无人机的总价值是",NovaBoombot_price) 19 #计算NovaGriffinTransportUnit的价值 20 NovaGriffinTransportUnit_price = df['value64'][2922]+df['value64'][2923] 21 print("狮鹫号的总价值是",NovaGriffinTransportUnit_price) 22 #计算ImpalerAbathur的价值 23 ImpalerAbathur_price = df['value64'][3059]+df['value64'][3060] 24 print("阿巴瑟穿刺者的总价值是",ImpalerAbathur_price) 25 #计算SIQueen 26 SIQueen_price = df['value64'][3371]+df['value64'][3372] 27 print("斯托科夫的虫巢女王的总价值是",SIQueen_price) 28 #计算Raven_BlackOps 29 Raven_BlackOps_price = df['value64'][9665]+df['value64'][9666] 30 print("诺娃的铁鸦的总价值是",Raven_BlackOps_price) 31 #计算MutatorWidowMine 32 MutatorWidowMine_price = df['value64'][9862]+df['value64'][9861] 33 print("埃蒙的寡妇雷的总价值是",MutatorWidowMine_price) 34 #计算SILiberator 35 SILiberator_price = df['value64'][10474]+df['value64'][10475] 36 print("被感染的解放者的总价值是",SILiberator_price) 37 #计算StukovInfestedSiegeTankUprooted 38 StukovInfestedSiegeTankUprooted_price = df['value64'][10337]+df['value64'][10338] 39 print("斯托科夫的攻城坦克的总价值是",StukovInfestedSiegeTankUprooted_price) 40 plt.rcParams['font.family'] = ['sans-serif'] 41 plt.rcParams['font.sans-serif'] = ['SimHei'] 42 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 43 plt.bar(['埃蒙寡妇雷','被感染的解放者','诺娃的铁鸦','阿巴瑟的穿刺者','斯托科夫的坦克'], 44 [MutatorWidowMine_price, SILiberator_price, Raven_BlackOps_price, ImpalerAbathur_price,StukovInfestedSiegeTankUprooted_price], 45 label="部分单位造价") 46 plt.legend() 47 plt.show()

1 import pandas as pd 2 import pickle 3 import numpy as np 4 import matplotlib.pyplot as plt 5 df=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UnitInfo.csv')) 6 #计算HybridBehemothCoopBoss的总价值 7 HybridBehemothCoopBoss_price = df['value64'][10950] 8 print("混合体不朽者的总价值是",HybridBehemothCoopBoss_price) 9 #计算HybridDominatorCoopBoss的总价值 10 HybridDominatorCoopBoss_price = df['value64'][10921] 11 print("混合体支配者的总价值是",HybridDominatorCoopBoss_price) 12 #计算DehakaHatchery 13 DehakaHatchery_price = df['value64'][11034] 14 print("德哈卡孵化场的总价值是",DehakaHatchery_price) 15 #计算DehakaNydusDestroyer 16 DehakaNydusDestroyer_price = df['value64'][11368] 17 print("德哈卡虫道毁灭者的总价值是",DehakaNydusDestroyer_price) 18 #计算DehakaUltraliskLevel3 19 DehakaUltraliskLevel3_price = df['value64'][12199]+df['value64'][12200] 20 print("德哈卡暴龙兽的总价值是",DehakaUltraliskLevel3_price) 21 # 绘制水平柱状图 22 23 plt.rcParams['font.family'] = ['sans-serif'] 24 plt.rcParams['font.sans-serif'] = ['SimHei'] 25 26 plt.barh([u'混合体不朽者','混合体支配者','德哈卡孵化场','虫道毁灭者','暴龙兽'], 27 [HybridBehemothCoopBoss_price, HybridDominatorCoopBoss_price, DehakaHatchery_price, DehakaNydusDestroyer_price,DehakaUltraliskLevel3_price], 28 label="德哈卡和混合体单位造价") 29 plt.legend() 30 plt.show()

(19)显示用户数据实例
1 import matplotlib.pyplot as plt 2 #显示突变因子列表 3 4 plt.rcParams['font.sans-serif']=['SimHei'] 5 ud=pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv') 6 ud[['Id3','Int','Id5']][7763:8078]

(20)分析随机允许和自定义允许
1 ud=pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv') 2 ud[['Id3','Int','Id5']][7763:8078] 3 for index,rows in ud.iterrows(): 4 if(int(rows['Int']<1.0)): 5 print(f"{rows['Id3']}突变因子不会随机或在突变挑战中登场。")

(21)分析单位
1 titanic=pd.DataFrame(pd.read_csv(r'C:\Users\ASUS\Desktop\StarCoop_UserData.csv')) 2 new_titanic = titanic[2155:4514] 3 for index,rows in new_titanic.iterrows(): 4 if(str(rows['Unit'])=="NaN"): 5 break 6 indexUnitType = 1 7 for index,rows in new_titanic.iterrows(): 8 unitTypeTest = titanic['value'][2156] 9 print(unitTypeTest)

结尾:数据中图标变换
1 import scipy.ndimage as nd 2 3 import matplotlib.pyplot as plt 4 5 image=nd.imread("Eva Elfie.jpg") 6 7 plt.imshow(image) 8 9 plt.show()

1 import scipy.ndimage as nd 2 3 import matplotlib.pyplot as plt 4 5 image=nd.imread("Eva Elfie.jpg") 6 7 t=nd.rotate(image,45) 8 9 plt.imshow(t) 10 11 plt.show()

1 import scipy.ndimage as nd 2 3 import matplotlib.pyplot as plt 4 5 image=nd.imread("Eva Elfie.jpg") 6 7 t=nd.gaussian_filter(image,3) 8 9 plt.imshow(t) 10 11 plt.show()

1 import scipy.ndimage as nd 2 3 import matplotlib.pyplot as plt 4 5 import numpy as np 6 7 image=nd.imread("Eva Elfie.jpg",mode='L') 8 9 lx,ly=image.shape 10 11 im=image[int(lx/4):int(-lx/4),int(ly/4):int(-ly/4)] 12 13 plt.imshow(im,cmap=plt.cm.gray) 14 15 plt.show()


浙公网安备 33010602011771号