Python實(shí)戰(zhàn)計(jì)劃學(xué)習(xí)筆記:week4 總結(jié)

![Uploading Screen Shot 2016-07-27 at 16.46.58_522860.png . . .]
](http://upload-images.jianshu.io/upload_images/1504853-805d329ac707cd16.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代碼部分
網(wǎng)頁頂欄部分:

    <div class="ui fixed menu" style="height:54px;padding:10px 0px 10px 10px">
      <div class="ui right labeled input">
        <div class="ui basic label" style="padding:2px 0 2px 5px"><i class="red big pinterest icon"> </i></div>
        <input type="text" placeholder="Search..." style="background-color:#dfdfdf;min-width:356px">
        <div class="ui basic label"><i class="sidebar icon"></i></div>
      </div>

      <div class="ui left attached basic button" style="margin:0 0 0 10px">
        <i class="red pin icon"></i>YOUR ACCOUNT
      </div>
      <div class="right attached ui basic button" >
        <i class="right setting icon"></i>
      </div>
    </div>

卡片圖片部分

<div class="ui link cards" style="margin:60px 0 0 0px" id='contentor'>
<div class="ui card" style="width:236px">
        <div class="image">
          <img src="{% static 'images/pinpic01.jpg' %}">
        </div>
        <div class="content">
          <div class="header">Matt Giampietro</div>
          <div class="meta">
            <a>Friends</a>
          </div>
          <div class="description">
            Matthew is an interior designer living in New York.
          </div>
        </div>
        <div class="extra content">
          <span class="right floated">
            Joined in 2013
          </span>
          <span>
            <i class="user icon"></i>
            75 Friends
          </span>
        </div>
 </div>
</div>

二手行情網(wǎng)站:

首先在ipython中進(jìn)行數(shù)據(jù)清洗整理蒲赂,再通過pipeline實(shí)現(xiàn):

發(fā)帖總量.png
one day.png
一天的cates和areas.png

之后移植到Django中。

views.py

from django.shortcuts import render
from ganji.models import ItemInfo
from django.core.paginator import Paginator

#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 不同區(qū)域發(fā)帖量前5名
def Topx(date1,date2,area,limit):
    pipeline=[
        {'$match':{'$and':[{'pub_date':{'$gte':date1,'$lte':date2}},{'area':{'$all':area}}]}},
        {'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}},
        {'$limit':limit},
        {'$sort':{'counts':-1}}
    ]

    for i in ItemInfo._get_collection().aggregate(pipeline):
        data = {
            'name': i['_id'][0],
            'data': [i['counts']],
            'type': 'column'
        }
        yield data

series_CY = [i for i in Topx('2016.01.01','2016.01.07',['朝陽'],5)]
series_TZ = [i for i in Topx('2016.01.01','2016.01.07',['通州'],5)]
series_HD = [i for i in Topx('2016.01.01','2016.01.07',['海淀'],5)]

#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 數(shù)據(jù)中發(fā)帖總量柱狀圖
def total_post():
    pipeline = [
    {'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}},
    ]

    for i in ItemInfo._get_collection().aggregate(pipeline):
        data = {
            'name':i['_id'][0],
            'y':i['counts']
        }
        yield data

series_post=[i for i in total_post()]

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def one_day_deal_cate():
    pipeline = [
        {'$match':{'$and':[{'pub_date':{'$gte':'2015.12.25','$lte':'2016.01.11'}},{'time':1}]}},
        {'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}},
        {'$sort':{'counts':1}}
    ]
    for i in ItemInfo._get_collection().aggregate(pipeline):
        data = {
            'name':i['_id'][0],
            'y':i['counts']
        }
        yield data

def one_day_deal_area():
    pipeline = [
        {'$match':{'$and':[{'pub_date':{'$gte':'2015.12.25','$lte':'2016.01.11'}},{'time':1}]}},
        {'$group':{'_id':{'$slice':['$area',1]},'counts':{'$sum':1}}},
        {'$sort':{'counts':1}}
    ]

    for i in ItemInfo._get_collection().aggregate(pipeline):
        data = {
            'name':i['_id'][0],
            'y':i['counts']
        }
        yield data

pie1_data = [i for i in one_day_deal_cate()]
pie2_data = [i for i in one_day_deal_area()]

#  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


def index(request):
    context = {
        'chart_CY':series_CY,
        'chart_TZ':series_TZ,
        'chart_HD':series_HD,
        'series_post':series_post,
        'pie1_data':pie1_data,
        'pie2_data':pie2_data
    }
    return render(request,'chart2.html',context)

def web(request):
    return render(request,'web.html')

def pin(request):
    return render(request,'pin.html')

# blog
def chart(request):
    limit = 15
    item_info = ItemInfo.objects[:20]
    pageinator = Paginator(item_info, limit)
    page = request.GET.get('page', 1)
    print(request)
    print(request.GET)

    loaded = pageinator.page(page)

    context = {
        'ItemInfo': loaded,
        'counts': item_info.count(),
        'last_time':item_info.order_by('-pub_date').limit(1),
    }
    return render(request,'index_data.html',context)

models.py

from django.db import models

from mongoengine import *

# Create your models here.
class ItemInfo(Document):
    title = StringField()
    url = StringField()
    pub_date = StringField()
    area = ListField(StringField())
    cates = ListField(StringField())
    look = StringField()
    time = StringField()
    price = IntField()
    meta = {'collection':'item_info'}

urls.py

from django.conf.urls import url
from django.contrib import admin
from ganji.views import index,web,pin,chart

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', index),
    url(r'^web/',web),
    url(r'^pin/',pin),
    url(r'^chart/',chart)

]

index_data.html

{% extends "chart.html" %}

{% block grid %}
<div class="ui equal width grid" style="width:70%;margin:5px 0 5px 0;">
            <div class="row">
                <div class="column">
                    <div class="ui red segment">
                        <div class="ui statistic">
                            <div class="value">
                                {{ counts }}
                            </div>
                            <div class="label">
                                Documents
                            </div>
                        </div>
                    </div>
                </div>
                <div class="column">
                    <div class="ui blue segment">
                        <div class="ui statistic">
                            <div class="value">
                                <i class="plane icon"></i> 5
                            </div>
                            <div class="label">
                                Flights
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="column">
                    <div class="ui container segment">
                        <div class="ui divided items">
                            {% for item in ItemInfo %}
                            <div class="item">
                                <div class="content">
                                    <div class="header">
                                        {{ item.title }}
                                    </div>
                                    <div class="description">
                                        {{ item.area }}
                                    </div>
                                    <div class="extra">
                                        {% for tag in item.cates %}
                                        <div class="ui label">
                                            {{ tag }}
                                        </div>
                                        {% endfor %}
                                    </div>

                                </div>
                            </div>
                            {% endfor %}
                        </div>

                        <div class = "ui small pagination menu">
                            {% if ItemInfo.has_previous %}
                                <a class="icon item" href="?page={{ ItemInfo.previous_page_number }}">
                                <i class="icon left arrow"></i>
                                </a>
                            {% endif %}

                            <div class="disabled item">
                                {{ ItemInfo.number }} of {{ ItemInfo.paginator.num_pages }}
                            </div>
                            {% if ItemInfo.has_next %}
                                <a class="icon item" href="?page={{ ItemInfo.next_page_number }}">
                                    <i class="icon right arrow"></i>
                                </a>
                            {% endif %}
                        </div>
                    </div>
                </div>
            </div>
        </div>
{% endblock %}

chart2.html

{% extends 'chart.html' %}

{% block grid %}
<div class="ui equal width grid" style="margin:5px 0 5px 0;width:70%">


    <div class="row">
      <div class="column">
        <div class="ui container segment">
          <div class="ui container" id="chart2"></div>
        </div>
      </div>
    </div>

    <div class="row">
      <div class="column">
        <div class="ui container segment">
          <div class="ui container" id="pie1"></div>
        </div>
      </div>

      <div class="column">
          <div class="ui container segment">
          <div class="ui container" id="pie2"></div>
        </div>
      </div>
    </div>


    <div class="row">
      <div class="column">
        <div class="ui container segment">
          <div class="ui compact menu">
            <div class="ui simple dropdown item">
              Area
              <i class="dropdown icon"></i>
              <div class="menu">
                <div class="item" id="CY">朝陽</div>
                <div class="item" id="HD">海淀</div>
                <div class="item" id="TZ">通州</div>
              </div>
            </div>
          </div>
          <div class="ui container" id="chart1"></div>
        </div>
      </div>
    </div>



</div>

{% endblock %}

{% block chartjs %}

    <script>
    $(function () {
        // Create the chart
        $('#chart2').highcharts({
            chart: {
                type: 'column'
            },
            title: {
                text: '發(fā)帖總量柱狀圖'
            },
            xAxis: {
                type: 'category'
            },
            yAxis: {
                title: {
                    text: '數(shù)量'
                }
            },
            legend: {
                enabled: false
            },

            series: [{
                name: 'posts',
                colorByPoint: true,
                data: {{ series_post|safe }}
            }]
        });
    });

    </script>

    <script>
        $('#CY').click(function () {
          $('#chart1').highcharts({
            credits:{
                enabled:false
            },
            title: {
                text: '朝陽二手交易'
            },
            yAxis: {
                title: {
                    text: 'TOP 5'
                }
            },
            series: {{ chart_CY|safe }}
        });
    });
    </script>

    <script>
        $('#HD').click(function () {
          $('#chart1').highcharts({
            credits:{
                enabled:false
            },
            title: {
                text: '海淀二手交易'
            },
            yAxis: {
                title: {
                    text:  'TOP 5'
                }
            },
            series: {{ chart_HD|safe }}
        });
    });
    </script>

    <script>
        $('#TZ').click(function () {
          $('#chart1').highcharts({
            credits:{
                enabled:false
            },
            title: {
                text: '通州二手交易'
            },
            yAxis: {
                title: {
                    text:  'TOP 5'
                }
            },
            series: {{ chart_TZ|safe }}
        });
    });
    </script>

    <script>
    $(function () {
        $('#pie1').highcharts({
            chart: {
                plotBackgroundColor: null,
                plotBorderWidth: null,
                plotShadow: false,
                type: 'pie'
            },
            title: {
                text: '一天內(nèi)交易物品種類分布'
            },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: false
                    },
                    showInLegend: true
                }
            },
            series: [{
                name: 'Percent',
                colorByPoint: true,
                data: {{ pie1_data|safe }}
            }]
        });
    });
    </script>

    <script>
    $(function () {
        $('#pie2').highcharts({
            chart: {
                plotBackgroundColor: null,
                plotBorderWidth: null,
                plotShadow: false,
                type: 'pie'
            },
            title: {
                text: '一天內(nèi)交易物品地區(qū)分布'
            },
            tooltip: {
                pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: false
                    },
                    showInLegend: true
                }
            },
            series: [{
                name: 'Percent',
                colorByPoint: true,
                data: {{ pie2_data|safe }}
            }]
        });
    });
    </script>

