1. 数据分析的任务:数据读写,数据准备(清洗,修整,规范化,重塑,切片切块,变形),转换,建模计算,呈现(模型/数据)

2. 数据集:

bit.ly的1.usa.gov数据:URL缩短服务bit.ly和美国政府usa.gov合作从.gov或.mil用户那里收集的匿名数据

# -*- coding:utf-8 -*-
#导入json模块,将json字符串转换为python字典
import json
from collections import defaultdict
from collections import Counter
from pandas import DataFrame, Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt path = "E:/Programming/Python/PythonDataAnalysis/datasets/usagov_bitly/example.txt"
#list comprehension
records = [json.loads(line) for line in open(path)]
#对时区计数, 同时保证tz必须在records中
time_zones = [rec['tz'] for rec in records if 'tz' in rec.keys()]
#--------------方法1:------------
#时区计数
def get_counts(sequence):
counts = {}
for x in sequence:
if x in counts:
counts[x] += 1
else:
counts[x] = 1
return counts
#取得前n个最常使用的时区
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:]
counts = get_counts(time_zones)
print(counts)
top_counts = top_counts(counts)
print(top_counts)
#--------------方法2:------------
def get_counts2(sequence):
counts = defaultdict(int)
for x in sequence:
counts[x] += 1
return counts
#--------------方法3:------------
#引入collections的Counter对象
def get_counts3(time_zones,n=10):
counts = Counter(time_zones)
return counts.most_common(n) top_counts3 = get_counts3(time_zones,10)
print(top_counts3)
#--------------方法3:------------
#用pandas对时区进行计数
#将records转换为DataFrame对象
frame = DataFrame(records)
#frame['tz']返回的对象有一个value_counts方法
tz_counts = frame['tz'].value_counts()
print(tz_counts[:10])
#fillna()函数填补空缺值NA
clean_tz = frame['tz'].fillna("Missing")
print(clean_tz)
#空字符串为Unknown
clean_tz[clean_tz == ''] = "Unknown"
tz_counts = clean_tz.value_counts()
print(tz_counts[:10])
#利用counts的plot方法
tz_counts[:10].plot(kind = "barh",rot=0)
plt.show()
#用户浏览器分析
results = Series([x.split()[0] for x in frame.a.dropna()])
#打印前8的浏览器
print(results.value_counts()[:8])
cframe = frame[frame.a.notnull()]
operating_system = np.where(cframe['a'].str.contains("Windows"),"Windows","Not Windows")
windows = 0
nonWindows = 0
for op in operating_system:
if op == "Windows":
windows += 1
else:
nonWindows += 1
print("windows:",windows,"nonWindows:",nonWindows)
#使用windows/nonwindows给时区分组
by_tz_os = cframe.groupby(['tz',operating_system])
agg_counts = by_tz_os.size().unstack().fillna(0)
print(agg_counts[:10])
#选取最常见的时区
indexer = agg_counts.sum(1).argsort()
print(indexer)
count_subset = agg_counts.take(indexer)[-10:]
print(count_subset)
#绘制windows/nonwindows 堆叠条形图
count_subset.plot(kind="barh",stacked=True)
#不加这句语句,在Ipython中可以显示但是脚本运行不显示
plt.show()
#规范化
normed_subset = count_subset.div(count_subset.sum(1),axis = 0)
normed_subset.plot(kind = "barh",stacked=True)
plt.show()

MovieLens 1M数据集:20世纪90年末到21世纪初6000名用户提供的4000部电影评分100万条数据,分为3个表:电影评分,电影元数据(类型,年代),用户的人口统计学数据(年龄,右边,性别,职业)

