{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "# 数据清洗之推特数据\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 数据清洗(data cleaning)\n", "是数据分析的重要步骤,其主要目标是将混杂的数据清洗为可以被直接分析的数据,一般需要将数据转化为数据框(data frame)的样式。\n", "\n", "本章将以推特文本的清洗作为例子,介绍数据清洗的基本逻辑。\n", "\n", "- 清洗错误行\n", "- 正确分列\n", "- 提取所要分析的内容\n", "- 介绍通过按行、chunk的方式对大规模数据进行预处理\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 同时考虑分列符和引用符\n", "\n", "- 分列符🔥分隔符:sep, delimiter\n", "- 引用符☁️:quotechar\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:07:10.567235Z", "start_time": "2023-11-17T07:07:10.551054Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# 提示:你可能需要修改以下路径名\n", "with open(\"./data/ows_tweets_sample.txt\", 'r') as f:\n", " chunk = f.readlines()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:07:14.434792Z", "start_time": "2023-11-17T07:07:14.425674Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "2754" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(chunk)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:07:29.063364Z", "start_time": "2023-11-17T07:07:29.035705Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2628\n" ] } ], "source": [ "import csv\n", "lines_csv = csv.reader(chunk, delimiter=',', quotechar='\"') \n", "print(len(list(lines_csv)))\n", "# next(lines_csv)\n", "# next(lines_csv)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:07:57.675044Z", "start_time": "2023-11-17T07:07:57.170877Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Twitter IDTextProfile Image URLDayHourMinuteCreated AtGeoFrom UserFrom User IDLanguageTo UserTo User IDSource
0121813144174727168RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLIN...http://a2.twimg.com/profile_images/1539375713/...2011-10-06542011-10-06 05:04:51N;Anonops_Cop401240477enNaN0<a href="http://twitter.com/">...
1121813146137657344@jamiekilstein @allisonkilkenny Interesting in...http://a2.twimg.com/profile_images/1574715503/...2011-10-06542011-10-06 05:04:51N;KittyHybrid34532053enjamiekilstein2149053<a href="http://twitter.com/">...
2121813150000619521@Seductivpancake Right! Those guys have a vict...http://a1.twimg.com/profile_images/1241412831/...2011-10-06542011-10-06 05:04:52N;nerdsherpa95067344enSeductivpancake19695580<a href="http://www.echofon.com/"...
\n", "
" ], "text/plain": [ " Twitter ID Text \\\n", "0 121813144174727168 RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLIN... \n", "1 121813146137657344 @jamiekilstein @allisonkilkenny Interesting in... \n", "2 121813150000619521 @Seductivpancake Right! Those guys have a vict... \n", "\n", " Profile Image URL Day Hour \\\n", "0 http://a2.twimg.com/profile_images/1539375713/... 2011-10-06 5 \n", "1 http://a2.twimg.com/profile_images/1574715503/... 2011-10-06 5 \n", "2 http://a1.twimg.com/profile_images/1241412831/... 2011-10-06 5 \n", "\n", " Minute Created At Geo From User From User ID Language \\\n", "0 4 2011-10-06 05:04:51 N; Anonops_Cop 401240477 en \n", "1 4 2011-10-06 05:04:51 N; KittyHybrid 34532053 en \n", "2 4 2011-10-06 05:04:52 N; nerdsherpa 95067344 en \n", "\n", " To User To User ID \\\n", "0 NaN 0 \n", "1 jamiekilstein 2149053 \n", "2 Seductivpancake 19695580 \n", "\n", " Source \n", "0 <a href="http://twitter.com/">... \n", "1 <a href="http://twitter.com/">... \n", "2 <a href="http://www.echofon.com/"... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "df = pd.read_csv(\"./data/ows_tweets_sample.txt\",\n", " sep = ',', quotechar='\"')\n", "df[:3]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:08:02.149131Z", "start_time": "2023-11-17T07:08:02.145843Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "2627" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df) " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:08:52.981486Z", "start_time": "2023-11-17T07:08:52.976558Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "'RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE RT !!HELP!!!!'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#df.columns #\n", "df['Text'][0]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:10:19.924927Z", "start_time": "2023-11-17T07:10:19.917805Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "0 Anonops_Cop\n", "1 KittyHybrid\n", "2 nerdsherpa\n", "3 hamudistan\n", "4 kl_knox\n", "5 vickycrampton\n", "6 burgerbuilders\n", "7 neverfox\n", "8 davidgaliel\n", "9 AnonOws\n", "Name: From User, dtype: object" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['From User'][:10]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 统计发帖数量所对应的人数的分布\n", "> 人数在发帖数量方面的分布情况" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:11:26.784098Z", "start_time": "2023-11-17T07:11:26.780421Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from collections import defaultdict\n", "data_dict = defaultdict(int)\n", "for i in df['From User']:\n", " data_dict[i] +=1 " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:11:32.344723Z", "start_time": "2023-11-17T07:11:32.340738Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[('Anonops_Cop', 1),\n", " ('KittyHybrid', 1),\n", " ('nerdsherpa', 2),\n", " ('hamudistan', 1),\n", " ('kl_knox', 1)]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(data_dict.items())[:5]\n", "#data_dict" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:12:35.074285Z", "start_time": "2023-11-17T07:12:34.057696Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import pylab as plt\n", "\n", "plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 用来正常显示中文标签\n", "plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号, 注意['SimHei']对应这句不行.\n", "\n", "plt.style.use('ggplot') " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:13:15.957926Z", "start_time": "2023-11-17T07:13:15.273134Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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ZTabNXnyZGVnZ2v58uWy2+368ccftXDhQp07d07Tp09XmzZtrnnO7777Tnv27JFUfZWUEWPGjNG6desUFRUlHx8frVixQuvWrdO6deu0atUqBQcH15he5JZbbtHAgQP1xRdfKDs7W0OHDm22K8LgnmhxAD9z9OhRbdq0Sd27d9fAgQMd+7t27arnn39e//znP1VSUqJLly7p0KFDeuGFFxz3alzLqVOntHv3bnXq1KnGnFf1lZ2drW3btumee+5RRUWFY39SUpKKioquavFERUUpJSVFJpNJjz32mOHXA66F4AB+cvHiRS1evFienp6aMmWKY7D5ikGDBunQoUPasWOHJOnxxx/XgAEDaj3Xc889px49eji2H3zwQY0dO1ZBQUFXnbc+unfvrmnTpmnjxo2aNm2aIiMj5ePjo9TUVL344os17tGw2Wx6//33JVVPgrhixQq98sorNebfAm4EwQGoehLC+fPn68yZM5o6dWqNqT9+/PFHff7550pJSdF3332nrl27ym63a+vWrcrJydGIESMUGRlZ44P5ylVM58+flyS1bt1awcHBNV7z8uXL+vbbb2ut5/LlyzW2zWazHn74YT344IP64IMPtG7dOknV82L5+fk5nmez2fTWW28pMzNTo0aN0rlz57Rnzx69++67io+PV6tWrRr+RwJ+QnAAklavXq0jR47oqaee0oABA1RWVqbMzEx9+eWX+uqrr1RWVqaQkBBNmTLF0cr473//q7Vr1+rtt9/WypUrde+99yosLEz33XefAgMDr/ua58+f15/+9Kc6H7/77rsdP9vtdn333XdKSUnRnj17FBgYqMcee0zbtm3T3LlzNXz4cA0fPlxvvvmmDh8+rJiYGP3mN7+RzWZTcXGxdu3apRMnTmjatGm13iEPGEFwAJJGjBghX19fjRkzRmfOnFFCQoIqKipkNpsVHh6uxx9/XPfff3+NVsWAAQPUv39/bd++XVu3btXevXuVkZGh7t271ys42rdvr9dee63Wx/72t785ft68ebM+/PBDFRUVqV27dhozZoxiYmLk5eWl4cOHKyUlRR06dNArr7yioqIijRkzxnGZr6enp2bNmqVly5Zp165dWrt2rWbNmnWDfy20dCb7z9ecBCCp+j6OsrIy9e/fv0ZX0LUcPnxYVVVVNS59raqqUkFBgXx9fWt0E5WXl6uyslK33nrrdc974MAB7dixQ/3795fFYqn1qqyqqiolJiYqMjKy1okSJSk1NVV9+vRhzircMIIDAGAIl1kAAAwhOAAAhhAcAABDCA4AgCEEBwDAEIIDAGAIwQEAMITgAAAY8v+D9CDAIDXIogAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(data_dict.values())\n", "plt.yscale('log')\n", "plt.xscale('log')\n", "plt.xlabel(u'发帖数', fontsize = 20)\n", "plt.ylabel(u'人数', fontsize = 20)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:14:19.854819Z", "start_time": "2023-11-17T07:14:19.391617Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjF0lEQVR4nO3de1SUdf4H8PcMA85Y3C/FgK2RlBgXXcbxuplGu0Ks5aSUGdZxF8eT0uVYI1ttp45rTWyZebRNt/WYrLnHy2SsKbZkyVHWDBJSUrG8oGDSIAwQQ7MD8/uDH5PEjPCMDzPD8H79N1+ey0eOD+/5Pt/n+X4lNpvNBiIion6SeroAIiIaXBgcREQkCIODiIgEYXAQEZEgDA4iIhKEwUFERIIwOIiISBCZpwtwl7q6Opf2i4iIgNFoFLkaInInXseuUSqVDtvZ4yAiIkEYHEREJAiDg4iIBPGqMQ6LxQKj0ej0vhoA1NbWYt++fbh06RIee+wxxMbGurFCIiLyiuBoa2vD2rVrUVVVhUmTJmHx4sUAgNLSUmzZsgVSqRSzZ8/GjBkzEBMTg4ULF+LQoUM4e/Ysg4OIyM284laVVCpFeno6FixYYG8zm80oKCjAihUrsGLFCmzduhXNzc0AgM2bN+OTTz5BUlLSgNVkMCigVkdBLveHWh0Fg0ExYOciIhpMvCI45HI5kpKS4OfnZ2+rrKxEQkICwsLCEBISgsTERBw7dgwAsGDBAmi1WuzatWtA6jEYFNDpglFbK4PNJkFtrQw6XTDDg4gIXnKryhGj0YjIyEj75/DwcDQ2NqK8vBxfffUVWlpakJmZOSDn1usDYTb3zFSzWQq9PhAajXlAzklENFh4bXBYrVZIJBL7Z4lEAqlUitTUVKSmpva5f3FxMYqLiwEAer0eERER/T53XZ2f03YhxyEi7yCTyXjtishrgyM0NBRVVVX2zw0NDYiPj+/3/mlpaUhLS7N/FvLWqFIZhdra3r8apbKDb58SDUJ8c9w1g+7N8ZSUFFRWVsJkMqGpqQnV1dVITk52y7nz8lqgUHT2aFMoOpGX1+KW8xMReTOJN6w5bjabodPp0N7eDovFgqCgIGi1WhiNRuzcuRMAkJ2dDbVaLei4ZWVlKC8vh1arFTxXlcGggF4fiLo6PyiVHcjLa+H4BtEgxR6Ha5z1OLwiONyBkxwSDV28jl0z6G5VERGRd/Lp4CgrK8P69es9XQYRkU/x2qeqxKBSqaBSqTxdBhGRT/HpHgcREYmPwUFERIL4dHBwjIOISHwc4yAiIkF8usdBRETiY3AQEZEgPh0cHOMgIhIfxziIiEgQn+5xEBGR+BgcREQkCIODiIgE8eng4OA4EZH4ODhORESC+HSPg4iIxMfgICIiQRgcREQkCIODiIgEYXAQEZEgPh0cfByXiEh8fByXiIgE8ekeBxERiY/BQUREgjA4iIhIEAYHEREJwuAgIiJBGBxERCSITwcH3+MgIhIf3+MgIiJBfLrHQURE4mNwEBGRIAwOIiIShMFBRESCMDjIZQaDAmp1FGJjo6FWR8FgUHi6JCJyA59+qooGjsGggE4XDLO567tHba0MOl0wAECjMXuyNCIaYOxxkEv0+kB7aHQzm6XQ6wM9VBERuQuDg1xSV+cnqJ2IfAeDg1yiVHYIaici38HgIJfk5bVAoejs0aZQdCIvr8VDFRGRu/h0cHCuqoGj0ZiRn29CTIwVEokNMTFW5OebODBONARIbDabzdNFuENdXZ1L+0VERMBoNIpcDRG5E69j1yiVSoftPt3jICIi8TE4iIhIEAYHEREJwuAgIiJBGBxERCQIg4OIiARhcBARkSAMDiIiEoTBQUREgjA4iIhIEAYHEREJwuAgIiJBGBxERCSIV605brFYYDQanc7ICADfffcdDhw4AKPRiLvuugsTJ050Y4VEROQVwdHW1oa1a9eiqqoKkyZNwuLFiwEApaWl2LJlC6RSKWbPno0ZM2bg1ltvxW233YbW1lZs2rSJwUFE5GZeERxSqRTp6elITU3F6dOnAQBmsxkFBQVYuXIlpFIpnnvuOahUKgQFBQEACgsLkZGR4cmyiYiGJK8Y45DL5UhKSoKfn5+9rbKyEgkJCQgLC0NISAgSExNx7NgxdHR0oKCgAKmpqYiLi/Ng1UREQ5NX9DgcMRqNiIyMtH8ODw9HY2Mjtm7diurqajQ3N+PChQtIS0vzYJVEREOP1waH1WqFRCKxf5ZIJJBKpXj00Uf7tX9xcTGKi4sBAHq9HhERES7VIZPJXN6XiLwDr2NxeW1whIaGoqqqyv65oaEB8fHx/d4/LS2tR2/E1fWGuVaxbzAYFNDrA1FX5welsgN5eS3QaMyeLovchNexawbdmuMpKSmorKyEyWRCU1MTqqurkZyc7OmyaBAyGBTQ6YJRWyuDzSZBba0MOl0wDAaFp0sjGpQkNpvN5ukizGYzdDod2tvbYbFYEBQUBK1WC6PRiJ07dwIAsrOzoVarBR23rKwM5eXl0Gq1qKurc6k2flMZ/NTqKNTW9u5cx8RYceRIvQcqInfjdewaZz0OrwgOd2BwDF2xsdGw2SS92iUSGy5evOSBisjdeB27ZtDdqiISi1LZIaidiK7Np4OjrKwM69ev93QZ5GF5eS1QKDp7tCkUncjLa/FQRUSDm9c+VSUGlUoFlUrl6TLIw7qfnuJTVUTi8OngIOqm0ZgZFEQi8elbVUREJD6fDg6OcRARic+nb1VxjIOISHw+3eMgIiLxMTiIiEgQnw4OjnEQEYmvX8Gxbt06nDp1StCBL1y4gPz8fFy5csWlwsSgUqmg1Wo9dn4iIl/Ur8Hx0tJSyGQytLW1ITIyEjfffDNkMue7Wq1WrFmzBjU1NVCpVJgxY4ZoBRMRkWf1+6mq/fv3Y//+/V07yWS45ZZbcPvtt2P8+PEYM2YMpNKuzovNZsO7776LmpoaTJs2jaFBRORj+h0c8+fPx2233Qaj0Yjz58/j7NmzKC4uRlFREYKCgjBz5kzcc8892LBhA8rLy5GcnIycnJyBrJ2IiDyg38ERFhaGO++8s0dbe3s7ysvLUVRUhG3btmH79u2w2WyYMmUKnnjiiWveznKHq9fjIPIErjxIvsjhX/aysjK0tbUhOTkZISEhTneWy+WIjIxEaGgogK7bVAD6HANxF74ASJ7UvfKg2dx1G7d75UEADA8a1Bz+dT906BBKS0sBACNGjEBnZyfMZjNaW1tRX1+PmpoaVFdXo6KiAg0NDZDL5Zg5cybS0tKwadMm7Ny5E+3t7ViwYIFb/zFE3kSvD7SHRjezWQq9PpDBQYOawxUAOzs7ceHCBZw6dQrl5eU4fvw4rFbrzztJJIiMjMTo0aMxduxYjB8/HgEBAQCAjo4OrFq1CmVlZXjooYeg0Wjc96+5Bq4ASO7GlQe9B69j11zX0rGtra34z3/+g6KiIjQ1NUGtVmPRokUIDAx0uL3VasWKFStQXV2NP/3pT0hOTr6+6kXA4CB341rn3oPXsWsELx1bWlqKS5d+/lYUGBiIN954A/fffz/a29vR0eF82U2ZTIZly5YhKCjIfsuLaKjhyoPkq5wGx65du/D888/j66+/htFoxN///nd0dnbikUceQWBgIN566y0AwOXLl5Gbm4sNGzagoaHBvv+///1vLF68mE800ZCl0ZiRn29CTIwVEokNMTFW5OebOL5Bg57T4Hj55ZeRkJCA119/vce0IUVFRSgtLcV9990HoGtMo76+HpWVlXj66adx+PBhfPPNNygsLMTFixchkfS+x+sunKuKPE2jMePIkXpcvHgJR47UMzTIJzh9Znb48OHQ6XSorq62D3xfunQJBQUFeOSRR6BWq3tsv2rVKmzevBmrV69GWFgYIiIikJ6ePrDV94GP4xIRic9hcJSUlODo0aP2z21tbQC6bj8NGzYMZ8+exZo1a/Dkk0/atxk2bBhycnLg5+eHffv24aGHHvKKdzmIiEhcDv+yNzc34/vvv7d/tlgsALpu/URFRdl/duDAAfvPuv34448AgE8//RT33Xcfhg0bNiCFExGRZzgMjszMTGRmZgLoGsO4cOECli9fjvj4eLS1teH5559HYGAg8vLycPbsWQBdj+y2t7fjv//9L7KysrBjxw7s3bsXDzzwgNv+MURENPCuuR7H9u3b8corr6Czs+uRwiVLlsBms+HVV1/FTz/9hL/85S/Izs4GADz11FN45513EB0dDY1Gg8mTJ2PPnj32fYmIyDc4DY5Vq1Zhx44dGDVqlH0Oqu4B84sXL2Ljxo2QyWT49a9/DQCYOHEiqqqqoNFoIJFIMHPmTJhMJpSVlbnnX0I0xBgMCqjVUYiNjYZaHQWDQeHpkmiIcDp6PX78eKSlpSE5ORnnzp2zt0dHR2POnDn44IMPkJqaitjYWABATk4Opk2bhvj4eABAfHw8goODcfjw4V5PYBHR9eEEiuRJ/ZpypL29HSdPnkRSUhL8/PzQ2dmJrVu34ve//z0kEgmKioowd+7cHvt88sknsFgsGDFiBFJSUgbsH3AtV0+rzilHyJdwOhNheB275rrmqhKqpqYGOp0O0dHReO211yCXy8U+hWAMDvIlnEBRGF7HrhE8V5WrrFYr1q1bB5vNhujoaK8IDSJfo1Q6nivOWTuRmEQPjvfeew/nzp1DWFgY56kiGiCcQJE8SdRXuzdu3IjPPvsMN9xwA5YvX47g4GAxD09E/697AJzL0pIniBIcbW1tePvtt1FRUYHg4GDk5eVh5MiRYhyaiJzQaMwMCvKI675VVVpaimeeeQYVFRUYPXo09Ho94uLixKiNiNyI74VQf7nc4ygrK4PBYMB3332HG2+8EQsXLsRvf/tbj06jTkSu4XshJITD4LDZbA4DoKamBocPH8aBAwdgNBoRHByMuXPnIiMjA8OHDx/wYoloYOj1gfbQ6GY2S6HXBzI4qBeHwVFWVobVq1cjNDQUoaGhCAoKwpkzZ3DlyhUEBARg3LhxyM7Oxvjx4+Hn5+fumolIZHV1jq9jZ+00tDkc4wgLC0NCQgJuuOEG1NfXo6yszL4KoNVqRUtLC5qammA285sIkS/geyEkRL/eHG9ra8P58+dx5swZfPXVVzhx4gQ6Ojrg7++PqVOnQqPRICoqyh31uoxvjhM598sxDqDrvRBfWSOd17FrRJ1yxGw2o6SkBHv37sWlS5fg5+eH++67D1lZWfD397/uYsXCuaqI+s9gUPjseyG8jl0zYHNVHTx4EJs3b4bJZIJSqcSzzz6LmJiY6znkgGBwEA1dvI5dM2BzVU2dOhVvv/02fvOb36Curg4vvPACjh8/fr2HJSIiLyXKXFUKhQJLly7FvHnzYDab8frrr+Obb74R49BERORlRJ3k8IEHHsBjjz0Gi8WCN998E5cvXxbz8ERE5AVEnx03IyMDmZmZaG1txZo1a7jmOBGRjxE9OABg/vz5GDlyJM6dO9dj2VkiIhr8RJ1WvZtUKsXSpUvR1tbGCQ+JiHzMgAQHAIwYMWKgDk1ERB40ILeqiIjIdzE4iIhIEAYHEREJwuAgIiJBGBxERCQIg4OIROHqmuVC9+Pa6J43YI/jDhSr1WpfD2Ts2LGeLoeI4Pqa5UL349ro3sGrehwWi6XP6c9rampw5swZVFRUuKcoIurTtdYsF3M/V89D4vKK4Ghra0N+fj5ycnJQWFhoby8tLcWSJUuQm5uL/fv3AwDi4uIwadIkT5VKRA64uma50P24Nrp38IrgkEqlSE9Px4IFC+xtZrMZBQUFWLFiBVasWIGtW7eiubnZg1USkTOurlkudD+uje4dvGKMQy6XIykpCZ9//rm9rbKyEgkJCQgLCwMAJCYm4tixY5gyZUq/jllcXIzi4mIAgF6vR0REhEu1yWQyl/clGipWrgSeeMKGtjaJvW34cBtWrsQ1rx+h+7l6Hl7H4vKK4HDEaDQiMjLS/jk8PByNjY04d+4cCgsLUVNTg927dyMzM9Ph/mlpaUhLS+txPFdwyUmivt17L/D6673XLL/3XjOudfkI3c/V8/A6do2zpWO9NjisViskkp+/VUgkEkilUowcORJPPvmkBysjIkc0GrNLTzYJ3c/V85B4vGKMw5HQ0FBcuXLF/rmhoUFwV7OsrAzr168XuzQioiHNa4MjJSUFlZWVMJlMaGpqQnV1NZKTkwUdQ6VSQavVDlCFRERDk1fcqjKbzdDpdGhvb4fFYkFVVRW0Wi3mzZuHF198EQCwYMECyOVyD1dKREQSm81m83QR7tDXi4XOcFCNaPDjdewaZ4PjXnurSgwc4yAiEp9X3KoaKCqVCiqVytNlEBH5FJ/ucRARkfgYHEREJIhPBwfHOIiIxMcxDiIiEsSnexxERCQ+BgcREQni08HBMQ4iIvFxjIOIiATx6R4HEQ1tBoMCanUU5HJ/qNVRMBgUni7JJ/h0j4OIhi6DQQGdLhhmc9f349paGXS6YADgeh7XiT0OIvJJen2gPTS6mc1S6PWBHqrId/h0cHBwnGjoqqvzE9RO/efTt6o4OE40dCmVHait7f0nTqns8EA1vsWnexxENHTl5bVAoejs0aZQdCIvr8VDFfkOn+5xENHQ1T0ArtcHoq7OD0plB/LyWjgwLgKuANgHrhxGNPjxOnbNkFwBkIiIxMfgICIiQXw6OPg4LhGR+Hx6cJyP4xIRic+nexxERCQ+BgcREQnC4CAiIkEYHEREJAiDg4iIBGFwEBGRID4dHHyPg4hIfHyPg4iIBPHpHgcREYmPwUFERIIwOIiISBAGBxERCcLgICIiQRgcREQkCIODiIgEYXAQEQEwGBRQq6MQGxsNtToKBoPCpW3cyVk9A12nT78ASETUHwaDAjpdMMzmru/StbUy6HTBAACNxtzvbbyh5i+/9Mf27cMHtE6JzWaziXIkL1dXV+fSfhERETAajSJXQ0Tu1Nd1rFZHoba29/fomBgrjhyp7/c27uSsHj8/Gzo6JL3aXalTqVQ6bPfpW1Wcq4qI+qOuzq/P9v5s407OztvRIWx7V/h0cKhUKmi1Wk+XQUReTql0/Nf26vb+bONOzs7r5yQfxKzTp4ODiKg/8vJaoFB09mhTKDqRl9ciaBt3clbP/Pk/DnidDA4iGvI0GjPy802IibFCIrEhJsaK/HxTj8Hk/mzjDTW/9lrzgNfJwfE+cHCcaPDjdeyaITk4TkRE4mNwEBGRIAwOIiIShMFBRESCMDiIiEgQBgcREQnC4CAiIkEYHEREJAiDg4iIBGFwEBGRIF61kJPFYoHRaHT6mjsA1NbWYvv27bBardBoNIiLi3NjhURE5BU9jra2NuTn5yMnJweFhYX29tLSUixZsgS5ubnYv38/AODjjz/GwoULodVqsXfvXk+VTETUS19Ltl7r5962LO21eEWPQyqVIj09HampqTh9+jQAwGw2o6CgACtXroRUKsVzzz0HlUqF5uZmBAUF2bchIvIGfS0te62fA/CqZWn74hU9DrlcjqSkJPhdtQJJZWUlEhISEBYWhpCQECQmJuLYsWOQy+VobW1Fa2urPUCIiDxNrw+0/+HvZjZLodcH9vnzvvb1Nl7R43DEaDQiMjLS/jk8PByNjY3IyMjA+vXr4e/vjzlz5jjdv7i4GMXFxQAAvV6PiIgIl+qQyWQu70tE3sEd1/G1lpaNiIhwaenZ7n29jdcGh9VqhUTy84LrEokEUqkUcXFxWLZsWZ/7p6WlIS0tzf7Z1bn4OY8/0eDnjutYqYxCbW3vP6lKZcf/P/Tj/OcArrmvpwy69ThCQ0Nx5coV++eGhgavTF4iIqDvpWWv9XNvW5a2L14bHCkpKaisrITJZEJTUxOqq6uRnJws6BhlZWVYv379AFVIRPSzvpaWvdbPvW1Z2r54xdKxZrMZOp0O7e3tsFgsCAoKglarhdFoxM6dOwEA2dnZUKvVLp+DS8cSDV28jl3j7FaVVwSHOzA4iIYuXseuGXRjHERE5J18Ojg4xkFEJD6vfRxXDCqVCiqVytNlEBH5FJ/ucRARkfiGzOA4ERGJY0j2OISMe+Tl5Q1gJb5hMI0jearWgTyv2Me+3uO5ur/Q/Xgdi0vI73NIBkdqaqqnS/Apg+n36alaB/K8Yh/7eo/n6v5C9xtM/+8GAyG/T96q6kNeXh70er2nyyCi68DrWFxDsschxNUTJRLR4MTrWFzscRARkSDscRARkSAMDiIiEsSn3xwXwmKx/P9iK44n9QKA2tpabN++HVarFRqNBnFxcW6skIjEYrVaceLECXR0dGDs2LGeLmfQGfI9jra2NuTn5yMnJweFhYX29tLSUixZsgS5ubnYv38/AODjjz/GwoULodVqsXfvXk+VTETXYLFY+pwNu6amBmfOnEFFRYV7ivIxQ77HIZVKkZ6ejtTUVJw+fRpA1/ogBQUFWLlyJaRSKZ577jmoVCo0NzcjKCjIvg0ReY+2tjasXbsWVVVVmDRpEhYvXgyg60vgli1bIJVKMXv2bMyYMQNxcXG48cYbsWfPHg9XPTgN+eCQy+VISkrC559/bm+rrKxEQkICwsLCAACJiYk4duwY5HI5WltbAcAeIETkHYR8CeT1e32G/K0qR4xGIyIjI+2fw8PD0djYiIyMDKxfvx4bN25EZmamByskol/q/hLo5+dnb7v6S2BISIj9SyBdnyHf43DEarVCIpHYP0skEkilUsTFxWHZsmUerIyIhHD2JfDcuXMoLCxETU0Ndu/ezS+CAjE4HAgNDUVVVZX9c0NDA+Lj4z1YERG5wtmXwJEjR+LJJ5/0YGWDG29VOZCSkoLKykqYTCY0NTWhuroaycnJni6LiAQKDQ3FlStX7J8bGhoQERHhwYp8w5DvcZjNZuh0OrS3t8NisaCqqgparRbz5s3Diy++CABYsGAB5HK5hyslIqFSUlLwwQcfwGQywWazobq6GosWLfJ0WYMe56oiIp/wyy+BQUFB0Gq1MBqN2LlzJwAgOzsbarXaw5UOfgwOIiIShGMcREQkCIODiIgEYXAQEZEgDA4iIhKEwUFERIIwOIiISBAGB9FVTp48iYcffhgnT57s9bP3338fr7zyCv73v//h+++/xyuvvILLly9f83gdHR2or69He3u7022MRqN9Ntf+2r17Nw4cOGD/fPVT9Z2dnVi9ejWOHDki6JhE/cXgIPqFzs7OXm3Nzc0oLi5GYGAg/P39IZPJ8O233+Jvf/sbrvUqVENDA5YuXYry8nKn2+zZswd//vOfr1lTSUkJVq1aZa/t4MGDOHr0KICudSh0Oh0OHjwIoGuRotLSUq4ZQwOGwUHUDwaDAT/99BM0Gg0AICIiAnPnzsU333yDysrKXtsfOnQIu3btEu38wcHB+OKLL7Bjx44e7TabDWvXrsUPP/xgX8q4uroaAJCUlCTa+YmuNuTnqiLqy/fff499+/ZBqVSivr4e9fX1AICoqCjMnDkTFoulx22hUaNG4csvv4TJZMLkyZN7HKupqcnpXElZWVk9PiclJdl7IikpKcjIyMCxY8fs4QUAp0+fxtGjR7F8+XIolUoAQFlZGUaMGGFfiIxIbJxyhAjAu+++a19b/mpz5sxBdXU1vv76634f66mnnsKuXbsQEBCAcePGYdu2bbj77rvty5XeeuutPbb/6KOPUFJSgjfffLNH+7BhwxAREQGz2YzLly/DarVCKpVCKpVizZo1CA8Px/z589HQ0IDw8HCEh4dDIpFg0aJF6OjogEzW+3vhpEmTsHTp0n7/W4gcYY+DCMD06dMxevRoXLp0CR9++CFmz56N6OhonD17Fl9//TWkUik2bdrUY5/HH38cs2bN6tEDALrGSNauXYvAwEB89tlnAICjR4/ixIkTuOWWWzB16tQe2994440AgJiYGIe1nTp1Cq+++mqv9osXL/a4TfbHP/4RP/74I6xWK/7whz9AoVAAABobG7FlyxZMnz4d06dPF/aLIXKAwUEE4I477sAdd9yBkydP4sMPP8S4ceMQGBiIjRs32rdxNLW+TCbr1V5eXo6Ojg689NJLCAgIwNKlS/H4449jypQpLtWWmJiIDRs2AOgaCF+3bh1Onz4NlUqFzMxM+y2q7jW1ga6eRfe62sePHwcATJgwAaNHj3apBqKrMTiInCgvL4dEIsHEiRMFPdp68OBBBAcHIzY21j4e0i0nJwcmk8nhfr8c4wCAadOmYcmSJQgJCcGlS5fw17/+FUDX+MqJEydQUVGB7OxspKen44MPPkBjYyMA4IcffrAHh9FoBAAuYESiYXAQOTFr1iykpKTgiy++wOHDhx3+Yd+xY0evJ52mT5+OCRMmODzmihUr0NHR4fScjY2NsFgsuOmmmwAAw4cPR0dHB3bv3o0dO3ZAqVTihRdewKuvvopRo0bh1ltvxaZNm1BdXY3m5mao1Wp8+eWXOH/+PG677TYAXY/n+vn54eabb3b1V0HUA4ODyIGioiL84x//wNixY+Hv7w+pVNpr8HrZsmW49957MXPmzB7t0dHRsFqtPdrq6+uxbds2+Pv7Y/bs2U7Pu337dpw+fRrr1q2zt/3zn/9EYWEhpk2bhoULF9rHLgDg/vvvx0033YQ9e/bg6aefhkwmw/nz53H69GnMmDEDAHD27Fn86le/QkBAgMu/D6KrMTiI0DUOUFpaan+prrS0FP7+/rjrrrvsL9I5GrwODAx02B4QEIArV67YX8rbunUrpFIp0tPTBdeWmZmJUaNGYeLEibBarVi+fDnS09Nx9913AwAmTpyICRMmQCKRAOgar6moqIDNZkN7eztOnTqFtLQ0weclcobBQYSuHsbV4xhZWVnIyMjA8OHDsW3bNkHHOnjwIIqKinpMI/K73/0ODz74ID755BOHt7x+qXublJQU5ObmYsSIEaitrcXRo0dx9uxZWCwW1NbW2re/+lbU2LFjUVJSglOnTqGhoQFWqxUqlUrQv4HoWhgcROh6cmnMmDGIiIjAG2+8gcTERAwfPrzHNlf/oe7W0tLSq726uhqtra2YN28exowZgxdffBGjR49GSEgIZs6ciSlTpqC2ttZhT2Xz5s04d+4cXnrpJQBdT3IVFRX1Gkd57733enyOjIy0394aP348FAoF9uzZg8bGRgQGBuLOO+8U/kshcoLBQQTYxykcTW4IdL2b8cwzz/Rq37dvH/bt29ej7Z133sHChQsBoNdTVUFBQTCZTHjrrbfw4IMPYs6cOT1+rlAoIJPJeoRKVlYWsrKysGHDBhw+fBirV6+2PzHV3t6OZcuW9ZheZNiwYZg2bRr27dsHm82GuXPnws/Pr7+/CqI+MTiI+kEqleJf//pXj7aHH34YGo2mX7eerjZixAhMmTIF27ZtQ3R0dL/e7zh16hQ+/fRTjBkzBhaLxd5eUFAAk8nUK4DS0tJQVFQEiUSCe+65R1B9RH3hJIdEHrBo0SKMHDkS27dvv+bjud3i4+ORm5uLpqYm5ObmYs2aNdi4cSOKi4vxxBNP9HhHw2q14v333wfQNQnie++953DGXyJXscdBdBV3Td0WEBAAnU6HgICAHreRWlpaHN5WkkqlmDp1KiZPngyDwWAfsA8PD0dISIh9O6vVirfeess+GeLly5dx6NAhvPPOO9BqtfD39x/wfxv5PgYHEboexz158qR9jOOXA+OdnZ39fgFw8uTJePrpp/s8Z0REBI4cOYKysjIoFAq0trbi+PHjSE1N7bWtzWbDt99+i6KiIhw6dAjh4eG455578Omnn+Lll1/GrFmzMGvWLLz55ps4ceIEMjIy8PDDD8NqtaK5uRklJSU4f/48cnNzccsttwj4zRD1xuAgws8v6EkkEqSmpmLEiBE9fu7oBUBnrn5Bry82mw0lJSXo7OyETCbD7bffjkcffbTHNrt378ZHH30Ek8mE4OBg+6PCcrkcs2bNQlFREWJjY/Hss8/CZDIhKysLDz74IICuubSWL1+ODRs2oKSkBFu3bsXy5cv7XR+RIwwOInTNCTV58mT4+/s7fQLJ2ey112PChAm9Bt1/KTY2FnfeeScmTpwIlUrVY7r0gIAAzJo1C52dnRg3bhwmTZqEsWPH9ti/e6LF0aNH9/oZkSu4HgcREQnCp6qIiEgQBgcREQnC4CAiIkEYHEREJAiDg4iIBGFwEBGRIAwOIiIShMFBRESC/B81139gckulMgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tweet_dict = defaultdict(int)\n", "for i in data_dict.values():\n", " tweet_dict[i] += 1 \n", " \n", "plt.loglog(list(tweet_dict.keys()), list(tweet_dict.values()), 'bo')#linewidth=2) \n", "plt.xlabel(u'推特数', fontsize=20)\n", "plt.ylabel(u'人数', fontsize=20 ) \n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:15:00.984537Z", "start_time": "2023-11-17T07:14:55.590346Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import numpy as np\n", "import statsmodels.api as sm\n", "\n", "def powerPlot(d_value, d_freq, color, marker):\n", " d_freq = [i + 1 for i in d_freq]\n", " d_prob = [float(i)/sum(d_freq) for i in d_freq]\n", " #d_rank = ss.rankdata(d_value).astype(int)\n", " x = np.log(d_value)\n", " y = np.log(d_prob)\n", " xx = sm.add_constant(x, prepend=True)\n", " res = sm.OLS(y,xx).fit()\n", " constant,beta = res.params\n", " r2 = res.rsquared\n", " plt.plot(d_value, d_prob, linestyle = '',\\\n", " color = color, marker = marker)\n", " plt.plot(d_value, np.exp(constant+x*beta),\"red\")\n", " plt.xscale('log'); plt.yscale('log')\n", " plt.text(max(d_value)/2,max(d_prob)/10,\n", " r'$\\beta$ = ' + str(round(beta,2)) +'\\n' + r'$R^2$ = ' + str(round(r2, 2)), fontsize = 20)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:15:05.728842Z", "start_time": "2023-11-17T07:15:05.272443Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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qKRbt26xf/9+GjVqREJCAgkJCQB4enrSr18/1Gp1oS6lli1bcvz4cdLT0+natWuhe6WlpTF+/PhinxMUFFTodfv27fUtFm9vb/r378+ZM2f0CQ3g8uXL/Prrr8ycOZNGjRoBcOLECZo0aYKrq2vVP7wQ95DlVIQoxf/93//pt32927Bhw7h06RK//fZbue/1+uuvs2vXLqytrXn00UfZtm0bPXr0oHnz5jg4OPDggw8WOv/bb78lOjqaZcuWFTper1493N3dUalUxMfHo9FoUCqVKJVKPvnkE9zc3Bg5ciTJycm4ubnh5uaGQqFg/Pjx5OfnY2lZ9HdIX19fJk2aVO7PIsS9pGUiRCl69uxJ69atuXnzJt988w2DBw/mvvvu4+rVq/z2228olUrWr19f6JoxY8YwaNCgQi0FKKi5rFixAkdHR3788UcAfv31V86fP88DDzxAt27dCp3v4OAAwP33319sbBcvXmTBggVFjt+4caNQF9srr7xCdnY2Go2Gl19+GVtbWwBSU1PZtGkTPXv2pGfPnhX7wghxD0kmQpTi4Ycf5uGHH+bChQt88803PProozg6OrJ27Vr9OTY2NkWus7S0LHL85MmT5OfnM3fuXKytrZk0aRJjxozBz8+vUrG1a9eO1atXAwXF9k8//ZTLly/j4+PDgAED9N1bd/ZBh4IWyJ290M+ePQtA586dad26daViEOIOSSZCVNDJkydRKBR06dKlQsNsDx06hLOzM40bN9bXV+4YN24c6enpxV53b80EoHv37kycOBEXFxdu3rzJkiVLgIJ6zfnz5zl9+jSjRo0iMDCQr776itTUVAASExP1ySQpKQlANo4SBiHJRIgKGjRoEN7e3hw9epQjR44U+8P+66+/LjLCqmfPnnTu3LnYe86fP5/8/PwSn5mamoparaZBgwYA2NnZkZ+fz3fffcfXX39No0aNmDVrFgsWLKBly5Y8+OCDrF+/nkuXLpGRkUGnTp04fvw4165do0WLFkDBUGELCwsaNmxY2S+FEHqSTISogIiICNasWUOHDh2wsrJCqVQWKZCHhITQp08f+vXrV+j4fffdh0ajKXQsISGBbdu2YWVlxeDBg0t87vbt27l8+TKffvqp/th///tfdu/eTffu3Rk7dqy+FgLw9NNP06BBA8LDw3njjTewtLTk2rVrXL58mV69egFw9epVmjZtirW1daW/HkLcIclEiFKcPXuWw4cP6ycCHj58GCsrK/z9/fWT/4orkDs6OhZ73NrampSUFP1Ews2bN6NUKgkMDKxwbAMGDKBly5Z06dIFjUbDzJkzCQwMpEePHgB06dKFzp07o1AogIL6z+nTp9HpdOTm5nLx4kUCAgIq/FwhiiPJRIhSREREFKqLBAUF0b9/f+zs7Ni2bVuF7nXo0CEiIiIKLZHSt29fhg4dSmRkZLHdZfe6c463tzeTJ0+mSZMmxMXF8euvv3L16lXUajVxcXH68+/uxurQoQPR0dFcvHiR5ORkNBoNPj4+FfoMQpREkokQpWjXrh1eXl64u7uzdOlS2rVrh52dXaFz7v7hfUdmZmaR45cuXSIrK4sRI0bg5eXF7Nmzad26NS4uLvTr1w8/Pz/i4uKKbdFs2LCBv/76i7lz5wIFI8giIiKK1GW++OKLQq89PDz0XWOPP/44tra2hIeHk5qaiqOjI23btq34F0WIYkgyEaIUd+oexS3wCAVzR6ZOnVrk+P79+9m/f3+hY5999hljx44FKDKay8nJifT0dD766COGDh3KsGHDCr1va2uLpaVloUQTFBREUFAQq1ev5siRI4SFhelHauXm5hISElJo6ZR69erRvXt39u/fj06n49lnn8XCwqK8XwohSiXJRIgqUCqVbNmypdCx4cOHM2TIkHJ1W92tSZMm+Pn5sW3bNu67775yzT+5ePEiBw4cwMvLC7VarT++ceNG0tPTiySlgIAAIiIiUCgU9O7du0LxCVEaWehRCDMyfvx4mjVrxvbt20sdKnzHQw89xOTJk0lLS2Py5Ml88sknrF27lqioKF577bVCc0g0Gg1ffvklULAQ5BdffFHsSshCVIa0TIQoh+paws7a2poZM2ZgbW1dqAsqMzOz2C4ppVJJt27d6Nq1Kzt37tQPCnBzc8PFxUV/nkaj4aOPPtIvCBkfH09MTAyfffYZwcHBWFlZGf2zidpNkokQpTh79iwXLlzQ10zuLb5rtdpyT1rs2rUrb7zxRpnPdHd359ixY5w4cQJbW1uysrI4e/YsHTt2LHKuTqfjjz/+ICIigpiYGNzc3OjduzcHDhzgvffeY9CgQQwaNIhly5Zx/vx5+vfvz/Dhw9FoNGRkZBAdHc21a9eYPHkyDzzwQAW+MkIUJslEiFLcmVSoUCjo2LEjTZo0KfR+cZMWS3L3pMKy6HQ6oqOj0Wq1WFpa0qpVK1544YVC53z33Xd8++23pKen4+zsrB+2bGNjw6BBg4iIiKBx48a8+eabpKenExQUxNChQ4GCtcNmzpzJ6tWriY6OZvPmzcycObPc8QlxL0kmQpSie/fudO3aFSsrqxJHPpW0qm9VdO7cuUhh/16NGzembdu2dOnSBR8fn0JLy1tbWzNo0CC0Wi2PPvoovr6+dOjQodD1dxabbN26dZH3hKgo2c9ECCFElcloLiGEEFUmyUQIIUSVSTIRQghRZZJMhBBCVJkkEyGEEFUmyUQIIUSVSTIRQghRZf8PW5qqgGd98lYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "histo, bin_edges = np.histogram(list(data_dict.values()), 15)\n", "bin_center = 0.5*(bin_edges[1:] + bin_edges[:-1])\n", "powerPlot(bin_center,histo, 'r', '^')\n", "#lg=plt.legend(labels = [u'Tweets', u'Fit'], loc=3, fontsize=20)\n", "plt.ylabel(u'概率', fontsize=20)\n", "plt.xlabel(u'推特数', fontsize=20) \n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-11-08T08:29:28.805177Z", "start_time": "2021-11-08T08:29:28.796546Z" }, "code_folding": [], "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import statsmodels.api as sm\n", "from collections import defaultdict\n", "import numpy as np\n", "\n", "def powerPlot2(data):\n", " d = sorted(data, reverse = True )\n", " d_table = defaultdict(int)\n", " for k in d:\n", " d_table[k] += 1\n", " d_value = sorted(d_table)\n", " d_value = [i+1 for i in d_value]\n", " d_freq = [d_table[i]+1 for i in d_value]\n", " d_prob = [float(i)/sum(d_freq) for i in d_freq]\n", " x = np.log(d_value)\n", " y = np.log(d_prob)\n", " xx = sm.add_constant(x, prepend=True)\n", " res = sm.OLS(y,xx).fit()\n", " constant,beta = res.params\n", " r2 = res.rsquared\n", " plt.plot(d_value, d_prob, 'ro')\n", " plt.plot(d_value, np.exp(constant+x*beta),\"red\")\n", " plt.xscale('log'); plt.yscale('log')\n", " plt.text(max(d_value)/2,max(d_prob)/5,\n", " 'Beta = ' + str(round(beta,2)) +'\\n' + 'R squared = ' + str(round(r2, 2)))\n", " plt.title('Distribution')\n", " plt.ylabel('P(K)')\n", " plt.xlabel('K')\n", " plt.show()\n", " " ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-11-08T08:29:33.438755Z", "start_time": "2021-11-08T08:29:33.052468Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEgCAYAAABFO1+mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA0fUlEQVR4nO3deXxU1f3/8dfMZJtAFrKxhCIgiFYWKRBBZAmyhUU0okUERGUrKCJLGkQoVJYQVKilAm7ghoASRQG/YCoBC7UIKhWQglpEkJJMQhbChGSW3x9IfgQSEiDJnSTv5+PB48GcuXPvZwKZ95x7zj3X5Ha73YiIiFyB2egCRETE8yksRESkVAoLEREplcJCRERKpbAQEZFSKSxERKRUCgupsex2O5GRkTz33HPlut9BgwYxaNCgwseNGzcmPj6+XI9xwfPPP0/Dhg3Jzc2tkP2LXKCwkGpp5MiRmEwmTCYTXl5e1K9fn8GDB/P5558XbmO1Wtm/fz+TJ08u0z4zMjI4efJkqdu9++67rFmz5pprv5Iff/wRu91e+HjSpEns37+fWrVqVcjxRC5QWEi1ddttt3HkyBEOHDjA6tWr+c1vfkOvXr2YOXNm4TZ16tTBbC791+DcuXPUrVuXLVu2lLqtv78/Vqv1umovzt///nduvPFGTp06VdhmsVgIDg4u92OJXMrL6AJEKoqvry/NmjUDoEWLFkRHRxMbG0vPnj256aabGD58eJn35Xa7cTgcV9zG5XKVKXiuVUFBQYXtW6Q06llIjdKlSxceeeQR5s+fD4DJZGL58uXA+UCYO3cuTZo0wc/Pj5tuuokDBw6watWqwp7CI488gslkIiUlhaNHj2IymVi1ahWdOnXC29ubzMxMunfvzpAhQy479qJFi2jYsCFWq5WYmBiOHTtW+Fxxrxk5ciQdO3Ys/HtMTAwATZo0wWQyATB79mzq1atX5HUffPABUVFRWK1WgoODue+++zh69Gjh86tWrcJkMvHVV19x55134u/vT+vWrdm5c+f1/GilmlNYSI1z1113cejQIdLT04u0L1u2jISEBBYvXszu3buZMWMGFouF++67jwMHDgCwcOFCjhw5wu233174ugULFjBhwgS++OIL/P39iz3m6tWrOXjwIElJSbz33nscPHiw2EApSWJiIq+//joAKSkpHDlypMTjDB48mOjoaD7//HPWrVvH0aNH6dWrF+fOnSuy7cSJE5kxYwbJycmYzWaGDBmi3ouUSKehpMa5cI4/Ozu7SPuhQ4cICwujX79++Pj40Lp168LnmjZtCkBEREThqa0LBgwYwLBhw654zPDwcF5//fXCHoHJZGLAgAF8/fXXtG3bttSaIyIiqF+/PgA33HADjRs3Lna7Z555hqFDh7Jw4cLCtptvvplmzZqxevVqHnnkkcL2P//5z/To0aPw74MGDeL777/nlltuKbUeqXnUs5Aa53//+x8mk4nw8PAi7WPGjMFut3PLLbewZMmSy8KkJJ06dSp1my5duhQGBVB4eumHH364isqvzGaz8d///rfwdNUFjRo1omnTpuzfv79Ie4cOHQr/fiEMU1NTy60eqV4UFlLjbNy4kaioKGrXrl2kvWXLlhw5coRx48axZMkSWrRowcGDB0vd36X7KY6Pj0+Rx2fOnAEgKCgIALPZjMvlKrLNpY9L43Q6C/dVnEtPQ3l7exf+3cvr/EkG3bFASqKwkBrl448/Zv369cyaNavY5wMDA5k2bRrfffcd3t7erFixAvj/H8ClzYgqyddff13kcXJyMl5eXtx6663A+dNMv/zyS5FtDh8+XORxaTXUrVuXBg0asHXr1iLtx48f58cffywyziJytTRmIdXWuXPn+P7773E6nRw/fpz169fz2muvsXDhQvr163fZ9i+88AL16tWjdevW/Pe//+X06dO0aNECON8zqFu3Lh9//DFRUVGF4wdltWvXLuLj4/n973/PwYMHiYuL47HHHqNBgwbA+UH3cePGsXnzZnr27MmqVavYt28fbdq0KdxHo0aNgPMX/fXu3bvYD/85c+YwduxY6tevT2xsLBkZGcyYMYObb76ZBx544KpqFrmYwkKqrW+++YbmzZtjsVioW7cu3bp14/PPPycqKqrY7WvVqkV8fDynTp2iQYMGTJ06lXHjxhU+v3jxYp566inuvPNOUlJSCAkJKXMto0ePJjU1lS5duuDn58fQoUNZtGhR4fMjR47k22+/ZeTIkTgcDkaMGMHgwYOLzHq6+eabeeqpp1i0aBHLli27rCcCMGrUKHx9fUlMTGTRokUEBQVx9913s3DhQnx9fctcr8ilTLqtqoiIlEZjFiIiUiqFhYiIlEphISIipVJYiIhIqRQWIiJSqmoXFnv27Cm8kEpERMpHtZ46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oigsxHAOB7VeeYWA554DLy+y4+M5O2IEWCxGV2Y4hYVnuuYB7lmzZrFz585in8vPz+evf/0rq1evvr7qRKorLy9y//AH0rZtI799e4KfeYawQYPw+u47oysTuSqlhsWkSZN4/fXXefPNN3G5XIXtqampzJgxg++//55nn322QosUqeqcjRqR8fbbnF66FMuxY4T37UvAggVwydpRIp6qTLOhbDYbixcvxtfXl6eeeorvv/+eF198kTZt2jB27Fisl1yl6il0Gko8kSkjg6C5c/FfuxZH48ZkJiSQ36WL0WVVOp2G8kzXPGZxgdPp5K233mLnzp3k5eUxfPhwevfuXa5FljeFhXgyn507CY6Lw+voUc7efz/Zs2bhCgkxuqxKo7DwTNccFm+//Xbh391uN//+978JCgq6bNB72LBh119lOVNYiMez2wl48UVqv/QSrsBAsmfPPr8ciMlkdGUVTmHhma55gDs7O7vwT05ODk2aNCEkJKRIe3Z2drkXLFIjWK3k/PGPpG3ZgrNJE+pMnEjI0KFYjh41ujKRIrQ2lIincLnwf+stAufPB4eDM1OmcGb0aPD2NrqyCqGehWe65p7F7NmzS/3QdblcbNmyhU2bNl1bdSJyfp2phx8mNSWFcz16EDhvHuH9+uH9zTdGVyZSes/iwIEDvPLKK9StW5d27drRpEkTAgICKCgoID09nYMHD7Jz505uu+02hg8fjp+fX2XVXixdwS3Vhd///R9BM2ZgPnWK3EcfJScuDnft2kaXVW7Us/BM1zUbyu12F1lIMCcnBx8fnyILCUZERJR70ddLYSFVnSknh4CFC6m1ahWuevXInD+fcx4+C7GsFBae6brCYuvWrfz73//G39+fbt26ceutt5Z7gRVBYSHVhffevQTHxeF96BD2/v3JevZZXHXrGl3WdVFYeKZrHrN477332LBhA02aNKFOnTosWbKE3bt3l3uBIlKygnbtSPu//yM7Ph6/LVuo264d9SMjiejQAWtS0jXt05qURERUFPUbNiQiKuqq93O9r5eqxau0DVJSUpg8eTI33ngjAK1bt+aNN94gKiqqwosTkYt4e+OMjMRtsWB2OADw+uUXgqZOBbiq27Vak5IIiovD/OtyI14nThAUF1fm/Vzv66XqKbVnkZ6eTpMmTQoft2jRghMnTlRoUSJSvICEBMznzhVpM587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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "powerPlot2(data_dict.values())" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "ExecuteTime": { "end_time": "2020-06-06T09:11:14.088105Z", "start_time": "2020-06-06T09:11:09.461725Z" }, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting powerlaw\n", " Downloading powerlaw-1.4.6.tar.gz (27 kB)\n", "Requirement already satisfied: scipy in /opt/anaconda3/lib/python3.7/site-packages (from powerlaw) (1.4.1)\n", "Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.7/site-packages (from powerlaw) (1.18.1)\n", "Requirement already satisfied: matplotlib in /opt/anaconda3/lib/python3.7/site-packages (from powerlaw) (3.1.3)\n", "Requirement already satisfied: mpmath in /opt/anaconda3/lib/python3.7/site-packages (from powerlaw) (1.1.0)\n", "Requirement already satisfied: python-dateutil>=2.1 in /opt/anaconda3/lib/python3.7/site-packages (from matplotlib->powerlaw) (2.8.1)\n", "Requirement already satisfied: cycler>=0.10 in /opt/anaconda3/lib/python3.7/site-packages (from matplotlib->powerlaw) (0.10.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /opt/anaconda3/lib/python3.7/site-packages (from matplotlib->powerlaw) (1.1.0)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/anaconda3/lib/python3.7/site-packages (from matplotlib->powerlaw) (2.4.6)\n", "Requirement already satisfied: six>=1.5 in /opt/anaconda3/lib/python3.7/site-packages (from python-dateutil>=2.1->matplotlib->powerlaw) (1.14.0)\n", "Requirement already satisfied: setuptools in /opt/anaconda3/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib->powerlaw) (46.0.0.post20200309)\n", "Building wheels for collected packages: powerlaw\n", " Building wheel for powerlaw (setup.py) ... \u001b[?25ldone\n", "\u001b[?25h Created wheel for powerlaw: filename=powerlaw-1.4.6-py3-none-any.whl size=24787 sha256=0e7d23e9100feb4fed1092e73633e496f9c1cb767c3f8632b9d9e9d488215eda\n", " Stored in directory: /Users/datalab/Library/Caches/pip/wheels/ee/51/38/2e0f20cf80e1a0909acdd527df2288bd9feb8356b926d7d775\n", "Successfully built powerlaw\n", "Installing collected packages: powerlaw\n", "Successfully installed powerlaw-1.4.6\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "pip install powerlaw" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-11-08T08:30:49.354240Z", "start_time": "2021-11-08T08:30:49.344654Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import powerlaw\n", "def plotPowerlaw(data,ax,col,xlab):\n", " fit = powerlaw.Fit(data,xmin=2)\n", " #fit = powerlaw.Fit(data)\n", " fit.plot_pdf(color = col, linewidth = 2)\n", " a,x = (fit.power_law.alpha,fit.power_law.xmin)\n", " fit.power_law.plot_pdf(color = col, linestyle = 'dotted', ax = ax, \\\n", " label = r\"$\\alpha = %d \\:\\:, x_{min} = %d$\" % (a,x))\n", " ax.set_xlabel(xlab, fontsize = 20)\n", " ax.set_ylabel('$Probability$', fontsize = 20)\n", " plt.legend(loc = 0, frameon = False)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-11-08T08:30:58.060920Z", "start_time": "2021-11-08T08:30:58.056644Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from collections import defaultdict\n", "data_dict = defaultdict(int)\n", "\n", "for i in df['From User']:\n", " data_dict[i] += 1" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-11-08T08:31:02.499748Z", "start_time": "2021-11-08T08:31:01.946001Z" }, "code_folding": [ 0 ], "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/anaconda3/lib/python3.7/site-packages/powerlaw.py:700: RuntimeWarning: invalid value encountered in true_divide\n", " (Theoretical_CDF * (1 - Theoretical_CDF))\n", "/opt/anaconda3/lib/python3.7/site-packages/powerlaw.py:700: RuntimeWarning: invalid value encountered in true_divide\n", " (Theoretical_CDF * (1 - Theoretical_CDF))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# \n", "import matplotlib.cm as cm\n", "cmap = cm.get_cmap('rainbow_r',6)\n", "\n", "fig = plt.figure(figsize=(6, 4),facecolor='white')\n", "ax = fig.add_subplot(1, 1, 1)\n", "plotPowerlaw(list(data_dict.values()), ax,cmap(1), \n", " '$Tweets$')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 清洗tweets文本" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:17:12.275188Z", "start_time": "2023-11-17T07:17:12.272549Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "tweet = '''RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:17:53.753775Z", "start_time": "2023-11-17T07:17:53.635162Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "#!pip install twitter-text\n", "import re\n", "import twitter_text \n", "# https://github.com/dryan/twitter-text-py/issues/21\n", "#Macintosh HD ▸ 用户 ▸ datalab ▸ 应用程序 ▸ anaconda ▸ lib ▸ python3.5 ▸ site-packages" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:18:57.391676Z", "start_time": "2023-11-17T07:18:57.384787Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "' @AnonKitsu: @who'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import re\n", "\n", "tweet = '''RT @AnonKitsu: @who ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "rt_patterns = re.compile(r\"(RT|via)((?:\\b\\W*@\\w+)+)\", re.IGNORECASE)\n", "rt_user_name = rt_patterns.findall(tweet)[0][1]#.strip(' @').split(':')[0]\n", "rt_user_name " ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:19:35.078725Z", "start_time": "2023-11-17T07:19:35.072864Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'AnonKitsu'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import re\n", "\n", "tweet = '''RT @AnonKitsu: @who ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "rt_patterns = re.compile(r\"(RT|via)((?:\\b\\W*@\\w+)+)\", \\\n", " re.IGNORECASE)\n", "rt_user_name = rt_patterns.findall(tweet)[0][1].strip(' @').split(':')[0]\n", "rt_user_name" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:20:04.778179Z", "start_time": "2023-11-17T07:20:04.773989Z" }, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[]\n", "None\n" ] } ], "source": [ "import re\n", "\n", "tweet = '''@chengjun:@who ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "rt_patterns = re.compile(r\"(RT|via)((?:\\b\\W*@\\w+)+)\", re.IGNORECASE)\n", "rt_user_name = rt_patterns.findall(tweet)\n", "print(rt_user_name)\n", "\n", "if rt_user_name:\n", " print('it exits.')\n", "else:\n", " print('None')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:20:37.233484Z", "start_time": "2023-11-17T07:20:37.229741Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import re\n", "\n", "def extract_rt_user(tweet):\n", " rt_patterns = re.compile(r\"(RT|via)((?:\\b\\W*@\\w+)+)\", re.IGNORECASE)\n", " rt_user_name = rt_patterns.findall(tweet)\n", " if rt_user_name:\n", " rt_user_name = rt_user_name[0][1].strip(' @').split(':')[0]\n", " else:\n", " rt_user_name = None\n", " return rt_user_name" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:20:42.433344Z", "start_time": "2023-11-17T07:20:42.429431Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'chengjun'" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tweet = '''RT @chengjun: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "extract_rt_user(tweet) " ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:20:58.137408Z", "start_time": "2023-11-17T07:20:58.133727Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "None\n" ] } ], "source": [ "tweet = '''@chengjun: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili http://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "print(extract_rt_user(tweet) )" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:22:24.572818Z", "start_time": "2023-11-17T07:22:24.546424Z" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "[('RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE RT !!HELP!!!!',\n", " 'Anonops_Cop'),\n", " ('@jamiekilstein @allisonkilkenny Interesting interview (never aired, wonder why??) by Fox with #ows protester http://t.co/Fte55Kh7',\n", " 'KittyHybrid'),\n", " (\"@Seductivpancake Right! Those guys have a victory condition: regime change. #ows doesn't seem to have a goal I can figure out.\",\n", " 'nerdsherpa')]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import csv\n", "\n", "with open(\"./data/ows_tweets_sample.txt\", 'r') as f:\n", " chunk = f.readlines()\n", " \n", "rt_network = []\n", "lines = csv.reader(chunk[1:], delimiter=',', quotechar='\"')\n", "tweet_user_data = [(i[1], i[8]) for i in lines]\n", "tweet_user_data[:3]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:23:21.609921Z", "start_time": "2023-11-17T07:23:21.577762Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[(('Anonops_Cop', 'AnonKitsu'), 1),\n", " (('hamudistan', 'bembel'), 1),\n", " (('vickycrampton', 'TheNewDeal'), 2)]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from collections import defaultdict\n", "\n", "rt_network = []\n", "rt_dict = defaultdict(int)\n", "for k, i in enumerate(tweet_user_data):\n", " tweet,user = i\n", " rt_user = extract_rt_user(tweet)\n", " if rt_user:\n", " rt_network.append((user, rt_user)) #(rt_user,' ', user, end = '\\n')\n", " rt_dict[(user, rt_user)] += 1\n", "#rt_network[:5]\n", "list(rt_dict.items())[:3]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 获得清洗过的推特文本\n", "\n", "不含人名、url、各种符号(如RT @等)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:24:45.464970Z", "start_time": "2023-11-17T07:24:45.461187Z" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "def extract_tweet_text(tweet, at_names, urls):\n", " for i in at_names:\n", " tweet = tweet.replace(i, '')\n", " for j in urls:\n", " tweet = tweet.replace(j, '')\n", " marks = ['RT @', '@', '"', '#', '\\n', '\\t', ' ']\n", " for k in marks:\n", " tweet = tweet.replace(k, '')\n", " return tweet" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 安装twitter_text\n", "\n", "[twitter-text-py](https://github.com/dryan/twitter-text-py/issues/21) could not be used for python 3\n", "\n", "Glyph debug the problem, and make [a new repo of twitter-text-py3](https://github.com/glyph/twitter-text-py).\n", "\n", "> pip install twitter-text\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:25:48.921110Z", "start_time": "2023-11-17T07:25:48.916523Z" }, "scrolled": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['AnonKitsu', 'chengjun', 'mili'] ['https://computational-communication.com', 'http://ccc.nju.edu.cn'] ['OCCUPYWALLSTREET', 'OWS', 'OCCUPYNY'] AnonKitsu --------> : ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! OCCUPYWALLSTREET OWS OCCUPYNY PLEASE RT !!HELP!!!!\n" ] } ], "source": [ "import twitter_text\n", "\n", "tweet = '''RT @AnonKitsu: ALERT!!!!!!!!!!COPS ARE KETTLING PROTESTERS IN PARK W HELICOPTERS AND PADDYWAGONS!!!! \n", " #OCCUPYWALLSTREET #OWS #OCCUPYNY PLEASE @chengjun @mili https://computational-communication.com \n", " http://ccc.nju.edu.cn RT !!HELP!!!!'''\n", "\n", "ex = twitter_text.Extractor(tweet)\n", "at_names = ex.extract_mentioned_screen_names()\n", "urls = ex.extract_urls()\n", "hashtags = ex.extract_hashtags()\n", "rt_user = extract_rt_user(tweet)\n", "tweet_text = extract_tweet_text(tweet, at_names, urls)\n", "\n", "print(at_names, urls, hashtags, rt_user,'-------->', tweet_text)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:26:08.918860Z", "start_time": "2023-11-17T07:26:08.899934Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import csv\n", "\n", "lines = csv.reader(chunk,delimiter=',', quotechar='\"')\n", "tweets = [i[1] for i in lines] " ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2023-11-17T07:26:17.280551Z", "start_time": "2023-11-17T07:26:17.275568Z" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[] [] [] None\n", "['AnonKitsu'] [] ['OCCUPYWALLSTREET', 'OWS', 'OCCUPYNY'] AnonKitsu\n", "['jamiekilstein', 'allisonkilkenny'] ['http://t.co/Fte55Kh7'] ['ows'] None\n", "['Seductivpancake'] [] ['ows'] None\n", "['bembel'] ['http://j.mp/rhHavq'] ['OccupyWallStreet', 'OWS'] bembel\n" ] } ], "source": [ "for tweet in tweets[:5]:\n", " ex = twitter_text.Extractor(tweet)\n", " at_names = ex.extract_mentioned_screen_names()\n", " urls = ex.extract_urls()\n", " hashtags = ex.extract_hashtags()\n", " rt_user = extract_rt_user(tweet)\n", " #tweet_text = extract_tweet_text(tweet, at_names, urls)\n", "\n", " print(at_names, urls, hashtags, rt_user)\n", " #print(tweet_text)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "## 作业\n", "\n", "提取出raw tweets中的rtuser与user的转发网络\n", "\n", "格式:\n", "\n", "rt_user1, user1, 3\n", "\n", "rt_user2, user3, 2\n", "\n", "rt_user2, user4, 1\n", "\n", "...\n", "\n", "数据保存为csv格式" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "1260px", "left": "1835px", "top": "224px", "width": "512px" }, "toc_section_display": false, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 1 }