LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

Python

453.2万浏览    3817参与
榜单数据更新于2020-02-16 17:51
一块小饼干

以“绿谷出久”“轰焦冻”“爆豪胜己”为关键词,在百度图片上用python共爬取了5000张照片,生成了一张小久的笑脸和一张轰出胜图~

拼图1:


局部放大1:


原图1:


拼图2:


局部放大2:


原图2:


补充说明:

1)放大后小图清晰可见,但由于是关键词搜索,小图中可能包含其它人物和cp,请谅解

2)所有图片来源于百度,侵删

3)生成拼图的代码参考:https://github.com/NoisyWinds/puzzle


待研究的问题:

1)在电脑不卡死的情况下遍历删除图片库中为“暂时无法查看”的图片

2)百度每个关键词最多只能搜出1800...

以“绿谷出久”“轰焦冻”“爆豪胜己”为关键词,在百度图片上用python共爬取了5000张照片,生成了一张小久的笑脸和一张轰出胜图~

拼图1:



局部放大1:



原图1:



拼图2:



局部放大2:



原图2:



补充说明:

1)放大后小图清晰可见,但由于是关键词搜索,小图中可能包含其它人物和cp,请谅解

2)所有图片来源于百度,侵删

3)生成拼图的代码参考:https://github.com/NoisyWinds/puzzle


待研究的问题:

1)在电脑不卡死的情况下遍历删除图片库中为“暂时无法查看”的图片

2)百度每个关键词最多只能搜出1800~1900张图片,可能存在反爬虫机制…

3)尝试爬取google或p站,增加图片量

(本来是想在昨天的基础上提升一下技术水平的,结果搞了一上午一个问题都没解决,菜鸡落泪…先放上来做个记录吧)

雁如
《默读》的28个有趣事实(词频...

《默读》的28个有趣事实(词频分析) 

       图片制作 / Word Art


使用 Python 搭配 jieba 中文分词词库,针对《默读》本文进行分析,从 Priest 的写作用词中提取关于《默读》的 28 个有趣事实

根据:《默读》本文前 1000 名高频词

参杂很多个人感想、穿凿附会与胡说八道


1. 角色出场前三名由主人翁以及最可爱的小伙伴包办

 这三个人同时也是高频词第1、2、4名,不过陶然硬生生比主角少了一半多

  1. 骆闻舟 3827 次
  2. ...

《默读》的28个有趣事实(词频分析) 

       图片制作 / Word Art

 

使用 Python 搭配 jieba 中文分词词库,针对《默读》本文进行分析,从 Priest 的写作用词中提取关于《默读》的 28 个有趣事实

根据:《默读》本文前 1000 名高频词

参杂很多个人感想、穿凿附会与胡说八道

 

1. 角色出场前三名由主人翁以及最可爱的小伙伴包办

 这三个人同时也是高频词第1、2、4名,不过陶然硬生生比主角少了一半多

  1. 骆闻舟 3827 次
  2. 费渡 3243 次
  4. 陶然 1185 次

 

 当然市局与费总的小伙伴也是不可少的

  9. 海洋 699 次(不排除海洋为一常用词汇)
  13. 郎乔 510 次
  23. 周怀瑾 419 次
  162. 陆嘉 139 次(想不到陆嘉的出场次数这么少)

 

 竟然在前100名内?打爆费承宇狗头!

  81. 费承宇 212 次

 

 其他还有谁呢?(人物风云榜前12名)

  54. 卢国盛 277 次
  59. 东来 256 次
  79. 忠义 215 次
  90. 张春久 192 次
  94. 夏晓楠 186 次
  101. 张春龄 181 次
  108. 范思远 177 次
  117. 郑凯风 168 次
  119. 周怀信 167 次
  124. 冯斌 163 次
  127. 顾钊 161 次
  132. 骆一锅 159 次
  (锅总的戏份跌出 11 名外……)

 

2. 皮皮是个「1111」大王吗?是!

 前 100 名高频词中,「一」总共出现了 6232 次

  3. 一个 1853 次
  8. 一下 779 次
  14. 一点 495 次
  18. 一眼 467 次(恐怕要斜视?)
  24. 一声 407 次
  26. 一起 370 次(一起!)
  42. 一直 313 次
  43. 一边 312 次
  46. 一会 298 次
  53. 一把 278 次
  62. 一句 250 次
  77. 一条 219 次
  91. 一次 191 次

 

3. 《默读》的写作风格(和剧情)包括许多犹豫和推测

 11. 可能 649 次
 12. 觉得 561 次
 15. 好像 478 次
 17. 有点 468 次
 30. 应该 363 次

 

4.「突然」为最常使用的转折词

 19. 突然 464 次

 其次的使用程度少于一半

 98. 忽然 184 次

 

5. 通话依旧是人物沟通所倚赖的重要工具

 22. 手机 443 次
 25. 电话 384 次

 

6.「女孩」的出场机率最高、「司机」比「凶手」重要

 最多的人物代词

  27. 女孩 367 次

 然后才是警察(28名、366次)

 以及老师(51名、279次) 、男人(61名、252次) 与司机(64名、238次)

 可见司机比凶手(78名、217次)重要多了

 

7. 就连读小说也要跟着人物一直上班,心累累啊

 40. 市局 318 次
 86. 工作 205 次
 87. 调查 200 次
 88. 案子 198 次

 (相较家里(112名、170次);回家(259名、101次),哭哭~)

 

8. 刑侦工作有大量时间与「监控」为舞

 47. 监控 297 次

 

9. 使用了很多「心里」直接表述人物想法

 56. 心里 273 次 

 

10. 出现了 231 次的「眼睛」(71名)

 大家猜猜看是谁的眼睛呢?

 

11. 以及 209 次的「伸手」(83名)

 又是谁总是愿意伸出手?

 

12.「是不是」出现了 194 次(89名)

 ni缩484484484484484484484484

 

13.「口气」也跻身百强,出现 185 次(96名)

 是谁的口气不好?

 

14. 十分口语的「干什么」使用了 153 次(139名)

 请不要害怕说干

 

15. 形容动词时最爱用「轻轻」(143 次、153名)

 缓缓(142 次、154名)与飞快 (142 次、154名)紧追在后

 

16. 从「来得及」(125 次、190名)得知,《默读》总是在赶集

 骆闻舟每天早上都来得及?

 

17. 最不待见的「地下室」出现了 111 次(222名)

 比「杀人」(105 次、242名)还多

 

18. 喊骆闻舟最多用「骆队」(220次、75名)

 然后是「老大」(123次、194名)

 

19.「燕城」出现了 103 次(250名)

 普遍认为燕城的背景参考北京,你觉得呢?

 

20.《默读》中人物「点头」了 99 次(266名),「摇头」了 74 次(369名)

 点头与摇头果然是人类最好的沟通语言(但是远远输给伸手!)

 

21. 而且「无表情」了 58 次(465名)

 怕不是集体面瘫吧~

 

22.《默读》中共「开车」了 81 次(321名)(大雾)

 叭叭叭

 

23. 前500名中合规的「脖子以上」共出现了几次呢?

 71. 眼睛 231 次
 262. 脖子 100 次
 334. 嘴唇 79 次
 384. 下巴 70 次
 407. 耳朵 66 次
 410. 嘴角 65 次
 422. 头发 64 次
 478. 眼角 57 次

 答案是 732 次喔!

 

24.《默读》使用了 78 次「神秘」(340名)

 丝毫不吝于在刑侦小说里创造神秘感

 

25.《默读》里「车祸」出现了 74 次(368名)

 车祸真是个好用的意外手法啊(误)

 

26.《默读》里「亲自」了 63 次(431名)

 是谁这么大牌?

 

27. 纯爱小说里最重要的「沙发」出现了 61 次(442名)

 到底在沙发上干什么啦?

 

28.《默读》最常出现的「四字词汇」有哪些呢?

 成语版:

  526. 莫名其妙 52 次
  590. 不由自主 49 次
  669. 悄无声息 45 次
  681. 不动声色 44 次
  772. 一言不发 41 次
  789. 小心翼翼 40 次
  900. 猝不及防 35 次
  920. 不慌不忙 35 次
  985. 一模一样 32 次

 非成语版:

  608. 笑了起来 48 次
  808. 怎么回事 39 次
  829. 不好意思 38 次
  872. 也就是说 36 次

 

结语:

  词频分析用以挖掘文本,从观察词汇的重复度与变化中,我们能获得许多意想不到的信息:作者写作习惯、文风走向与文本基调……在此提供默读1000高频词汇,哪个小伙伴想利用来写一篇原汁原味默读 style 的同人,记得艾特我哦ヽ(✿゚▽゚)ノ(咦──)

  如有任何想法,欢迎于底下评论提问、讨论、交流~

一块小饼干

分别以“轰焦冻”和“爆豪胜己”为关键词,在百度图片上用python爬取了1000张照片,生成了下面一张轰爆图。

今天也是吹爆python和轰爆的一天(够

拼图:


(用大概有3600张图片的库重新做了一遍,感觉效果好了一点:)


局部放大:


原图:


补充说明:

1)放大后小图清晰可见,但由于是关键词搜索,小图中可能包含其它人物和cp,请谅解

2)所有图片来源于百度,侵删