# -*- coding: utf-8 -*-
import pandas as pd
import os
#数据读取,读成3个表
path = 'E:/Programming/Python/PythonDataAnalysis/datasets/movielens/'
unames = ['user_id','gender','age','occupation','zip']
upath = os.path.join(path,'users.dat')
users = pd.read_table(upath,sep = "::",header=None,names=unames,engine='python')
rnames = ['user_id',"movie_id","rating","timestamp"]
ratings = pd.read_table(path+'ratings.dat',sep = "::",header=None,names=rnames,engine='python')
mnames = ['movie_id','title','genres']
movies = pd.read_table(path+'movies.dat',sep ="::",header=None,names=mnames,engine='python')
#数据表整合
data = pd.merge(pd.merge(ratings,users),movies)
print(data[:10])
print(data.ix[0])
#按性别计算每部电影的得分,index 中是标签,columns中是列标签
mean_ratings = data.pivot_table('rating',index = 'title',columns = "gender",aggfunc='mean')
print(mean_ratings[:10])
#过滤掉评分不足250条的电影
ratings_by_title = data.groupby('title').size()
print(ratings_by_title[:10])
active_titles = ratings_by_title[ratings_by_title >= 250]
print(active_titles)
#按照评论>=250的index筛选
mean_ratings = mean_ratings.ix[active_titles.index]
top_female_ratings = mean_ratings.sort_index(by='F',ascending=False)
print(top_female_ratings[:10])
#计算男性女性得分分歧最大的电影
mean_ratings['diff'] = mean_ratings['M'] - mean_ratings['F'] sorted_by_diff = mean_ratings.sort_index(by = 'diff')
#分歧最大且女性更喜欢的电影
print(sorted_by_diff[:15])
#对结果反序取出前15行,男性观众更喜欢的电影
print(sorted_by_diff[::-1][:15])
#分歧最大的电影,计算方差或者标准差
rating_std_by_title = data.groupby('title')['rating'].std()
#使用active_title进行过滤
rating_std_by_title = rating_std_by_title.ix[active_titles]
rating_std_by_title.order(ascending=False)
print(rating_std_by_title[:15])

1880-2010年间婴儿名字频率数据

# -*- coding:utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
path = 'E:/Programming/Python/PythonDataAnalysis/datasets/babynames/'
names1880 = pd.read_csv(path+'yob1880.txt',names = ['name','sex','births'],engine='python')
#按照sex对数据进行简单分组
names1880.groupby('sex').births.sum()
#将单个文件中的数据整合到一个数据表中
years = range(1880,2011)
pieces = []
columns = ['name','sex','birth']
for year in years:
subpath = 'yob%d.txt' % year
frame = pd.read_csv(path+subpath,names = columns)
frame['year'] = year
pieces.append(frame)
names = pd.concat(pieces,ignore_index = True)
#使用pivot_table()函数进行聚合
total_births = names.pivot_table('birth',index = 'year',columns = 'sex',aggfunc = sum)
print(total_births.tail())
#插入prop列存放指定的婴儿数相对于总出生数的比例
def add_prop(group):
births = group.birth.astype(float)
group['prop'] = births/births.sum()
return group names = names.groupby(['year','sex']).apply(add_prop)
#取出每个sex/year组合的前1000个名字
def get_top1000(group):
return group.sort_values(by='birth',ascending=False)[1:1000]
grouped = names.groupby(['year','sex'])
top1000 = grouped.apply(get_top1000)
#接下来的'命名趋势'分析针对这top1000个数据集
#取出男性
boys = top1000[top1000.sex == 'M']
#取出女性
girls = top1000[top1000.sex == 'F']
total_births = top1000.pivot_table('birth',index = 'year',columns = 'name',aggfunc = sum)
subset = total_births[['John','Harry','Mary','Marilyn']]
subset.plot(subplots = True,figsize = (12,10),grid=False,title = "Number of births per year")
plt.show()
#观察名字多样性变化
table = top1000.pivot_table('prop',index = 'year',columns = 'sex',aggfunc = sum)
table.plot(title = "sum of table1000.prop by year and sex",yticks = np.linspace(0,1.2,13),xticks = range(1880,2020,10))
plt.show()
# 名字最后一个字母的变化

  

