利用Python进行数据分析案例

来自Bitly的usa.gov数据
1、数据说明:该数据是以json格式储存的,该数据集共有十八个维度,我在这里只做两个任务。
a. 对时区进行计数
b. 对windows以及非windows用户进行分组统计,并统计出在相同时区下Windows用户和非Windows用户的百分数占比。

#用pandas对其进行展示,并进行可视化。
import json
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns

#读取json数据集并用图表格式显示
path = './datasets/bitly_usagov/example.txt'
records = [json.loads(line) for line in open(path)]
frame = pd.DataFrame(records)

#对时区进行计数(用panda 的value_counts函数进行计数)
#首先对数据进行预处理,我们可以先给记录中的未知或缺失的时区值填上一个替代值。
clean_tz = frame['tz'].fillna('Missing')
clean_tz[clean_tz == ''] = 'Unknown'
count = clean_tz.value_counts() #该函数对tz的各个元素进行计数并按降序进行排列
#取出前十名并进行可视化
tz_counts = count[:10]
sns.barplot(y = tz.counts.index, x = tz.counts.values)

#求出百分占比并进行可视化
def normaltotal(setdata):
    percent = setdata/setdata.sum()
    return percent
tz_percent = normaltotal(count)

tz_percents = tz_percent[:10]
sns.barplot(y = tz_percents.index, x = tz_percents.values)
scale_ls = [i/10 for i in range(11)]
index_ls = [str(int((i*100)))+'%' for i in np.linspace(0,1,11)]
plt.xticks(scale_ls,index_ls)
plt.title('各时区所占百分比')
plt.show()

#2.求出Windows用户和非Windows用户,定义维度a中包含了Windows的为Windows用户,其余为非Windows用户。
cframe = frame[frame.a.notnull()]
cframe['os'] = np.where(cframe['a'].str.contains('Windows'), 'Windows', 'NotWindows')
by_tz_os = cframe.groupby(['tz','os'])
agg_count = by_tz_os.size().unstack().fillna(0)
agg_count
count_subset = agg_count.loc[agg_count.sum(1).nlargest(10).index]
count_subset = count_subset.stack()
count_subset.name = 'total'
count_subset = count_subset.reset_index()

#求出Windows用户NotWindows用户百分占比并进行可视化
def  normaltotal2(group):
    group['percent']= group.total/group.total.sum()
    return group
result = count_subset.groupby('tz').apply(normaltotal2)
sns.barplot(x = 'percent', y = 'tz', hue='os', dataset=result)
scale_ls = [i/10 for i in range(11)]
index_ls = [str(int((i*100)))+'%' for i in np.linspace(0,1,11)]
plt.xticks(scale_ls,index_ls)
plt.title('在同一时区下windows和notwindows用户的比例')
plt.show()

利用Python进行数据分析案例_第1张图片
利用Python进行数据分析案例_第2张图片
从图中可以看出在美国的用户比较多且在New_York的用户占到了总数的35%。
利用Python进行数据分析案例_第3张图片
从图中可以看出各个时区的windows用户和非windows用户所占比差异。

本项目知识点总结:
1、将用户切分为windows和非windows用户的方法:
np.where(cframe[‘a’].str.contains(‘Windows’), ‘Windows’, ‘NotWindows’)
2、groupby的方法size返回一个包含组大小信息的Series,即分组计数。
3、count_values()与nlargest():
count_values 即分组计数并把数据从大到小进行排列
nlargest 即用groupby().size()后取出最大的几个数;也可以用series的方法argsort()加dataframe的 take方法实现。
即count_subset = agg_count.loc[agg_count.sum(1).nlargest(10).index]
也等于 indexer = agg_count.sum(1).argsort()
count_subset = agg_count.take(indexer[-10:])

你可能感兴趣的:(pandas数据分析)