{ "info": { "author": "JoinQuant", "author_email": "xlx@joinquant.com", "bugtrack_url": null, "classifiers": [ "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "\n\n# jqfactor_analyzer\n\n**\u805a\u5bbd\u5355\u56e0\u5b50\u5206\u6790\u5de5\u5177\u5f00\u6e90\u7248**\n\n---\n\n\u805a\u5bbd\u5355\u56e0\u5b50\u5206\u6790\u5de5\u5177\u5f00\u6e90\u7248\u662f\u63d0\u4f9b\u7ed9\u7528\u6237\u8fdb\u884c\u56e0\u5b50\u5206\u6790\u7684\u5de5\u5177\uff0c\u63d0\u4f9b\u4e86\u5305\u62ec\u8ba1\u7b97\u56e0\u5b50IC\u503c\uff0c\u56e0\u5b50\u6536\u76ca\uff0c\u56e0\u5b50\u6362\u624b\u7387\u7b49\u5404\u79cd\u8be6\u7ec6\u6307\u6807\uff0c\u7528\u6237\u53ef\u4ee5\u6309\u7167\u81ea\u5df1\u7684\u9700\u6c42\u67e5\u770b\u56e0\u5b50\u8be6\u60c5\u3002\n\n\u6b22\u8fce\u52a0\u5165jqfactor_analyzer\u4ea4\u6d41\u7fa4\uff0cQQ \u7fa4\u804a\u53f7\u7801\uff1a779882614\n\n\n## **\u5b89\u88c5**\n\n```bash\npip install jqfactor_analyzer\n```\n\n\n\n## **\u5347\u7ea7**\n\n```bash\npip install -U jqfactor_analyzer\n```\n\n\n\n## **\u5177\u4f53\u4f7f\u7528\u65b9\u6cd5**\n\n[analyze_factor](https://github.com/JoinQuant/jqfactor_analyzer/blob/master/docs/API%E6%96%87%E6%A1%A3.md): \u56e0\u5b50\u5206\u6790\u51fd\u6570\n\n\n\n## **\u4f7f\u7528\u793a\u4f8b**\n\n* ### \u793a\u4f8b\uff1a5\u65e5\u5e73\u5747\u6362\u624b\u7387\u56e0\u5b50\u5206\u6790\n\n```python\n# \u8f7d\u5165\u51fd\u6570\u5e93\nimport pandas as pd\nimport jqfactor_analyzer as ja\n\n# \u83b7\u53d6 jqdatasdk \u6388\u6743\uff0c\u8f93\u5165\u7528\u6237\u540d\u3001\u5bc6\u7801\uff0c\u7533\u8bf7\u5730\u5740\uff1ahttp://t.cn/EINDOxE\n# \u805a\u5bbd\u5b98\u7f51\u53ca\u91d1\u878d\u7ec8\u7aef\uff0c\u4f7f\u7528\u65b9\u6cd5\u53c2\u89c1\uff1ahttp://t.cn/EINcS4j\nimport jqdatasdk\njqdatasdk.auth('username', 'password')\n\n# \u83b7\u53d65\u65e5\u5e73\u5747\u6362\u624b\u7387\u56e0\u5b502018-01-01\u52302018-12-31\u4e4b\u95f4\u7684\u6570\u636e\uff08\u793a\u4f8b\u7528\u4ece\u5e93\u4e2d\u76f4\u63a5\u8c03\u53d6\uff09\n# \u805a\u5bbd\u56e0\u5b50\u5e93\u6570\u636e\u83b7\u53d6\u65b9\u6cd5\u5728\u4e0b\u65b9\nfrom jqfactor_analyzer.sample import VOL5\nfactor_data = VOL5\n\n# \u5bf9\u56e0\u5b50\u8fdb\u884c\u5206\u6790\nfar = ja.analyze_factor(\n factor_data, # factor_data \u4e3a\u56e0\u5b50\u503c\u7684 pandas.DataFrame\n quantiles=10,\n periods=(1, 10),\n industry='jq_l1',\n weight_method='avg',\n max_loss=0.1\n)\n\n# \u83b7\u53d6\u6574\u7406\u540e\u7684\u56e0\u5b50\u7684IC\u503c\nfar.ic\n```\n\n\u7ed3\u679c\u5c55\u793a\uff1a\n\n![1](http://img0.ph.126.net/yJ8JpnMULEAqE4hzaGzMcg==/861876378788739324.png)\n\n```python\n# \u751f\u6210\u7edf\u8ba1\u56fe\u8868\nfar.create_full_tear_sheet(\n demeaned=False, group_adjust=False, by_group=False,\n turnover_periods=None, avgretplot=(5, 15), std_bar=False\n)\n```\n\n\u7ed3\u679c\u5c55\u793a\uff1a\n\n![2](https://image.joinquant.com/88e0de9b43424e3b7b1ab1fe48514625)\n\n## \u83b7\u53d6\u805a\u5bbd\u56e0\u5b50\u5e93\u6570\u636e\u7684\u65b9\u6cd5\n\n1. [\u805a\u5bbd\u56e0\u5b50\u5e93](https://www.joinquant.com/help/api/help?name=factor_values)\u5305\u542b\u6570\u767e\u4e2a\u8d28\u91cf\u3001\u60c5\u7eea\u3001\u98ce\u9669\u7b49\u5176\u4ed6\u7c7b\u76ee\u7684\u56e0\u5b50\n\n2. \u8fde\u63a5jqdatasdk\u83b7\u53d6\u6570\u636e\u5305\uff0c\u6570\u636e\u63a5\u53e3\u9700\u8c03\u7528\u805a\u5bbd [`jqdatasdk`](https://github.com/JoinQuant/jqdatasdk/blob/master/README.md) \u63a5\u53e3\u83b7\u53d6\u91d1\u878d\u6570\u636e([\u8bd5\u7528\u6ce8\u518c\u5730\u5740](http://t.cn/EINDOxE))\n\n ```python\n # \u83b7\u53d6\u56e0\u5b50\u6570\u636e\uff1a\u4ee55\u65e5\u5e73\u5747\u6362\u624b\u7387\u4e3a\u4f8b\uff0c\u8be5\u6570\u636e\u53ef\u4ee5\u76f4\u63a5\u7528\u4e8e\u56e0\u5b50\u5206\u6790\n # \u5177\u4f53\u4f7f\u7528\u65b9\u6cd5\u53ef\u4ee5\u53c2\u7167jqdatasdk\u7684API\u6587\u6863\n import jqdatasdk\n jqdatasdk.auth('username', 'password')\n # \u83b7\u53d6\u805a\u5bbd\u56e0\u5b50\u5e93\u4e2d\u7684VOL5\u6570\u636e\n factor_data=jqdatasdk.get_factor_values(\n securities=jqdatasdk.get_index_stocks('000300.XSHG'),\n factors=['VOL5'],\n start_date='2018-01-01',\n end_date='2018-12-31')['VOL5']\n ```\n\n\n\n## \u5c06\u81ea\u6709\u56e0\u5b50\u503c\u8f6c\u6362\u6210 DataFrame \u683c\u5f0f\u7684\u6570\u636e\n\n* index \u4e3a\u65e5\u671f\uff0c\u683c\u5f0f\u4e3a pandas \u65e5\u671f\u901a\u7528\u7684 DatetimeIndex\n\n* columns \u4e3a\u80a1\u7968\u4ee3\u7801\uff0c\u683c\u5f0f\u8981\u6c42\u7b26\u5408\u805a\u5bbd\u7684\u4ee3\u7801\u5b9a\u4e49\u89c4\u5219\uff08\u5982\uff1a\u5e73\u5b89\u94f6\u884c\u7684\u80a1\u7968\u4ee3\u7801\u4e3a 000001.XSHE\uff09\n * \u5982\u679c\u662f\u6df1\u4ea4\u6240\u4e0a\u5e02\u7684\u80a1\u7968\uff0c\u5728\u80a1\u7968\u4ee3\u7801\u540e\u9762\u9700\u8981\u52a0\u5165.XSHE\n * \u5982\u679c\u662f\u4e0a\u4ea4\u6240\u4e0a\u5e02\u7684\u80a1\u7968\uff0c\u5728\u80a1\u7968\u4ee3\u7801\u540e\u9762\u9700\u8981\u52a0\u5165.XSHG\n\n* \u5c06 pandas.DataFrame \u8f6c\u6362\u6210\u6ee1\u8db3\u683c\u5f0f\u8981\u6c42\u6570\u636e\u683c\u5f0f\n\n \u9996\u5148\u8981\u4fdd\u8bc1 index \u4e3a `DatetimeIndex` \u683c\u5f0f\n\n \u4e00\u822c\u662f\u901a\u8fc7 pandas \u63d0\u4f9b\u7684 [`pandas.to_datetime`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html) \u51fd\u6570\u8fdb\u884c\u8f6c\u6362, \u5728\u8f6c\u6362\u524d\u5e94\u786e\u4fdd index \u4e2d\u7684\u503c\u90fd\u4e3a\u5408\u7406\u7684\u65e5\u671f\u683c\u5f0f, \u5982 `'2018-01-01'` / `'20180101'`, \u4e4b\u540e\u518d\u8c03\u7528 `pandas.to_datetime` \u8fdb\u884c\u8f6c\u6362\n\n \u53e6\u5916\u5e94\u786e\u4fdd index \u7684\u65e5\u671f\u662f\u6309\u7167\u4ece\u5c0f\u5230\u5927\u7684\u987a\u5e8f\u6392\u5217\u7684, \u53ef\u4ee5\u901a\u8fc7 [`sort_index`](https://pandas.pydata.org/pandas-docs/version/0.23.3/generated/pandas.DataFrame.sort_index.html) \u8fdb\u884c\u6392\u5e8f\n\n \u6700\u540e\u8bf7\u68c0\u67e5 columns \u4e2d\u7684\u80a1\u7968\u4ee3\u7801\u662f\u5426\u90fd\u6ee1\u8db3\u805a\u5bbd\u7684\u4ee3\u7801\u5b9a\u4e49\n\n ```python\n import pandas as pd\n\n sample_data = pd.DataFrame(\n [[0.84, 0.43, 2.33, 0.86, 0.96],\n [1.06, 0.51, 2.60, 0.90, 1.09],\n [1.12, 0.54, 2.68, 0.94, 1.12],\n [1.07, 0.64, 2.65, 1.33, 1.15],\n [1.21, 0.73, 2.97, 1.65, 1.19]],\n index=['2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-08'],\n columns=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE']\n )\n\n print(sample_data)\n\n factor_data = sample_data.copy()\n # \u5c06 index \u8f6c\u6362\u4e3a DatetimeIndex\n factor_data.index = pd.to_datetime(factor_data.index)\n # \u5c06 DataFrame \u6309\u7167\u65e5\u671f\u987a\u5e8f\u6392\u5217\n factor_data = factor_data.sort_index()\n # \u68c0\u67e5 columns \u662f\u5426\u6ee1\u8db3\u805a\u5bbd\u80a1\u7968\u4ee3\u7801\u683c\u5f0f\n if not sample_data.columns.astype(str).str.match('\\d{6}\\.XSH[EG]').all():\n print(\"\u6709\u4e0d\u6ee1\u8db3\u805a\u5bbd\u80a1\u7968\u4ee3\u7801\u683c\u5f0f\u7684\u80a1\u7968\")\n print(sample_data.columns[~sample_data.columns.astype(str).str.match('\\d{6}\\.XSH[EG]')])\n\n print(factor_data)\n ```\n\n* \u5c06\u952e\u4e3a\u65e5\u671f, \u503c\u4e3a\u5404\u80a1\u7968\u56e0\u5b50\u503c\u7684 `Series` \u7684 `dict` \u8f6c\u6362\u6210 `pandas.DataFrame`\n\n \u53ef\u4ee5\u76f4\u63a5\u5229\u7528 `pandas.DataFrame` \u751f\u6210\n\n ```python\n sample_data = \\\n {'2018-01-02': pd.Seris([0.84, 0.43, 2.33, 0.86, 0.96],\n index=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE']),\n '2018-01-03': pd.Seris([1.06, 0.51, 2.60, 0.90, 1.09],\n index=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE']),\n '2018-01-04': pd.Seris([1.12, 0.54, 2.68, 0.94, 1.12],\n index=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE']),\n '2018-01-05': pd.Seris([1.07, 0.64, 2.65, 1.33, 1.15],\n index=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE']),\n '2018-01-08': pd.Seris([1.21, 0.73, 2.97, 1.65, 1.19],\n index=['000001.XSHE', '000002.XSHE', '000063.XSHE', '000069.XSHE', '000100.XSHE'])}\n\n import pandas as pd\n # \u76f4\u63a5\u8c03\u7528 pd.DataFrame \u5c06 dict \u8f6c\u6362\u4e3a DataFrame\n factor_data = pd.DataFrame(data).T\n\n print(factor_data)\n\n # \u4e4b\u540e\u8bf7\u6309\u7167 DataFrame \u7684\u65b9\u6cd5\u8f6c\u6362\u6210\u6ee1\u8db3\u683c\u5f0f\u8981\u6c42\u6570\u636e\u683c\u5f0f\n ```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.joinquant.com", "keywords": "", "license": "Apache License v2", "maintainer": "", "maintainer_email": "", "name": "jqfactor-analyzer", "package_url": "https://pypi.org/project/jqfactor-analyzer/", "platform": "all", "project_url": "https://pypi.org/project/jqfactor-analyzer/", "project_urls": { "Homepage": "https://www.joinquant.com" }, "release_url": "https://pypi.org/project/jqfactor-analyzer/1.0.5/", "requires_dist": [ "six", "fastcache (>=1.0.2)", "SQLAlchemy (>=1.2.8)", "cached-property (>=1.5.1)", "statsmodels", "scipy", "numpy (>=1.9.2)", "pandas (>=0.16.2)", "matplotlib", "seaborn", "jqdatasdk" ], "requires_python": "", "summary": "JoinQuant single factor analyzer", "version": "1.0.5" }, "last_serial": 5962552, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "4935eff188d8e273c3f0a0b8e3bbf7d4", "sha256": "c0c82f0bf315aa5477e73c429e7a5006a541e8b654b0e1d588024b198d41b48c" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4935eff188d8e273c3f0a0b8e3bbf7d4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 38709, "upload_time": "2019-03-06T11:25:45", "url": "https://files.pythonhosted.org/packages/0f/7b/c22a51172a83cea1585071b552664bb8a0803c7707eb0d53e461f37c291b/jqfactor_analyzer-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9b8dc80bf82788033dab2fc5ad975553", "sha256": "95d283b2db10ef20a4cf348c57d3b9e772349cb8ccd03126426826e2ad3454dc" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9b8dc80bf82788033dab2fc5ad975553", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39672, "upload_time": "2019-03-06T11:25:48", "url": "https://files.pythonhosted.org/packages/a2/2f/aa15bed398861f0b5bb2e5ffc6f79996bb1d55ed9c49ed2c4f03c95a7d40/jqfactor_analyzer-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a51cd49d26700395658418cae327c462", "sha256": "cdd61a8eb950e103eb92e789a1a335fedf6aec0c4198c610e0b1c91d20d11f7f" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.1-py3.6.egg", "has_sig": false, "md5_digest": "a51cd49d26700395658418cae327c462", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 298848, "upload_time": "2019-03-08T04:30:46", "url": "https://files.pythonhosted.org/packages/f3/2a/9c9158749dfd616a9677a77babe10bffc8d8eb660108ff85cc031bf8ea83/jqfactor_analyzer-1.0.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "b2663bcc6b181ff163c2a95fd62214b7", "sha256": "a65dacba946354b43e4ef5311f3c265f11b1df60a0ca7234c974473bda0f6f03" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b2663bcc6b181ff163c2a95fd62214b7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 252828, "upload_time": "2019-03-08T04:30:44", "url": "https://files.pythonhosted.org/packages/5d/f9/838461e507bb1e524ed4e1db0089c2f11632ebdf2c99a4137e6770b63537/jqfactor_analyzer-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2bd7d2e458bd8eecf3441e1aa195f65c", "sha256": "baf278f94dded33729b7cc8c49fd43231b23b532872d04e173ff3bc77279c294" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2bd7d2e458bd8eecf3441e1aa195f65c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 246628, "upload_time": "2019-03-08T04:30:48", "url": "https://files.pythonhosted.org/packages/8c/a3/e966585b302eb0943b7d06e10e7a63237774fab5ff346f584dd6c79edf7f/jqfactor_analyzer-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4836e1a5737c4499df110dec3f1706ff", "sha256": "3d859571e3df10bec084c8d1975fa969f95d7a7ce6a20da8751760d216b99ba9" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4836e1a5737c4499df110dec3f1706ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 253728, "upload_time": "2019-03-21T04:47:36", "url": "https://files.pythonhosted.org/packages/e5/a1/2f09bff22a7dbd184c25ac12b7223f503da9fe505fd4ed43074f0b1e5499/jqfactor_analyzer-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3f8f13109e609870fc0175890352411", "sha256": "7cfc59d2f9bc1b0293ef85ffbf97fe4a783cf4c838254986350dd87818153152" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d3f8f13109e609870fc0175890352411", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 249967, "upload_time": "2019-03-21T04:47:39", "url": "https://files.pythonhosted.org/packages/99/e2/ddbf9465bc3ef6af6864976f5623aa80b0f548d81b3c1df694ba7673247e/jqfactor_analyzer-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "353216b460ec3575a23bade61bd007f2", "sha256": "8dc919e55e08e34a95aa68e9cfe20cacaee1d393ad5196b185a8fa6960f8721c" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "353216b460ec3575a23bade61bd007f2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 255100, "upload_time": "2019-09-16T11:31:50", "url": "https://files.pythonhosted.org/packages/35/1d/a6022f0b9b8db780c05b2fdc50f8332cb7511d42f650bca2dc2b0d0de96c/jqfactor_analyzer-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80066efcef1fa0b2aa348528d383d566", "sha256": "ed225842aec29d1e9a5f667e573bf237944cbf4ed4a96e6c7abf1b17cb82f0cf" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.3.tar.gz", "has_sig": false, "md5_digest": "80066efcef1fa0b2aa348528d383d566", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 251679, "upload_time": "2019-09-16T11:35:24", "url": "https://files.pythonhosted.org/packages/1d/1d/431c23201d5d615e9736a20602f577c338629472b5b247414d13c890a62d/jqfactor_analyzer-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "948747864f2bb0ac30f348e77058ef76", "sha256": "e250655b3263a871353a374bd40b07eed2dc26c1b2bfe16aff27eb680cad718f" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "948747864f2bb0ac30f348e77058ef76", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 255933, "upload_time": "2019-10-09T02:42:12", "url": "https://files.pythonhosted.org/packages/0b/d8/d271e34165fc7dd81b7a970131c275705dc662131eaa56215347e31e897b/jqfactor_analyzer-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9eaf8ca8d8952144da4d3fda9ca215e9", "sha256": "795409e35d767bcdd98c30e6ba615c475356d8781bdd0bc1c2968190c3fc4587" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.4.tar.gz", "has_sig": false, "md5_digest": "9eaf8ca8d8952144da4d3fda9ca215e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 251686, "upload_time": "2019-10-09T02:42:16", "url": "https://files.pythonhosted.org/packages/f4/fe/be7f7285809d497c4fed9636b5ae112a2b8b66d0379bfc1a2f21c7e8484c/jqfactor_analyzer-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "81feb07d99f0f347911dd208e5f9e45c", "sha256": "a2b81b96bc04ec83d953425e3b90bc93b3e65e9313fe51a75ad915ec8a02873a" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81feb07d99f0f347911dd208e5f9e45c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 255967, "upload_time": "2019-10-12T01:39:46", "url": "https://files.pythonhosted.org/packages/88/b8/63bf7b27d9efdb7651282eef445663f426da7869f3c478e32db9eab24511/jqfactor_analyzer-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "184e2509b568008430a91adfaa9ab027", "sha256": "f93e1f50a72bbfca7c7f6c07a652be26eb237266509a6d67e08990a41abcec63" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.5.tar.gz", "has_sig": false, "md5_digest": "184e2509b568008430a91adfaa9ab027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 251724, "upload_time": "2019-10-12T01:39:51", "url": "https://files.pythonhosted.org/packages/3e/e4/d04d15794317ac1f52771a7cd8c27f692bf9650e6219f93b776f36b8fc65/jqfactor_analyzer-1.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81feb07d99f0f347911dd208e5f9e45c", "sha256": "a2b81b96bc04ec83d953425e3b90bc93b3e65e9313fe51a75ad915ec8a02873a" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81feb07d99f0f347911dd208e5f9e45c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 255967, "upload_time": "2019-10-12T01:39:46", "url": "https://files.pythonhosted.org/packages/88/b8/63bf7b27d9efdb7651282eef445663f426da7869f3c478e32db9eab24511/jqfactor_analyzer-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "184e2509b568008430a91adfaa9ab027", "sha256": "f93e1f50a72bbfca7c7f6c07a652be26eb237266509a6d67e08990a41abcec63" }, "downloads": -1, "filename": "jqfactor_analyzer-1.0.5.tar.gz", "has_sig": false, "md5_digest": "184e2509b568008430a91adfaa9ab027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 251724, "upload_time": "2019-10-12T01:39:51", "url": "https://files.pythonhosted.org/packages/3e/e4/d04d15794317ac1f52771a7cd8c27f692bf9650e6219f93b776f36b8fc65/jqfactor_analyzer-1.0.5.tar.gz" } ] }