[读书笔记] Python数据分析 (二) 引言的更多相关文章

  1. [读书笔记] Python 数据分析 (十二)高级NumPy

    da array: 一个快速而灵活的同构多维大数据集容器,可以利用这种数组对整块的数据进行一些数学运算 数据指针,系统内存的一部分 数据类型 data type/dtype 指示数据大小的元组 str ...

  2. [读书笔记] Python数据分析 (三) IPython

    1. 什么是IPython IPyhton 本身没有提供任何的计算或者数据分析功能,在交互式计算和软件开发者两个方面最大化地提高生产力,execute-explore instead of edit- ...

  3. [读书笔记] Python数据分析 (一) 准备工作

    1. python中数据结构:矩阵,数组,数据框,通过关键列相互联系的多个表(SQL主键,外键),时间序列 2. python 解释型语言,程序员时间和CPU时间衡量,高频交易系统 3. 全局解释器锁 ...

  4. [读书笔记] Python数据分析 (四) 数组和矢量计算

    Numpy:高性能计算和数学分析的基础包 ndarray, 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对数组数据进行快速运算的标准数学函数 用于读写磁盘数据的工具和用于操作内存 ...

  5. [读书笔记] Python数据分析 (五) pandas入门

    pandas: 基于Numpy构建的数据分析库 pandas数据结构:Series, DataFrame Series: 带有数据标签的类一维数组对象(也可看成字典) values, index 缺失 ...

  6. [读书笔记] Python 数据分析 (八)画图和数据可视化

    ipython3 --pyplot pyplot: matplotlib 画图的交互使用环境

  7. [读书笔记] Python 数据分析 (十一)经济和金融数据应用

    resample: 重采样函数,可以按照时间来提高或者降低采样频率,fill_method可以使用不同的填充方式. pandas.data_range 的freq参数枚举: Alias Descrip ...

  8. 《Linux内核设计与实现》读书笔记——第一、 二章

    <Linux内核设计与实现>读书笔记--第一. 二章 标签(空格分隔): 20135321余佳源 第一章 Linux内核简介 1.Unix内核特点 十分简洁:仅提供几百个系统调用并且有明确 ...

  9. 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...

随机推荐

  1. Ajax-URL 防止数据缓存,添加时间戳

    url:CONTEXTPATH + "/dataService/getSourceStatics?type=0&t="+new Date().getTime(),

  2. HDU 4454

    想了很久,发现其实就只需要三分枚举圆上的点,到矩形的最短很容易就可以求到了.开始时考虑要不要根据矩形相对圆的方位来划分枚举区间,后来发现一定不能这样做的. 注意题目给的是矩形的对角形,但没说哪一条对角 ...

  3. CommonJS,AMD,RequireJS的差别

    RequireJS实现了AMD的API. CommonJS是使用exports对象来定义模块的一种方法,它定义了模块的内容.简单地实现一个CommonJS的定义就像以下这样: // someModul ...

  4. 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)

    题目链接: 点击打开链接 题目大意: 在一个周长为L的环上.给出n棵苹果树.苹果树的位置是xi,苹果树是ai,苹果商店在0位置,人的篮子最大容量为k,问最少做多远的距离可以把苹果都运到店里 题目分析: ...

  5. do while 循环和while循环的差别

    do while 循环和while循环的差别 1.do while循环是先运行循环体,然后推断循环条件,假设为真,则运行下一步循环,否则终止循环.    while循环是先推断循环条件,假设条件为真则 ...

  6. win10怎样开启自带虚拟机

    win10和win8一样.都有自带的虚拟机,可是功能没有一安装上就打开,非常多喜欢用自带的东西,那么win10自带的虚拟机怎样开启呢? 首先要找到控制面板,我们右键点击開始button,我们找到&qu ...

  7. elcipse 编译cocos2d-x android

    http://blog.csdn.net/eyu8874521/article/details/22605695 最開始学习cocos2dx.大多数人可能是被复杂的环境配置过程搞死的,尤其是和Andr ...

  8. h5-列表

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX4AAAInCAIAAAAQ0aUJAAAgAElEQVR4nOy9eVxb153wnZk+z/t53n ...

  9. numpy的scale就是 x-mean/std

    >>> from sklearn import preprocessing >>> import numpy as np >>> a=np.arr ...

  10. 【POJ 1082】 Calendar Game

    [题目链接] http://poj.org/problem?id=1082 [算法] 对于每种状态,要么必胜,要么必败 记忆化搜索即可 [代码] #include <algorithm> ...