3)生成拼图的代码参考:https://github.com/NoisyWinds/puzzle

4)百度上图片有点少,所以效果不太好…下次到别的网站上去爬爬


分别以“轰焦冻”和“爆豪胜己”为关键词,在百度图片上用python爬取了1000张照片,生成了下面一张轰爆图。

今天也是吹爆python和轰爆的一天(够

拼图:



(用大概有3600张图片的库重新做了一遍,感觉效果好了一点:)



局部放大:



原图:



补充说明:

1)放大后小图清晰可见,但由于是关键词搜索,小图中可能包含其它人物和cp,请谅解

2)所有图片来源于百度,侵删

3)生成拼图的代码参考:https://github.com/NoisyWinds/puzzle

4)百度上图片有点少,所以效果不太好…下次到别的网站上去爬爬


墨问非名
【哔哩哔哩视频评论抓取脚本】【...

【哔哩哔哩视频评论抓取脚本】【20180322】


使用说明

1. 视频AV号的数字每行一个写在`哔哩哔哩AV号.txt`中;

2. 运行`哔哩哔哩视频评论抓取by墨问非名[beta][20180322].exe`,抓取进度会显示在命令行窗口内,可以最小化,勿随意关闭;

3. 运行完毕后,在`Bilibili`文件夹中可以看到抓取到的视频评论。其中`txt`为方便直接阅读的格式,其他格式是供存档的原始数据。


下载:

https://pan.baidu.com/s/1I9GXb5aLUPQdCih4Is0jIg

现在B站可能面临新一波视频下架,鉴...

【哔哩哔哩视频评论抓取脚本】【20180322】


使用说明

1. 视频AV号的数字每行一个写在`哔哩哔哩AV号.txt`中;

2. 运行`哔哩哔哩视频评论抓取by墨问非名[beta][20180322].exe`,抓取进度会显示在命令行窗口内,可以最小化,勿随意关闭;

3. 运行完毕后,在`Bilibili`文件夹中可以看到抓取到的视频评论。其中`txt`为方便直接阅读的格式,其他格式是供存档的原始数据。


下载:

https://pan.baidu.com/s/1I9GXb5aLUPQdCih4Is0jIg

现在B站可能面临新一波视频下架,鉴于涉及欧美影视的视频已经被屠灭过几次了,如果有想备份的有趣评论,收藏吧。



墨问非名
【Lofter2Hexo 1....

【Lofter2Hexo 1.2版更新】



①lofter导出到xml方法:乐乎网页版-更多-导入导出。


下载到的xml就是你的乐乎文章的备份。



②xml文件和程序放在同一文件夹下即可,会按后缀名自动识别。



③Mac系统直接运行脚本,不提供打包,因为wxPython在Mac上打包的程序不能识别当前目录具体位置,无法使用。



④提供四种迁出类型:


