zoukankan      html  css  js  c++  java
  • 数据分析案例

    1、json型数据分析

    import json
    import pandas as pd
    import numpy as np
    import seaborn as sns
    path=r'd:example.txt'
    with open(path) as f:
        #读取数据,并用列表推导式生成新列表
        records=[json.loads(line) for line in f]
    records[0]
    
    #过滤含有tz字段的时区数据
    time_zones = [rec['tz'] for rec in records if 'tz' in rec]
    time_zones[:10]
    
    frame=pd.DataFrame(records)
    #frame.info()
    #统计tz字段的计数
    tz_counts=frame['tz'].value_counts()
    tz_counts[:10]
    #fillna()替换缺失值
    clean_tz=frame['tz'].fillna('Missing')
    #空字符串用Unknown替换
    clean_tz[clean_tz=='']='Unknown'
    tz_counts=clean_tz.value_counts()
    subset=tz_counts[:10]
    #用seaborn创建水平柱状图
    #sns.barplot(y=subset.index,x=subset.values)
    
    #dropna()去除数据结构中值为空的数据行
    results=pd.Series([x.split()[0] for x in frame.a.dropna()])
    
    results.value_counts()
    #移除没有a的数据
    cframe=frame[frame.a.notnull()]
    #新增1列os,np.where(condition, x, y)满足条件(condition),输出x,不满足输出y。
    cframe['os']=np.where(cframe['a'].str.contains('Windows'),'Windows','Not Windows')
    cframe['os'][:5]
    #先按tz分组,在按os分组
    by_tz_os=cframe.groupby(['tz','os'])
    
    #size计数时包含NaN值,unpack把列变成行
    agg_counts=by_tz_os.size().unstack().fillna(0)
    agg_counts[:10]
    
    #sum(1)按行求和,argsort()返回从小到大排序的索引
    indexer=agg_counts.sum(1).argsort()
    indexer[:10]
    
    #截取最后10行最大值。
    count_subset=agg_counts.take(indexer[-10:])
    #stack把行变成列
    count_subset=count_subset.stack()
    count_subset.name='total'
    count_subset=count_subset.reset_index()
    
    #hue按os分类
    #sns.barplot(x='total',y='tz',hue='os',data=count_subset)
    
    #计算百分比占比
    def norm_total(group):
        group['normed_total']=group.total/group.total.sum()
        return group
    results=count_subset.groupby('tz').apply(norm_total)
    sns.barplot(x='normed_total',y='tz',hue='os',data=results)

    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]

     

  • 相关阅读:
    Redis应用场景
    GDAL读取Shp问题解决:Unable to open EPSG support file gcs.csv
    IDEA整合Mybatis+Struts2+Spring (二)--整合框架
    IDEA整合Mybatis+Struts2+Spring(一)--新建项目
    Spring中的单例模式和多例模式的应用
    java设计模式1--单例模式
    HashMap原理以及自己实现HashMap
    JQ之$.ajax()方法以及ajax跨域请求
    数据库简单操作以及多表查询操作的一些总结
    JS正则表达式学习总结
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/12054341.html
Copyright © 2011-2022 走看看