{% endblock %}

實(shí)現(xiàn)效果:

1.png
2.png
3.png
blog.png

總結(jié):

  • 進(jìn)一步學(xué)習(xí)了Django的框架,后續(xù)準(zhǔn)備把document好好看看裙秋,買了本Python web開發(fā)測(cè)試驅(qū)動(dòng)方法腮考,準(zhǔn)備系統(tǒng)學(xué)學(xué)晋修。
  • 學(xué)習(xí)了用senmatic模版做網(wǎng)頁晨继,下一步需要學(xué)習(xí)html+css+javascript
  • 學(xué)習(xí)了如何搭建簡單的網(wǎng)頁增炭。
  • 初步掌握了利用爬蟲抓取數(shù)據(jù)忍燥,并進(jìn)行網(wǎng)頁的數(shù)據(jù)可視化。

課程結(jié)束了隙姿,學(xué)習(xí)才剛開始梅垄,繼續(xù)學(xué)習(xí),做些實(shí)際的項(xiàng)目输玷,以后繼續(xù)在博客中記錄下來队丝,謝謝老師。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饲嗽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奈嘿,更是在濱河造成了極大的恐慌貌虾,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裙犹,死亡現(xiàn)場(chǎng)離奇詭異尽狠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叶圃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門袄膏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掺冠,你說我怎么就攤上這事沉馆÷氲常” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵斥黑,是天一觀的道長揖盘。 經(jīng)常有香客問我,道長锌奴,這世上最難降的妖魔是什么兽狭? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鹿蜀,結(jié)果婚禮上箕慧,老公的妹妹穿的比我還像新娘。我一直安慰自己茴恰,他們只是感情好颠焦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琐簇,像睡著了一般蒸健。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婉商,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天似忧,我揣著相機(jī)與錄音,去河邊找鬼丈秩。 笑死盯捌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蘑秽。 我是一名探鬼主播饺著,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肠牲!你這毒婦竟也來了幼衰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤缀雳,失蹤者是張志新(化名)和其女友劉穎渡嚣,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肥印,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡识椰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了深碱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腹鹉。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敷硅,靈堂內(nèi)的尸體忽然破棺而出功咒,到底是詐尸還是另有隱情愉阎,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布航瞭,位于F島的核電站诫硕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏刊侯。R本人自食惡果不足惜章办,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滨彻。 院中可真熱鬧藕届,春花似錦、人聲如沸亭饵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辜羊。三九已至踏兜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間八秃,已是汗流浹背碱妆。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昔驱,地道東北人疹尾。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像骤肛,于是被迫代替她去往敵國和親纳本。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容