{"id":119432,"date":"2019-05-22T12:41:31","date_gmt":"2019-05-22T04:41:31","guid":{"rendered":"http:\/\/www.fagao.me\/?p=119432"},"modified":"2019-05-22T12:41:31","modified_gmt":"2019-05-22T04:41:31","slug":"%e5%88%a9%e7%94%a8python%e6%a8%a1%e6%8b%9f%e6%b7%98%e5%ae%9d%e7%9a%84%e6%90%9c%e7%b4%a2%e8%bf%87%e7%a8%8b%e5%b9%b6%e5%af%b9%e6%95%b0%e6%8d%ae%e8%bf%9b%e8%a1%8c%e5%8f%af%e8%a7%86%e5%8c%96%e5%88%86","status":"publish","type":"post","link":"https:\/\/www.fagao.me\/p\/119432.htm","title":{"rendered":"\u5229\u7528Python\u6a21\u62df\u6dd8\u5b9d\u7684\u641c\u7d22\u8fc7\u7a0b\u5e76\u5bf9\u6570\u636e\u8fdb\u884c\u53ef\u89c6\u5316\u5206\u6790"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.fagao.me\/images\/uploads\/2021_021.jpg\" alt=\"\"><\/p>\n<div class=\"articleend\"><\/div>\n<p><strong>\u6570\u636e\u6316\u6398\u5165\u95e8\u4e0e\u5b9e\u6218 \u516c\u4f17\u53f7\uff1a datadw<\/strong><\/p>\n<p>\u672c\u6587\u8bb2\u8ff0\u5982\u4f55\u5229\u7528Python\u6a21\u62df\u6dd8\u5b9d\u7684\u641c\u7d22\u8fc7\u7a0b\u5e76\u5bf9\u641c\u7d22\u7ed3\u679c\u8fdb\u884c\u521d\u6b65\u7684\u6570\u636e\u53ef\u89c6\u5316\u5206\u6790\u3002<\/p>\n<ul>\n<li>\n<p>\u641c\u7d22\u8fc7\u7a0b\u7684\u6a21\u62df\uff1a\u6dd8\u5b9d\u7684\u641c\u7d22\u9875\u9762\u6709\u4e24\u79cd\u5f62\u5f0f\uff0c<\/p>\n<\/li>\n<li>\n<p>\u4e00\u79cd\u5f62\u5f0f\u662f\uff0c<\/p>\n<p>2019\/20190426A\/F0120242\n <\/p>\n<\/li>\n<li>\n<p>\u4e00\u79cd\u5f62\u5f0f\u662f\u3002<\/p>\n<p>2019\/20190426A\/F0120243\n <\/p>\n<\/li>\n<li>\n<p>\u521d\u6b65\u6570\u636e\u53ef\u89c6\u5316\u5206\u6790\uff1a\u5bf9\u641c\u7d22\u56de\u6765\u7684\u6570\u636e\uff0c\u901a\u8fc7\u5e97\u94fa\u57ce\u5e02\u751f\u6210\u5750\u6807\u6570\u636e\uff0c\u5e76\u5c06\u9500\u91cf\u3001\u552e\u4ef7\u5728\u5730\u56fe\u4e0a\u6807\u793a\u51fa\u6765\u3002\u5750\u6807\u6570\u636e\u7684\u83b7\u5f97\u8981\u901a\u8fc7\uff0c<\/p>\n<p>2019\/20190426A\/F0120245\n <\/p>\n<\/li>\n<li>\n<p>\u6570\u636e\u53ef\u89c6\u5316\u4e3a\u5229\u7528Plotly\u751f\u6210Buble Map<\/p>\n<p>https:\/\/plot.ly\/python\/bubble-maps\/<\/p>\n<\/li>\n<\/ul>\n<p>\u5229\u7528Python\u6a21\u62df\u641c\u7d22\u8fc7\u7a0b <\/p>\n<p>\u9996\u5148\u9700\u8981\u5148\u5bf9\u6dd8\u5b9d\u7684\u6a21\u5f0f\u8fdb\u884c\u6807\u8bc6\uff0c\u901a\u8fc7\u51e0\u4e2a\u5173\u952e\u8bcd\u641c\u7d22\u4e4b\u540e\uff0c\u53ef\u4ee5\u53d1\u73b0\u5176\u5730\u5740\u7684\u53d8\u5316\u89c4\u5f8b\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a<\/p>\n<\/p>\n<p>\u6dd8\u5b9d\u641c\u7d22<strong>\u8131\u76ae\u7eff\u8c46<\/strong>\u8bd5\u8bd5<\/p>\n<p>\u5ffd\u7565\u6389q=\u8131\u76ae\u7eff\u8c46\u540e\u9762\u7684\u90e8\u5206\u8bd5\u8bd5\uff0c\u5728\u7f51\u5740\u680f\u8f93\u5165() \uff0c\u53d1\u73b0\u53ef\u884c\u3002\u8fd9\u6837\u5c31\u7b80\u5355\u4e86\uff0c\u540e\u7eed\u5c31\u662f\u89e3\u6790\u751f\u6210\u9875\u3001\u751f\u6210\u7ffb\u9875\u5668\u3001\u4ee5\u53ca\u5b58\u50a8\u751f\u6210\u6570\u636e\u5373\u53ef\u3002<\/p>\n<p>\u89e3\u6790\u751f\u6210\u9875<\/p>\n<p>\u548c\u4e4b\u524d\u7684\u4f8b\u5b50\u7c7b\u4f3c\uff0c\u7ed3\u5408requests\u4ee5\u53caBeautifulSoup\u6765\u5b8c\u6210\u9875\u9762\u6570\u636e\u4e0b\u8f7d\uff1a<\/p>\n<p>def mainPaser(url): Headers = { <span>&#8220;User-Agent&#8221;<\/span>: <span>&#8220;Mozilla\/5.0 (Windows NT 6.3; Win64; x64)<\/span><\/p>\n<p>AppleWebKit\/537.36 (KHTML, like Gecko)<\/p>\n<p>Chrome\/37.0.2049.0 Safari\/537.36&#8243;} Response = requests. <span>get<\/span>(url, headers=Headers) Interial = BeautifulSoup(Response.content, <span>&#8216;lxml&#8217;<\/span>) pageConfig = Interial. <span>find<\/span>( <span>&#8221;<\/span>, <span>text<\/span>=re.compile( <span>&#8216;g_page_config&#8217;<\/span>))<\/p>\n<p><span>return<\/span>pageConfig. <span>string<\/span>\u7ee7\u7eed\u5bf9\u6dd8\u5b9d\u7684\u9875\u9762\u8fdb\u884cInspect\uff0c\u53d1\u73b0\u6bcf\u4e00\u6846\u7684\u5e97\u94fa\u6570\u636e\u50a8\u5b58\u5728g_page_config\u4e2d\u7684auctions\u4e2d\uff0c\u5e76\u4e14g_page_config\u4e2d\u7684\u6570\u636e\u4e3ajson\u683c\u5f0f\u3002<\/p>\n<\/p>\n<p>\u6dd8\u5b9d\u641c\u7d22\u9875\u9762<\/p>\n<\/p>\n<p>g_page_config\u4ee5\u53caauctions<\/p>\n<p>\u83b7\u53d6\u539f\u59cb\u6570\u636e<\/p>\n<p>\u5728Python\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e13\u95e8\u7684\u89e3\u6790\u5668\u6765\u5b8c\u6210\u3002\u901a\u8fc7\u5176\u4e2d\u7684loads \u548cdumps \u53ef\u4ee5\u8f7b\u6613\u7684\u5728json\u4ee5\u53castr\u4e4b\u95f4\u505a\u8f6c\u6362\u3002\u5c06str\u8f6c\u6362\u4e3ajson\u683c\u5f0f\uff0c\u5728\u901a\u8fc7pandas \u7684\u83b7\u53d6json\u4e2d\u7684\u6570\u636e\u4fe1\u606f\u3002<\/p>\n<p>\u6bcf\u4e00\u6846\u5e97\u94fa\u7684\u6570\u636e\u6db5\u62ec\u975e\u5e38\u4e30\u5bcc\u7684\u5e97\u94fa\u4fe1\u606f\u4ee5\u53ca\u9500\u552e\u4fe1\u606f\uff0c\u5728\u8fd9\u91cc\u4ec5\u6536\u96c6\u5b9d\u8d1d\u5206\u7c7b(category)\u3001\u8bc4\u8bba\u6570(comment_count)\u3001\u5b9d\u8d1d\u4f4d\u7f6e(item_loc)\u3001\u5e97\u94fa\u540d\u79f0(nick)\u3001\u5b9d\u8d1d\u540d\u79f0(raw_title)\u3001\u539f\u4ef7\u683c(reserve_price)\u3001\u663e\u793a\u4ef7\u683c(view_price)\u3001\u9500\u91cf(view_sales)\u8fdb\u884c\u5206\u6790\uff1a<\/p>\n<p><span>neededColumns<\/span>= [ <span>&#8216;category&#8217;<\/span>, <span>&#8216;comment_count&#8217;<\/span>, <span>&#8216;item_loc&#8217;<\/span>, <span>&#8216;nick&#8217;<\/span>, <span><\/span><\/p>\n<p>&#8216;raw_title&#8217;, <span>&#8216;reserve_price&#8217;<\/span>, <span>&#8216;view_price&#8217;<\/span>, <span>&#8216;view_sales&#8217;<\/span>]<\/p>\n<p><span>PageConfig<\/span>= re.search(r <span>&#8216;g_page_config = (.*?);n&#8217;<\/span>,<\/p>\n<p>pageConfig.string) <span><\/span><\/p>\n<p>pageConfigJson= json.loads(gPageConfig.group( <span>1<\/span>)) <span><\/span><\/p>\n<p>pageItems= pageConfigJson[ <span>&#8216;mods&#8217;<\/span>][ <span>&#8216;itemlist&#8217;<\/span>][ <span>&#8216;data&#8217;<\/span>][ <span>&#8216;auctions&#8217;<\/span>] <span><\/span><\/p>\n<p>pageItemsJson= json.dumps(pageItems) <span><\/span><\/p>\n<p>pageData= pd.read_json(pageItemsJson) <span><\/span><\/p>\n<p>neededData= pageData[Paser.neededColumns]<\/p>\n<p>\u6574\u7406\u751f\u6210\u6570\u636e<\/p>\n<p>\u63a5\u4e0b\u6765\u5c31\u662f\u5bf9\u5f97\u51fa\u7684\u6570\u636e\u8fdb\u884c\u6574\u7406\uff0c\u6211\u4eec\u5148\u770b\u770bneededData\u7684\u7ed3\u6784\u662f\u5982\u4f55\uff0c\u5982\u4e0b\u8868\u6240\u793a\uff1a<\/p>\n<\/p>\n<p>neededData<\/p>\n<p>\u5176\u4e2ditem_loc\u662f\u7f51\u5e97\u7684\u5730\u5740\uff0c\u53ef\u4ee5\u770b\u5230\u76f4\u8f96\u5e02\u662f\u6bd4\u8f83\u7279\u6b8a\u7684\u5b58\u5728\uff0c\u5c06\u8fd9\u4e00\u5217\u6539\u7684\u7701\u4efd\u540d\u79f0\u5220\u6389\uff0c\u65b9\u6cd5\u662f\u5355\u72ec\u5c06\u8fd9\u4e00\u5217\u62ff\u51fa\u6765\u901a\u8fc7<\/p>\n<p>http:\/\/pandas.pydata.org\/pandas-docs\/stable\/generated\/pandas.Series.str.split.html<\/p>\n<p>\u6765\u5904\u7406\uff0c\u4ee5\u7a7a\u683c\u4e3a\u6807\u8bc6\u7b26\uff0c\u5c06\u8be5\u5217\u7684\u7701\u4efd\u4ee5\u53ca\u57ce\u5e02\u62c6\u5206\u4e3a\u4e24\u5217\uff0c\u7ed3\u679c\u5982\u4e0b\u56fe\uff0c\u901a\u8fc7<\/p>\n<p>http:\/\/pandas.pydata.org\/pandas-docs\/stable\/generated\/pandas.DataFrame.fillna.html<\/p>\n<p>\u5411\u5de6\u586b\u5145\u5bf9None\u8fdb\u884c\u586b\u5145\uff1a<\/p>\n<\/p>\n<p>fillna\u524d<\/p>\n<\/p>\n<p>fillna\u540e<\/p>\n<p>\u8fd9\u6837\u5c31\u5b9e\u73b0\u5bf9item_loc\u5217\u7684\u4fee\u6539\uff0c\u770b\u56deneededData\u90a3\u5f20\u56fe\uff0c\u6700\u540e\u4e00\u5217view_sales\u4e2d\uff0c\u9700\u8981\u5c06\u6bcf\u4e2a\u5355\u5143\u683c\u4e2d<strong>\u4ed8\u6b3e<\/strong>\u4e24\u4e2a\u5b57\u5220\u53bb\u3002\u9700\u8981\u91c7\u7528\uff0c<\/p>\n<p>http:\/\/pandas.pydata.org\/pandas-docs\/stable\/generated\/pandas.Series.str.extract.html<\/p>\n<p>\u7ed3\u5408\u6b63\u5219\u8868\u8fbe\u5f0f\u6765\u5904\u7406\u3002\u5c06\u6570\u5b57\u6587\u672c\u62d6\u51fa\u6765\u4e4b\u540e\uff0c\u8fd8\u9700\u8981\u901a\u8fc7<\/p>\n<p>\u51fd\u6570\u5c06\u5176\u8f6c\u5316\u4e3aint\u683c\u5f0f\uff0c\u5e76\u589e\u52a0\u65f6\u95f4\u5217\u3002\u6700\u540e\u8be5\u6bb5\u6570\u636e\u6574\u7406\u7684\u4ee3\u7801\uff0c\u4ee5\u53ca\u5904\u7406\u540e\u7684\u6548\u679c\u56fe\u4e3a\uff1a<\/p>\n<p>cityData = neededData[ <span>&#8216;item_loc&#8217;<\/span>] <span>.str<\/span><span>.split<\/span>( <span>&#8216; &#8216;<\/span>, expand = True)cityData.fillna(method = <span>&#8216;pad&#8217;<\/span>, axis= <span>1<\/span>, inplace= True)neededData <span>.loc<\/span>[:,( <span>&#8216;item_loc&#8217;<\/span>)] = cityData[ <span>1<\/span>]neededData <span>.loc<\/span>[:,( <span>&#8216;view_sales&#8217;<\/span>)] = neededData[ <span>&#8216;view_sales&#8217;<\/span>] <span>.str<\/span><span>.extract<\/span>( <span>&#8216;([d]*)<\/span><\/p>\n<p>([w]*)&#8217;).get( <span>0<\/span>)neededData <span>.loc<\/span>[:,( <span>&#8216;view_sales&#8217;<\/span>)] = neededData[ <span>&#8216;view_sales&#8217;<\/span>].astype(int)neededData[ <span>&#8216;time&#8217;<\/span>] = datetime <span>.datetime<\/span><span>.now<\/span>().strftime( <span>&#8216;%Y%m%d%H&#8217;<\/span>)<\/p>\n<\/p>\n<p>\u5904\u7406\u7ed3\u679c<\/p>\n<p>\u751f\u6210\u7ffb\u9875\u5668<\/p>\n<p>\u6700\u540e\u5c31\u662f\u751f\u6210\u7ffb\u9875\u5668\u4e86\uff0c\u5728\u521a\u521a\u7684g_page_config\u4e2d\u641c\u7d22pager\u8bd5\u8bd5\uff1a<\/p>\n<\/p>\n<p>\u5bfb\u627e\u7ffb\u9875\u5668<\/p>\n<p>\u5bfb\u627e\u7ffb\u9875\u5668<\/p>\n<p>\u5c06\u5176\u4e2d\u7684u003d\u548c=\u4ee5\u53cau0026\u548c&amp;\u4f5c\u66ff\u6362\uff08\u6211\u662f\u901a\u8fc7\u5b57\u7b26\u66ff\u6362\u5904\u7406\u3002\u3002\u5355\u5e94\u8be5\u5b58\u5728\u66f4\u52a0\u65b9\u4fbf\u7684\uff0c\u4ece\u7f16\u7801\u89d2\u5ea6\u5165\u624b\u5904\u7406\u7684\u65b9\u6cd5\u3002\u3002\u6c42\u6307\u6559\uff09\uff0c\u5e76\u66f4\u6362\u4e00\u4e8c\u4e09\u9875\uff0c\u53d1\u73b0\u7f51\u5740\u6700\u540e\u7684\u53c2\u6570s\u5206\u522b\u4e3a0\uff0c44\uff0c88\u3002\u7ed3\u5408\u4e0a\u9762\u7b2c\u4e8c\u5f20\u56fe\uff0c\u53ef\u4ee5\u731c\u5230\u8fd9\u4e2a\u6570\u5b57\u4e3a\u5355\u9875\u7684\u5e97\u94fa\u603b\u91cf\uff0c\u5f53\u9875\u9762\u9ed8\u8ba4\u6bcf\u9875\u7684\u5e97\u94fa\u6570\u4e3a44\u7684\u65f6\u5019\uff0c\u53ea\u9700\u8981\u66f4\u6539\u8be5\u53c2\u6570\u5373\u53ef\u8fbe\u5230\u7ffb\u9875\u6548\u679c\u3002<\/p>\n<p>\u6570\u636e\u53ef\u89c6\u5316<\/p>\n<p>\u4e3a\u4e86\u5bf9\u5c06\u9500\u552e\u6570\u636e\u4ee5\u53ca\u8bc4\u8bba\u6570\u636e\u653e\u5728\u5730\u56fe\u4e0a\uff0c\u663e\u793a\u533a\u57df\u96c6\u4e2d\u60c5\u51b5\uff0c\u9996\u5148\u9700\u8981\u5c06\u57ce\u5e02\u4fe1\u606f\u8f6c\u5316\u4e3a\u5750\u6807\u4fe1\u606f\uff0c\u8fd9\u4e2a\u65f6\u5019\u9700\u8981\u7528\u5230\u3002\u800c\u4e3a\u4e86\u51cf\u5c11\u53cd\u590d\u67e5\u8be2\u7684\u6b21\u6570\uff0c\u9700\u8981\u5bf9\u5750\u6807\u4fe1\u606f\u8fdb\u884c\u5b58\u50a8\uff0c\u5373\u5c06\u4f4d\u7f6e\u6570\u636e\u5b58\u50a8\u5728sql\u4e2d\uff0c\u903b\u8f91\u662f\u8fd9\u6837\uff1a<\/p>\n<\/p>\n<p>\u67e5\u8be2\u6846\u56fe\u903b\u8f91<\/p>\n<p>\u91c7\u7528sqlite\u8fdb\u884c\u5730\u7406\u6570\u636e\u7684\u5b58\u50a8\u548c\u67e5\u8be2\uff0c\u5bf9\u4e8e\u67e5\u8be2\u5b58\u5728\u7684\u6570\u636e\u76f4\u63a5\u8f93\u51fa\uff0c\u67e5\u8be2\u4e0d\u5b58\u5728\u7684\u6570\u636e\u9700\u8981\u901a\u8fc7\u9ad8\u5fb7\u5730\u56fe\u7684\u529f\u80fd\u67e5\u8be2\u3002<\/p>\n<p>2019\/20190426A\/F0120256\n<\/p>\n<p>\u9996\u5148\u9700\u8981\u6ce8\u518c\u81ea\u5df1\u7684\u4e00\u4e2akey\uff0c\u5e76\u5728\u5bf9\u5e94\u8d26\u53f7\u7684\u63a7\u5236\u7248\u5185\u589e\u52a0Web\u670d\u52a1API\u529f\u80fd\uff0c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u5c06key\u503c\u4ee5\u53ca\u8bbe\u7f6e\u4fe1\u606f\u7528dict\u683c\u5f0f\u8868\u793a\uff0c\u5e76\u52a0\u8f7d\u5728requests\u7684param\u4e2d\u3002\u67e5\u8be2\u8f93\u51fa\u7684\u6570\u636e\u683c\u5f0f\u6709\u4e24\u79cd\uff0c\u4e00\u79cd\u662fjson\uff0c\u4e00\u79cd\u662fxml\u3002\u8fd9\u91cc\u8f93\u51fajson\uff0c\u5bf9json\u7684\u5b57\u7b26\u4e32\u901a\u8fc7\u6b63\u5219\u8868\u8fbe\u5f0f\u5c06\u7ecf\u7eac\u5ea6\u4fe1\u606f\u63d0\u53d6\u51fa\u6765\uff0c\u63d0\u53d6\u51fa\u540e\u5b58\u50a8\u5728\u6570\u636e\u6587\u4ef6\u4e2d\uff0c\u5e76\u8fdb\u884c\u8f93\u51fa\u3002<\/p>\n<p><span><span>def<\/span><span>getCenter<\/span><span>(city)<\/span>:<\/span>conn = sqlite3.connect( <span>&#8216;citydata.db&#8217;<\/span>) cursor = conn.cursor() cursor.execute( <span>&#8220;CREATE TABLE IF NOT EXISTS CITYDATA(citycode text primary key<\/span><\/p>\n<p>, name text, latitude real, longitude real);&#8221;) cursor.execute( <span>&#8220;SELECT latitude, longitude FROM CITYDATA WHERE name = ?&#8221;<\/span>,<\/p>\n<p>(city,)) res = cursor.fetchall() <span>if<\/span><span>not<\/span>res: payload = { <span>##yourkey = the key applied from amap.com<\/span><span>&#8216;key&#8217;<\/span>:yourkey, <span>&#8216;keywords&#8217;<\/span>: <span>&#8221;<\/span>, <span>&#8216;subdistrict&#8217;<\/span>: <span>&#8216;0&#8217;<\/span>, <span>&#8216;showbiz&#8217;<\/span>:<\/p>\n<p><span>False<\/span>, <span>&#8216;output&#8217;<\/span>: <span>&#8216;json&#8217;<\/span>, } payload[ <span>&#8216;keywords&#8217;<\/span>] = city jsonData = requests.get( <span>&#8216;2019\/20190426A\/F0120257 <\/p>\n<p>params = payload) jsonText = jsonData.text center = re.search( <span>r'&#8221;([d]*.[d]*),([d]*.[d]*)&#8221;&#8216;<\/span>, jsonText) cityCode = re.search( <span>r'&#8221;citycode&#8221;:&#8221;(d*)&#8221;&#8216;<\/span>, jsonText) latitude = float(center.group( <span>1<\/span>)) longitude = float(center.group( <span>2<\/span>)) cursor.execute( <span>&#8220;INSERT INTO CITYDATA VALUES(?, ?, ?, ?);&#8221;<\/span>, [cityCode.group( <span>1<\/span>),<\/p>\n<p>city, latitude, longitude]) cursor.close() conn.commit() <span>return<\/span>latitude, longitude <span>else<\/span>: res = list(res[ <span>0<\/span>]) <span>return<\/span>res[ <span>0<\/span>], res[ <span>1<\/span>]<\/p>\n<p>\u7ecf\u7eac\u5ea6\u6570\u636e\u83b7\u5f97\u540e\uff0c\u9700\u8981\u8f93\u51fa\u5230\u73b0\u6709\u7684dataFrame\u4e2d\uff0c\u7531\u4e8e\u4e0a\u8ff0\u51fd\u6570\u6709\u4e24\u4e2a\u8f93\u51fa\uff0c\u4e0d\u80fd\u901a\u8fc7apply\u51fd\u6570\u5f97\u51fa\uff0c\u9700\u8981\u7ed3\u5408zip\u4ee5\u53camap\u51fd\u6570\u6765\u5b9e\u73b0\u53cc\u8f93\u51fa\uff1a<\/p>\n<p>neededData[ <span>&#8216;latitude&#8217;<\/span>], neededData[ <span>&#8216;longitude&#8217;<\/span>] = zip(*neededData[ <span>&#8216;item_loc&#8217;<\/span>].map(getCenter))<\/p>\n<p>\u6570\u636e\u53ef\u89c6\u5316<\/p>\n<p>dataFrame\u7684\u53ef\u89c6\u5316\u5de5\u5177\u6709\u5f88\u591a\uff0c\u5e38\u7528\u7684\u6709matplotlib\u3002\u4f46\u5bf9\u4e8e\u751f\u6210\u5730\u7406\u4fe1\u606f\u56fe\uff0c\u4f3c\u4e4eplotly\u66f4\u5177\u6709\u4f18\u52bf\uff0c\u5e76\u4e14\u7ecf\u8fc7\u4f18\u5316\u540e\uff0cplotly\u751f\u6210\u7684\u56fe\u50cf\u8d28\u91cf\u8981\u66f4\u9ad8\u3002\u5c1d\u8bd5\u4e0b\u5bf9view_sales\u5217\u8fdb\u884c\u53ef\u89c6\u5316\u64cd\u4f5c\uff0c\u9996\u5148\u5bf9\u8be5\u5217\u8fdb\u884c\u6392\u5e8f\uff1a<\/p>\n<p>neededData.sort_values( <span>&#8216;view_sales&#8217;<\/span>, axis = <span>0<\/span>, <span>ascending<\/span>= <span>False<\/span>, inplace= <span>True<\/span>)<\/p>\n<p>plotly\u5728\u7b2c\u4e00\u6b21\u4f7f\u7528\u7684\u65f6\u5019\u4e5f\u9700\u8981\u8bbe\u7f6e\u81ea\u5df1\u7684\u8d26\u53f7\u4fe1\u606f\uff0c\u5177\u4f53\u53ef\u4ee5\u53c2\u8003\uff0c<\/p>\n<p>https:\/\/plot.ly\/python\/getting-started\/<\/p>\n<p>\u672c\u673a\u53ea\u8981\u8bbe\u7f6e\u8fc7\u4e00\u6b21\u8d26\u53f7\u540e\uff0c\u540e\u9762\u5c31\u53ef\u4ee5\u4e0d\u7528\u518d\u8bbe\u7f6e\u4e86\u3002<\/p>\n<p>\u9996\u5148\u9700\u8981\u5bf9\u56fe\u4f8b\u8fdb\u884c\u8bbe\u7f6e\uff1a<\/p>\n<p>import plotly.plotly as py <span>length<\/span>= len(newData)limits = [( <span>0<\/span>, <span>int<\/span>( <span>0.05<\/span>* <span>length<\/span>)),( <span>int<\/span>( <span>0.05<\/span>* <span>length<\/span>), <span>int<\/span>( <span>0.2<\/span>* <span>length<\/span>)),<\/p>\n<p>( <span>int<\/span>( <span>0.2<\/span>* <span>length<\/span>), <span>int<\/span>( <span>0.5<\/span>* <span>length<\/span>)),( <span>int<\/span>( <span>0.5<\/span>* <span>length<\/span>), <span>length<\/span>)]colors = [ <span>&#8220;#0A3854&#8221;<\/span>, <span>&#8220;#3779A3&#8221;<\/span>, <span>&#8220;#1B85C6&#8221;<\/span>, <span>&#8220;#C0DAEA&#8221;<\/span>]cities = []<\/p>\n<p>\u800c\u540e\u5c31\u662f\u8bbe\u7f6e\u6bcf\u4e2a\u70b9\u7684\u5730\u7406\u4fe1\u606f\u3001\u6ce1\u6ce1\u9762\u79ef\u5927\u5c0f\u3001\u6ce1\u6ce1\u989c\u8272\uff0c\u5e76\u5c06dataFrame\u4e2d\u7684\u6570\u636e\u8f6c\u6362\u4e3aployly\u53ef\u8bc6\u522b\u7684\u683c\u5f0f\u4e2d\uff1a<\/p>\n<p>for i <span>in<\/span>range(len(limits)): <span>lim<\/span>= limits[i] <span>df_sub<\/span>= newData[lim[ <span>0<\/span>]:lim[ <span>1<\/span>]]<\/p>\n<p><span>city<\/span>= dict( <span>type<\/span>= &#8216;scattergeo&#8217;, <span>locationmode<\/span>= &#8216;china&#8217;,<\/p>\n<p><span>lon<\/span>= df_sub[&#8216;longitude&#8217;], <span>lat<\/span>= df_sub[&#8216;latitude&#8217;],<\/p>\n<p><span>text<\/span>= df_sub[&#8216;nick&#8217;], <span>marker<\/span>= dict(<\/p>\n<p><span>size<\/span>= df_sub[&#8216;view_sales&#8217;]\/ <span>10<\/span>, <span>color<\/span>= colors[i],<\/p>\n<p><span>line<\/span>= dict( <span>width<\/span>= <span>0.5<\/span>, <span>color<\/span>= &#8216; <span>#000&#8242;),<\/span><span>sizemode<\/span>= &#8216;area&#8217;, <span>opacity<\/span>= <span>0.5<\/span>), <span><\/span><\/p>\n<p>name= <span>&#8220;{0} &#8211; {1}&#8221;<\/span>.format(lim[ <span>0<\/span>], lim[ <span>1<\/span>]) ) cities.append(city)<\/p>\n<p>\u6700\u540e\u662f\u5bf9\u56fe\u7eb8\u4fe1\u606f\u8fdb\u884c\u8bbe\u5b9a\uff0c\u5305\u62ec\u6807\u9898\uff0c\u662f\u5426\u663e\u793a\u56fe\u4f8b\u3002\u7531\u4e8eployly\u4e2d\u5df2\u7ecf\u5305\u542b\u6709\u5730\u56fe\u4fe1\u606f\uff0c\u56e0\u6b64\u53ea\u9700\u8bbe\u5b9a\u663e\u793a\u533a\u57df(scope)\uff0c\u6295\u5f71\u65b9\u5f0f(projection)\uff0c\u4ee5\u53ca\u8fb9\u754c\u7ebf\u6761\u989c\u8272\u548c\u8fb9\u754c\u4fe1\u606f\u5373\u53ef\uff1a<\/p>\n<p>layout = dict( <span>title<\/span>= Keyword + <span>&#8220;\u7684\u6dd8\u5b9d\u5206\u5e03&#8221;<\/span>, showlegend = True, geo = dict( <span>scope<\/span>= <span>&#8220;asia&#8221;<\/span>, projection = dict( <span>type<\/span>= &#8216;mercator&#8217;), showland = True, landcolor = &#8216;rgb( <span>217<\/span>, <span>217<\/span>, <span>217<\/span>)&#8217;, subunitwidth=1, countrywidth=1, subunitcolor= <span>&#8220;rgb(255, 255, 255)&#8221;<\/span>, countrycolor= <span>&#8220;rgb(255, 255, 255)&#8221;<\/span>, lonaxis = dict( <span>range<\/span>= [newData[&#8216;longitude&#8217;].min() <span>-3<\/span>, newData[&#8216;longitude&#8217;].max() + <span>3<\/span>]), lataxis = dict( <span>range<\/span>= [newData[&#8216;latitude&#8217;].min() <span>-0.5<\/span>, newData[&#8216;latitude&#8217;].max() + <span>0.5<\/span>]), ),)<\/p>\n<p>\u5b8c\u6210\u540e\uff0c\u8f93\u51fa\u4fdd\u5b58\u5373\u53ef\uff1a<\/p>\n<p><span>fig<\/span>= dict( <span>data<\/span>= cities, <span>layout<\/span>= layout)py.iplot(fig, <span>validate<\/span>= False)<\/p>\n<\/p>\n<p>\u8131\u76ae\u7eff\u8c46\u7684\u6dd8\u5b9d\u5206\u5e03<\/p>\n<p>\u603b\u7ed3<\/p>\n<p>\u672c\u6587\u57fa\u672c\u5b9e\u73b0\u4e86\u6700\u521d\u76ee\u7684\uff0c\u6a21\u62df\u4e86\u6dd8\u5b9d\u7684\u641c\u7d22\u6570\u636e\uff0c\u5e76\u521d\u6b65\u5bf9\u6570\u636e\u8fdb\u884c\u53ef\u89c6\u5316\u3002\u4f46\u8be5\u7a0b\u5e8f\u8fd8\u6709\u5f88\u591a\u4f18\u5316\u7684\u5730\u65b9\uff1a<\/p>\n<ul>\n<li>\n<p>\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u53d1\u73b0\u5bf9\u4e8e\u540c\u4e00\u4e2a\u5173\u952e\u8bcd\u4f1a\u51fa\u73b0\u5f88\u591a\u4e0d\u540c\u79cd\u7c7b\u7684\u4e1c\u897f\uff0c\u4f8b\u5982\u4f60\u641c\u7d22\u82f9\u679c\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0iphone\u4e5f\u6709\u53ef\u80fd\u51fa\u73b0\u80fd\u5403\u7684\u82f9\u679c\uff0c\u4e0d\u65b9\u4fbf\uff1b<\/p>\n<\/li>\n<li>\n<p>\u7ed3\u5408ML\uff0c\u5b9e\u73b0\u6df1\u5ea6\u7684\u641c\u7d22\uff0c\u5bf9\u540c\u4e00\u4e2a\u7269\u54c1\u8fdb\u884c\u4ef7\u683c\u5bf9\u6bd4\uff0c\u9500\u91cf\u5bf9\u6bd4\uff0c\u5ba2\u6237\u8bc4\u4ef7\u5bf9\u6bd4\uff0c\u5e2e\u52a9\u5ba2\u6237\u8fdb\u884c\u9009\u62e9\uff1b<\/p>\n<\/li>\n<li>\n<p>\u53ef\u89c6\u5316\u7684\u610f\u4e49\u6ca1\u6709\u4f53\u73b0\u51fa\u6765\uff1b<\/p>\n<\/li>\n<li>\n<p>\u672c\u6587\u4e2d\uff0c\u8fd8\u6709bug\u672a\u5b8c\u5584\uff0c\u5f88\u591a\u5730\u65b9\u9700\u8981\u91c7\u7528try\u6765\u89c4\u907f\u3002<\/p>\n<\/li>\n<\/ul>\n<p>\u6587http:\/\/www.jianshu.com\/p\/9a9468d6d3ec<\/p>\n<p><span>\u65b0\u6d6a\u5fae\u535a\u540d\u79f0\uff1a<\/span><strong>\u5927\u6570\u636e_\u673a\u5668\u5b66\u4e60<\/strong><\/p>\n<p><strong>\u6570\u636e\u6316\u6398\u5165\u95e8\u4e0e\u5b9e\u6218<\/strong><\/p>\n<p><span><strong>\u641c\u7d22\u6dfb\u52a0\u5fae\u4fe1\u516c\u4f17\u53f7\uff1adatadw<\/strong><\/span><\/p>\n<p><strong>\u6559\u4f60\u673a\u5668\u5b66\u4e60\uff0c\u6559\u4f60\u6570\u636e\u6316\u6398<\/strong><\/p>\n<p><strong><span>\u957f\u6309\u56fe\u7247\uff0c\u8bc6\u522b\u4e8c\u7ef4\u7801\uff0c\u70b9\u5173\u6ce8<\/span><\/strong><\/p>\n<div class=\"articleend\"><\/div>\n<p><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6570\u636e\u6316\u6398\u5165\u95e8\u4e0e\u5b9e\u6218 \u516c\u4f17\u53f7\uff1a datadw \u672c\u6587\u8bb2\u8ff0\u5982\u4f55\u5229\u7528Python\u6a21\u62df\u6dd8\u5b9d\u7684\u641c\u7d22\u8fc7\u7a0b\u5e76\u5bf9\u641c\u7d22\u7ed3\u679c\u8fdb\u884c\u521d\u6b65 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[183],"class_list":["post-119432","post","type-post","status-publish","format-standard","hentry","category-news","tag-183"],"_links":{"self":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts\/119432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/comments?post=119432"}],"version-history":[{"count":0,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts\/119432\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/media?parent=119432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/categories?post=119432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/tags?post=119432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}