最近需要根据已有的数据计算这样一组数据:

  • 股票名称
  • 股票代码
  • 推荐人数
  • 平均分数
  • 最大幅度

看到这样的需求,首先想到的是利用pandas的groupby功能。

一、获取数据

1
2
3
4
5
6
7
8
9
10
11
sql = "select ID, CODE, NAME, SCORE, Target from table_info"
df = pd.read_sql(sql, engine)

df.head()
Out[44]:
ID CODE NAME SCORE Target
0 {00044A0F-3D2A-49E9-B2FD-C42890B10C10} 002285 世联行 0.933333 0.020588
1 {001F206E-341A-4613-8AD5-BF9BFD3BB731} 002285 世联行 0.928571 0.147228
2 {002C6D88-A011-4E55-93F1-F13CA5B0ACD4} 000058 深 赛 格 0.800000 0.029838
3 {0036D69B-32FB-4D07-B23B-93181A573749} 300095 华伍股份 1.000000 0.071705
4 {003DEFB1-3664-4F51-B867-A0D31C63A7EE} 002588 史丹利 0.911504 0.000000

二、GroupBy处理

1, 获取推荐人数

1
2
3
4
5
6
7
8
9
10
11
12
grouped = df.groupby(['CODE','NAME'])
df_count =grouped['ID'].count()

df_count.head()
Out[48]:
CODE NAME
000001 平安银行 17
000006 深振业A 2
000018 神州长城 3
000023 深天地A 1
000026 飞亚达A 6
Name: ID, dtype: int64
阅读全文 »

一、GroupBy技术

GroupBy技术是Hadley Wickham(热门R语言包作者)创造的,用于表示分组运算,“split-apply-combine”(拆分 - 应用 - 合并)。

二、分组键

分组键可以有多种形式,且类型不必相同

  • 列表或数组,其长度与待分组的轴一样。

  • 表示DataFrame某个列名的值。

  • 字典或Series,给出带分组轴上的值与分组名之间的对应关系。

  • 函数,用于处理轴索引或索引中的各个标签。

阅读全文 »

在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。

文本相似度计算的需求始于搜索引擎,搜索引擎需要计算“用户查询”和爬下来的众多“网页”之间的相似度,从而把最相似的排在最前,返回给用户。

一、基本概念

TF-IDF

  • TF:term frequency,词频

$$ 词频(TF) = 某个词在文章中的出现次数 $$

$$ 词频(TF) = \frac{某个词在文章中的出现次数}{文章的总次数} $$

$$ 词频(TF) = \frac{某个词在文章中的出现次数}{该文出现次数最多的词的出现次数} $$

  • IDF:inverse document frequency,逆文档频率

$$ IDF = log(\frac{语料库的文档总数}{包含该词的文档数+1}) $$

  • TF-IDF

$$ TF-IDF = 词频(TF) \times逆文档频率(IDF) $$

主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

阅读全文 »

基于用户的协同过滤

我们将一个用户和其他所有用户进行对比,找到相似的人。这种算法有两个弊端:

  1. 扩展性 随着用户数量的增加,其计算量也会增加。这种算法在只有几千个用户的情况下能够工作得很好,但达到一百万个用户时就会出现瓶颈。

  2. 稀疏性 大多数推荐系统中,物品的数量要远大于用户的数量,因此用户仅仅对一小部分物品进行了评价,这就造成了数据的稀疏性。比如亚马逊有上百万本书,但用户只评论了很少一部分,于是就很难找到两个相似的用户了。

鉴于以上两个局限性,我们不妨考察一下基于物品的协同过滤算法。

基于物品的协同过滤

假设我们有一种算法可以计算出两件物品之间的相似度,比如Phoenix专辑和Manners很相似。如果一个用户给Phoenix打了很高的分数,我们就可以向他推荐Manners了。

需要注意这两种算法的区别:

  • 基于用户的协同过滤是通过计算用户之间的距离找出最相似的用户,并将他评价过的物品推荐给目标用户;

  • 而基于物品的协同过滤则是找出最相似的物品,再结合用户的评价来给出推荐结果。

  • 基于用户的协同过滤又称为内存型协同过滤,因为我们需要将所有的评价数据都保存在内存中来进行推荐。

  • 基于物品的协同过滤也称为基于模型的协同过滤,因为我们不需要保存所有的评价数据,而是通过构建一个物品相似度模型来做推荐。

    阅读全文 »

协同型过滤 ( Collaborative filtering)
一个协作型过滤算法通常的做法是对一大群人进行搜索,并从中找出与我们品味相近的一小群人。算法会对这些人所偏爱的其他内容进行考查,并将它们组合起来构造出一个经过排名的推荐列表。

一、相似度评价方法

0,数据集

本文中的数据集都是以嵌套字典的形式出现,如下:
字典的key为用户名,value为对各个物品的评价分数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
users={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,
'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,
'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,
'The Night Listener': 4.5, 'Superman Returns': 4.0,
'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}


critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5,
'Superman Returns': 5.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5,
'Superman Returns': 4.0, 'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0,
'Superman Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'The Night Listener': 3.0,
'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,
'Superman Returns':4.0}}

