《用Python玩转数据》-06 Python高级处理与数据可视化

6.1 聚类分析

聚类算法有很多,K均值算法是比较常用的一类,我们通常说它简单但够用了

  • K-means算法
    1.任意选择k个对象作为初始的聚类中心
    2.然后对每个点确认它的聚类中心点,这里就是计算距离,一般采用均方差作为标准测度函数
    3.计算每个新聚类的聚类中心,直到确认的聚类点不再收敛(直到质心与原来的质心相等或小于相应的阈值)
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten
list1 = [88.0, 74.0, 96.0, 85.0]
list2 = [92.0, 99.0, 95.0, 94.0]
list3 = [91.0, 87.0, 99.0, 95.0]
list4 = [78.0, 99.0, 97.0, 81.0]
list5 = [88.0, 78.0, 98.0, 84.0]
list6 = [100.0, 95.0, 100.0, 92.0]

data = np.array([list1, list2, list3, list4, list5, list6])
#whiten()主要实现的是将data数据的标准差求出,返回各个值除以其标准差的ndarray
whiten = whiten(data)              
centroids,_ = kmeans(whiten, 2)         #对数据进行聚类
result, _ = vq(whiten, centroids)       #矢量量化函数,对每一个数据进行归类,获得结果
print(result)
  • 用专业的机器学习包来解决 scikit-learn
import numpy as np
from sklearn.cluster import KMeans

list1 = [88.0, 74.0, 96.0, 85.0]
list2 = [92.0, 99.0, 95.0, 94.0]
list3 = [91.0, 87.0, 99.0, 95.0]
list4 = [78.0, 99.0, 97.0, 81.0]
list5 = [88.0, 78.0, 98.0, 84.0]
list6 = [100.0, 95.0, 100.0, 92.0]

X = np.array([list1, list2, list3, list4, list5, list6])
kmeans = KMeans(n_clusters = 2).fit(X)
pred = kmeans.predict(X)
print(pred)
  • 分类
    将数据分为两部分,一类为训练集,另外一类为测试集,从训练集中得出模型,在对测试集运用得到相应的标记(以上班数据为例)
from sklearn import datasets
from sklearn import svm

clf = svm.SVC(gamma = 0.001, C = 100.)
digits = datasets.load_digits()
clf.fit(digits.data[:-1], digits.target[:-1])           #对n-1份训练集学习
clf.predict(digits.data[-1])                            #对一份测试卷预测     
  • 基于一个实际例子来进行聚类分析
import requests
import re
import json
import pandas as pd
from sklearn.cluster import KMeans
import numpy as np

def retrieve_quotes_historical(stock_code):
    quotes = []
    url = 'https://finance.yahoo.com/quote/%s/history?p=%s' % (stock_code, stock_code)
    r = requests.get(url)
    m = re.findall('"HistoricalPriceStore":{"prices":(.*?),"isPending"', r.text)
    if m:
        quotes = json.loads(m[0])
        quotes = quotes[::-1]
    return [item for item in quotes if not 'type' in item]

def create_df(stock_code):
    quotes = retrieve_quotes_historical(stock_code)
    list1 = ['close', 'date', 'high', 'open', 'volume']
    df_totalvolume = pd.DataFrame(quotes, columns = list1)
    # 用数据的平均值代替数据中的空值(NaN)
    df_totalvolume = df_totalvolume.fillna(df_totalvolume.mean())
    return df_totalvolume

listDji = ['MMM', 'AXP', 'AAPL', 'BA', 'CAT', 'CVX', 'CSCO', 'KO', 'DIS', 'DD']
listTemp = [0] * len(listDji)
for i in range(len(listTemp)):
    listTemp[i] = create_df(listDji[i]).close
status = [0] * len(listDji)
for i in range(len(status)):
    status[i] = np.sign(np.diff(listTemp[i]))       #对数据做一个预处理

#简单处理某一只或几只股票数据没有获得(值为[])的问题,删除此数据
for i in range(len(status)):
    if len(status[i]) == 0:
        status.pop(i)
        break
kmeans = KMeans(n_clusters = 3).fit(status)
pred = kmeans.predict(status)
print(pred)

6.2Matplotlib绘图基础

Matplotlib是其中非常重要的数据库,可以绘制高质量的图形来实现数据可视化的目的

Matplotlib简介
Matplotlib可画图像
  • 绘图API——pylot模块
  1. 折线图
