利用python进行数据分析(一)

链接:https://pan.baidu.com/s/1qIIisSGE7JDHzHdfEJR_tg 密码:14es

链接:https://pan.baidu.com/s/15-f2xR5w_Bnxxwi-bgKr5Q 密码:vipv

上面是《利用python进行数据分析》这本书的PDF版和其相关资料。要安装的东西书上都有说,这些我也就不多瞎比比

有些地方很难,但这些都是后面的内容,现在看到的只是让你知道 数据分析 可以用来做什么。

一些简单可理解的地方、有坑的地方,我都说出我的理解或找到一些其他大佬的文章给大家作参考。

不能理解也无所谓,后面详解的时候,都会明白的。

-------------------------------------------------------------------------------------------------------------------------------------------------

#来自bit.ly的1.usa.gov的数据

path = "C:/Users/Lzy_nh/Desktop/example.txt" 

#路径要么用双斜杠 "C:\\Users\\Lzy_nh\\Desktop\\example.txt"  ,要么用反斜杠 "C:/Users/Lzy_nh/Desktop/example.txt",要么 #就是单斜杠要在字符串前加 r"path = "C:\Users\Lzy_nh\Desktop\example.txt"

open(path).readline() #用这种方法读入的是一串字符#围观输出

import json

扫描二维码关注公众号,回复: 2546100 查看本文章

records = [json.loads(line)for line in open(path)] #此时的records是一个list对象。

records[0] #围观输出

#上面运用了列表推导式。格式:variable = [out_exp_res for out_exp in input_list if out_exp==2],详情自行百度谷歌

-------------------------------------------------------------------------------------------------------------------------------------------------

#用纯python代码对时区进行计数

time_zones = [rec['tz']for rec in records if 'tz' in rec] #因为不是每组记录都有时区字段,所以要用到 if 将其不含时区字段的排除

#常见的遍历计数法

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

def get_counts2(sequence):
    counts = defaultdict(int)
#所有值都被初始化为0

    for x in sequence:

        counts[x] += 1

    return counts

#defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值

#defaultdict参考文章地址https://blog.csdn.net/dpengwang/article/details/79308064

#要获得前十位的 时区和其计数值 ,需要用到一些有关字典的处理技巧

def top_counts(count_dict,n=10):
    value_key_pairs = [(count,tz)for tz,count in count_dict.items()]

    value_key_pairs.sort()

    return value_key_pairs[-n:]

#Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。

#标准库计数法二

from collections import Counter

counts = Counter(time_zones)

counts.most_common(10) #围观输出

#从字典对象创建了一个Counter类,其most_common(N)是返回一个Ntop列表

#Couter类参考文章地址http://www.pythoner.com/205.html

#用pandas对时区进行计数

from pandas import DataFrame,Series

import pandas as pd;import numpy as np

frame = DataFrame(records)#frame的输出形式是摘要视图,不会把一堆数据全部输出

tz_counts = frame['tz'].value_counts()#frame['tz']返回的是一个Series对象,value_counts是它的一个方法。这不详解,后面说

tz_counts[:10] #围观输出

#用matplotlib生成一张图片。要先把未知或缺失时区填上一个替代值。使用fillna函数可替换缺失值(即NA),未知值(即空字符#串)则可通过 布尔型数组索引 加以替换

clean_tz = frame['tz'].fillna('Missing')

clean_tz[clean_tz == ''] = 'Unknown'

#布尔型数组索引,我懂但不知道咋说,看文章去吧。参考文章地址https://blog.csdn.net/zby1001/article/details/54381535

tz_counts = clean_tz.value_counts()

#此时我们要使用%pylab进入绘图模式,否则是毫无反应

%pylab #就是在ipython命令行里输入这个

tz_counts[:10].plot(kind='barh',rot=0)
#得图如下(左边信息看不全,我的锅)

#上面的分析就告一段落了,我们现在来分析a字段。a字段里含有执行URL短缩操作的浏览器、设备、应用程序等信息。也就是 #咋们爬虫常说的请求头(USER_AGENT,一下简称agent)中的信息(以后会应该出一个爬虫的讲解,以巩固我对爬虫的理解)

results = Series([x.split()[0]for x in frame.a.dropna()])

results.value_counts()[:8]  #这里的results也是一个Series对象哦,所以一样可以使用value_counts方法

#split()方法不多说,参考文章地址http://www.runoob.com/python/att-string-split.html

#Series参考文章地址https://blog.csdn.net/brucewong0516/article/details/79196902

#这里我有个疑问,为啥results = Series([x.split()[1]for x in frame.a.dropna()])越界?我想应该是有东西的啊,求大佬解答

#这时来按window和非window用户对时区统计信息进行分解。默认agent中有“Window”字样则认为是Window用户。

cframe = frame[frame.a.notnull()] #先使用notnull方法判断信息是否缺失,然后通过布尔型数组索引重构一个数组

operating_system = np.where(cframe['a'].str.contains('Windows'),'Windows','Not Windows') #np.where()后面章节会详解

by_tz_os = cframe.groupby(['tz',operating_system]) #cfame.groupby()后面也会详解

agg_counts = by_tz_os.size().unstack().fillna(0) #用size()进行计数类似上面的value_counts函数,并用unstack对计数结果重塑

agg_counts[:10]#围观输出

#unstack()方法参考文章地址https://www.cnblogs.com/bambipai/p/7658311.html

#通过升序排序选取最常出现的时区

indexer = agg_counts.sum(1).argsort()

indexer[:10] #围观输出

count_subset = agg_counts.take(indexer)[-10:]

count_subset #围观输出

count_subset.plot(kind = 'barh',stacked = True)

#如下图

normed_subset = count_subset.div(count_subset.sum(1),axis = 0)

normed_subset.plot(kind = 'barh',stacked = True)

#如下图

第一章后面对电影评分,婴儿姓名等分析等内容就不多讲了,因为里面许多方法都是在后面讲的,现在不要纠结不会。等学到后面回来看就自然会懂了。

纯手打,好累,要萌妹子抱抱~~~

我们下一章节见~~~

猜你喜欢

转载自blog.csdn.net/qq_42158792/article/details/81388629