1,曼哈顿距离

最简单的距离计算方式是曼哈顿距离。在二维模型中,每个人都可以用(x, y)的点来表示,这里我用下标表示不同的人,(x1,y2)表示艾米,(x2,y2)表示神秘的X先生,那么他们之间的曼哈顿距离就是



阅读全文 »

第一章 金融、资产管理与投资基金

1,金融资产

一般分为债券类金融资产和股权类金融资产。

债券类金融资产以票据、债券等契约型投资工具为主,股权类金融资产以各类股票为主。

2,投资基金的主要类别

主要按照所投资的对象的不同进行区分:

  1. 证券投资基金
    基金所投资的有价证券主要是在证券交易所或银行间市场上公开交易的证券,包括股票、债券、货币、金融衍生工具等。
    可分为公募证券投资基金和私募证券投资基金等种类。

  2. 私募股权基金
    私募股权基金(private equity,PE)指通过私募形式对私有企业,即非上市企业进行的权益性投资。

  3. 风险投资基金
    风险投资基金(venture capital,VC),又叫创业基金,它以一定的方式吸收机构和个人的资金,投向与那些不具备上市资格的初创期的或者是小型的新型企业,尤其是高新技术企业,帮助所投资的企业尽快成熟,取得上市资格,从而使资本增值。

  4. 对冲基金(hedge fund),意为“风险对冲过的基金”,它是基于投资理论和极其复杂的金融市场操作技巧,充分利用各种金融衍生产品的杠杆作用,承担高风险、追求高收益的投资模式。

  5. 另类投资基金
    是指投资于传统的股票、债券之外的金融和实物资产的基金,如房地产、证券化资产、对冲基金、大宗商品、黄金、艺术品等。

阅读全文 »

scrapy爬虫框架在业内大大有名,自己写过静态网页和动态网页的爬虫,一直没拿scrapy来写,近来看了scrapy的官方文档,了解了大致的流程,故拿来练手实践了一个项目。

本文主要抓取股吧的文章,内容包括:

  • 定义抓取Spider

  • 数据字段的定义

  • 内容解析

  • 数据存储到mysql

  • PyCharm调试scrapy

一、定义抓取Spider

创建一个新的Spider

1
2
scrapy startproject tutorial
scrapy genspider guba_spider eastmoney.com

默认创建的Spider是继承与BaseSpider,一般我们继承功能更多的CrawlSpider。

1
2
3
4
5
6
7
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class GubaSpider(CrawlSpider):
name = 'guba'
allowed_domains = ['eastmoney.com']

定义好GubaSpider类后,然后要指定开始网页start_urls和rules抓取网页规则。

1
2
3
4
5
6
7
8
9
10
start_urls = [
'http://guba.eastmoney.com/default_%d.html' % index for index in range(1, 100)
]

rules = (
# 提取匹配 文章 的链接并使用spider的parse_article方法进行分析
Rule(LinkExtractor(allow=(r'^http://guba.eastmoney.com/news.', )), callback='parse_article'),

Rule(LinkExtractor(allow=(r'^http://iguba.eastmoney.com/\d+.',)), callback='parse_auther')
)
阅读全文 »

使用pandas,首先导入包:

1
2
from pandas import Series, DataFrame
import pandas as pd

一、创建Series,DataFrame

1,创建Series

a,通过列表创建

1
2
obj = Series([4, 7, -5, 3]) 
obj2 = Series([4, 7, -5, 3], index=['d','b','a','c']) #指定索引

b,通过字典创建Series

1
2
sdata = {'Ohio':35000, 'Texas':7100, 'Oregon':1600,'Utah':500}
obj3 = Series(sdata)
阅读全文 »

标签云是比较直观的频率分布表现方式,很多网站和APP在年度盘点和总结时会使用。Python生成标签云有一个比较易用的库 pytagcloud。

1,导入头文件

1
2
from pytagcloud import create_tag_image, make_tags
from pytagcloud.lang.counter import get_tag_counts
阅读全文 »

概念

朴素贝叶斯算法是一个直观的方法,使用每个属性属于某个类的概率来做预测。你可以使用这种监督性学习方法,对一个预测性建模问题进行概率建模。

给定一个类,朴素贝叶斯假设每个属性归属于此类的概率独立于其余所有属性,从而简化了概率的计算。这种强假定产生了一个快速、有效的方法。

给定一个属性值,其属于某个类的概率叫做条件概率。对于一个给定的类值,将每个属性的条件概率相乘,便得到一个数据样本属于某个类的概率。

1、贝叶斯定理

假设对于某个数据集,随机变量C表示样本为C类的概率,F1表示测试样本某特征出现的概率,套用基本贝叶斯公式,则如下所示:



上式表示对于某个样本,特征F1出现时,该样本被分为C类的条件概率。

阅读全文 »