目录标题
- 案例1 :Appstore数据分析
- 1.1 背景和分析需求
- 1.2 数据加载和处理
- 1.3 App价格不同维度分析
- 1.4 数据可视化分析
- 1.5 业务需求分析
- 1.5.1 免费或收费App集中在哪些类别?
- 1.5.2 免费或收费App在不同评分区间的分布?
- 1.5.3 app价格、大小和用户评分之间的关系
案例1 :Appstore数据分析
1.1 背景和分析需求
苹果商店的数据
分析背景:对App下载和评分数据分析,帮助App开发者获取和留存用户
分析需求:
免费和收费的App都集中在哪些类别
收费App的价格分布?不同类别的价格分布?
App文件的大小和价格,评分之间是否有关
分析流程:—框架套
1,看数据概况(行列数据,缺失值)
2,单变量分析(数值型-平均值、最小最大、标准差,类别型-多少类别、占比)
3,多变量分析(类别交叉分析,变量之间的相关性分析)
4,可视化分析(分布趋势-直方图,不同组差异-柱状图,相关性-散点图、热力图)
1.2 数据加载和处理
数据加载-数据查看-数据规范化处理(新增列,删除列,换单位)
applestore数据
app = pd.read_csv("./data/applestore.csv",index_col=0)
app.head()
app.shape
app.describe()
app.info()
了解数据后,下面对数据的规范化处理
app['size_bytes']/(1024*1024)
app.head()
app['size_bytes'].describe()
app['paid'] = app['price'].apply(lambda x: 1 if x>0 else 0)
app.head()
1.3 App价格不同维度分析
单变量分析
value_count()函数:对列中不同种类进行计数
app.price.value_count()
pd.cut(根据分组列,分组临界值,labels标签列)
bins = [0,2,10,30]
labels &#61; [&#39;<2&#39;,&#39;<10&#39;,&#39;<30&#39;]
app[&#39;price_new&#39;] &#61; pd.cut(app[&#39;price&#39;],bins,right&#61;False, labels &#61; labels)
app.head()
groupby(‘列A’).列B.describe()
app.groupby(&#39;price_new&#39;).price.describe()
app.groupby(&#39;prime_genre&#39;).price.describe()
删除列A不满足条件的行&#xff1a; data &#61; data[date[列A]要满足条件]
app &#61; app[app[&#39;price&#39;]<49.99]
app.head()
app.rating_count_tot.describe()
bins &#61; [0,1000,5000,100000,5000000]
app[&#39;rating_new&#39;] &#61; pd.cut(app[&#39;rating_count_tot&#39;],bins,right&#61;False)
app.groupby(&#39;rating_new&#39;).price.describe()
1.4 数据可视化分析
1&#xff09;查看app的类别和用户评分之间的关系-折线图
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.replot(x&#61;&#39;prime_genre&#39;,y&#61;&#39;user_rating&#39;,kind&#61;&#39;line&#39;,data&#61;app,height&#61;5,aspect&#61;3)
问题&#xff1a;x轴的值全部挤在了一起
将x轴的项旋转一下
sns.replot(x&#61;&#39;prime_genre&#39;,y&#61;&#39;user_rating&#39;,kind&#61;&#39;line&#39;,data&#61;app,height&#61;5,aspect&#61;3)
plt.xticks(rotation&#61;45,horizontalalignment&#61;&#39;right&#39;,fontweight&#61;&#39;light&#39;,fontsize&#61;&#39;x-large&#39;)
评分大多分布在2-4分之间
2&#xff09;查看价格小于9.9元的app价格分布 --柱状图
plt.figure(figsize&#61;(20,8))
app_result &#61; app[app[&#39;price&#39;]<&#61;9.9]
sns.distplot(app_result[&#39;price&#39;])
结论&#xff1a;大多是免费的&#xff0c;0-3占了绝大多数
3&#xff09;查看不同类别的收费App的价格分布 --箱线图
plt.figure(figsize&#61;(20,8))
sns.boxplot(x&#61;&#39;price&#39;,y&#61;&#39;prime_genre&#39;,data&#61;app[app[&#39;paid&#39;]&#61;&#61;1])
plt.yticks(fontweight&#61;&#39;light&#39;,fontsize&#61;&#39;x-large&#39;)
4&#xff09;查看数量最多的前五个类别收费App的价格分布
top5 &#61; app.groupby(&#39;prime_genre&#39;)[&#39;price&#39;].count().sort_values(ascending&#61;False).head()
plt.figure(figsize&#61;(20,8))
sns.boxplot(x&#61;&#39;price&#39;,y&#61;&#39;prime_genre&#39;,data&#61;app5[app5[&#39;paid&#39;]&#61;&#61;1])
5)查看app数据中价格和用户评分的关系&#xff0c;绘制散点图
plt.figure(figsize&#61;(20,8))
sns.scatterplot(x&#61;&#39;price&#39;,y&#61;&#39;user_rating&#39;,data&#61;app)
结论&#xff1a;从散点图可以看出&#xff0c;价格和评价关联不强&#xff0c;高价的应用评价两极分化&#xff0c;但数据相对较少
sns.barplot(x&#61;&#39;prime_genre&#39;,y&#61;&#39;user_rating&#39;,date&#61;app5)
sns.barplot(x&#61;&#39;prime_genre&#39;,y&#61;&#39;user_rating&#39;,date&#61;app5,hue&#61;&#39;paid&#39;)
1.5 业务需求分析
1.5.1 免费或收费App集中在哪些类别&#xff1f;
思路&#xff1a;统计类别有多少app&#xff0c;排序&#xff0c;可视化时通过颜色区分收费和免费的
plt.figure(figsize&#61;(20,8))
sns.countplot(y&#61;&#39;prime_genre&#39;,data&#61;app,hue&#61;&#39;paid&#39;,order&#61;app[&#39;prime_genre&#39;].value_count().index)
1.5.2 免费或收费App在不同评分区间的分布&#xff1f;
思路&#xff1a;评分做区间分组&#xff0c;分组后看每组的评分数据
bins&#61; [0,0.5,2.5,4.5,5.1]
app[&#39;rating_level&#39;] &#61; pd.cut(app.user_rating,bins&#61;bins,right&#61;False)
app.head()
app.groupby(&#39;rating_level&#39;)[&#39;user_rating&#39;].describe()
plt.figure(figsize&#61;(20,8))
sns.countplot(x&#61;&#39;paid&#39;,data&#61;app,hue&#61;&#39;rating_level&#39;)
1.5.3 app价格、大小和用户评分之间的关系
思路&#xff1a;计算相关系数&#xff0c;热力图
app[[&#39;price&#39;,&#39;size_mb&#39;,&#39;user_rating&#39;]].corr()
sns.heatmap(app[[&#39;price&#39;,&#39;size_mb&#39;,&#39;user_rating&#39;]].corr())
结论&#xff1a;大小和价格之间有点相关性&#xff0c;其他的没有