import matplotlib.pyplot as plt
closeMeansKO = tempdf.groupby('month').close.mean()
print(closeMeansKO)
x = closeMeansKO.index
y = closeMeansKO.values
plt.plot(x, y)
输出示例图
#NumPy数组也可以作为Matplotlib的参数
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 4., 0.1 )
plt.plot(t, t, t, t+2, t, t**2)
输出图像.png
  1. 散点图
plt.plot(x, y, 'o')
输出图像—散点图.png
  1. 柱状图
plt.bar(x, y)
  • 集成库——pylab模块(包含NumPy和pylot中的常用函数)
import numpy as np
import pylab as pl
t = np.arange(0., 4., 0.1 )
pl.plot(t, t, t, t+2, t, t**2)
输出图像和利用matplotlib是一致的

6.3Matplotlib图像属性设置

  • 色彩和样式
    1.蓝色实线 'b-'
    2.绿色虚线 'g--'
    ......


    Matplotlib图像属性设置.
  • 文字
    图像中可以添加相应的文字信息,比如
    1.标题 "title"
    2.横轴 "xlabel"
    3.纵轴 "ylabel"

x = closeMeansKO.index
y = closeMeansKO.values
plt.title('Stock Statistics of Coca-Cola')
plt.xlabel('Month')
plt.ylabel('Average Close Price')
plt.plot(x, y)
带文字信息的图像
  • 其他属性
import pylab as pl
import numpy as np
pl.figure(figsize = (8,6), dpi = 100)
t = np.arange(0., 4., 0.1)
pl.plot(t, t, color = 'red', linestyle = '-', linewidth = 3, label = 'Line1')
pl.plot(t, t+2, color = 'green', linestyle = '', marker = '*',linewidth = 3, label = 'Line2')
pl.plot(t, t**2, color = 'blue', linestyle = '', marker = '+',linewidth = 3, label = 'Line3')
pl.legend(loc = 'upper left')           #图例放在左上方,图例内容为label内容

输出pylab图形
#多子图
import matplotlib.pyplot as plt
plt.subplot(211)
plt.plot(x, y, color = 'r', mraker = 'o')
plt.subplot(212)
plt.plot(x, y, color = 'green', marker = 'o')

#另一种形式表现多子图
plt.axes([.1, .1, 0.8, 0.8])
plt.plot(x, y, color = 'r', mraker = 'o')
plt.axes([.3, .15, 0.4, 0.3])
plt.plot(x, y, color = 'green', mraker = 'o')

6.4 Pandas作图

除了能对Series进行绘图以外,对DataFrame的绘图功能比pyplot和pylab更加高效

#eg1
closeMeansKO.plot()

#eg2
quotesdfIBM.close.plot()

#用柱状图比较Intel和IBM这两家公司近一年来股票成交量
INTC_volumes = create_volumes('INTC')
IBM_volumes = create_volumes('IBM')
quoteslldf = pd.DataFrame()
quoteslldf['INTC'] = INTC_volumes
quoteslldf['IBM'] = IBM_volumes
quoteslldf.plot(kind =  'bar')  #kind参数控制图形形式

#箱型图
quoteslldf.boxplot()

6.5数据存取

  • csv格式数据存取
#存储
import pandas as pd
...
quotes = retrieve_quotes_historical('AXP')
df = pd.DataFrame(quotes)
df.to_csv('stockAXP.csv')

#读取csv文件
pd.read_csv('test.csv')

Python的理工类运用

  • 简单的三角函数问题
#三角函数运算
import numpy as np
import pylab as pl
#利用林space生成的一组从-pi到pi的等差数据
x = np.linspace(-np.pi, np.pi, 256)
s = np.sin(x)
c = np.cos(x)
pl.title('Trigonometric Function')
pl.xlabel('X')
pl.ylabel('Y')
pl.plot(x, s)
pl.plot(x, c)
三角函数图像
#快速傅里叶变换
import scipy as sp
import pylab as pl
listA = sp.ones(500)
listA[100:300] = -1
f = sp.fft(listA)
pl.plot(f)
快速傅里叶变换
  • 常用Python图像处理库
    Pillow(PIL)
    OpenCV
    Skimage
from PIL import Image
im1 = Image.open('1.png')
#输出图片的大小、格式、模式
print(im1.size, im1.format, im1.mode)
Image.open('1.png').save('2.png')
im2 = Image.open('2.png')
size = (288, 180)
#创建第二张图的缩略图
im2.thumbnail(size)
#逆时针旋转45度
out = im2.rotate(45)
im1.paste(out, (50,50))
  • Biopython
    处理常用的生物信息学处理对象,最重要的数据结构就是序列


    Biopython示例简介
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容