数据分析案例
Posted xiaohuhu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析案例相关的知识,希望对你有一定的参考价值。
1、json型数据分析
import json path=r‘D:学习文档利用python数据分析第二版代码datasetsitly_usagovexample.txt‘ #records是一个list,中间的对象为dict,Json.loads()将dict转为str records=[json.loads(line) for line in open(path,‘r‘, encoding=‘UTF-8‘)] #注意要判断rec中是否有tz,否则会报错 time_zones=[rec[‘tz‘] for rec in records if ‘tz‘ in rec] #对时区进行计数 def get_counts(sequence): counts={} for x in sequence: if x in counts: counts[x]+=1 else: counts[x]=1 return counts from collections import defaultdict counts=defaultdict(int) #生成一个空字典,默认值是int型 counts=get_counts(time_zones) #统计前十位的时区及其计数 def top_counts(count_dict, n=10): value_key_pairs=[(count,tz) for tz,count in count_dict.items()] value_key_pairs.sort() #按count排序 return value_key_pairs[-n:] top_counts(counts) #使用标准库获取前十的时区计数 from collections import Counter counts=Counter(time_zones) counts.most_common(10) #用pandas对时区进行计数 import pandas as pd frame = pd.DataFrame(records) #计算一个Series中各值出现的频率 tz_counts=frame[‘tz‘].value_counts() #tz_counts[:10] #fillna会替换NaN值为Missing,NaN不是空值,而是没有这一列tz,所以值为NaN。 clean_tz=frame[‘tz‘].fillna(‘Missing‘) #找出tz为空的值,并替换为unknown clean_tz[clean_tz==‘‘]=‘Unknown‘ tz_counts=clean_tz.value_counts() tz_counts[:10] #用seaborn包创建水平柱状图 import seaborn as sns subset=tz_counts[:10] #sns.barplot(y=subset.index,x=subset.values) #dropna去除数据结构中值为空的数据行 results=pd.Series([x.split() for x in frame.a.dropna()]) results.value_counts() #移除空数据 frame=frame[frame.a.notnull() & frame.tz.notnull()] #np.where(condition, x, y)满足条件(condition),输出x,不满足输出y。 frame[‘os‘]=np.where(frame[‘a‘].str.contains(‘Windows‘),‘Windwos‘,‘Not Windows‘) #先按tz分组,在按os分组 newframe=frame.groupby([‘tz‘,‘os‘]) #对计数结果进行重塑,unpack把列变成行 agg_counts=newframe.size().unstack().fillna(0) agg_counts[:10] #sum(1)按行求和,argsort()返回从小到大排序的索引 indexer=agg_counts.sum(1).argsort() #截取最后10行最大值 count_subset=agg_counts.take(indexer[-10:]) count_subset #stack把行变成列 count_subset=count_subet.stack() count_subset.name=‘total‘ count_subset=count_subet.reset_index() count_subset[:10] sns.barplot(x=‘total‘,y=‘tz‘,hue=‘os‘,data=count_subset)
2、固定分隔符的数据分析
import pandas as pd #设置白色表格的样式 pd.options.display.max_rows=10 unames=[‘user_id‘,‘gender‘,‘age‘,‘occupation‘,‘zip‘] users=pd.read_table(r‘D:学习文档利用python数据分析第二版代码datasetsmovielensusers.dat‘,sep=‘::‘,header=None,names=unames) rnames=[‘user_id‘,‘movie_id‘,‘rating‘,‘timestamp‘] ratings=pd.read_table(r‘D:学习文档利用python数据分析第二版代码datasetsmovielens atings.dat‘,sep=‘::‘,header=None,names=rnames) mnames=[‘movie_id‘,‘title‘,‘genres‘] movies=pd.read_table(r‘D:学习文档利用python数据分析第二版代码datasetsmovielensmovies.dat‘,sep=‘::‘,header=None,names=mnames) #将ratings跟users和movies合并 data=pd.merge(pd.merge(ratings,users),movies) data.iloc[0] #按性别计算每部电影的平均分,电影title是索引,gender是列 mean_ratings=data.pivot_table(‘rating‘,index=‘title‘,columns=‘gender‘,aggfunc=‘mean‘) mean_ratings[:5] ratings_by_title=data.groupby(‘title‘).size() #标题索引中含有评分数据大于250条的电影名称 active_titles=ratings_by_title.index[ratings_by_title>=250] mean_ratings=mean_ratings.loc[active_titles] #获取女性观众最喜欢的电影,对F列降序排列 top_female_ratings=mean_ratings.sort_values(by=‘F‘,ascending=False) top_female_ratings[:10] #计算评分分歧,考虑性别 mean_ratings[‘diff‘]=mean_ratings[‘M‘]-mean_ratings[‘F‘] sorted_by_diff=mean_ratings.sort_values(by=‘diff‘) sorted_by_diff[:10] sorted_by_diff[::-1][:10] #找出分歧最大的电影,不考虑性别因素 rating_std_by_title=data.groupby(‘title‘)[‘rating‘].std() rating_std_by_title=rating_std_by_title.loc[active_titles] rating_std_by_title.sort_values(ascending=False)[:10]
3、
以上是关于数据分析案例的主要内容,如果未能解决你的问题,请参考以下文章
详细实例说明+典型案例实现 对动态规划法进行全面分析 | C++
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段