Hexo(http://hexo.io


Hugo(http://gohugo.io


Jekyll(https://jekyllrb.com


Gridea(https...

【Lofter2Hexo 1.2版更新】




①lofter导出到xml方法:乐乎网页版-更多-导入导出。


下载到的xml就是你的乐乎文章的备份。




②xml文件和程序放在同一文件夹下即可,会按后缀名自动识别。




③Mac系统直接运行脚本,不提供打包,因为wxPython在Mac上打包的程序不能识别当前目录具体位置,无法使用。




④提供四种迁出类型:


Hexo(http://hexo.io


Hugo(http://gohugo.io


Jekyll(https://jekyllrb.com


Gridea(https://gridea.dev


其中Gridea是软件,Jekyll不需要安装环境也可以,Hugo需按说明安装一个对应软件且速度很快,Hexo稍麻烦但对应中文教程很多。




⑤GitHub项目地址:


https://github.com/alicewish/Lofter2Hexo




⑥主程序是`wxPython-Lofter2Hexo.py`,其打包版为`wxPython-Lofter2Hexo.exe`,运行效果是一样的。


这个程序的效果是把xml转换为对应的markdown文件。




⑦`wxPython-Lofter2Hexo-图片下载器.py`是配套图片下载器,不提供打包版,因为打包不成功。


原理是使用Selenium控制Chrome,使用脚本控制键盘按`ctrl`+`s`和`enter`,需保持被控制的Chrome在前台。




⑧下载完图片以后上传到GitHub,同时保证本地有对应图片库,再次运行主程序,如果在本地GitHub库找到对应图片即假设对应GitHub网址也有图片,将乐乎图片地址替换为对应新图床并生成markdown。




⑨`Lofter2Hexo.py`是早期的原型脚本,会Python且不需要图形界面的可以自己修改成需要的。




⑩支援群`912760241`,可以找我问相关。

घㅗ

这半年


一、 习作列表 


只写开宝,1至6月合计45篇,短篇坑文6万余字。标题后为主要角色/cp关系。


1月

1.波心月影 花粗

2.Che Gelida Manina(你这冰凉的手) 小伽

3.镜中花 花

4.租房子 开小/花粗

5.吔我大波板糖啦! 粗花

6.Truly Madly Deeply 花甜

7.一个儿子 开宅

8.偷儿在此! 花小花

9.欢笑炒肉 花


2月

10.我多么喜欢欢笑炒肉 花

11.旧梗新玩 凯伽

12.下水道来...


一、 习作列表 


只写开宝,1至6月合计45篇,短篇坑文6万余字。标题后为主要角色/cp关系。


1月

1.波心月影 花粗

2.Che Gelida Manina(你这冰凉的手) 小伽

3.镜中花 花

4.租房子 开小/花粗

5.吔我大波板糖啦! 粗花

6.Truly Madly Deeply 花甜

7.一个儿子 开宅

8.偷儿在此! 花小花

9.欢笑炒肉 花


2月

10.我多么喜欢欢笑炒肉 花

11.旧梗新玩 凯伽

12.下水道来客 花

13.我花我 花

14.PSR 花


3月

15.兔军官与小野狼 小伽

16.惊蛰 花粗花

17.奥卡姆剃刀 花

18.龙恶斗者勇 花开花

19.花与蛇 花小

20.Chiquitito(小男孩) 花

21.极光 花粗花

22.大黄象,小黄象 花&大大怪

23.兔人杀 小伽

24.钢铁直男贾荦与给圈名媛丁大国 罗大诱

25.Lzsb 罗大诱

26.花心磁力 花


4月

27.铁面人 罗大诱

28.欢笑炒肉2 花

29.王座 花粗花

30.Flipped 花甜

31.宅博士(外一则) 宅博士&大大怪


5月

32.那么也请容许我吹爆花心超人(广义的) 花

33.下海(广义的) 花小

34.校车(广义的) 花小

35.特攻(广义的) 小花

36.鸡阿姨 小伽

37.当xxcr看到黄金魔方非常心动但发现为拯救五百个阿婆及小女孩自己已经口袋空空的时候一只大明星高调路过 花小花

38.送别 花甜

39.やったぜ! 开花小

40.你都如何回忆我 花粗

41.欢笑炒肉3 花


6月

42.「我怎么可能和他出去玩啊!」 花小花

43.Chocomint 花小

44.莴苣公主 小花+粗花

45.花心超人把肉捧给粗心超人吃 花粗


二、角色共存关系:客观分析人物塑造与关系构建


1. 预处理

lofter有导出xml功能,该文件包含了创建博客至下载时间的所有博文及评论、点赞等。可以直接复制粘贴至word,然后用通配符删除不需要的内容,只留下正文。

使用中文NLP处理必用包jieba,达到分词效果;并使用load_userdict导入用户词典(只要建立一个包括重要人物名字的txt即可。如「花心超人」「甜心超人」等,否则jieba会自动将它们断成「花心」、「甜心」、「超人」三个词,这也是我之前做词频统计时「超人」一词最高频的原因。)

使用自带的stopwords,或导入中文暂停词表(网上可以搜索到,暂停词即「不久」、「除外」、「还是」等无差别连词)进行二次过滤。最后只留下大于2字的实义词汇。


2. 以句读切割,整理与某角色共同出现(co-occurrence)的高频词汇

先定义函数person_word,即整理出与指定的人名(e.g. 「花心超人」)同时出现在一行的词汇,形成词汇列表wordlist。

使用Wordcloud词云包制作每个wordlist的词云图,如下:

【甜心超人】


可以看出我很喜欢写花甜(行,下次把花心超人撇掉再分析。因为我写到哪里都是花心超人)。另外,厨房、泡泡、女孩子、买菜、包扎等词汇可以反映出这个爱做菜的医疗兵的特色;房间一词被反复使用,体现出我写文章格局不够大,喜欢把男女情爱扔到房间里写。下次有机会写野战。

【花心超人】


这不用说了,我儿子是被我写得最多的。cp向或cp向中,我写的花粗和花小平分秋色,夹杂和开心超人拌嘴或合作的情节(我一直觉得《龙恶斗者勇》很牛逼)。头发、镜子、主角等等都是他的常用物件或挂在嘴边的话,高频出现的「磁力」代表我总是为了不OOC而提起他的超能力(否则就和普通的黑皮傲娇无异)。

【粗心超人】


粗心超人的主要出现场合是帮BB个没完的花心超人修东西,或者和他抢洗手间,或者一脸祥和地被主角训斥。高频出现的词汇中有大量的「忘记」、「记忆」、「记得」等。可能因为原作的原因,粗心超人的刻画面非常狭窄,即使我试图将其拔高过,也与记忆能力脱不了干系。同时由于艰涩的《地球旅行》系列写作,和他紧密关联的还有一艘长途漂流的「飞船」和破破烂烂连不上线的「地图」。

【小心超人】

我写的伽叔叔相关大多用隐喻或对话,因此可以看到伽叔叔的名字只出现在非常小的角落。但是,这并不妨碍小心超人成为独立完整的个体,他熟练掌握「分身」「魔方」等技巧。我更感兴趣的是他作为独立的个人和伙伴们相处的矛盾冲突,以及他个人内心除了一心求战外的少年心事。他在和花心超人的日常中多有「身体」「皮肤」等身体接触。

写的开心超人实在太少,因此没有列入分析。对不起各位开厨。


3. Gephi人物关系网制作(这次没做)

曾在分析《守望先锋》同人本时使用过,同样是以行断句,但关键词变为两个(两个人名)。如果说以上的单人词频总结可称为supervised machine learning(指导式机器学习),则这种方法则略微偏向于unsupervised。通过文本输入及人名列表的指定,机器自动识别出两个同时出现的人名,并统计同时出现的频率。

Gephi是一个用于分析社会关系的可视化软件。当时的这段代码是一点一点抄袭老师的,有兴趣的读者可以github搜索Damian Trilling教授。

老师写这个本来是为了研究大选期间候选人之间的竞争互利,结果被我拿来搞cp……


三、产粮坑品评价:LDA主题模型分析


LDA(隐狄克雷分布)模型主要用于挖掘大型文本中潜藏的主题信息,属于典型的unsupervised machine learning,即把一本长篇小说交给机器,它会根据分词及词包匹配等,输出一串能够「凸显主题」的关键词。同时,再将整理出的关键词与原文比对,将分节后的原文与主题们选择性对应。

以下是从我的习作中分析出的25个主题(topic):


(几乎可以直接判断出哪些是H文哪些是(伪)儿童文学)

接着,把45篇习作一一编码(由于技术原因这次倒过来了,第45篇把肉捧给粗心超人吃变成了第1篇),再监测其与这些主题的契合度,最后作图。


格子颜色越深,表明该文章与该主题越契合。例如很快就可以找到话题19那里的三个大黑点,而事实也正是如此——那几篇都是罗大诱,即大大怪化名丁大国,伽叔叔化名贾荦的现代都市土味基佬感情故事。

相邻的话题18就有些尴尬,充分表现出我这个人坑品很差。话题18以「飞船」「地图」「通讯器」为主,是写花粗花地球旅行,结果勉勉强强每个月更新一篇,才去了两个地方就停下不更了。会在10月前写完的。

话题10以「甜心超人」为主。我也的确是最后这几个月才开始集中写花甜。

绵延不绝的话题6,几乎每篇都有,「花心超人」「磁力」「主角」而颜色都很淡。正所谓川菜不加花椒你就认不出那是川菜,我写花心超人不写他照镜子耍磁力就会ooc——开宝毕竟是四格子供番,人物标签化而易于理解,即使延伸或拔高也无法脱离人物本身的设定(如果有人写美娇娘小心超人或者没脾气的花心超人那真的牛批),这也使得主题研究变得容易。

不多赘述。


四、广告

可以帮你也分析一遍!



可卿

[刺客信条3-python数据实战-教程?大纲!]同人到底怎样写才能获得更多小心心嘛?01

旨在为写手们提供创作同人的方向

好吧……其实我只是想知道大佬何以成为大佬,大大们的热度为神马辣么高!It's just for fun!

方法:对lofter下“Connor”标签的热度和榜单界面的所有帖子分别进行爬取,制作语料库,分词后进行分析。(草稿:word embedding? tf-idf?)

为什么是Connor? 因为我爱他!

教程?大纲。今天好赶,过几日再出细节……(不过我也只是只自学的小白而已啦——主要是好玩)

那么第一步就是爬虫啦!

小白自学一枚,因此使用anaconda作为python编程环境(因为它安装起来最方便,不需要手动设置各种环境变量;而且下...

旨在为写手们提供创作同人的方向

好吧……其实我只是想知道大佬何以成为大佬,大大们的热度为神马辣么高!It's just for fun!

方法:对lofter下“Connor”标签的热度和榜单界面的所有帖子分别进行爬取,制作语料库,分词后进行分析。(草稿:word embedding? tf-idf?)

为什么是Connor? 因为我爱他!

教程?大纲。今天好赶,过几日再出细节……(不过我也只是只自学的小白而已啦——主要是好玩)

那么第一步就是爬虫啦!

小白自学一枚,因此使用anaconda作为python编程环境(因为它安装起来最方便,不需要手动设置各种环境变量;而且下载包也是最方便了,rua!!!)


一.  包的安装

anaconda prompt窗口中输入命令:

conda install bs4

conda install requests

考虑到anaconda官网在墙外,如果下载包的速度太慢,可以使用清华镜像python library库。

其中,bs4和requests都是获取网页信息进行爬虫的好工具。

bs4官方中文文档见链接

requests快速上手官方中文文档见链接

二. 爬虫代码

见图1和图2(有空再细讲一下)



基本原理是用requests向服务器请求获取网页,然后把它装进beautifulsoup(由bs4导入)里,解析html语法,找到我们想要的东西。

但是我们怎么知道自己想要的东西在哪里呢?

需要用到chrome浏览器(当然,火狐浏览器等等也都是有的)的开发者工具。按下 ctrl+shift+I 呼出。(见图3)


深蓝色区域是存放我们需要的信息的区块,在html中它是一个属性class为m-icnt ctag的div标签。

三. 语料库初步结果(嗯?你跳的也太快了吧?所以说是大纲啦……)

运行程序可以知道Connor标签下有50页内容(见图4)。


那么我们的语料库是什么样子的呢?(见图5、图6,是三青大大的救命我变成了帽子哈哈哈哈)




本节实践结束,下次的任务就是对语料库进行清洗,然后分词啦。

(注:本次爬虫获取的文章绝不做商用。如有侵权,一定删帖。)

实验预期结果:开车的同人获得小心心最多

想吃原味鸡
去年python 课的期末作业...

去年python 课的期末作业。

搞了一个多月的简单弹幕游戏,前作是刚上课时做的简单文字游戏。后来就再也没碰过python了L(՞ਊ՞)」

标题是Little Red Hat 的缩写

截图是输了的画。
(图片1MB)

去年python 课的期末作业。

搞了一个多月的简单弹幕游戏,前作是刚上课时做的简单文字游戏。后来就再也没碰过python了L(՞ਊ՞)」

标题是Little Red Hat 的缩写

截图是输了的画。
(图片1MB)

3ecurity

Python 保存图片

import requests
from bs4 import BeautifulSoup
import shutil
num = 100
while True:
    res = requests.get("http://wanimal1983.tumblr.com/page/"+str(num))
    #print res.url
    soup = BeautifulSoup(res.text)
    for link in soup.select...

import requests
from bs4 import BeautifulSoup
import shutil
num = 100
while True:
    res = requests.get("http://wanimal1983.tumblr.com/page/"+str(num))
    #print res.url
    soup = BeautifulSoup(res.text)
    for link in soup.select('img'):
        print link['src'],link['src'].split('.')[-1]
        if link['src'].split('.')[-1] == "jpg":
            PicName = link['src'].split('/')[-1]
            res2 = requests.get(link['src'],stream=True)
            f = open(PicName,'wb')
            shutil.copyfileobj(res2.raw,f)
            f.close()
            del res2
    if "Next" in res.text:
        print res.url
        num = num + 1
    else:
        break
#print num
print "-----------------------"

绿绿绿

我看见网上很多JAVA从入门到放弃MySQL从删库到跑路这样的表情包但没看见c++和python的,,于是就打开GIMP激情搞了三张...外带一张循环去世

我看见网上很多JAVA从入门到放弃MySQL从删库到跑路这样的表情包但没看见c++和python的,,于是就打开GIMP激情搞了三张...外带一张循环去世

gggwfn1982

python code for pyqt4 development

# -*- coding: utf-8 -*-
 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys 
 
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) 
 
class MainWindow(QMainWindow): 
    def __init__(self,parent=None): ...
# -*- coding: utf-8 -*-
 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys 
 
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) 
 
class MainWindow(QMainWindow): 
    def __init__(self,parent=None): 
        super(MainWindow,self).__init__(parent) 
        f=QFont("ZYSong18030",12) 
        self.setFont(f) 
         
        self.setWindowTitle("Image Processor") 
        self.imageLabel=QLabel() 
        self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)  
        self.imageLabel.setScaledContents(True) 
         
        self.setCentralWidget(self.imageLabel) 
        self.image=QImage() 
        if self.image.load("image/cc.png"): 
                    self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) 
                    self.resize(self.image.width(),self.image.height())         
         
        self.createActions() 
        self.createMenus() 
        self.createToolBars() 
         
    def createActions(self): 
        self.zoominAction=QAction(QIcon("image/zoomin.png"),self.tr("放大"),self) 
        self.zoominAction.setShortcut("Ctrl+P") 
        self.zoominAction.setStatusTip(self.tr("放大")) 
        self.connect(self.zoominAction,SIGNAL("triggered()"),self.slotZoomin) 
         
        self.deflateAction=QAction(QIcon("image/deflate.png"),self.tr("缩小"),self) 
        self.deflateAction.setShortcut("Ctrl+A") 
        self.deflateAction.setStatusTip(self.tr("缩小")) 
        self.connect(self.deflateAction,SIGNAL("triggered()"),self.slotDeflate) 
         
        self.circumgyrate=QAction(QIcon("image/circumgyrate.png"),self.tr("旋转"),self) 
        self.circumgyrate.setShortcut("Ctrl+B") 
        self.circumgyrate.setStatusTip(self.tr("旋转")) 
        self.connect(self.circumgyrate,SIGNAL("triggered()"),self.slotCircumgyrate) 
         
    def createMenus(self): 
        PrintMenu=self.menuBar().addMenu(self.tr("缩放")) 
        PrintMenu.addAction(self.zoominAction) 
        PrintMenu.addAction(self.deflateAction) 
        circumgyrateMenu=self.menuBar().addMenu(self.tr("旋转")) 
        circumgyrateMenu.addAction(self.circumgyrate) 
         
    def createToolBars(self): 
        fileToolBar=self.addToolBar("Print") 
        fileToolBar.addAction(self.zoominAction) 
        fileToolBar.addAction(self.deflateAction) 
        fileToolBar.addAction(self.circumgyrate) 
     
    def slotZoomin(self): 
        if self.image.isNull(): 
            return 
        martix = QMatrix() 
        martix.scale(2,2) 
        self.image=self.image.transformed(martix); 
        self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) 
        self.resize(self.image.width(),self.image.height())  
     
    def slotDeflate(self): 
        if self.image.isNull(): 
            return 
        martix = QMatrix() 
        martix.scale(0.5,0.5) 
        self.image=self.image.transformed(martix); 
        self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) 
        self.resize(self.image.width(),self.image.height())  
     
    def slotCircumgyrate(self): 
        if self.image.isNull(): 
            return 
        martix = QMatrix() 
        martix.rotate(90) 
        self.image=self.image.transformed(martix); 
        self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) 
        self.resize(self.image.width(),self.image.height())  
                 
app=QApplication(sys.argv) 
window=MainWindow() 
window.show() 
app.exec_()
craiglin

Python_learning_1

the use of #

                """

                """

the type of boolean, string(within quotes)

the use...

the use of #

                """

                """

the type of boolean, string(within quotes)

the use of %,  **, '\ 

to store strings a = "apple"[0]

the function of len(),lower(),upper(),str("n")



"Methods that use dot notation only work with strings."

"+" also can be used with strings, but take care of the space

"2" takes number into string



The % operator after a string is used to combine a string with variables. The % operator will replace a %s in the string with the string variable that comes after it.



how .format works

the upper use of %


datetime.now()


now.year now.month now.day can be used(the same goes on minute second hour)


Control flow

1.comparators


notice


2.not and or


3.if else


elif


Marsh

如何用pip安装和卸载whl

1.首先安装pip,从python2.7.9开始安装时会默认安装pip

2.将pip添加到环境变量,如下图

pip位于位于python安装目录的“Scripts”文件夹内,故环境变量格式为:

C:\Python\Scripts;(以实际安装位置为准)

第6步中,添加的地址为pip所在的地址,且不要忘了在地址前加 ";",以分隔其他地址


3.打开命令提示符,输入pip install X:\YYY\ZZZZ.whl


安装成功会显示Successfully installed XXX


卸载的话

打开命令提示符,输入pip uninstall XXX...

1.首先安装pip,从python2.7.9开始安装时会默认安装pip

2.将pip添加到环境变量,如下图

pip位于位于python安装目录的“Scripts”文件夹内,故环境变量格式为:

C:\Python\Scripts;(以实际安装位置为准)

第6步中,添加的地址为pip所在的地址,且不要忘了在地址前加 ";",以分隔其他地址


3.打开命令提示符,输入pip install X:\YYY\ZZZZ.whl


安装成功会显示Successfully installed XXX


卸载的话

打开命令提示符,输入pip uninstall XXX

其中XXX为模块名,不是整个文件名,

例如下载的whl文件名为:

numpy-1.9.2+mkl-cp27-none-win_amd64.whl

其模块名为:numpy


注:在命令提示符里面不可以用Ctrl+V粘贴,但是可以右键选择粘贴

adminlzzs'blog

爬取4万多个淘宝模特信息进行数据分析

好久没有更新博客,国庆7天,宿舍就我一个人,人生真的寂寞如雪啊。

想起我之前看过一本数据分析的书,今天想来实战一下。之前由于误删了网络爬虫爬下来的数据,所以只能重新爬取一次了,不过这次就抓取点好玩的东西,爬取淘宝淘女郎的信息来做一个简单的数据分析。

先上爬虫代码:

#coding:utf-8

import requests

import os

from multiprocessing.dummy import Pool as ThreadPool

import time

from bs4 import BeautifulSoup

import urllib2,urllib...

好久没有更新博客,国庆7天,宿舍就我一个人,人生真的寂寞如雪啊。

想起我之前看过一本数据分析的书,今天想来实战一下。之前由于误删了网络爬虫爬下来的数据,所以只能重新爬取一次了,不过这次就抓取点好玩的东西,爬取淘宝淘女郎的信息来做一个简单的数据分析。

先上爬虫代码:

#coding:utf-8

import requests

import os

from multiprocessing.dummy import Pool as ThreadPool

import time

from bs4 import BeautifulSoup

import urllib2,urllib

import re

class MM:

    def __init__(self):

        self.baseurl='https://mm.taobao.com/json/request_top_list.htm?page='

        self.pool = ThreadPool(10)   #初始化线程池

        self.headers={'Accept-Language':'zh-CN,zh;q=0.8','User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36','Connection':'close','Referer': 'https://www.baidu.com/'}

    def indexPage(self,index):

        indexpage=requests.get(self.baseurl+str(index),headers=self.headers)

        return indexpage.content.decode('GBK')


    def getAlldetail(self,index):

        indexpage=self.indexPage(index)

        p=re.compile(r'class="lady-avatar".*?<img src="(.*?)".*?class="lady-name".*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S)

        alldetail=re.findall(p,indexpage)

        eachdetail=[]

        for eachmm in alldetail:

            eachdetail.append(['http:'+eachmm[0],eachmm[1],eachmm[2]+'years old',eachmm[3]])

        return eachdetail


    def getImg(self,filename,imgaddr):

        f=open('mm/'+filename+'/'+filename+'.jpg','wb+')

        f.write(requests.get(imgaddr,headers=self.headers).content)

        f.close()


    def getContent(self,filename,content):     

        with open('mm/'+filename+'/'+filename+'.txt','w+') as f:

            for each in content:

                f.write((each.encode('utf-8'))+'\n')


    def mkdir(self,path):

        path = path.strip()

        isExists=os.path.exists(path)

        if not isExists:

            # 如果不存在则创建目录

            print u"新建了名字叫做",path,u'的文件夹'

            # 创建目录操作函数

            os.makedirs(path)

            return True                 

        else:       

            # 如果目录存在则不创建,并提示目录已存在

            print u"名为",path,'的文件夹已经创建'

            return False


    def savePageInfo(self,index):

        alldetail=self.getAlldetail(index)

        for eachdetail in alldetail:

            self.mkdir('mm/'+eachdetail[1])       

            #self.mkdir('mm/')

            self.getImg(eachdetail[1],eachdetail[0])

            self.getContent(eachdetail[1],eachdetail[1:])


    def start(self):

        while 1:

            try:

                start=int(raw_input('开始查询的页数(整数):'))

                end=int(raw_input('结束的页数(整数):'))

            except Exception,e:

                print e

            else:

                break

        index=range(start,end+1)

        begin=time.time()

        try:

            results = self.pool.map(self.savePageInfo,index)

            self.pool.close()

            self.pool.join()

        except Exception as e:

            print e

            pass

        end=time.time()

        total=end-begin

        print '总耗时:',total

if __name__=='__main__':

    mm=MM()

    mm.start()

运行后输入你要爬取的页面,就能把淘女郎的年龄,居住地,名字和照片给爬取下来。一共有4万多个淘女郎信息,你可以全部爬取下来做数据分析用。

我只爬了几十页,运行后截图:



随便打开一个目录,可以看到图片和信息。

由于代码是很久之前写的,当时并没有想到做数据分析,因此我对每个人都创建了一个目录,每个目录存放个人信息,这样再单独写个脚本进入每个文件获取信息效率不高,我就直接在原脚本中获取并直接进行数据的图像可视化,代码如下:


#coding:utf-8

import matplotlib

import requests

import numpy as np

from matplotlib.font_manager import *

import matplotlib.pyplot as plt

import os

from multiprocessing.dummy import Pool as ThreadPool

import time

from bs4 import BeautifulSoup

import urllib2,urllib

import re

'''

#解决负号'-'显示为方块的问题 

matplotlib.rcParams['axes.unicode_minus']=False

'''


myfont = FontProperties(fname='/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf')

class MM:

    def __init__(self):

        self.bing={}

        self.bing1=[]

        self.zhu={}

        self.zhu1=[]

        self.baseurl='https://mm.taobao.com/json/request_top_list.htm?page='

        self.pool = ThreadPool(10)

        self.headers={'Accept-Language':'zh-CN,zh;q=0.8','User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36','Connection':'close','Referer': 'https://www.baidu.com/'}

    def indexPage(self,index):

        try:

            indexpage=requests.get(self.baseurl+str(index),headers=self.headers)

        except Exception as e:

            print e

        return indexpage.content.decode('GBK')


    def getAlldetail(self,index):

        indexpage=self.indexPage(index)

        p=re.compile(r'class="lady-avatar".*?<img src="(.*?)".*?class="lady-name".*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S)

        alldetail=re.findall(p,indexpage)

        eachdetail=[]

        for eachmm in alldetail:

            eachdetail.append(['http:'+eachmm[0],eachmm[1],eachmm[2]+'years old',eachmm[3]])

        return eachdetail


    def getImg(self,filename,imgaddr):

        #f=open('mm/'+filename+'/'+filename+'.jpg','wb+')

        urllib.urlretrieve(imgaddr,'mm/'+filename+'/'+filename+'.jpg')

        #f.write(requests.get(imgaddr,headers=self.headers).content)

        #f.close()


    def getContent(self,filename,content):     

        with open('mm/'+filename+'/'+filename+'.txt','w+') as f:

            for each in content:

                f.write((each.encode('utf-8'))+'\n')


    def mkdir(self,path):

        path = path.strip()

        isExists=os.path.exists(path)

        if not isExists:

            # 如果不存在则创建目录

            print u"新建了名字叫做",path,u'的文件夹'

            # 创建目录操作函数

            os.makedirs(path)

            return True                 

        else:       

            # 如果目录存在则不创建,并提示目录已存在

            print u"名为",path,'的文件夹已经创建'

            return False


    def savePageInfo(self,index):

        alldetail=self.getAlldetail(index)

        for eachdetail in alldetail:

            self.mkdir('mm/'+eachdetail[1])       

            #self.mkdir('mm/')

            self.getImg(eachdetail[1],eachdetail[0])

            self.getContent(eachdetail[1],eachdetail[1:])

    def bing_pic(self,index):

        alldetail=self.getAlldetail(index)

        for eachdetail in alldetail:

            if eachdetail[3] not in self.bing:

                self.bing[eachdetail[3]]=1

            else:

                self.bing[eachdetail[3]]+=1


    def zhu_pic(self,index):

        alldetail=self.getAlldetail(index)

        for eachdetail in alldetail:

            eachdetail=eachdetail[2].replace('years old','')

            if eachdetail not in self.zhu:

                self.zhu[eachdetail]=1

            else:

                self.zhu[eachdetail]+=1

    def start(self):

        while 1:

            try:

                startpage=int(raw_input('开始查询的页数(整数):'))

                endpage=int(raw_input('结束的页数(整数):'))

            except Exception,e:

                print e

            else:

                break


        index=range(startpage,endpage+1)

        begin=time.time()

        try:

            results = self.pool.map(self.savePageInfo,index)

            self.pool.close()

            self.pool.join()

        except Exception as e:

            print e

            pass

        end=time.time()

        total=end-begin

        print '总共耗时:',total


        for i in range(startpage,endpage+1):

            self.zhu_pic(i)

            self.bing_pic(i)


        #柱状图

        for i in self.zhu:

            self.zhu1.append(self.zhu[i])

        sorted(self.zhu)

        year=[]

        for i in self.zhu:

            year.append(i)

        #print year,self.zhu1

        plt.title(u'淘女郎年龄分布图',fontproperties=myfont,size=20)

        plt.xlabel(u'年龄',fontproperties=myfont,size=20)

        plt.ylabel(u'人数',fontproperties=myfont,size=20)

        plt.bar(year, self.zhu1)

        plt.show()


        #饼状图

        for i in self.bing:

            self.bing1.append(self.bing[i])

        group=[]

        for i in self.bing:

            group.append(i)

        plt.figure(num=1, figsize=(12, 12))

        plt.axes(aspect=1)

        plt.title(u'淘女郎居住地分布图',fontproperties=myfont,size=20)

        patches,l_text,p_text=plt.pie(self.bing1,labels=group,autopct = '%3.1f%%',shadow=True, startangle=90)

        for t in l_text:

            t.set_fontproperties(matplotlib.font_manager.FontProperties(fname="/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf")) # 把每个文本设成中文字体

        plt.show()

if __name__=='__main__':

    mm=MM()

    mm.start()


matplotlib这个中文不能显示这块有点恼火,它必须要指向一个可以显示中文的ttf文件才能显示中文,本脚本用的matplotlib是1.5版本的,如果是其他的版本可能会出现因为参数的不同而出错。

最后经过数据分析后的图片(一下是遍历了1到8页的信息后得到的图片,你们可以继续遍历......)



  


这是数据分析的一点点皮毛,深入之后再继续玩儿......

欢迎大牛指正.......

changfengmingzhi

皮尔逊相关系数及其Python实现

概率论统计学中, 相关(Correlation,或称 相关系数关联系数),显示两个 随机变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。

在推荐系统中,我们常用皮尔逊相关系数来衡量两个用户兴趣的相似度,它是判断两组数据与某一直线拟合程度的一种度量。它在用户对物品的评分数据差别大时(如有些用户评分普遍较高,有些用户评分普遍偏低)时的效果更好。也即它修正了“夸大分值”的情况,如果某个用户总是倾向于给出比另一个人更高的分值,而两者的分值之差又始终保持一致,则两者间依然可能存在很好地相关性。


皮尔逊相关系数的数学理论知识如下...

概率论统计学中, 相关(Correlation,或称 相关系数关联系数),显示两个 随机变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。

在推荐系统中,我们常用皮尔逊相关系数来衡量两个用户兴趣的相似度,它是判断两组数据与某一直线拟合程度的一种度量。它在用户对物品的评分数据差别大时(如有些用户评分普遍较高,有些用户评分普遍偏低)时的效果更好。也即它修正了“夸大分值”的情况,如果某个用户总是倾向于给出比另一个人更高的分值,而两者的分值之差又始终保持一致,则两者间依然可能存在很好地相关性。


皮尔逊相关系数的数学理论知识如下:

统计学中,皮尔逊积矩相关系数(Pearson product-moment correlation coefficient)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。系数的值为1意味着X 和 Y可以很好的由直线方程来描述,所有的数据点都很好的落在一条 直线上,且 Y 随着 X 的增加而增加。系数的值为−1意味着所有的数据点都落在直线上,且 Y 随着 X 的增加而减少。系数的值为0意味着两个变量之间没有线性关系。当两个变量独立时,相关系数为0.但反之并不成立。 这是因为相关系数仅仅反映了两个变量之间是否线性相关。比如说,X是区间[-1,1]上的一个均匀分布的随机变量。Y = X2. 那么Y是完全由X确定。因此Y 和X是不独立的。但是相关系数为0。或者说他们是不相关的。当Y 和X服从联合正态分布时,其相互独立和不相关是等价的。当且仅当 Xi and Yi 均落在他们各自的均值的同一侧, 则(Xi − X)(Yi − Y) 的值为正。 也就是说,如果Xi 和 Yi 同时趋向于大于, 或同时趋向于小于他们各自的均值,则相关系数为正。 如果 Xi 和 Yi 趋向于落在他们均值的相反一侧,则相关系数为负。


定义:

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差的商:

\rho_{X,Y}={\mathrm{cov}(X,Y) \over \sigma_X \sigma_Y} ={E[(X-\mu_X)(Y-\mu_Y)] \over \sigma_X\sigma_Y},

以上方程定义了总体相关系数, 一般表示成希腊字母ρ(rho)。基于样本对协方差和标准差进行估计,可以得到样本相关系数, 一般表示成r:

r = \frac{\sum ^n _{i=1}(X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum ^n _{i=1}(X_i - \bar{X})^2} \sqrt{\sum ^n _{i=1}(Y_i - \bar{Y})^2}}.

一种等价表达式的是表示成标准分的均值。基于(Xi, Yi)的样本点,样本皮尔逊系数是

r = \frac{1}{n-1} \sum ^n _{i=1} \left( \frac{X_i - \bar{X}}{\sigma_X} \right) \left( \frac{Y_i - \bar{Y}}{\sigma_Y} \right)

其中

\frac{X_i - \bar{X}}{\sigma_X} \bar{X} 及  \sigma_X

分别是标准分、样本平均值和样本标准差


数学特性:

总体和样本皮尔逊系数的绝对值小于或等于1。如果样本数据点精确的落在直线上(计算样本皮尔逊系数的情况),或者双变量分布完全在直线上(计算总体皮尔逊系数的情况),则相关系数等于1或-1。皮尔逊系数是对称的:corr(X,Y) = corr(Y,X)。

皮尔逊相关系数有一个重要的数学特性是,因两个变量的位置和尺度的变化并不会引起该系数的改变,即它该变化的不变量 (由符号确定)。也就是说,我们如果把X移动到a + bX和把Y移动到c + dY,其中a、b、c和d是常数,并不会改变两个变量的相关系数(该结论在总体和样本皮尔逊相关系数中都成立)。我们发现更一般的线性变换则会改变相关系数:参见之后章节对该特性应用的介绍。

由于μX = E(X), σX2 = E[(X − E(X))2] = E(X2) − E2(X),Y也类似, 并且

E[(X-E(X))(Y-E(Y))]=E(XY)-E(X)E(Y),\,

故相关系数也可以表示成

\rho_{X,Y}=\frac{E(XY)-E(X)E(Y)}{\sqrt{E(X^2)-(E(X))^2}~\sqrt{E(Y^2)- (E(Y))^2}}.

对于样本皮尔逊相关系数:


r_{xy}=\frac{\sum x_iy_i-n \bar{x} \bar{y}}{(n-1) s_x s_y}=\frac{n\sum x_iy_i-\sum x_i\sum y_i}
{\sqrt{n\sum x_i^2-(\sum x_i)^2}~\sqrt{n\sum y_i^2-(\sum y_i)^2}}.

以上方程给出了计算样本皮尔逊相关系数简单的单流程算法,但是其依赖于涉及到的数据,有时它可能是数值不稳定的。

几何学的解释:

对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。

对于中心化过的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角\ \theta 的 余弦值(见下方)。

一些人[谁?] 倾向于是用非中心化的相关系数 (non-Pearson-compliant) 。 比较如下。

例如,有5个国家的国民生产总值分别为 10, 20, 30, 50 和 80 亿美元。 假设这5个国家 (顺序相同) 的贫困百分比分别为 11%, 12%, 13%, 15%, and 18% 。 令 x 和 y 分别为包含上述5个数据的向量: x = (1, 2, 3, 5, 8) 和 y = (0.11, 0.12, 0.13, 0.15, 0.18)。

利用通常的方法计算两个向量之间的夹角 \ \theta (参见 数量积), 未中心化 的相关系数是:

 \cos \theta = \frac { \bold{x} \cdot \bold{y} } { \left\| \bold{x} \right\| \left\| \bold{y} \right\| } = \frac { 2.93 } { \sqrt { 103 } \sqrt { 0.0983 } } = 0.920814711.

我们发现以上的数据特意选定为完全相关: y = 0.10 + 0.01 x。 于是,皮尔逊相关系数应该等于1。将数据中心化 (通过E(x) = 3.8移动 x 和通过 E(y) = 0.138 移动 y ) 得到 x = (−2.8, −1.8, −0.8, 1.2, 4.2) 和 y = (−0.028, −0.018, −0.008, 0.012, 0.042), 从中,

 \cos \theta = \frac { \bold{x} \cdot \bold{y} } { \left\| \bold{x} \right\| \left\| \bold{y} \right\| } = \frac { 0.308 } { \sqrt { 30.8 } \sqrt { 0.00308 } } = 1 = \rho_{xy}, 皮尔逊距离:

皮尔逊距离度量的是两个变量X和Y,它可以根据皮尔逊系数定义成

d_{X,Y}=1-\rho_{X,Y}.

我们可以发现,皮尔逊系数落在 [-1, 1], 而皮尔逊距离落在 [0, 2]。

Python实现:使用的计算公式为:

皮尔逊相关系数及其Python实现 - changfengmingzhi - 长风明志的博客

 from math import sqrt
#一个涉及影评者及其对几部影片评分情况的字典critics={'Lisa Rose':{'Lady in the Water':2.5,'Snakes on a plane':3.5},'Gene Seymour':{'Lady in the Water':3.0,'The Night Listener':3.0}}
#返回用户p1和p2的皮尔逊相关系数def sim_pearson(prefs,p1,p2):    #得到双方都曾评价过的物品列表    si = {}    for item in prefs[p1]:        if item in prefs[p2]:            si[item] = 1        #得到列表元素的个数    n = len(si)        #如果两者没有共同之处,则返回1    if(n == 0):        return 1        #对所有偏好求和    sum1 = sum([prefs[p1][it] for it in si])    sum2 = sum([prefs[p2][it] for it in si])        #求平方和    sum1Sq = sum([pow(prefs[p1][it],2) for it in si])    sum2Sq = sum([pow(prefs[p2][it],2) for it in si])        #求乘积之和    pSum = sum([prefs[p1][it] * prefs[p2][it] for it in si])        # 计算皮尔逊相关系数    num = pSum - (sum1*sum2/n)    den = sqrt((sum1Sq - pow(sum1,2)/n) * (sum2Sq - pow(sum2,2)/n))        if den == 0:        return 0        r = num/den        return r
Hqman

Python 代码风格 和 PEP8


Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格。这样就易于阅读,易于在程序员之间交流。


1 变量

常量 : 大写加下划线

USER_CONSTANT

对于不会发生改变的全局变量,使用大写加下划线。

私有变量
 : 小写和一个前导下划线

_private_value

Python 中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上...


Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格。这样就易于阅读,易于在程序员之间交流。


1 变量

常量 : 大写加下划线

USER_CONSTANT

对于不会发生改变的全局变量,使用大写加下划线。

私有变量
 : 小写和一个前导下划线

_private_value

Python 中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它。但实际上,外部类还是可以访问到这个变量。

内置变量 : 小写,两个前导下划线和两个后置下划线

__class__

两个前导下划线会导致变量在解释期间被更名。这是为了避免内置变量和其他变量产生冲突。用户定义的变量要严格避免这种风格。以免导致混乱。


2 函数和方法

总体而言应该使用,小写和下划线。但有些比较老的库使用的是混合大小写,即首单词小写,之后每个单词第一个字母大写,其余小写。但现在,小写和下划线已成为规范。

私有方法 : 小写和一个前导下划线

def _secrete(self):
    print "don't test me."

这里和私有变量一样,并不是真正的私有访问权限。同时也应该注意一般函数不要使用两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作用)。特殊函数后面会提及。

特殊方法 : 小写和两个前导下划线,两个后置下划线

def __add__(self, other):
    return int.__add__(other)

这种风格只应用于特殊函数,比如操作符重载等。

函数参数 : 小写和下划线,缺省值等号两边无空格

def connect(self, user=None):
    self._user = user



3 类

类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确,并足以从中理解类所完成的工作。常见的一个方法是使用表示其类型或者特性的后缀,例如:
SQLEngine
MimeTypes

对于基类而言,可以使用一个 Base 或者 Abstract 前缀
BaseCookie
AbstractGroup

class UserProfile(object):
    def __init__(self, profile):
        return self._profile = profile

    def profile(self):
        return self._profile



4 模块和包

除特殊模块 __init__ 之外,模块名称都使用不带下划线的小写字母。
若是它们实现一个协议,那么通常使用lib为后缀,例如:
import smtplib

import os
import sys



5 关于参数

5.1 不要用断言来实现静态类型检测
断言可以用于检查参数,但不应仅仅是进行静态类型检测。 Python 是动态类型语言,静态类型检测违背了其设计思想。断言应该用于避免函数不被毫无意义的调用。

5.2 不要滥用 *args 和 **kwargs
*args 和 **kwargs 参数可能会破坏函数的健壮性。它们使签名变得模糊,而且代码常常开始在不应该的地方构建小的参数解析器。


6 其他

6.1 使用 has 或 is 前缀命名布尔元素

is_connect = True
has_member = False


6.2 用复数形式命名序列

members = ['user_1', 'user_2']


6.3 用显式名称命名字典

person_address = {'user_1':'10 road WD', 'user_2' : '20 street huafu'}


6.4 避免通用名称
诸如 list, dict, sequence 或者 element 这样的名称应该避免。

6.5 避免现有名称
诸如 os, sys 这种系统已经存在的名称应该避免。


7 一些数字
一行列数 : PEP 8 规定为 79 列,这有些苛刻了。根据自己的情况,比如不要超过满屏时编辑器的显示列数。这样就可以在不动水平游标的情况下,方便的查看代码。

一个函数 : 不要超过 30 行代码, 即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数。
一个类 : 不要超过 200 行代码,不要有超过 10 个方法。
一个模块 不要超过 500 行


8 验证脚本

可以安装一个 pep8 脚本用于验证你的代码风格是否符合 PEP8。

>>easy_install pep8

>>pep8 -r --ignoire E501 Test.py

这个命令行的意思是,重复打出错误,并且忽略 501 错误(代码超过 79 行)。


七秒电子书

python计算机程序设计语言的书,你都看过那些?

也许有好多人不明白,python是什么?
今天小编就更给大家介绍一下python以及相关的书籍

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>...
也许有好多人不明白,python是什么?
今天小编就更给大家介绍一下python以及相关的书籍

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

Python 发展历史

Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。 Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的脚本语言等等。 像 Perl 语言一样,Python 源代码同样遵循 GPL(GNU General Public License)协议。 现在 Python 是由一个核心开发团队在维护,Guido van Rossum 仍然占据着至关重要的作用,指导其进展。 Python 2.7 被确定为最后一个 Python 2.x 版本,它除了支持 Python 2.x 语法外,还支持部分 Python 3.1 语法。

Python 特点

1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
2.易于阅读:Python代码定义的更清晰。
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
8.数据库:Python提供所有主要的商业数据库的接口。
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

如果您还是一点都不理解的话,建议搜一下,或者问一下做程序员的朋友,

另外小编近几年汇集了十万余本电子书资源,做了一个搜索网站,如果您有想看的那本书可以去搜一下,希望对你有帮助:七秒书盘-https://www.7sbookmall.cn/disk 或者您也可以访问七秒电子书-https://www.7sbookmall.cn/ 点击七秒书盘直接跳转即可!!! 希望你会喜欢!!!

下边给大家推荐一些关于python类的书吧!!!

《Python编程 从入门到实践》

作者:埃里克·马瑟斯

导语:【图灵程序设计丛书】Python3.5编程入门图书 机器学习 数据处理 网络爬虫热门编程语言 从基本概念到完整项目开发 帮助零基础读者迅速掌握Python编程

免费下载地址:https://www.7sbookmall.cn/book/638.html

《利用Python进行数据分析》

作者:Wes McKinney

导语:O'Reilly精品图书系列;Python数据分析经典畅销书全新升级

免费下载地址:https://www.7sbookmall.cn/book/614.html

《Python编程快速上手——让繁琐工作自动化》

作者:斯维加特(Al Sweigart)

导语:Python3编程从入门到实践美亚畅销Python编程入门图书 Python3实战指南 带你快速实现Python高效编程

免费下载地址:https://www.7sbookmall.cn/book/740.html

《Python 3程序开发指南》

作者:萨默菲尔德

导语:针对Python 3.0/3.1编写 内容详实全面 实例丰富便于学习

免费下载地址:https://www.7sbookmall.cn/book/628.html

《流畅的Python》

作者:Luciano Ramalho

导语:图灵程序设计丛书 全面深入对Python语言关键特性剖析到位 兼顾Python3和Python2

免费下载地址:https://www.7sbookmall.cn/book/719.html

《Python基础教程》

作者:Magnus Lie Hetland

导语:Python3.5编程从入门到实践 Python入门佳作

免费下载地址:https://www.7sbookmall.cn/book/728.html

更多编程类,医药类,工具类,小说,经济类,文学类等等书籍可以到“七秒电子书”


好了朋友,谢谢您的阅读。我是你们爱或不爱并专注于七秒电子书【7sbookmall.cn】的小七。

愿您生活中,有书相伴,再见

windkeepblow

用python去封装c++代码

 实际上如何用python去封装c++的接口有 官方文档,而且相关的博客也很多,不过由于今天实现的时候踩了很多坑,必须要把过程记录下来,免得以后再踩。

例如现在想将下面一个c++函数变成在python的一个模块调用:

//file: hello.h

#include <stdio.h>
void say_hello(char* name){
printf("Hello %s.\n", name);
}

其实最关键的就是怎么把python传过来的参数转成c++能支持的数据类型。 肖文鹏的博客这个过程写得很清楚。为了实现封装,我们要写的就是三个东西:...
 实际上如何用python去封装c++的接口有 官方文档,而且相关的博客也很多,不过由于今天实现的时候踩了很多坑,必须要把过程记录下来,免得以后再踩。

例如现在想将下面一个c++函数变成在python的一个模块调用:

//file: hello.h

#include <stdio.h>
void say_hello(char* name){
printf("Hello %s.\n", name);
}

其实最关键的就是怎么把python传过来的参数转成c++能支持的数据类型。 肖文鹏的博客这个过程写得很清楚。为了实现封装,我们要写的就是三个东西: 导出函数方法列表初始化函数。但是前提是你的机器上有“Python.h”这个文件(linux下一般装有python的机器上都有,没有的话请尝试“sudo apt-get python-dev”)。这里,我的封装函数的写法如下:

//file: wrap_hello.cpp

#include <Python.h>
#include "hello.h" //你需要封装的代码

PyObject* wrap_hello(PyObject* self, PyObject* args)
{
char* name;
if (!PyArg_ParseTuple(args, "s", &name))//记得加上"&",传递的是指针参数
return NULL;
say_hello(name);
return Py_None; //记得要有返回值,不然会有segmentation fault
}

static PyMethodDef helloMethods[] =
{
{"say_hello", wrap_hello, METH_VARARGS, "say hello!"},
{NULL, NULL}
};

extern "C" { //这个关键避免了c++的name mangling问题
void inithello() //初始化函数命名格式"init"+"module name"
{
PyObject* m;
m = Py_InitModule("hello", helloMethods);
}
}

以上代码有几个注意的点我都已经注释了一下。其中,如果是c语言写的代码, 就不需要用到extern “C“关键词去修饰代码。原因是c++支持重载,编译器会对函数名进行改写,如果后面在把c++的动态库用原来的函数名去调用,就会出找不到函数的错误,具体请百度”name mangling“。函数”PyArg_ParseTuple“的参数传递问题可参考 官网api

具体编译命令我写了一个makefile方便以后查看:

build: wrap_hello.cpp
g++ -fPIC -c -I/usr/include/python2.7 wrap_hello.cpp -o hello.o
g++ -shared hello.o -o hello.so
clean:
rm hello.o
rm hello.so

这里要注意的是你机器上的python版本(我这里是2.7),这里解释一下每个参数的作用和必要性:

(1) -fPIC:  告诉编译器产生与位置无关的代码,这是要生成共享库必须的参数,因为共享库被加载时,内存中的位置是不固定的。

(2) -c: 只进行预处理,编译和汇编,只把程序生成为obj文件。因为我们“wrap_hello.cpp”中没有main函数。

(3) -I/usr/include/pythonX.X: 告诉编译器你的“Python.h”的位置,因为编译器默认的include路径没有包含"Python.h"。

(4)  -shared: 建立共享库。

编译成功之后,"hello.so"就是我们想要的封装好的python模块,如果在同一目录下,直接"import hello"即可使用。

用python去封装c++代码 - 风继续吹 - 风继续吹的博客

 小结,虽然封装的过程很曲折,中间还是学到了不少编译和指针方面的东西。其实要在实现python对c/c++的封装不止一种方法,诸如boost和cython等工具好像都可以实现封装。而本文的这种应该是最直接粗暴的。
DoraTea

int

age=int(input('please enter your age: '))

if age >=18:

    print('You\'re an adult')

else:

    print('You\'re a teenager')

之前运行程序一直报错的原因是age定义的变量是数值,但是我直接使用了input,加了int之后就成功了。

如此简单的错误,以后不会再犯了。


age=int(input('please enter your age: '))

if age >=18:

    print('You\'re an adult')

else:

    print('You\'re a teenager')

之前运行程序一直报错的原因是age定义的变量是数值,但是我直接使用了input,加了int之后就成功了。

如此简单的错误,以后不会再犯了。


LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息