精华内容
下载资源
问答
  • 爬取好友列表,显示好友昵称、性别和地域和签名, 文件保存为 xlsx 格式  2.统计好友的地域分布,并且做成词云和可视化展示在地图上  3.获取所有好友的头像,合并成一张大 三、运行环境及相...

    此小项目参考《微信好友数据分析 》——余本国

    一、功能介绍:

      本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并
    进行一些简单的数据分析,功能包括:
      1.爬取好友列表,显示好友昵称、性别和地域和签名, 文件保存为 xlsx 格式
      2.统计好友的地域分布,并且做成词云和可视化展示在地图上
      3.获取所有好友的头像,合并成一张大图

    三、运行环境及相关库的安装

    1. Python 3.x(使用Anaconda的spyder编辑器)
    2. 使用到的Python库安装:
    • 在Anaconda的Anaconda Prompt下运行下列命令,安装前先升级pip,代码如下:
    Python -m pip install --upgrade pip
    • 安装 wxpy: pip install wxpy
       
    • 安装 PIL: pip install pillow
       
    • 安装 pyecharts:pip install pyecharts
       
    • 安装 Itchat: pip install itchat
       
    • 安装 Jieba: pip install jieba
       
    • 安装 Pandas:pip install Pandas
       
    • 安装 Numpy:pip install Numpy
    • 安装 wordcloud:pip install wordcloud
    • 安装地图数据包:pip install echarts-china-provinces-pypkg    
      •   pip install echarts-countries-pypkg 

    四、如何运行?(初次运行可以使用spyder的IPython console进行交互式输入)

      以上库安装好了以后就可进行以下步骤coding

      1.登录——获取用户信息:

      打开spyder的IPython console 进行交互式编写

     

    In [3]: from wxpy import * #导入模块
    
    In [4]: bot=Bot(cache_path=True)#初始化机器人,选择缓存模式(扫码)登录
    Getting uuid of QR code.
    Downloading QR code.
    Please scan the QR code to log in.
    Please press confirm on your phone.
    Loading the contact, this may take a little while.
    Login successfully as 舒心陈
    
    In [5]: friend_all=bot.friends()
    
    In [6]: print(friend_all[0].raw)#friend_all[0]是你的微信昵称,.raw则是获取你的全部信息
    {'UserName': '@616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c', 'City': '', 'DisplayName': '', 'PYQuanPin': '', 'RemarkPYInitial': '', 'Province': '', 'KeyWord': '', 'RemarkName': '', 'PYInitial': '', 'EncryChatRoomId': '', 'Alias': '', 'Signature': '好开心啊~', 'NickName': '舒心陈', 'RemarkPYQuanPin': '', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=879163398&username=@616bbbd522bbfce0dcad9082de7100b2548b9d8c54f466933fe26ce46f4eb80c&skey=@crypt_6e5fb2f2_41b8311b5e5bb5ea58c12688ff48ccf9', 'UniFriend': 0, 'Sex': 1, 'AppAccountFlag': 0, 'VerifyFlag': 0, 'ChatRoomId': 0, 'HideInputBarFlag': 0, 'AttrStatus': 0, 'SnsFlag': 1, 'MemberCount': 0, 'OwnerUin': 0, 'ContactFlag': 0, 'Uin': 3129189532, 'StarFriend': 0, 'Statues': 0, 'MemberList': [], 'WebWxPluginSwitch': 0, 'HeadImgFlag': 1}

    2、统计用户信息

    In [7]: len(friend_all) #统计查阅了多少好友
    Out[7]: 173
      
      1.  为了获取好友信息中需要的部分,我们对信息需要进行处理。从上面的获取信息全字段来看,我们获取的每位好友的信息都是一个字典,字典里只有'City'、'Province'、'Signature'、
    'NickName'、'HeadImgUrl'、'Sex'是我们需要的。下面我们就对这几个 key 进行提取。方法是:对这几个 key 提取相应的值,放入一个列表 list_0 中,即每个好友的这些 key
    的值做成了一个列表,在对所有的好友使用 for 循环进行同样的操作,将所有好友的列表做成一个大列表 lis 的元素,即列表中的元素是列表。 
     
    lis=[]
    for a_friend in friend_all:
     NickName = a_friend.raw.get('NickName',None)
     #Sex = a_friend.raw.get('Sex',None)
     Sex ={1:"",2:"",0:"其它"}.get(a_friend.raw.get('Sex',None),None)
     City = a_friend.raw.get('City',None)
     Province = a_friend.raw.get('Province',None)
     Signature = a_friend.raw.get('Signature',None)
     HeadImgUrl = a_friend.raw.get('HeadImgUrl',None)
     HeadImgFlag = a_friend.raw.get('HeadImgFlag',None)
     list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag]
    lis.append(list_0)

    注意:这里令lis=[ ]在一下存储数据如Excel时会使得表格缺少列标题行,在此我建议将lis=[ ]改为如下:

    lis=[['NickName','Sex','City','Province','Signature','HeadImgUrl',\
        'HeadImgFlag']]    
      2.  为了将 lis 列表能够保存到 excel 中,便于后面的使用,也便于此方法的再次使用,我们将这个功能写成函数 lis2e19(),即将这种列表套列表的 lis 转成 19 版的 exce 进行保存在本地。 

     

    def lis2e19(filename,lis):
        '''
        将列表写入 07 版 excel 中,其中列表中的元素是列表.
        filename:保存的文件名(含路径)
        lis:元素为列表的列表,如下:
        lis = [["名称", "价格", "出版社", "语言"],
                ["暗时间", "32.4", "人民邮电出版社", "中文"],
                ["拆掉思维里的墙", "26.7", "机械工业出版社", "中文"]]
        '''
        import openpyxl
        wb = openpyxl.Workbook()
        sheet = wb.active
        sheet.title = 'list2excel19'
        file_name = filename
        for i in range(0, len(lis)):
            for j in range(0, len(lis[i])):
                sheet.cell(row=i+1, column=j+1, value=str(lis[i][j])) 
        
        wb.save(file_name)
        print("写入数据成功!")
    lis2e19(r'C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx',lis)

     

      3.  将列表信息存储到 excel 中,文件名为 wechat_02.xlsx。 
    lis2e19(r'C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx',lis)

    打开文件(部分截图):

     

      4.  对数据进行初略的认知分析。

    #对数据进行初步探索
    #方法一
    #粗略获取好友的统计信息
    data = friend_all.stats_text(total=True, sex=True,top_provinces=10, top_cities=100)
    from pandas import read_excel
    df=read_excel(r'C:\Users\Benny\Desktop\Python\Python练习\wechat_02.xlsx',sheetname='list2excel19')
    print(data)

     

       部分数据截图如下:

     

       5.  现在手动为上述表格插入一个列标题行:如:

     

       6.  然后我们可以方便的进行如下编写:(注意,此部分由于需要手动插入列标题行,所以一下程序应与上述程序分开执行,或者上述代码中使得 lis=['nickname','sex','city','province','headImgUrl','headImgFlag']

     

    ]is

    In[10]from pandas import read_excel 
    df = read_excel('yubg1.xlsx',sheetname='list2excel19') 
    df.tail(5) #输出表格最后5行
    Out[11]:
              舒心陈  ...      1
    169       鹿森丶  ...   None
    170      琳达大大  ...   None
    171  Coy  lin  ...   None
    172         A  ...   None
    173       孟小傲  ...   None

     

    print(df.city.count())
    print(df.city.describe())

      结果:

         nickname    ...     Unnamed: 6
    170       鹿森丶    ...           None
    171      琳达大大    ...           None
    172  Coy  lin    ...           None
    173         A    ...           None
    174       孟小傲    ...           None
    
    [5 rows x 7 columns]
    114
    count     114
    unique     39
    top        中山
    freq       32
    Name: city, dtype: object

      6.  对 city 列数据做成词云

      方法一:利用 plt+wordcloud 方法
    from wordcloud import WordCloud 
    import matplotlib.pyplot as plt
    import pandas as pd
    from pandas import DataFrame
    word_list= df['city'].fillna('0').tolist()#将 dataframe 的列转化为 list,其中的 nan 用“0”替换
    new_text = ' '.join(word_list) 
    wordcloud = WordCloud(font_path='simhei.ttf', background_color="black").generate(new_text) 
    plt.imshow(wordcloud) 
    plt.axis("off") 
    plt.show()

    图片:

      方法二:利用 pyecharm 做词云 。
    注意:在使用这个方法前要先在Anaconda Prompt 下运行以下两个代码:(否则你会掉头发的)
    pip install wheel
    pip install pyecharts==0.1.9.4

    运行完成上述代码后:

    #利用 pyecharm 做词云
    import pandas as pd
    #count = df.city.value_counts() 
    #对 dataframe 进行全频率统计,排除了 nan
    city_list = df['city'].fillna('NAN').tolist()
    #将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换
    count_city = pd.value_counts(city_list)#对 list 进行全频率统计
    from pyecharts import WordCloud
    name = count_city.index.tolist()
    value = count_city.tolist()
    wordcloud = WordCloud(width=1300, height=620)
    wordcloud.add("", name, value, word_size_range=[20, 100])
    wordcloud.show_config()
    wordcloud.render(r'C:\Users\Benny\Desktop\Python\map1.html')

    图片如下:(已经过水印处理)

     

      7.  将好友可视化展示在地图上 
    #将这些个好友在全国地图上做分布
    province_list = df['province'].fillna('NAN').tolist()
    #将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换
    count_province = pd.value_counts(province_list)#对 list 进行全频率统计
    from pyecharts import Map 
    value =count_province.tolist() 
    attr =count_province.index.tolist()
    map=Map("各省微信好友分布", width=1200, height=600) 
    map.add("", attr, value, maptype='china', is_visualmap=True, 
     visual_text_color='#000',
    is_label_show = True) #显示地图上的省份
    map.show_config() 
    map.render(r'C:\Users\Benny\Desktop\Python\map3.html')

    图片如下:(已经过水印处理)

     

     五、全部代码:

    一、环境与库准备:

    Anaconda Prompt下运行:

    Python -m pip install --upgrade pip
    pip install wxpy
    pip install pillow
    pip install pyecharts
    pip install itchat
    pip install jieba
    pip install Pandas 
    install Numpy
    pip install wordcloud
    pip install echarts-china-provinces-pypkg    
    pip install echarts-countries-pypkg    
    pip install wheel
    pip install pyecharts==0.1.9.4

    完整代码:

     

     

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jun  4 22:21:18 2019
    
    @author: Benny
    """
    from wxpy import *
    import openpyxl
    import pandas as pd
    from wordcloud import WordCloud 
    import matplotlib.pyplot as plt
    from pyecharts import Map 
    #from pyecharts import WordCloud
    
    def alldata_connect_in():
        ''' 
        连接网页版微信并返回所有朋友信息
        bot:初始化机器人并选择缓存模式(扫码)登录
        friend_all:获取我所有微信好友信息
        '''
        bot=Bot(cache_path=True)
        friend_all=bot.friends()
        return friend_all
    
    def analyse_friends(friend_all,top_provinces=10,top_cities=100):
        Friends = friend_all
        data = Friends.stats_text(total=True, sex=True,top_provinces=30, top_cities=500)
        print(data)
    
    def insert_column_title(lis=[]):
        '''输入并列标题行
            ls=[]  默认为无
        '''
        column_titles=[]
        column_titles.append(lis)
        return colomn_titles
    
    def data_dict_to_list(friend_all):
        '''
        data_ls:初值:设列表初值为包含列标题行列表的列表\
                遍历所有好友信息字典提取数据加入到数据列表,并返回此数据列表
        list_0:一个微信好友的数据列表,包括'NickName','Sex','City','Province',\
                'Signature','HeadImgUrl','HeadImgFlag'.
        '''
        data_lis=[['NickName','Sex','City','Province','Signature','HeadImgUrl',\
                   'HeadImgFlag']]
        for a_friend in friend_all:
            NickName = a_friend.raw.get('NickName',None)
            #Sex = a_friend.raw.get('Sex',None)
            Sex ={1:"",2:"",0:"其它"}.get(a_friend.raw.get('Sex',None),None)
            City = a_friend.raw.get('City',None)
            Province = a_friend.raw.get('Province',None)
            Signature = a_friend.raw.get('Signature',None)
            HeadImgUrl = a_friend.raw.get('HeadImgUrl',None)
            HeadImgFlag = a_friend.raw.get('HeadImgFlag',None)
            list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag]
            data_lis.append(list_0)
        return data_lis
        
    def data_lis_savein_excel(data_lis=[],filename='wechat_data',\
                              sheet_title='wechat1'):
        '''
        将列表写入 07 版 excel 中,其中列表中的元素是列表.
        filename:保存的文件名(含路径)
        lis:元素为列表的列表,如下:
        lis = [["名称", "价格", "出版社", "语言"],
               ["暗时间", "32.4", "人民邮电出版社", "中文"],
               ["拆掉思维里的墙", "26.7", "机械工业出版社", "中文"]]
        '''
        wb = openpyxl.Workbook()
        sheet = wb.active
        sheet.title =sheet_title
        file_name = filename +'.xlsx'
        for i in range(0, len(data_lis)):
            for j in range(0, len(data_lis[i])):
                sheet.cell(row=i+1, column=j+1, value=str(data_lis[i][j]))
        wb.save(file_name)
        return file_name
        print("写入数据成功!")
    
    def count_sing(file_name,sheet_name='wechat1',column_name='NickName'):
        '''输出单个列的统计数据'''
        f=open(file_name,'rb')
        data=pd.read_excel(f,sheetname=sheet_name)
        print(column_name+'\t'+str(data[column_name].count()))
        print(data[column_name].describe())
        f.close()
    
    def wordcloud_show(file_name,sheet_name='wechat1',column_name='City'):
        '''用 plt+wordcloud 方法得到词云图'''
        f=open(file_name,'rb')
        data=pd.read_excel(f,sheetname=sheet_name)
        word_list= data[column_name].fillna('0').tolist()
        #将 dataframe 的列转化为 list,其中的 nan 用“0”替换
        new_text = ' '.join(word_list) 
        wordcloud = WordCloud(font_path='simhei.ttf', \
                              background_color="black").generate(new_text) 
        plt.imshow(wordcloud) 
        plt.axis("off") 
        plt.show()
        f.close()
        
    def save_wordcloud_to_html(save_road,file_name,sheet_name='wechat1',\
                    column_name='City'):
        '''利用 pyecharm 做词云并存为html文件'''
        f=open(file_name,'rb')
        data=pd.read_excel(f,sheetname=sheet_name)
        #count = df.city.value_counts() #对 dataframe 进行全频率统计,排除了 nan
        city_list = data[column_name].fillna('NAN').tolist()
        #将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换
        count_city = pd.value_counts(city_list)#对 list 进行全频率统计
        name = count_city.index.tolist()
        value = count_city.tolist()
        from pyecharts import WordCloud
        wordcloud = WordCloud(width=1300, height=620)
        wordcloud.add("", name, value, word_size_range=[20, 100])
        wordcloud.show_config()
        wordcloud.render(save_road+'.html')
        f.close()
    
    def show_data_in_countrymap(save_road,file_name,sheet_name='wechat1',\
                    column_name='Province'):
        '''将这些个好友在全国地图上做分布'''
        f=open(file_name,'rb')
        data=pd.read_excel(f,sheetname=sheet_name)
        province_list = data[column_name].fillna('NAN').tolist()
        #将 dataframe 的列转化为 list,其中的 nan 用“NAN”替换
        count_province = pd.value_counts(province_list)#对 list 进行全频率统计
        value =count_province.tolist() 
        attr =count_province.index.tolist()
        map=Map("各省微信好友分布", width=1200, height=600) 
        map.add("", attr, value, maptype='china', is_visualmap=True, 
        visual_text_color='#000',
        is_label_show=True) #显示地图上的省份
        map.show_config() 
        map.render(save_road+'map2'+'.html')
        f.close()
        
    
    def main():
        friends_data=alldata_connect_in()
        data_ls=data_dict_to_list(friends_data)
        file_name=data_lis_savein_excel(data_ls)
        analyse_friends(friends_data)
        count_sing(file_name)
        wordcloud_show(file_name)
        save_road=r'C:\Users\Benny\Desktop\Python\wechat_01_statlist\picture'
        save_wordcloud_to_html(save_road,file_name)
        show_data_in_countrymap(save_road,file_name)
    main()

     

     对于学习过程中的的出现地错误与解决办法和疑问:

    问题1:

      不能从pyecharts库中导入模块,如WordCloud Bar等

    解决办法:

      在运行环境的命令行运行(Anaconda Prompt):

    pip install wheel
    pip install pyecharts==0.1.9.4

    注意!:运行上述命令后要将spyder的console重启!!否则依旧会出现同样的问题!!

     

     

    问题2:

    在完全代码中我将lis列表赋初值为列标题行,这使得在对Excel表格进行词云分析时可用列标题行进行索引,如果不加,会由于Excel表格首行某列中为空而无法索引!!

    问题3:

    完全代码中我在某个函数中进行模块的引入,但当我将此模块放到完全代码前引用时,出现了如下错误:(而在函数内引用却没有报错)

    super(WordCloud, self).__init__(title, subtitle, **kwargs)
    
    TypeError: __init__() got an unexpected keyword argument 'font_path'

    解决办法:还么有。

     

     

     

    转载于:https://www.cnblogs.com/shuxincheng/p/10968362.html

    展开全文
  • 注:参考书籍《R作图–现代统计图形》谢益辉 par()函数的特点: par()函数可以用来设置或者获取图形参数。 函数par()可以全局设置图形参数,而在具体作图函数plot() 或 lines()是临时设置图形参数。二者的区别是:...

    注:参考书籍《R作图–现代统计图形》谢益辉
    par()函数的特点:
    par()函数可以用来设置或者获取图形参数。
    函数par()可以全局设置图形参数,而在具体作图函数plot() 或 lines()是临时设置图形参数。二者的区别是:前者会保留对参数的更改,也就是一直起作用,直到图形设备关闭,而后者并不会影响后续的作图效果。
    par()函数的参数:
    par()函数本身返回当前图形参数设置(以列表格式)
    下面解释一些常用的参数,并写一些自己的理解:

    1. adj:adjust 调整,调整图中字符的相对位置。取值为长度为2的数值向量,其中每个参数一般多不会超过1(取值范围是[0,1]),含义:一个参数表示 ·字符边界矩形框·向左移动的距离和自身宽度的比例,第二个参数表示·字符边界矩形框·向下移动的距离和自身的高度的比例。
      c(0,0)表示整个字符串左下角对准设定的坐标点。
      c(1,0)表示整个字符串横向移动了整个自身宽度的距离,纵向不受影响。在这里插入图片描述
    2. ask切换到下一张图时,是否需要用户输入(敲回车和鼠标点击)。
      取值:布尔型,TRUE表示是,FALSE表示否;
      很多张图逐一出现并且需要按顺序一步步在图形设备上展示时十分有效,设置ask = TRUE,那么每一张图都要等用户点击回应后,才出现下一张新图。否则,所有的图一下全部闪过。
    3. bg:background 背景 ,设置图形的背景色。
    4. bty boundary style ,设置图形边框样式;
      取值:字符"o" “l” “7” “c” “u” “]”,字符本身的形状对应着边框的样式,分别是全闭(四条边都显示) , 上右开 , 上右闭 , 右开 , 上开,左开。其中,“l” ,“7”,“c” ,“u” 四个样式的展示图,如下:
      在这里插入图片描述
    5. cex :contraction and expansion 放缩和伸张,设置图上元素(文本和符号等)的缩小和放大的倍数;
      取值:一个相对于1的数值。
    参数 含义
    cex.axis 坐标轴刻度标记
    cex.lab 坐标轴标题
    cex.main 图主标题
    cex.sub 图副标题
    1. col:color,设置图中符号(点、线)颜色
    参数 含义
    col.axis 坐标轴刻度标记
    col.lab 坐标轴标题
    col.main 图主标题
    col.sub 图副标题
    1. family设置文本的字体族,含有无衬线、等宽、符号、字体等;
      取值:serif sans mono symbol
      在这里插入图片描述
    2. fg: frontground?foreground? 前景,设置前景色。如果后续没有别的颜色参数设置,本参数会影响几乎所有后续图形颜色;而如果后续设定了别的颜色参数,那么只会影响图形边框和坐标轴刻度线颜色。
    3. font:设置文本字体样式;
      取值:一个整数;一般地,1,2,3,4 分别表示正常、粗体、斜体和粗斜体。
      |参数|含义|
      | – | --|
      |font.axis|坐标轴刻度标签|
      |font.lab|坐标轴标题|
      |font.main|图主标题|
      |font.sub|图副标题|
    4. lab设置坐标轴刻度数目;
      取值:c(x,y)中x、y分别设置两轴的刻度数目。
    5. las坐标轴标签样式;
      取值:{0,1,2,3}四个整数之一,分别表示“总是平行于坐标轴”,“总是水平”,“总是垂直于坐标轴”,“总是竖直”。注意观察下图数字的方向和坐标轴的方向的关系:
      在这里插入图片描述
    6. lend:line end ,设置线条末端的样式;
      取值:{0,1,2}三个整数之一,或是对应的字符串’round’, ‘mitre’, ‘bevel’;
      在这里插入图片描述
    7. lheight:line height ,设置图中文本行高;
      取值:一个倍数;
    8. ljoin:line join ,设置线条相交处的样式;
      取值:{0,1,2}之一,对应的字符串’round’, ‘mitre’, ‘bevel’;,分别表示画圆角、画方角和切掉顶角,展示如下图:
      在这里插入图片描述
    9. lty:line style 线条虚实样式。设置参数时,可以使用数字或是字符串,还可用十六进制的数字组成的字符串表示线上实线和空白的相应长度。
    参数 含义 字符串形式
    0 不画线 ‘blank’
    1 实线 ‘solid’
    2 虚线 ‘dashed’
    3 点线 ‘dotted’
    4 点划线 ‘dotdash’
    5 长划线 ‘longdash’
    6 点长划线 ‘twodash’
    1. lwd1:line width设置线条宽度,默认为1.
      一些区域和边界:
      在这里插入图片描述
      以上图的左侧为例:
      设备区域:最大的那个灰色框;
      图形区域:实线围起来的那个框;
      作图区域:虚线围起来的那个框;
      外边界:设备区域的内边界->图形区域的外边界,也就是上图oma压住的那小部分灰色;
      图形边界:图形区域内边界->作图区域外边界,也就是上图mar压住的那小部分白色;

    2. mar:margin 页边距,设置图形边界空白宽度。按照“下,左,上,右”的顺序,默认为c(5,4,4,2)+0.1

    3. mex:margin expansion axis ? ,设置坐标轴的边界宽度的放缩倍数,默认为1;

    4. mfrow,mfcol:设置一页多图;
      取值:长度为2的向量,如c(nrow,ncol),
      表示分别设置的行数和列数。

    5. mgp 设置坐标轴的边界宽度;
      取值:长度为3的数值向量,分别表示坐标轴标题、坐标轴刻度线标签和坐标轴线的边界宽度,示例mgp = c(5,3,1)如下图:
      在这里插入图片描述

    6. oma:outer margin 外边界,设置外边界的宽度;
      取值:类似于mar,默认c(0,0,0);
      当一页只放一张图时,和mar不易区分;
      而当一页多图时,容易看出和mar的区别。

    7. pch:point character 点的符号,具体参数如下:

    pch参数值 含义
    19 实圆点
    20 小实圆点
    21 圆圈
    22 正方形
    23 菱形
    24 正三角尖
    25 倒三角尖

    其中,21-25可以使用bg参数填充颜色;

    1. pty:picture style? ,设置作图区域的形状,默认‘m’–尽可能最大化作图区域(max);
      取值’s’–表示设置作图区域为正方形;
    2. srt:string rotation? 设置字符串的旋转角度
      在这里插入图片描述
    3. tcktcl,二者都是设置坐标轴刻度线的高度,而且取值都是比例值,只是前者是与图形宽高的比例值,后者是与文本行高的比例值,正值表示向内画刻度线,负值表示向外画刻度线。默认:不使用tck,即设为NA,;使用tcl参数;
      在这里插入图片描述
    4. usr:using region ?,设置作图区域的范围限制;
      取值:长度为4的数值向量c(x1 , x2 , x3 , x4),分别表示作图区域内x轴的左右极限和y轴的上下极限。如果设置xlog,ylog = TRUE,也就是坐标取对数,那么实际设置的极限都是10的相应幂次。
    5. xaxs,yaxs设置坐标范围的计算方式,
      取值为’r’,则表示对原始数据的范围扩大4倍,然后用范围画坐标轴;取值为‘i’,表示使用原始数据范围;
    6. xpd:对超出边界的图形的处理方式,
      取值:
      若为NA,把图形限制在设备区域内;
      若为TRUE,把图形限制在图形区域内,出界的图形截取;
      若为 FALSE,把图形限制在作图区域内,出界的图形截取。

    • 以下9组参数,只能通过par函数设置,不可在其他作图函数中设置。
    ask
    fig,fin
    lheight
    mai,mar,mex,mfcol,mfrow,mfg
    new
    oma,omd,omi
    pin,plt,ps,pty
    usr
    xlog,ylog
    
    • par()函数初始参数的恢复办法:
    1. 预先保存到一个对象中opar <- par()
    2. 每做完一幅图都把图形设备关掉,然后再作下一幅图。

    • 一个不太相关的作图示例:
    #绘出正态分布图像,并插入文字标注
    x = seq(-3 , 3 , length = 200) #生成(-3,3)上的一列数,共200个
    y = dnorm(x) #density,正态分布的概率密度曲线函数值
    xx = seq(-1.65 , 1.65 , length = 100)
    yy = c(0 , dnorm(xx) , 0)
    xx = c(-1.65 , xx , 1.65)
    #生成灰色多边形
    polygon(xx , yy , col = "gray" , border = NA)
    lines(x , y)
    text(0 , 0.05 , "P(-1.65<x<1.65) = 90")#插入文本标注
    

    结果如下:
    在这里插入图片描述

    展开全文
  • 统计学习方法概论学习统计学习统计学习的特点统计学习的目的统计学习的方法监督学习基本概念输入空间、特征空间与输出空间联合概率分布假设空间统计学习三要素模型策略损失函数和风险函数损失函数风险函数经验风险...

    学习

    对于给定的任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指:通过经验E改进后,它在任务T上由性能度量P衡量的性能有所提升。

    统计学习

    统计学习的特点

    统计学习是计算机基于数据构建概率统计模型并运行模型对数据进行预测和分析的一门学科,也称为统计机器学习。其有以下几个特点:

    1. 基于计算机平台,是建立在计算机以及网络之上的;
    2. 数据驱动,统计机器学习的研究对象是数据;
    3. 以方法为核心,其工作是研究构建模型并应用模型对数据进行分析和预测的方法;
    4. 统计学、概率论、信息论、最优化理论、计算理论以及计算机科学等多个领域的交叉学科。

    统计学习从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到数据中进行预测和分析中去。而且数据是多样的,诸如图像、文本、音频等。
    注:统计学习的前提是假设同类数据具备一定的统计特性,这样才可以使用概率统计方法对数据加以处理。

    统计学习的目的

    统计学习主要用于数据的预测和分析。对未知数据的预测使得计算机被赋予智能化,对数据进行分析则会给人们带来新的发现。
    以上是要基于数据建立概率模型来实现的,统计学习的目标就是要考虑建立什么样的概率统计模型和如何学习模型使得模型能够对数据进行精准的预测和分析。

    统计学习的方法

    统计学习主要分为监督学习、半监督学习、分监督学习以及强化学习等。统计学习有三大要素:模型、策略、算法
    给定的有限训练数据集中(假设训练数据遵从独立同分布),假设要学习的模型属于某一函数集合,成为假设空间;应用某个评价标准,从假设空间中选取一个最优模型,该模型可以在评价标准下对数据做出最精确的预测和分析;模型选择的过程则要靠算法来实现。
    其中监督学习的步骤如下:

    1. 得到一个有限的训练数据集合;
    2. 确定包含所有可能模型的假设空间,即模型的集合;
    3. 确定模型的评价准则,即学习的策略;
    4. 实现求解最优模型的算法,即学习的算法;
    5. 通过学习算法得到最优模型;
    6. 利用最优模型对数据进行预测和分析。

    注:统计学习的主要用途有,分类、回归、标注

    监督学习

    监督学习是要学习一个模型,能够对任意给定的输入,给出一个好的预测输出。

    基本概念

    输入空间、特征空间与输出空间

    在监督学习中,将输入与输出所有可能的取值集合分别称为输入空间和输出空间。通过对原始输入进行特征提取,每个具体的输入实例由一个特征向量表示。所有输入实例的特征向量集合称为特征空间。

    联合概率分布

    监督学习假设输入和输出的随机变量XY遵循联合概率分布P(X, Y),*P(X, Y)*称为分布密度函数。学习之前我们假设这一分布密度函数存在,但是它是未知的,需要我们通过数据去学习。

    假设空间

    监督学习的目的在于寻找一个输入到输出的映射,这一映射由模型来表示。学习的目的就是在评价准则下寻找输入空间到输出空间的最佳映射,映射的集合就是假设空间。假设空间的确定意味着学习范围的确定。
    监督学习的模型可以分为概率模型(条件概率分布,P(X|Y))和非概率模型(决策函数,Y=F(X)),根据具体学习方法而定。

    统计学习三要素

    统计学习方法=模型+策略+算法

    模型

    统计学习的目的就是要学习一个能够对数据进行准确预测和分析的模型,所以我们是要根据具体问题确定模型的范围,即假设空间,也就是输入空间到输出空间的映射集合。通常假设空间是一个由参数向量决定的函数簇:

    F={P| PθP_θ(Y|X), θ∈RnR^n}或者F={f | fθ(X)f_θ(X), θ∈RnR^n}

    策略

    有了假设空间之后,我们要确定一种评价标准在假设空间中寻找一个最优的模型。

    损失函数和风险函数

    损失函数

    损失函数用来度量模型一次预测的好坏;风险函数用来度量平均意义下模型预测的好坏。常用的损失函数主要有以下几种:

    1. 0-1损失函数
      L(Y,f(x))={1,Yf(x)0,Y=f(x) L(Y,f(x))=\left\{ \begin{aligned} 1, &&Y≠f(x) \\ 0, &&Y=f(x) \\ \end{aligned} \right.
    2. 平均损失函数
      L(Y,f(X))=(Yf(X))2 L(Y,f(X))=(Y-f(X))^2
    3. 绝对值损失函数
      L(Y,f(X))=Yf(X) L(Y,f(X))=| Y-f(X) |
    4. 对数似然损失函数
      L(Y,f(X))=logP(YX) L(Y,f(X))=-logP(Y|X)

    风险函数

    经验风险(ER):

    Remp(f)Remp(f)=1N\frac{1}{N} i=1NL(yi,f(xi))\sum_{i=1}^{N}L(y_i, f(x_i))

    我们要想模型能够更好的预测数据,就要做到损失函数最小化和风险函数最小化。

    经验风险最小化和结构风险最小化

    如上所示,我们可以确定经验函数最小化的模型是最优模型。当样本总量(N)趋向于无穷大时,经验风险最小化可以取得比较好的效果;但是当样本总量(N)较小时,经验风险最小化不能保证较好的结果,会产生过拟合现象。结构风险最小化便是为了防止过拟合提出的策略,等价于正则化。结构风险在经验风险上加上表示模型复杂度的正则化项和惩罚项,用来减小模型的复杂度。如下所示:

    Rsrm(f)Rsrm(f)=1N\frac{1}{N} i=1NL(yi,f(xi))+λJ(f)\sum_{i=1}^{N}L(y_i, f(x_i))+λJ(f)
    其中J(f)为模型的复杂度,是定义在假设空间上的泛函。模型f越复杂,复杂度J(f)就越大,反之同理。λ≥0是系数,用来权衡经验风险和模型复杂度,最终得到对未知数据有更好预测能力的模型。

    风险最小策略的形式化:

    minmin 1N\frac{1}{N} i=1NL(yi,f(xi))+λJ(f)\sum_{i=1}^{N}L(y_i, f(x_i))+λJ(f)
    这样一来问题就抽象到了经验风险和结构风险最小化的最优化问题,下面就是寻找算法求解以上函数的最优值。

    算法

    算法是一种求解问题的方法。经过模型范围的和评价准则的确定之后,我们就把统计问题转化为了最优值求解问题,算法的目的就是要寻找全局最优解,得到参数,确定最终我们需要的模型。

    过拟合与模型选择

    当假设空间中含有复杂度不同的模型时,我们就面临模型选择的问题。我们希望选择一个在训练数据集上做到经验风险较小而且具备一定泛化能力的模型。下面举一个多项式拟合的例子,如图所示:
    在这里插入图片描述
    可以看到对于给定的一个训练数据集(图中的离散点集),我们需要先确定一个函数集合,然后选择评价标准,最后通过算法求解最优的函数模型。上图中为假设空间中的几个模型,分别具有不同的复杂度,我们看到第一个复杂度最低,是一个常数,不能很好的拟合数据集;第二个是一条有斜率和偏置的直线,效果要比第一个模型好;第三个模型基本已经拟合了数据集,但是稍有偏差;最后一个模型完美的拟合了训练集,它穿过了每一个数据点。但是我们的数据不是无限大,也不能做到绝对纯净,是有噪声的,如果做到完美拟合训练数据集,那么模型预测其他数据可能会有较大偏差,这就是我们所说的过拟合
    遇到这种情况,我们可以使用两种较为常用的方法进行模型选择:正则化和交叉验证。

    正则化

    正则化的工作原理是最小化结构风险,降低模型的复杂度。实现方式是在经验风险上增加正则项和惩罚项。在降低经验风险和增加模型复杂度上做一个权衡,避免拟合训练数据的过程中模型学习的过于复杂。

    交叉验证

    交叉验证也是模型选择的一种方法,主要有以下几种:简单交叉验证、K折交叉验证、留一交叉验证。

    简单交叉验证

    简单交叉验证就是随机将训练集分为两部分:训练集和验证集。一般训练集和验证集的样本总量之比为7:3。选取不同的参数在训练集上训练,得到不同的模型。最后使用选择的评价标准在测试集上评估各个模型的好坏,选出最好的模型。

    K折交叉验证

    该方法是使用较多的一种。我们随机将训练集分成互不相交的K份,每次留下一份用作测试集,其余K-1份用作训练集。循环迭代K次,直到每一份都被用作测试集,最后选出K次测试中平均误差最小的模型。

    留一交叉验证

    留一交叉验证是K折交叉验证的特殊情况,即K=N,其中N为样本总量。这种情况往往在数据集较小的情况下使用。

    泛化能力

    泛化能力是模型对未知数据进行预测和分析的能力,是学习方法本质上重要的性质。但是现实中我们通常用测试误差来估计模型的泛化能力,测试集隶属于训练集,对已有的数据具有依赖性,而且已有数据是有限的,所以不太可靠。统计学习试图从理论上对学习到的模型的泛化能力做评估。

    泛化误差上界

    泛化误差上界是样本容量的函数,当样本趋于无穷大时,泛化误差上界趋于0;泛化误差上界是假设空间容量的函数,假设空间容量越大,模型便越难学习,泛化误差上界就越大,类似于人的选择纠结症
    定义:
    R(f)R(f)R^(f)\hat{R}(f)+ ε(d,N,δ)ε(d, N, δ)

    其中,R^(f)\hat{R}(f)是经验风险;
    ε(d,N,δ)ε(d, N, δ)12N\frac{1}{2N}(logd+log1δ)(logd+log \frac{1}{δ})的算术平方根。

    生成方法和判别方法

    监督学习可分为生成方法和判别方法,这两种方法所学到的模型分别为生成模型和判别模型。

    生成方法

    生成方法主要学习数据的联合概率分布P(X,Y),然后求出条件概率分布*P(Y|X)*作为预测模型,即:

    P(Y|X)=P(X,Y)P(X)\frac{P(X,Y)}{P(X)}
    典型的生成模型有:朴素贝叶斯法和隐马尔可夫模型。
    生成方法可以还原出数据的联合概率分布P(X, Y),而且学习收敛速度更快,即当样本量增加时,学到的模型更快地收敛于真实模型。存在隐变量的时候仍适用。

    判别方法

    判别方法是由数据直接学习决策函数f(X)f(X)或者条件概率分布P(YX)P(Y|X)作为预测模型,判别方法关注的是给定输入应该输出什么。典型的判别模型有:K近邻法,感知机、决策树、逻辑斯谛回归模型、最大熵模型、支持向量机、提升方法和条件随机场等。
    判别方法直接学习决策函数f(X)f(X)或者条件概率分布P(YX)P(Y|X),直接面对预测,往往学习的准确率更高;还可以对数据进行抽象、定义特征并且使用特征,来简化学习问题。

    分类问题

    评价分类器性能的指标一般是分类准确率,其定义是分类器正确分类的样本数与总样本数之比。
    特殊地,对于二分类问题,常用地指标时准确率(precision),召回率(recall)。
    二分类会出现四种情况:
    TP——将正类预测为正类的样本数;
    FP——将负类预测为正类的样本数;
    TN——将负类预测为负类的样本数;
    FN——将正类预测为负类的样本数;
    准确率定义为:
    precision=precision= TPTP+FP\frac{TP}{TP+FP}
    召回率定义为:
    recall=recall= TPTP+FN\frac{TP}{TP+FN}
    除此之外,还有F-1值,是准确率和召回率地调和平均值,即
    2F1\frac{2}{F-1} = 1precision\frac{1}{precision}+1recall\frac{1}{recall}

    展开全文
  • 最近在邮件列表里看到有人询问如何统计网络流量的问题,很多人推荐了 mrtg 等工具,其实个人一直在用 Vnstat 这款小软件,它的特点是简单实用,...另外,它还自带了 vnstati 命令,通过它可以直接可以输出流量统计图.
  • 例:假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),请展示该数据。 1、纵向条形: from matplotlib import pyplot as plt from matplotlib import font_manager #a和b为分别的两类...
  • 5、生成百度地图、Google地图、更新列表、热点列表,加速搜索引擎收录。 6、自定义文件路径、Title、Keywords、Description,对搜索引擎提供最友好的支持。 7、简单易用的标签生成工具,让您随心所欲的改版网站。 ...
  • 统计学习的特点******2.统计学习的对象***3.统计学习的目的4.统计学习的方法1.2 监督学习1.21基本概念1.22联合概率分布合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片...

    1.1统计学习

    1.统计学习的特点

       		  1.以计算机及网络为平台,是建立在计算机及网络之上的 
      		  2.以数据为研究对象,是数据驱动的学科
    	 	  3.目的是对数据进行预测和分析
    		  4.以方法为中心,构建模型并应用模型进行预测与分析
    		  5.是概率论,统计学,信息论,计算理论,最优化理论,及计算机科学等多个领域的交叉学科,并且在发展中逐步形成独自的理论体系与方法论
    

    2.统计学习的对象

    1.数据—>包括存在于计算机及网络上的各种数字,文字,图像,视频,音频数据以及它们的组合

    3.统计学习的目的

    1.对数据进行预测与分析,使得计算机更加智能化,或者让计算机的性能得到提高,给人们带来新的发现

    4.统计学习的方法

    1.三要素:模型,策略,算法

    1.2 监督学习

    1.21基本概念

    输入空间 特征空间 输出空间
    输入可能取值的集合 所有特征向量存在的空间 输出可能 取值的集合
    摘自网络
    表示输入实例x的特征向量

    连续变量------回归问题
    有限个离散变量------分类问题
    输入与输出变量均为变量序列------标注问题

    1.22联合概率分布

    联合概率是指在多元的概率分布中多个随机变量分别满足各自条件的概率。假设X和Y都服从正态分布,那么P{X<4,Y<0}就是一个联合概率,表示X<4,Y<0两个条件同时成立的概率。表示两个事件共同发生的概率。A与B的联合概率表示为 P(AB) 或者P(A,B),或者P(A∩B) (摘抄自360百科)

    1.23假设空间

    监督学习(supervised learning)的任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测。模型属于由输入空间到输出空间的映射的集合,这个集合就是假设空间(hypothesis space)。假设空间的确定意味着学习范围的确定。

    展开全文
  • 菜单除了可以计算基本的统计量之外... 对资料的性质、分布特点等完全不清楚的时候Analyze -> Descriptive Statistics -> Expore 数据源ceramics.sav因变量列表 用于选入待分析的变量 因子列表 用于选择分组变量,根据
  • JFreeChart条形

    2016-01-02 10:01:43
    条形使用不同的方位(水平或垂直)条,以显示不同类别的比较。...以下是汽车品牌以及它们的不同特点,我们将展示使用一个条形列表: 汽车 速度 用户评价 公里数 安全性
  • Redis中集合的特点无非是一个Key对应一系列的数据, 但是数据的作用往往是为了统计的,比如: 交友系统中,需要统计每天的新增好友,以及双方的共同好友。 电商系统中,需要统计评论列表中的最新评论。 签到系统中,...
  • 功能特点:俏皮皮图片系统采用Outdosoft CMS 3.0内核,具有超强的采集和生成功能。 1、自定义网页编码(gb2312、utf-8、iso-8859-1)。 2、采用Outdosoft开发的专业采集系统,易用、稳定、高效,可以采集防盗链图片、...
  • 转载自 JFreeChart条形 本章演示了如何使用JFreeChart从一个给定的业务数据创建条形。 条形使用不同的方位(水平或...以下是汽车品牌以及它们的不同特点,我们将展示使用一个条形列表: 汽车 速度 ...
  • 5、生成百度地图、Google地图、更新列表、热点列表,加速搜索引擎收录。 6、自定义文件路径、Title、Keywords、Description,对搜索引擎提供最友好的支持。 7、简单易用的标签生成工具,让您随心所欲的改版网站。 ...
  • 一、系统特点:真正的绿色软件,只有一执行文件即可正常运行,单机版采用本地Paradox数据库,具有安全快速等特点。系统采用用户权限管理包括:管理员级数据维护、查询分析等权限,保证数据存取安全成绩分析采用多种...
  • 本章演示了如何使用JFreeChart从一个给定的业务数据创建条形。 条形使用不同的方位(水平或垂直)条,...以下是汽车品牌以及它们的不同特点,我们将展示使用一个条形列表: 汽车 速度 用户评价
  • 特点:-创建使用Simkl TV跟踪应用程序自动更新的自定义电视,动漫和电影观看列表-查看您需要观看的下一集编号-在观看列表中查找下一个播出的节目-查找计划在DVD上发行的新电影观看-查看您计划观看的剧院中当前正在...
  • 数据的表现与分析 主讲人:矫立华 活动目标 如何更直观有效的表现各研究小组的统计数据学会对统计数据归类列表并能选择合适的统计图进行表达 活动重点 1.常用统计图特点及使用 2.统计图表题目的解析 过程与方法 ...
  • R语言学习笔记

    2019-11-21 21:57:35
    R语言的特点: R是开源的统计绘图软件,也是一种脚本语言,有大量的程序包可以利用。 R中的向量、列表、数组、函数等都是对象,可以方便的查询和引用,并进行条件筛选。 R具有精确控制的绘图功能,生成的可以...
  • 第一个微信小项目

    2019-06-09 08:52:00
    (2)好友省市分布以及统计好友签名用词特点 (3)用pyechart图像显示上面数据并成为网页文件 以上任务需要依赖七个库,安装过程为: 安装wxpy: pip install wxpy 安装PIL: pip install pillow 安装py...
  • 大量的图表和视图选项,如沙漏,祖先,时间线,双祖先统计,名称分配(按姓氏和名字),静(基于苹果地图),扇形,亲属,系或地球 众多的报告选项,如人员报告,家庭报告,亲属报告,叙事报告,...
  • R语言热门应用领域

    2020-08-19 11:53:58
    R的概述: R语言是用于统计分析,图形表示和报告的编程语言和软件环境。 R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程。 R语言允许与以C,C ++,.Net,...R语言提供了一套用于数组,列表
  • 大量的图表和视图选项,如沙漏,祖先,时间线,双祖先统计,名称分配(按姓氏和名字),静(基于苹果地图),扇形,亲属,系或地球 众多的报告选项,如人员报告,家庭报告,亲属报告,叙事报告,...
  • 对微信的好友进行分析,统计好友的人数,省市的分布,并排序,并统计好友签名用词的特点。用pyechart图像显示,并存为网页文件。 2.函数描述 函数 描述 get_friends_info(self) 获取好像信息,返回...
  • 3、独特的统计列表,生成柱状图形,可导出为Excel表格,更加方便用户统计,编辑,打印。 4、省去了纸质记账的麻烦,数据随时备份,绿色环保。 5、通过手机WAP随时登陆、实时记账。 用户名:admin 密码:admin
  • 1.基础特点:R语言是用于统计分析,图形表示和报告的编程语言和软件环境。 以下是R语言的重要特点: R语言是一种开发良好,简单有效的编程语言,包括条件,循环,用户定义的递归函数以及输入和输出设施。 R语言具有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428
精华内容 171
关键字:

列表统计图特点