1.工具和環境
語言: python3.6
系統:win7 64位
數據庫:MongoDB
IDE:IPython notebook
2.用pandas進行計數
這里用的數據是一小部分知乎用戶數據。
import pymongo
client = pymongo.MongoClient('localhost')? #連接數據庫
db = client.zhihu_follows? #指定數據庫'zhihu_follows'
collection = db.follows? #指定集合'follows'
results = collection.find().sort('follower_count',pymongo.DESCENDING)?
#將集合中的數據以'follower_count'鍵對應的值進行降序排序,
#如果要升序排行,第二個參數改為pymongo.ASCENDING
records = [result for result in results[:10]]? #列表推導式,取出前10項
上面的代碼用于讀取數據,運行后,records對象是一組字典組成的列表。
數據比較長,我就貼出來兩條,形式如下:
[{'_id': 'zhang-jia-wei',
'answer_count': 3060,
'articles_count': 732,
'avatar_url': 'https://pic2.zhimg.com/424c70919_is.jpg',
'avatar_url_template': 'https://pic2.zhimg.com/424c70919_{size}.jpg',
'badge': [{'description': '優秀回答者',
'topics': [{'avatar_url': 'https://pic3.zhimg.com/cf0156d3a_is.jpg',
'excerpt': '文學是語言的藝術,包括戲劇、詩歌、小說、散文等,是文化的重要組成部分。',
'id': '19556423',
'introduction': '文學是語言的藝術,包括戲劇、詩歌、小說、散文等,是文化的重要組成分。',
'name': '文學',
'type': 'topic',
'url': 'http://www.zhihu.com/api/v4/topics/19556423'}],
'type': 'best_answerer'}],
'follower_count': 1430376,
'gender': 1,
'headline': '公眾號:張佳瑋寫字的地方',
'id': 'f9de84865e3e8455a09af78bfe4d1da5',
'is_advertiser': False,
'is_followed': False,
'is_following': False,
'is_org': False,
'name': '張佳瑋',
'offset': 4220,
'type': 'people',
'updateTime': datetime.datetime(2017, 9, 16, 10, 56, 13, 941000),
'url': 'http://www.zhihu.com/api/v4/people/f9de84865e3e8455a09af78bfe4d1da5',
'url_token': 'zhang-jia-wei',
'user_type': 'people'},
{'_id': 'kaifulee',
'answer_count': 107,
'articles_count': 2,
'avatar_url': 'https://pic1.zhimg.com/c104d6f24_is.jpg',
'avatar_url_template': 'https://pic1.zhimg.com/c104d6f24_{size}.jpg',
'badge': [{'description': '創新工場 董事長', 'type': 'identity'}],
'follower_count': 1015169,
'gender': -1,
'headline': '',
'id': '043ff01e5d03c529c268d50f388012c2',
'is_advertiser': False,
'is_followed': False,
'is_following': False,
'is_org': False,
'name': '李開復',
'offset': 4300,
'type': 'people',
'updateTime': datetime.datetime(2017, 9, 16, 10, 16, 39, 447000),
'url': 'http://www.zhihu.com/api/v4/people/043ff01e5d03c529c268d50f388012c2',
'url_token': 'kaifulee',
'user_type': 'people'}]
from pandas import DataFrame, Series
frame = DataFrame(records, columns =['name','follower_count','answer_count','articles_count','headline'] )
#使用columns關鍵字指定數據中的一部分鍵,只傳入這一部分的數據
表格看起來就比字典形式的清晰多了,但是我還是不滿意,我想把列索引換成中文的。
frame_1 = frame.rename(columns = {'name':'用戶', 'follower_count':'粉絲', 'answer_count':'答題', 'articles_count':'專欄文章', 'headline':'個人簡介'})
很好,列索引符合我的要求了。但是行索引是從0開始的,試著改一下,從1開始。花了不少功夫,沒找到能簡潔的解決問題的方案,只有類似于剛才改列索引的辦法。
于是我嘗試著增加一個列,并將這一列指定為行索引。
frame_1['序號'] = range(1,11)
frame_2 = frame_1.set_index('序號')
不行,序號自起一行,太丑了
沒找到方案,暫時只能是這樣吧。