|
26 | 26 | },
|
27 | 27 | {
|
28 | 28 | "cell_type": "code",
|
29 |
| - "execution_count": 1, |
| 29 | + "execution_count": 2, |
30 | 30 | "metadata": {
|
31 | 31 | "tags": [
|
32 | 32 | "remove-input"
|
|
46 | 46 | },
|
47 | 47 | {
|
48 | 48 | "cell_type": "code",
|
49 |
| - "execution_count": 2, |
| 49 | + "execution_count": 3, |
50 | 50 | "metadata": {},
|
51 | 51 | "outputs": [],
|
52 | 52 | "source": [
|
|
66 | 66 | },
|
67 | 67 | {
|
68 | 68 | "cell_type": "code",
|
69 |
| - "execution_count": 9, |
| 69 | + "execution_count": 4, |
70 | 70 | "metadata": {},
|
71 | 71 | "outputs": [
|
72 | 72 | {
|
|
75 | 75 | "<QuerySet [<User: Audrey>, <User: Daniel>]>"
|
76 | 76 | ]
|
77 | 77 | },
|
78 |
| - "execution_count": 9, |
| 78 | + "execution_count": 4, |
79 | 79 | "metadata": {},
|
80 | 80 | "output_type": "execute_result"
|
81 | 81 | }
|
|
109 | 109 | },
|
110 | 110 | {
|
111 | 111 | "cell_type": "code",
|
112 |
| - "execution_count": 10, |
| 112 | + "execution_count": 5, |
113 | 113 | "metadata": {},
|
114 | 114 | "outputs": [
|
115 | 115 | {
|
|
118 | 118 | "<QuerySet [<User: Audrey>, <User: Daniel>]>"
|
119 | 119 | ]
|
120 | 120 | },
|
121 |
| - "execution_count": 10, |
| 121 | + "execution_count": 5, |
122 | 122 | "metadata": {},
|
123 | 123 | "output_type": "execute_result"
|
124 | 124 | }
|
|
136 | 136 | },
|
137 | 137 | {
|
138 | 138 | "cell_type": "code",
|
139 |
| - "execution_count": 14, |
| 139 | + "execution_count": 6, |
140 | 140 | "metadata": {},
|
141 | 141 | "outputs": [
|
142 | 142 | {
|
|
160 | 160 | "cell_type": "markdown",
|
161 | 161 | "metadata": {},
|
162 | 162 | "source": [
|
| 163 | + "## Diagrams of Objects\n", |
| 164 | + "\n", |
163 | 165 | "We're not done yet! \n",
|
164 | 166 | "\n",
|
165 | 167 | "We also provide a utility for introspection of classes, which can be useful in sophisticated project architectures. Let's see what happens when we use the `plus.diagram()` function:"
|
166 | 168 | ]
|
167 | 169 | },
|
168 | 170 | {
|
169 | 171 | "cell_type": "code",
|
170 |
| - "execution_count": 15, |
| 172 | + "execution_count": 7, |
171 | 173 | "metadata": {},
|
172 | 174 | "outputs": [
|
173 | 175 | {
|
174 | 176 | "data": {
|
175 | 177 | "text/html": [
|
176 |
| - "<img src=\"https://mermaid.ink/img/Y2xhc3NEaWFncmFtCiAgY2xhc3MgZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfVXNlclsiZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHM6OlVzZXIiXQogIGRqYW5nb19kYl9tb2RlbHNfYmFzZV9Nb2RlbCA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfYmFzZV91c2VyX0Fic3RyYWN0QmFzZVVzZXIKICBjbGFzcyBkamFuZ29fY29udHJpYl9hdXRoX21vZGVsc19QZXJtaXNzaW9uc01peGluWyJkamFuZ28uY29udHJpYi5hdXRoLm1vZGVsczo6UGVybWlzc2lvbnNNaXhpbiJdCiAgZGphbmdvX2NvbnRyaWJfYXV0aF9iYXNlX3VzZXJfQWJzdHJhY3RCYXNlVXNlciA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX0Fic3RyYWN0VXNlcgogIGRqYW5nb19kYl9tb2RlbHNfdXRpbHNfQWx0ZXJzRGF0YSA8fC0tIGRqYW5nb19kYl9tb2RlbHNfYmFzZV9Nb2RlbAogIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX0Fic3RyYWN0VXNlciA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX1VzZXIKICBjbGFzcyBkamFuZ29fZGJfbW9kZWxzX3V0aWxzX0FsdGVyc0RhdGFbImRqYW5nby5kYi5tb2RlbHMudXRpbHM6OkFsdGVyc0RhdGEiXQogIGRqYW5nb19kYl9tb2RlbHNfYmFzZV9Nb2RlbCA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX1Blcm1pc3Npb25zTWl4aW4KICBjbGFzcyBkamFuZ29fY29udHJpYl9hdXRoX2Jhc2VfdXNlcl9BYnN0cmFjdEJhc2VVc2VyWyJkamFuZ28uY29udHJpYi5hdXRoLmJhc2VfdXNlcjo6QWJzdHJhY3RCYXNlVXNlciJdCiAgY2xhc3MgZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfQWJzdHJhY3RVc2VyWyJkamFuZ28uY29udHJpYi5hdXRoLm1vZGVsczo6QWJzdHJhY3RVc2VyIl0KICBjbGFzcyBkamFuZ29fZGJfbW9kZWxzX2Jhc2VfTW9kZWxbImRqYW5nby5kYi5tb2RlbHMuYmFzZTo6TW9kZWwiXQogIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX1Blcm1pc3Npb25zTWl4aW4gPHwtLSBkamFuZ29fY29udHJpYl9hdXRoX21vZGVsc19BYnN0cmFjdFVzZXI=\"/>" |
| 178 | + "<img src=\"https://mermaid.ink/img/Y2xhc3NEaWFncmFtCiAgY2xhc3MgZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfUGVybWlzc2lvbnNNaXhpblsiZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHM6OlBlcm1pc3Npb25zTWl4aW4iXQogIGNsYXNzIGRqYW5nb19jb250cmliX2F1dGhfYmFzZV91c2VyX0Fic3RyYWN0QmFzZVVzZXJbImRqYW5nby5jb250cmliLmF1dGguYmFzZV91c2VyOjpBYnN0cmFjdEJhc2VVc2VyIl0KICBjbGFzcyBkamFuZ29fY29udHJpYl9hdXRoX21vZGVsc19Vc2VyWyJkamFuZ28uY29udHJpYi5hdXRoLm1vZGVsczo6VXNlciJdCiAgZGphbmdvX2RiX21vZGVsc19iYXNlX01vZGVsIDx8LS0gZGphbmdvX2NvbnRyaWJfYXV0aF9iYXNlX3VzZXJfQWJzdHJhY3RCYXNlVXNlcgogIGRqYW5nb19kYl9tb2RlbHNfYmFzZV9Nb2RlbCA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX1Blcm1pc3Npb25zTWl4aW4KICBkamFuZ29fY29udHJpYl9hdXRoX21vZGVsc19QZXJtaXNzaW9uc01peGluIDx8LS0gZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfQWJzdHJhY3RVc2VyCiAgZGphbmdvX2NvbnRyaWJfYXV0aF9iYXNlX3VzZXJfQWJzdHJhY3RCYXNlVXNlciA8fC0tIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX0Fic3RyYWN0VXNlcgogIGNsYXNzIGRqYW5nb19kYl9tb2RlbHNfdXRpbHNfQWx0ZXJzRGF0YVsiZGphbmdvLmRiLm1vZGVscy51dGlsczo6QWx0ZXJzRGF0YSJdCiAgZGphbmdvX2RiX21vZGVsc191dGlsc19BbHRlcnNEYXRhIDx8LS0gZGphbmdvX2RiX21vZGVsc19iYXNlX01vZGVsCiAgZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfQWJzdHJhY3RVc2VyIDx8LS0gZGphbmdvX2NvbnRyaWJfYXV0aF9tb2RlbHNfVXNlcgogIGNsYXNzIGRqYW5nb19jb250cmliX2F1dGhfbW9kZWxzX0Fic3RyYWN0VXNlclsiZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHM6OkFic3RyYWN0VXNlciJdCiAgY2xhc3MgZGphbmdvX2RiX21vZGVsc19iYXNlX01vZGVsWyJkamFuZ28uZGIubW9kZWxzLmJhc2U6Ok1vZGVsIl0=\"/>" |
177 | 179 | ],
|
178 | 180 | "text/plain": [
|
179 | 181 | "<IPython.core.display.Image object>"
|
|
186 | 188 | "source": [
|
187 | 189 | "plus.diagram(plus.User)"
|
188 | 190 | ]
|
| 191 | + }, |
| 192 | + { |
| 193 | + "cell_type": "markdown", |
| 194 | + "metadata": {}, |
| 195 | + "source": [ |
| 196 | + "# Data frames from QuerySets\n", |
| 197 | + "\n", |
| 198 | + "Powered by [django-pandas](https://github.com/chrisdev/django-pandas), we can also trivially turn any Django QuerySet into a Dataframe." |
| 199 | + ] |
| 200 | + }, |
| 201 | + { |
| 202 | + "cell_type": "code", |
| 203 | + "execution_count": 9, |
| 204 | + "metadata": {}, |
| 205 | + "outputs": [ |
| 206 | + { |
| 207 | + "data": { |
| 208 | + "text/html": [ |
| 209 | + "<div>\n", |
| 210 | + "<style scoped>\n", |
| 211 | + " .dataframe tbody tr th:only-of-type {\n", |
| 212 | + " vertical-align: middle;\n", |
| 213 | + " }\n", |
| 214 | + "\n", |
| 215 | + " .dataframe tbody tr th {\n", |
| 216 | + " vertical-align: top;\n", |
| 217 | + " }\n", |
| 218 | + "\n", |
| 219 | + " .dataframe thead th {\n", |
| 220 | + " text-align: right;\n", |
| 221 | + " }\n", |
| 222 | + "</style>\n", |
| 223 | + "<table border=\"1\" class=\"dataframe\">\n", |
| 224 | + " <thead>\n", |
| 225 | + " <tr style=\"text-align: right;\">\n", |
| 226 | + " <th></th>\n", |
| 227 | + " <th>id</th>\n", |
| 228 | + " <th>password</th>\n", |
| 229 | + " <th>last_login</th>\n", |
| 230 | + " <th>is_superuser</th>\n", |
| 231 | + " <th>username</th>\n", |
| 232 | + " <th>first_name</th>\n", |
| 233 | + " <th>last_name</th>\n", |
| 234 | + " <th>email</th>\n", |
| 235 | + " <th>is_staff</th>\n", |
| 236 | + " <th>is_active</th>\n", |
| 237 | + " <th>date_joined</th>\n", |
| 238 | + " </tr>\n", |
| 239 | + " </thead>\n", |
| 240 | + " <tbody>\n", |
| 241 | + " <tr>\n", |
| 242 | + " <th>0</th>\n", |
| 243 | + " <td>26</td>\n", |
| 244 | + " <td>!gqoQESZIz43EXIcxrKzFKm5BaYBSqgoYykZUyv8v</td>\n", |
| 245 | + " <td>None</td>\n", |
| 246 | + " <td>False</td>\n", |
| 247 | + " <td>Audrey</td>\n", |
| 248 | + " <td></td>\n", |
| 249 | + " <td></td>\n", |
| 250 | + " <td></td>\n", |
| 251 | + " <td>False</td>\n", |
| 252 | + " <td>True</td>\n", |
| 253 | + " <td>2023-10-03 10:20:05.539784+00:00</td>\n", |
| 254 | + " </tr>\n", |
| 255 | + " <tr>\n", |
| 256 | + " <th>1</th>\n", |
| 257 | + " <td>27</td>\n", |
| 258 | + " <td>!PiFAACxsvwe5L8rMVNyIqaL26AK9EHVI6vEixkw4</td>\n", |
| 259 | + " <td>None</td>\n", |
| 260 | + " <td>False</td>\n", |
| 261 | + " <td>Daniel</td>\n", |
| 262 | + " <td></td>\n", |
| 263 | + " <td></td>\n", |
| 264 | + " <td></td>\n", |
| 265 | + " <td>False</td>\n", |
| 266 | + " <td>True</td>\n", |
| 267 | + " <td>2023-10-03 10:20:05.541464+00:00</td>\n", |
| 268 | + " </tr>\n", |
| 269 | + " </tbody>\n", |
| 270 | + "</table>\n", |
| 271 | + "</div>" |
| 272 | + ], |
| 273 | + "text/plain": [ |
| 274 | + " id password last_login is_superuser \\\n", |
| 275 | + "0 26 !gqoQESZIz43EXIcxrKzFKm5BaYBSqgoYykZUyv8v None False \n", |
| 276 | + "1 27 !PiFAACxsvwe5L8rMVNyIqaL26AK9EHVI6vEixkw4 None False \n", |
| 277 | + "\n", |
| 278 | + " username first_name last_name email is_staff is_active \\\n", |
| 279 | + "0 Audrey False True \n", |
| 280 | + "1 Daniel False True \n", |
| 281 | + "\n", |
| 282 | + " date_joined \n", |
| 283 | + "0 2023-10-03 10:20:05.539784+00:00 \n", |
| 284 | + "1 2023-10-03 10:20:05.541464+00:00 " |
| 285 | + ] |
| 286 | + }, |
| 287 | + "execution_count": 9, |
| 288 | + "metadata": {}, |
| 289 | + "output_type": "execute_result" |
| 290 | + } |
| 291 | + ], |
| 292 | + "source": [ |
| 293 | + "plus.read_frame(plus.User.objects.all())" |
| 294 | + ] |
189 | 295 | }
|
190 | 296 | ],
|
191 | 297 | "metadata": {
|
|
0 commit comments