Kaggle项目之Mobile App Store
Mobile APP Store数据集
项目介绍
- 目前手机应用商店里App种类繁多,并且数量也一直在增加,想要成为一款受欢迎的应用越来越困难,因此对APP下载数据和评分数据进行分析成为帮助App开发者获取和留存用户的重要工具。
- 现在我们要对具有代表性的苹果应用商城的App应用进行分析,根据每个app应用的属性进行相关性探索。
数据集介绍
AppleStore数据集包含两个csv文件。
- AppleStore.csv文件中包含的是App的应用程序ID、名称、大小、价格、评分、内容评级、主要类型、支持设备类型数量等信息,共16个维度,7197行数据。
- appStore_desception.csv文件是对16个字段的详细描述。
字段描述
- id:app的编号,每个app只有一个编号
- track_name:app的名称
- size_bytes: 大小(以字节为单位)
- currency:通用货币类型
- price: 价格金额
- rating_count_tot: 用户评分计数(适用于所有版本)
- rating_count_ver:用户评分计数(当前版本)
- user_rating:平均用户评分值(适用于所有版本),取值范围为(0,5],左开右闭区间
- user_rating_ver:平均用户评分值(对于当前版本)取值范围(0,5],左开右闭区间
- ver:当前的版本号
- cont_rating:内容评级(游戏适龄4,9,12,17)
- prime_genre:主要类型
- sup_devices.num:支持设备的数量
- ipadSc_urls.num:截屏展示数量(即在应用详情页的图片数量0-5张)
- lang.num:支持的语言数量
- vpp_lic:启用批量购买程序设备的许可
数据预处理
查看数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
filepath = './dataFile/AppleStore.csv'
df = pd.read_csv(filepath,index_col=0)
print("打印数据的前三行信息:")
df.head(3)
打印数据的前三行信息:
id | track_name | size_bytes | currency | price | rating_count_tot | rating_count_ver | user_rating | user_rating_ver | ver | cont_rating | prime_genre | sup_devices.num | ipadSc_urls.num | lang.num | vpp_lic | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 281656475 | PAC-MAN Premium | 100788224 | USD | 3.99 | 21292 | 26 | 4.0 | 4.5 | 6.3.5 | 4+ | Games | 38 | 5 | 10 | 1 |
2 | 281796108 | Evernote - stay organized | 158578688 | USD | 0.00 | 161065 | 26 | 4.0 | 3.5 | 8.2.2 | 4+ | Productivity | 37 | 5 | 23 | 1 |
3 | 281940292 | WeatherBug - Local Weather, Radar, Maps, Alerts | 100524032 | USD | 0.00 | 188583 | 2822 | 3.5 | 4.5 | 5.0.0 | 4+ | Weather | 37 | 5 | 3 | 1 |
print("数据共有{}行,{}列".format(df.shape[0],df.shape[1]))
数据共有7197行,16列
print("数据集中每列的信息:")
df.info()
数据集中每列的信息:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7197 entries, 1 to 11097
Data columns (total 16 columns):
id 7197 non-null int64
track_name 7197 non-null object
size_bytes 7197 non-null int64
currency 7197 non-null object
price 7197 non-null float64
rating_count_tot 7197 non-null int64
rating_count_ver 7197 non-null int64
user_rating 7197 non-null float64
user_rating_ver 7197 non-null float64
ver 7197 non-null object
cont_rating 7197 non-null object
prime_genre 7197 non-null object
sup_devices.num 7197 non-null int64
ipadSc_urls.num 7197 non-null int64
lang.num 7197 non-null int64
vpp_lic 7197 non-null int64
dtypes: float64(3), int64(8), object(5)
memory usage: 955.9+ KB
- 数据没有缺失情况
print("数值型列统计信息:")
df.describe()
数值型列统计信息:
id | size_bytes | price | rating_count_tot | rating_count_ver | user_rating | user_rating_ver | sup_devices.num | ipadSc_urls.num | lang.num | vpp_lic | |
---|---|---|---|---|---|---|---|---|---|---|---|
count | 7.197000e+03 | 7.197000e+03 | 7197.000000 | 7.197000e+03 | 7197.000000 | 7197.000000 | 7197.000000 | 7197.000000 | 7197.000000 | 7197.000000 | 7197.000000 |
mean | 8.631310e+08 | 1.991345e+08 | 1.726218 | 1.289291e+04 | 460.373906 | 3.526956 | 3.253578 | 37.361817 | 3.707100 | 5.434903 | 0.993053 |
std | 2.712368e+08 | 3.592069e+08 | 5.833006 | 7.573941e+04 | 3920.455183 | 1.517948 | 1.809363 | 3.737715 | 1.986005 | 7.919593 | 0.083066 |
min | 2.816565e+08 | 5.898240e+05 | 0.000000 | 0.000000e+00 | 0.000000 | 0.000000 | 0.000000 | 9.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 6.000937e+08 | 4.692275e+07 | 0.000000 | 2.800000e+01 | 1.000000 | 3.500000 | 2.500000 | 37.000000 | 3.000000 | 1.000000 | 1.000000 |
50% | 9.781482e+08 | 9.715302e+07 | 0.000000 | 3.000000e+02 | 23.000000 | 4.000000 | 4.000000 | 37.000000 | 5.000000 | 1.000000 | 1.000000 |
75% | 1.082310e+09 | 1.819249e+08 | 1.990000 | 2.793000e+03 | 140.000000 | 4.500000 | 4.500000 | 38.000000 | 5.000000 | 8.000000 | 1.000000 |
max | 1.188376e+09 | 4.025970e+09 | 299.990000 | 2.974676e+06 | 177050.000000 | 5.000000 | 5.000000 | 47.000000 | 5.000000 | 75.000000 | 1.000000 |
- 对数值列数据进行查看,price列没有负值,user_rating,user_rating_ver最大最小值均在[0,5],无异常数据
print("数据中重复数据个数:")
df.duplicated().sum()
数据中重复数据个数:
0
特征处理
#app的size由bite变为兆
df['size_mb'] = df['size_bytes']/(1024*1024.0)
df['size_mb'].describe()
count 7197.000000
mean 189.909414
std 342.566408
min 0.562500
25% 44.749023
50% 92.652344
75% 173.497070
max 3839.463867
Name: size_mb, dtype: float64
#根据price新增是否付费列
df['paid'] = df['price'].apply(lambda x:1 if x> 0 else 0)
df['paid'].head()
1 1
2 0
3 0
4 0
5 0
Name: paid, dtype: int64
#根据当前版本与历史版本评分新增波动列
df['curr_ver'] = df['user_rating_ver']-df['user_rating']
df['curr_ver'].head()
1 0.5
2 -0.5
3 1.0
4 0.5
5 0.5
Name: curr_ver, dtype: float64
探索性分析
#一些简单的单变量的数据分析
pd.DataFrame({"评分人数最多的10款app":df.sort_values(by='rating_count_tot',ascending=False).head(10)['track_name'].tolist(),"当前评分最高的10款app":df.sort_values(by='user_rating_ver',ascending=False).head(10)['track_name'].tolist(),"支持设备最多的10款app":df.sort_values(by='sup_devices.num',ascending=False).head(10)['track_name'].tolist(),"支持语言最多的10款app":df.sort_values(by='lang.num',ascending=False).head(10)['track_name'].tolist(),'价格最贵的10款app':df.sort_values(by='price',ascending=False).head(10)['track_name'].tolist(),'当前版本评分提高最多的10款app':df.sort_values(by='curr_ver',ascending=False).head(10)['track_name'].tolist()})
评分人数最多的10款app | 当前评分最高的10款app | 支持设备最多的10款app | 支持语言最多的10款app | 价格最贵的10款app | 当前版本评分提高最多的10款app | |
---|---|---|---|---|---|---|
0 | Blitz Breaker | Bloons TD 4 | Google Photos - unlimited photo and video storage | LAMP Words For Life | VyStar Mobile Banking for iPad | |
1 | Project Life | Crash Bandicoot Nitro Kart 2 | Google Duo - simple video calling | Proloquo2Go - Symbol-based AAC | Mannequin Challenge Maker | |
2 | Clash of Clans | マンガ図書館Z -人気漫画が読み放題! | Crash Bandicoot Nitro Kart 3D | Google Slides | KNFB Reader | 放置江湖: 大侠的成长之路(高自由度的武侠体验) |
3 | Temple Run | Photomath - Camera Calculator | Resident Evil 4: PLATINUM | Google Docs | NAVIGON Europe | Unblue |
4 | Pandora - Music & Radio | Money Pro - Personal Finance, Budget, Bills | Moto X Mayhem | Google Sheets | FineScanner Pro - PDF Document Scanner App + OCR | VR-Crazy Car Traffic Racing |
5 | After School - Funny Anonymous School News | Call of Duty: Zombies | Google Allo — smart messaging | Articulation Station Pro | Peppa Pig: Theme Park | |
6 | Bible | The Room Three | Jet Car Stunts | Inbox by Gmail | Articulation Test Center Pro | NBC Sports Scores |
7 | Candy Crush Saga | My Movies Pro - Movie & TV Collection Library | Virtual Villagers 5: New Believers | Google Translate | VPN Pro | Lifetime Proxy & Best VPN by Betternet | UNiDAYS: Student Discounts for Shopping Top Br... |
8 | Spotify Music | Pennies – Budget and Expense Tracker | Fish Tycoon | Space by Tinybop | Cubasis 2 - Mobile Music Creation System | Disney Applause |
9 | Angry Birds | Stormfall: Rise of Balur | Virtual Families | The Robot Factory by Tinybop | プチ・ロワイヤル仏和辞典(第4版)・和仏辞典(第3版) | Web Browser Recorder Pro |
免费 vs 付费
import matplotlib
#中文显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
#负号显示
matplotlib.rcParams['axes.unicode_minus'] = False
#付费app和免费app在不同评分区间的分布情况
plt.figure(figsize=(20,10))
sns.countplot(data=df,x='user_rating',hue='paid',palette=['#441791','#EB3144'])
plt.xlabel('Ratings',fontsize=14)
plt.ylabel('Counts',fontsize=14)
plt.title('免费app与付费app的评分对比图',fontsize=16)
plt.legend(labels=['Free apps','Charging apps'])
plt.show()
- 从图中可以看出,免费和付费app的评分区间分布基本一致,并且集中在高分段
# 收费app的价格分布情况
df['price'].value_counts()
0.00 4056
0.99 728
2.99 683
1.99 621
4.99 394
3.99 277
6.99 166
9.99 81
5.99 52
7.99 33
14.99 21
19.99 13
8.99 9
24.99 8
13.99 6
11.99 6
29.99 6
12.99 5
15.99 4
59.99 3
17.99 3
22.99 2
23.99 2
20.99 2
27.99 2
16.99 2
49.99 2
39.99 2
74.99 1
18.99 1
34.99 1
99.99 1
299.99 1
47.99 1
21.99 1
249.99 1
Name: price, dtype: int64
#不同类型的收费app的价格分布情况
app_price = df[df['price']<=30]
plt.figure(figsize=(20,16))
sns.boxplot(x='price',y='prime_genre',data=app_price[app_price['paid']==1])
plt.xlabel('Price',fontsize=14)
plt.ylabel('Genre',fontsize=14)
plt.title('不同类型付费app的价格分布情况',fontsize=16)
plt.show()
- 从图中可以看出,医疗类app的价格因其专业性价格总体偏高
#考虑付费app价格与用户评分之间的相关关系
app_price_rating = df[df['price']<=50]
plt.figure(figsize=(10,5))
sns.scatterplot(x='price',y='user_rating',data=app_price_rating)
plt.xlabel("Price",fontsize=14)
plt.ylabel("User_rating",fontsize=14)
plt.title("付费app价格与评分之间的对比图",fontsize=16)
plt.show()
- 纵向来看,左边数据分布密集,说明价格低的app评分参差不齐,并没有出现价格低评分就低这样的情况
- 横线来看,评分较高的app部分价格确实要高一些,同时也看到,也有一些app本身评分低,但是价格却高,这个只是个别情况
#不同类型app的数量分布,免费和付费比较
plt.figure(figsize=(25,15))
sns.countplot(data=df,y='prime_genre',hue='paid',palette=['#441791','#EB3144'],order=df['prime_genre'].value_counts().index)
plt.xlabel('Counts',fontsize=14)
plt.ylabel('Genre',fontsize=14)
plt.title('免费与收费App的数量对比图',fontsize=16)
plt.legend(labels=['Free apps','Charging apps'],loc='best')
plt.show()
- 从图中可以看出,无论免费与否,游戏类的app都是数量最多的,从而看出用户的需求
- 其中,购物类软件没有付费的,在教育、医疗、音乐、健康、视频等这类专业性app上付费的产品更多
#总体来看,各类型app的数量情况
app_type = df["prime_genre"].value_counts().reset_index(name='counts')
plt.figure(figsize=(25,10))
sns.barplot(data=app_type,y='index',x='counts')
plt.xlabel('Counts',fontsize=14)
plt.ylabel('Genre',fontsize=14)
plt.title('各个类型app的数量统计图',fontsize=16)
plt.show()
- 总体来看,游戏、娱乐、教育这类app的需求量较大,其中游戏类app的数量在付费和免费里都是数量最多的
# 游戏类app的价格与评分之间的关系
fig = plt.figure(figsize=(10,8))
heat = df[df['prime_genre']=='Games'].loc[:,["price","user_rating"]]
sns.heatmap(heat.corr(method='kendall'),vmin=0, vmax=1, annot=True,linewidths=.5,cmap="YlGnBu")
plt.title("游戏类app的价格与评分相关性",fontsize=16)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.show()
- 对于想开发付费游戏类app的开发者来说,价格与评分之间没有显著的相关性。所以尽量选择开发免费
#免费与付费app在支持语言和设备的差异情况
fig = plt.figure(figsize=(20,10))
ax1=fig.add_subplot(121)
ax2=fig.add_subplot(122)
sns.violinplot(x="paid", y="sup_devices.num", data=df, width=.5, palette=['#441791','#EB3144'],ax=ax1)
sns.violinplot(x="paid", y="lang.num", data=df, width=.5, palette=['#441791','#EB3144'],ax=ax2)
ax1.set_title('免费与付费app在支持设备上的差异',fontsize=16)
ax1.set_xlabel('Paid',fontsize=14)
ax1.set_ylabel('Device',fontsize=14)
ax2.set_title('免费与付费app在支持语言上的差异',fontsize=16)
ax2.set_xlabel('Paid',fontsize=14)
ax2.set_ylabel('Lang',fontsize=14)
plt.show()
- 付费app中支持的设备数量稍多于免费app,但都主要集中在37-38种设备之间。在支持的语言数量上,总体区别不大 ,少部分免费app要比付费app支持的语言更多。
#免费app与付费app内存大小分布情况
fig = plt.figure(figsize=(16,8))
data_free = df[df['paid']==0].loc[:,'size_mb']
data_paid = df[df['paid']==1].loc[:,'size_mb']
ax1=fig.add_subplot(121)
ax2=fig.add_subplot(122)
sns.distplot(data_free,hist=True,ax=ax1)
sns.distplot(data_paid,hist=True,ax=ax2)
ax1.set_title('免费app内存大小分布图',fontsize=16)
ax1.set_xlabel('Size',fontsize=14)
ax2.set_title('付费app内存大小分布图',fontsize=16)
ax2.set_xlabel('Size',fontsize=14)
plt.show()
- 从图中可以看出,免费app与付费app内存占用大小没有特别明显的分布差别,有部分付费app占用的空间较大,可能原因是付费app提供的内容更加丰富,需要的空间也就更大
#付费类app的大小与价格之间的相关性分析
df_paid = df[df["paid"]==1]
heat = df_paid.loc[:,["size_mb","price"]]
plt.figure(figsize=(10,8))
sns.heatmap(heat.corr(method='kendall'),vmin=0, vmax=1, annot=True,linewidths=.5,cmap="YlGnBu")
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title('付费类app的大小与价格之间的相关性',fontsize=16)
plt.show()
- 从热图中可以看出,付费app的大小和价值之间确实存在一定的正相关关系
所有版本 vs 当前版本
#当前版本平均评分与历史版本平均评分的变动情况
plt.figure(figsize=(20,10))
sns.boxplot(x='curr_ver',y='prime_genre',data=df,whis=[0,100],width=0.8,palette='Spectral')
sns.stripplot(x='curr_ver',y='prime_genre',data=df,size=5,color=".0",linewidth=1,palette='Spectral')
plt.xlabel('版本评分变动情况',fontsize=14)
plt.ylabel('游戏类型',fontsize=14)
plt.title('各类型app评分变动情况',fontsize=16)
plt.show()
- 从图中可以看出,大部分类型的app当前版本相较于历史版本呈现持平或者评分下降趋势,部分类型的app评分提高
#将app划分为高评分与低评分
high_rate = df[df['user_rating']>=4.0]
low_rate = df[df['user_rating']<=3.0]
#查看高评分app的评分变动情况
plt.figure(figsize=(20,10))
sns.boxplot(x="curr_ver", y="prime_genre", data=high_rate,whis=[0, 100], width=.8, palette="Spectral")
sns.stripplot(x="curr_ver", y="prime_genre", data=high_rate,size=5, color=".0", linewidth=1,palette="Spectral")
plt.xticks(np.arange(-6,5,1))
plt.xlabel('当前版本评分变动值',fontsize=14)
plt.ylabel('游戏类型',fontsize=14)
plt.title('各类型高评分app评分变动情况',fontsize=16)
plt.show()
- 将app在评分上进行细分后,变动情况更加明显。购物和金融类评分呈现大幅下降趋势,但总的来看大部分app的评分都是持平和略微提高的
app大小
#app大小与用户评分之间的关系
plt.figure(figsize=(10,10))
sns.scatterplot(data=df, x="user_rating_ver",y='size_mb')
plt.xlabel('评分',fontsize=14)
plt.ylabel('app大小',fontsize=14)
plt.title('app大小与用户评分关系图',fontsize=16)
plt.show()
- 总的来看,app占用内存空间都是比较小的,相比较之下,高评分的app普遍比较小,其中评分在1-3分的这些中等评分的app内存大小几乎都很小
app详情信息
#app展示图片数据分布情况
plt.figure(figsize=(20,10))
sns.distplot(df['ipadSc_urls.num'],hist=True,kde=True,rug=False)
plt.xlabel('Picture Number',fontsize=14)
plt.ylabel('Counts',fontsize=14)
plt.title('展示界面的图片数分布情况',fontsize=16)
plt.show()
- 从核密度分布直方图中可以清晰地看出,大部分app的详情展示界面选择放置4-5张图片
# 展示图片数量与评分人数和评分之间的相关性分析
heat = df.loc[:,["rating_count_tot","user_rating","ipadSc_urls.num"]]
plt.figure(figsize=(15,10))
sns.heatmap(heat.corr(method='kendall'),vmin=0, vmax=1, annot=True,linewidths=.5,cmap="YlGnBu")
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title('详情图片数、app评分与评分人数之间的相关性',fontsize=16)
plt.show()
- 从图中可以看出,详情图片数、app评分与评分人数之间并没有显著的相关性
app适龄情况
#查看app的适龄情况
plt.figure(figsize=(15,10))
sns.countplot(data=df,y='prime_genre',hue='cont_rating')
plt.xlabel('Counts',fontsize=14)
plt.ylabel('App types',fontsize=14)
plt.title('各个类型APP的适龄情况',fontsize=16)
plt.legend(title='Adapt age',loc=4)
plt.show()
- 大部分类型app的适龄范围都是4+,软件的适用年龄段都很广泛。由于游戏中存在色情、暴力、血腥等因素,因此适龄段中9+和12+的也比较多。同时,值得注意的一点是,在社交网络类型的app中,17+的软件数量是超过4+的,推测可能这类软件受到政策的相关影响,为了保护未成年群体,限制未成年使用某些特殊的社交app。
总结
- app最好是免费下载的
- app的功能可以做的更全面些,尽管随着功能模块的增加,app的安装包也会随之变大,但通过分析发现,安装包的大小并未呈现出与用户数量和评分的显著的相关性。
- 对于想开发游戏类型app的公司来说,尽量选择开发免费版本。在开发前要定位目标用户群体,并且做好市场调研。同时游戏适龄最好“4+”,这样能覆盖的用户群体也更广。
- 收费类app的价格集中在9.99美元以内
- 在app的设备支持数量上最好不要低于37种设备型号,超过40种设备更佳;支持语言方面最好不要低于5种语言,当然适配的语言越多不同地区的用户体验也会得到改善,这个还是要看自身app的主要市场是在什么地区。
- app展示页面的图片数尽量放满5张,虽然图片与评分之间的正相关性较低,但是统计信息显示大部分app图片数量在4-5张。
- 部分类别的app在更新版本时要注意用户评分反馈,如购物和金融类app均呈现出评分下降趋势
Kaggle项目之Mobile App Store相关推荐
- 数据科学项目:适用于App Store和Google Play的有利可图的应用配置文件
At Dataquest, we strongly advocate portfolio projects as a means of getting a first data science job ...
- App内购项目的App Store推广
转载自:http://blog.hudongdong.com/ios/918.html 之前说了<iOS的应用内支付In-app purchase的开发>,说明了App内购项目的流程,今天 ...
- iOS 内购项目的App Store推广
iOS 11以后的用户可以在App Store内的下载页面内直接购买应用的内购商品,这项功能苹果称作做Promoting In-App Purchases,如果你的App需要在App Store推广自 ...
- 关于 App Store 苹果商店价格的那些事(历上最全版)
作者:iHTCboy 一.前言 苹果 2022 年 12 月 6 日宣布 App Store 定价机制最重大升级,新增 700 个价格点.小编当时的总结和分析: App Store 新价格: 最低可设 ...
- Mobile APP(Apple IOS app store)特性分析
Mobile APP(Apple IOS app store)特性分析 一.数据来源.分析目的和思路 1. 数据来源 IOS占据将近一半的智能手机市场,其App Store中有大量App,为了分析Ap ...
- Unity项目添加广告,内购测试并上线APP Store
Ⅰ.添加广告并真机测试 1.用示例广告ID演示Admob Unity 插件 参考(admob官方文字教程) 导入插件包 设置Admob应用ID 示例广告id(测试时务必用示例广告id) 注意导出的ap ...
- 项目总结1:微信扫码自动识别设备类型并跳转到相应的应用下载页面(apk或App Store)之解决方案
问题分析:普通页面一般无法调用微信的扫一扫接口,从而否定通过微信扫一扫功能给我们判断当前扫码的设备类型. 解决方案:通过应用下载页面自身来获取当前访问的客户端设备类型(iPhone.Android.i ...
- App Store 内购项目配置
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助. 本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统. ...
- SwiftUI iOS 完整项目之基于CoreData构建购物计划App(教程含源码App Store上线app)
实战需求 SwiftUI iOS 完整项目之基于CoreData构建购物计划App(App Store上线app) 用我们从超市需要的东西来代替我们口袋里的废纸.只需输入您想要的项目.数量.任何额外备 ...
最新文章
- matlab在曲线给命名,matlab 利用xlsread画图,怎么将一组excel数据导入,通过matlab作图...
- oracle如何计算2个坐标的距离,百度地图两个坐标之间的距离计算
- pycharm 报黄(黄字、黄色)警告 Local variable 'xxx' might be referenced before assignment
- 微服务架构学习 之 什么是微服务
- HDU1016 Prime Ring Problem dfs+回溯
- 开源一些Delphi系统:mp3play
- CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)
- 关于车机互联方式的一点想法
- POJ1015-Jury Compromise【01背包,dp】
- 浅入浅出 Android 安全:第五章 Android 应用层安全
- c语言设计底层,【学习小总结】C语言的底层开发
- Adobe Illustrator的教程:如何建立扁平化设计角色动画
- (转)SQLServer_十步优化SQL Server中的数据访问 三
- free git online
- 黑体std能商用_用产品诠释商用PC成功之道 惠普战66高性能商用一体机评测
- 大一计算机题库百度云,大一计算机考试题库.pdf
- 超女复活赛,明星大补考
- 数据应用系统的压力测试方案
- 【译】网页像素追踪原理
- sar adc的常用指标(一)